/* tab:4 * * * "Copyright (c) 2000-2002 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." * */ /* tab:4 * IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. By * downloading, copying, installing or using the software you agree to * this license. If you do not agree to this license, do not download, * install, copy or use the software. * * Intel Open Source License * * Copyright (c) 2002 Intel Corporation * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 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. * Neither the name of the Intel Corporation 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 COPYRIGHT HOLDERS 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 INTEL OR ITS * 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. * * */ /* * Author: Jason Hill */ //========================================================================== //=== hardware_check.java ============================================== //package ; import java.util.*; import java.io.*; import javax.comm.*; import net.tinyos.util.*; import net.tinyos.message.*; public class hardware_check implements MessageListener { MoteIF moteif; int rxTestValue; public hardware_check(String portName, int groupId) { SerialPortStub serial = new SerialPortStub(portName); try { moteif = new MoteIF(serial, groupId); } catch (PortInUseException e) { System.err.println("Port " + portName + " is in use."); System.exit(2); } catch (Exception e) { System.out.println("Failed to open port " + portName); serial.printAllPorts(); System.exit(2); } } public void run() { RxTestMsg rmsg = new RxTestMsg(); rxTestValue = (int)(Math.random() * 65536); rmsg.set_value(rxTestValue); moteif.registerListener(new DiagMsg(), this); moteif.start(); int val = 0; int rxTime = 10; for (;;) { try { moteif.send(MoteIF.TOS_BCAST_ADDR, rmsg); rxTime--; if(rxTime == 0) { System.out.println("Node transmission failure"); System.exit(0); } Thread.sleep(2000); } catch(Exception e) { e.printStackTrace(); } } } public void messageReceived(int to, Message m) { DiagMsg msg = (DiagMsg)m; if (msg.get_SPIFix() != 0x5) { System.out.println("SPI rework failed"); System.exit(0); } short f0 = msg.getElement_flashCheck(0); short f1 = msg.getElement_flashCheck(1); short f2 = msg.getElement_flashCheck(2); if (f0 != 0x1 || f1 != 0x8f || f2 != 0x9) { System.out.print("4Mbit flash check failed "); System.out.print(f0 + " "); System.out.print(f1 + " "); System.out.println(f2 + " "); System.exit(0); } if (msg.get_rxTest() == rxTestValue) { System.out.println("Hardware verification successful."); System.out.print("Node Serial ID: "); for(int i = 0; i < 8; i ++){ short idb = msg.getElement_serialId(i); System.out.print(Integer.toHexString(idb) + " "); } System.out.println(); System.exit(0); } } public static void main(String args[]) { if (args.length < 1 || args.length > 2) { System.err.println("Usage: java hardware_check port-name [group-id]"); System.exit(2); } int groupId = 0x7d; if (args.length == 2) { try { groupId = Integer.decode(args[1]).intValue(); if (groupId < 0 || groupId > 255) throw new Exception(); } catch (Exception e) { System.err.println("Invalid group id " + args[1]); } } System.out.println("\nHardware check started"); hardware_check reader = new hardware_check(args[0], groupId); try { reader.run(); } catch (Exception e) { e.printStackTrace(); } } }