View Single Post
  #4   Spotlight this post!  
Unread 17-02-2015, 11:48
MatthewC529 MatthewC529 is offline
Lcom/mattc/halp;
AKA: Matthew
FRC #1554 (Oceanside Sailors)
Team Role: Mentor
 
Join Date: Feb 2014
Rookie Year: 2013
Location: New York
Posts: 39
MatthewC529 is on a distinguished road
Re: Logging error to driver station

Quote:
Originally Posted by Toa Circuit View Post
We are using the RS-232 port on the roboRIO, so we can't use console out. I'm pretty sure I saw somewhere there's a way to put errors in the error log in the driver station (such as the ones seen at http://wpilib.screenstepslive.com/s/...rors-warnings).

We will be using this just for logging exceptions that are encountered via a try-catch; not like a constant stream of output data.

I'm struggling to find the class/method to do it. Does anyone know what it is?
We wanted the same thing, so after some digging around I have this code:
Code:
      public static final void writeToDS(String message) {
		final HALControlWord controlWord = FRCNetworkCommunicationsLibrary.HALGetControlWord();
		if (controlWord.getDSAttached()) {
			FRCNetworkCommunicationsLibrary.HALSetErrorData(message);
		}
	}

    public static final void exceptionToDS(Throwable t) {
		final StackTraceElement[] stackTrace = t.getStackTrace();
		final StringBuilder message = new StringBuilder();
		final String separator = "===\n";
		final Throwable cause = t.getCause();

		message.append("Exception of type ").append(t.getClass().getName()).append('\n');
		message.append("Message: ").append(t.getMessage()).append('\n');
		message.append(separator);
		message.append("   ").append(stackTrace[0]).append('\n');

		for (int i = 1; i < stackTrace.length; i++) {
			message.append(" \t").append(stackTrace[i]).append('\n');
		}

		if (cause != null) {
			final StackTraceElement[] causeTrace = cause.getStackTrace();
			message.append(" \t\t").append("Caused by ").append(cause.getClass().getName()).append('\n');
			message.append(" \t\t").append("Because: ").append(cause.getMessage()).append('\n');
			message.append(" \t\t   ").append(causeTrace[0]).append('\n');
			message.append(" \t\t \t").append(causeTrace[2]).append('\n');
			message.append(" \t\t \t").append(causeTrace[3]);
		}

		writeToDS(message.toString());
	}
This will send messages directly to the DriverStation LCD.
This can either write to the DS or log a Stack Trace to the DS. If there is a cause it goes one-level deep and logs the cause as well.

It does make use of StringBuilder but this is entirely feasible just appending Strings.
StringBuilder was used just to maintain memory and speed.
__________________
Team 1554 -- Oceanside Sailors
  • 2013-2014 - Lead/Sole Programmer
  • 2014-2015 - Lead Programmer, President
  • 2015-? - Team 1554 Mentor
Independent Public Projects

Developer at Legend Zero LLC.
Java/C++ Programmer

Last edited by MatthewC529 : 17-02-2015 at 11:52.
Reply With Quote