diff --git a/simulation/halsim_gui/src/main/native/cpp/DriverStationGui.cpp b/simulation/halsim_gui/src/main/native/cpp/DriverStationGui.cpp index 3cca903b6d..1e2f879a73 100644 --- a/simulation/halsim_gui/src/main/native/cpp/DriverStationGui.cpp +++ b/simulation/halsim_gui/src/main/native/cpp/DriverStationGui.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -328,7 +329,7 @@ static void DriverStationExecute() { // Send new data every 20 ms (may be slower depending on GUI refresh rate) static double lastNewDataTime = 0.0; - if ((curTime - lastNewDataTime) > 0.02) { + if ((curTime - lastNewDataTime) > 0.02 && !HALSIM_IsTimingPaused()) { lastNewDataTime = curTime; HALSIM_NotifyDriverStationNewData(); } @@ -367,7 +368,7 @@ static void DisplayFMS() { ImGuiInputTextFlags_EnterReturnsTrue)) { HALSIM_SetDriverStationMatchTime(matchTime); startMatchTime = curTime - matchTime; - } else if (!HALSIM_GetDriverStationEnabled()) { + } else if (!HALSIM_GetDriverStationEnabled() || HALSIM_IsTimingPaused()) { startMatchTime = curTime - matchTime; } else if (matchTimeEnabled) { HALSIM_SetDriverStationMatchTime(curTime - startMatchTime); diff --git a/simulation/halsim_gui/src/main/native/cpp/TimingGui.cpp b/simulation/halsim_gui/src/main/native/cpp/TimingGui.cpp new file mode 100644 index 0000000000..9897a7ab41 --- /dev/null +++ b/simulation/halsim_gui/src/main/native/cpp/TimingGui.cpp @@ -0,0 +1,60 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 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. */ +/*----------------------------------------------------------------------------*/ + +#include "TimingGui.h" + +#include +#include +#include + +#include +#include +#include +#include + +#include "HALSimGui.h" + +using namespace halsimgui; + +static void DisplayTiming() { + int32_t status = 0; + uint64_t curTime = HAL_GetFPGATime(&status); + + if (ImGui::Button("Run")) HALSIM_ResumeTiming(); + ImGui::SameLine(); + if (ImGui::Button("Pause")) HALSIM_PauseTiming(); + ImGui::SameLine(); + ImGui::PushButtonRepeat(true); + if (ImGui::Button("Step")) { + HALSIM_PauseTiming(); + uint64_t nextTimeout = HALSIM_GetNextNotifierTimeout(); + if (nextTimeout != UINT64_MAX) HALSIM_StepTiming(nextTimeout - curTime); + } + ImGui::PopButtonRepeat(); + ImGui::PushItemWidth(ImGui::GetFontSize() * 4); + ImGui::LabelText("FPGA Time", "%.3f", curTime / 1000000.0); + ImGui::PopItemWidth(); + + static std::vector notifiers; + int32_t num = HALSIM_GetNotifierInfo(notifiers.data(), notifiers.size()); + if (static_cast(num) > notifiers.size()) { + notifiers.resize(num); + HALSIM_GetNotifierInfo(notifiers.data(), notifiers.size()); + } + if (num > 0) ImGui::Separator(); + ImGui::PushItemWidth(ImGui::GetFontSize() * 4); + for (int32_t i = 0; i < num; ++i) + ImGui::LabelText(notifiers[i].name, "%.3f", + notifiers[i].timeout / 1000000.0); + ImGui::PopItemWidth(); +} + +void TimingGui::Initialize() { + HALSimGui::AddWindow("Timing", DisplayTiming, + ImGuiWindowFlags_AlwaysAutoResize); + HALSimGui::SetDefaultWindowPos("Timing", 5, 150); +} diff --git a/simulation/halsim_gui/src/main/native/cpp/TimingGui.h b/simulation/halsim_gui/src/main/native/cpp/TimingGui.h new file mode 100644 index 0000000000..49f33cca48 --- /dev/null +++ b/simulation/halsim_gui/src/main/native/cpp/TimingGui.h @@ -0,0 +1,17 @@ +/*----------------------------------------------------------------------------*/ +/* Copyright (c) 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. */ +/*----------------------------------------------------------------------------*/ + +#pragma once + +namespace halsimgui { + +class TimingGui { + public: + static void Initialize(); +}; + +} // namespace halsimgui diff --git a/simulation/halsim_gui/src/main/native/cpp/main.cpp b/simulation/halsim_gui/src/main/native/cpp/main.cpp index c049d1c4a5..c570a82870 100644 --- a/simulation/halsim_gui/src/main/native/cpp/main.cpp +++ b/simulation/halsim_gui/src/main/native/cpp/main.cpp @@ -23,6 +23,7 @@ #include "RoboRioGui.h" #include "SimDeviceGui.h" #include "SolenoidGui.h" +#include "TimingGui.h" using namespace halsimgui; @@ -45,6 +46,7 @@ __declspec(dllexport) HALSimGui::Add(RoboRioGui::Initialize); HALSimGui::Add(SimDeviceGui::Initialize); HALSimGui::Add(SolenoidGui::Initialize); + HALSimGui::Add(TimingGui::Initialize); wpi::outs() << "Simulator GUI Initializing.\n"; if (!HALSimGui::Initialize()) return 0;