001 /*----------------------------------------------------------------------------*/
002 /* Copyright (c) FIRST 2008-2012. All Rights Reserved. */
003 /* Open Source Software - may be modified and shared by FRC teams. The code */
004 /* must be accompanied by the FIRST BSD license file in the root directory of */
005 /* the project. */
006 /*----------------------------------------------------------------------------*/
007
008 package edu.wpi.first.wpilibj;
009
010 import com.sun.squawk.Isolate;
011 import com.sun.squawk.VM;
012 import edu.wpi.first.wpilibj.fpga.tGlobal;
013 import edu.wpi.first.wpilibj.parsing.IUtility;
014
015 /**
016 * Contains global utility functions
017 */
018 public class Utility implements IUtility {
019
020 /**
021 * Make sure that the FPGA is initialized properly before any of these
022 * functions are used.
023 */
024 static {
025 new tGlobal();
026 }
027
028 private Utility() {
029 }
030
031 /**
032 * Return the FPGA Version number.
033 * For now, expect this to be 2009.
034 * @return FPGA Version number.
035 */
036 int getFPGAVersion() {
037 return tGlobal.readVersion();
038 }
039
040 /**
041 * Return the FPGA Revision number.
042 * The format of the revision is 3 numbers.
043 * The 12 most significant bits are the Major Revision.
044 * the next 8 bits are the Minor Revision.
045 * The 12 least significant bits are the Build Number.
046 * @return FPGA Revision number.
047 */
048 long getFPGARevision() {
049 return tGlobal.readRevision();
050 }
051
052 /**
053 * Read the microsecond timer from the FPGA.
054 *
055 * @return The current time in microseconds according to the FPGA.
056 */
057 public static long getFPGATime() {
058 return tGlobal.readLocalTime();
059 }
060
061 /**
062 * Control whether to send System.err output to the driver station's error pane.
063 * @param enabled if true, send error stream to driver station, otherwise disable sending error stream
064 */
065 public static void sendErrorStreamToDriverStation(boolean enabled) {
066 final String url = "dserror:edu.wpi.first.wpilibj.Utility"; // the path is just a comment.
067 Isolate isolate = VM.getCurrentIsolate();
068 if (enabled) {
069 isolate.addErr(url);
070 } else {
071 isolate.removeErr(url);
072 }
073 }
074
075 }