Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Java (http://www.chiefdelphi.com/forums/forumdisplay.php?f=184)
-   -   Logging error to driver station (http://www.chiefdelphi.com/forums/showthread.php?t=134416)

Toa Circuit 12-02-2015 11:31

Logging error to driver station
 
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?

MrRoboSteve 12-02-2015 11:39

Re: Logging error to driver station
 
DriverStation.reportError() is your friend.

shindigo 15-02-2015 22:05

Re: Logging error to driver station
 
Unfortunately, we've found that reporterror does not give the stack trace to the error but to the line that reports the error Putting ex.printStackTrace() in our exception handlers is necessary.

MatthewC529 17-02-2015 11:48

Re: Logging error to driver station
 
Quote:

Originally Posted by Toa Circuit (Post 1442467)
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.


All times are GMT -5. The time now is 22:31.

Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi