From c4bd54ef442b63b6f8303cdbbeec754c4acec006 Mon Sep 17 00:00:00 2001 From: Declan Freeman-Gleason Date: Fri, 27 Dec 2019 19:11:26 -0800 Subject: [PATCH] Add JNI binding to suppress driver station error/warning messages (#2200) This is to allow suppressing an ugly stack trace/error message in a unit test in #2197. It doesn't support the full HALSIM_SetSendError callback stuff (i.e. you can only suppress, not intercept, stack traces with this). --- .../wpi/first/hal/sim/DriverStationSim.java | 9 ++++++++ .../sim/mockdata/DriverStationDataJNI.java | 4 +++- .../native/sim/jni/DriverStationDataJNI.cpp | 22 ++++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/hal/src/main/java/edu/wpi/first/hal/sim/DriverStationSim.java b/hal/src/main/java/edu/wpi/first/hal/sim/DriverStationSim.java index f87051ffe6..d14af9fdb1 100644 --- a/hal/src/main/java/edu/wpi/first/hal/sim/DriverStationSim.java +++ b/hal/src/main/java/edu/wpi/first/hal/sim/DriverStationSim.java @@ -79,6 +79,15 @@ public class DriverStationSim { DriverStationDataJNI.notifyNewData(); } + /** + * Toggles suppression of DriverStation.reportError and reportWarning messages. + * + * @param shouldSend If false then messages will will be suppressed. + */ + public void setSendError(boolean shouldSend) { + DriverStationDataJNI.setSendError(shouldSend); + } + public void resetData() { DriverStationDataJNI.resetData(); } diff --git a/hal/src/main/java/edu/wpi/first/hal/sim/mockdata/DriverStationDataJNI.java b/hal/src/main/java/edu/wpi/first/hal/sim/mockdata/DriverStationDataJNI.java index 2d41ca7419..ec197350d8 100644 --- a/hal/src/main/java/edu/wpi/first/hal/sim/mockdata/DriverStationDataJNI.java +++ b/hal/src/main/java/edu/wpi/first/hal/sim/mockdata/DriverStationDataJNI.java @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------------*/ -/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ @@ -49,5 +49,7 @@ public class DriverStationDataJNI extends JNIWrapper { public static native void registerAllCallbacks(NotifyCallback callback, boolean initialNotify); public static native void notifyNewData(); + public static native void setSendError(boolean shouldSend); + public static native void resetData(); } diff --git a/hal/src/main/native/sim/jni/DriverStationDataJNI.cpp b/hal/src/main/native/sim/jni/DriverStationDataJNI.cpp index 621650ae08..82433b3f07 100644 --- a/hal/src/main/native/sim/jni/DriverStationDataJNI.cpp +++ b/hal/src/main/native/sim/jni/DriverStationDataJNI.cpp @@ -1,5 +1,5 @@ /*----------------------------------------------------------------------------*/ -/* Copyright (c) 2018 FIRST. All Rights Reserved. */ +/* Copyright (c) 2018-2019 FIRST. All Rights Reserved. */ /* Open Source Software - may be modified and shared by FRC teams. The code */ /* must be accompanied by the FIRST BSD license file in the root directory of */ /* the project. */ @@ -14,6 +14,7 @@ #include "CallbackStore.h" #include "edu_wpi_first_hal_sim_mockdata_DriverStationDataJNI.h" #include "mockdata/DriverStationData.h" +#include "mockdata/MockHooks.h" using namespace wpi::java; @@ -446,6 +447,25 @@ Java_edu_wpi_first_hal_sim_mockdata_DriverStationDataJNI_notifyNewData HALSIM_NotifyDriverStationNewData(); } +/* + * Class: edu_wpi_first_hal_sim_mockdata_DriverStationDataJNI + * Method: setSendError + * Signature: (Z)V + */ +JNIEXPORT void JNICALL +Java_edu_wpi_first_hal_sim_mockdata_DriverStationDataJNI_setSendError + (JNIEnv*, jclass, jboolean shouldSend) +{ + if (shouldSend) { + HALSIM_SetSendError(nullptr); + } else { + HALSIM_SetSendError([](HAL_Bool isError, int32_t errorCode, + HAL_Bool isLVCode, const char* details, + const char* location, const char* callStack, + HAL_Bool printMsg) { return 1; }); + } +} + /* * Class: edu_wpi_first_hal_sim_mockdata_DriverStationDataJNI * Method: resetData