From f22d0961e3d61f4409b86f3ebf63ce4ddb2d16db Mon Sep 17 00:00:00 2001 From: Peter Johnson Date: Sat, 2 Nov 2019 15:26:08 -0700 Subject: [PATCH] Sim GUI: Add duty cycle support --- .../halsim_gui/src/main/native/cpp/DIOGui.cpp | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/simulation/halsim_gui/src/main/native/cpp/DIOGui.cpp b/simulation/halsim_gui/src/main/native/cpp/DIOGui.cpp index 93a07f9afb..7c9eae5ecc 100644 --- a/simulation/halsim_gui/src/main/native/cpp/DIOGui.cpp +++ b/simulation/halsim_gui/src/main/native/cpp/DIOGui.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include #include @@ -33,11 +34,14 @@ static void DisplayDIO() { static int numDIO = HAL_GetNumDigitalChannels(); static int numPWM = HAL_GetNumDigitalPWMOutputs(); static int numEncoder = HAL_GetNumEncoders(); + static int numDutyCycle = HAL_GetNumDutyCycles(); static auto pwmMap = std::make_unique(numDIO); static auto encoderMap = std::make_unique(numDIO); + static auto dutyCycleMap = std::make_unique(numDIO); std::memset(pwmMap.get(), 0, numDIO * sizeof(pwmMap[0])); std::memset(encoderMap.get(), 0, numDIO * sizeof(encoderMap[0])); + std::memset(dutyCycleMap.get(), 0, numDIO * sizeof(dutyCycleMap[0])); for (int i = 0; i < numPWM; ++i) { if (HALSIM_GetDigitalPWMInitialized(i)) { @@ -56,6 +60,13 @@ static void DisplayDIO() { } } + for (int i = 0; i < numDutyCycle; ++i) { + if (HALSIM_GetDutyCycleInitialized(i)) { + int channel = HALSIM_GetDutyCycleDigitalChannel(i); + if (channel >= 0 && channel < numDIO) dutyCycleMap[channel] = i + 1; + } + } + ImGui::PushItemWidth(ImGui::GetFontSize() * 8); for (int i = 0; i < numDIO; ++i) { if (HALSIM_GetDIOInitialized(i)) { @@ -80,6 +91,16 @@ static void DisplayDIO() { HALSIM_GetEncoderDigitalChannelB(encoderMap[i] - 1)); ImGui::PopStyleColor(); } + } else if (dutyCycleMap[i] > 0) { + std::snprintf(name, sizeof(name), "PWM[%d]", i); + if (auto simDevice = + HALSIM_GetDutyCycleSimDevice(dutyCycleMap[i] - 1)) { + LabelSimDevice(name, simDevice); + } else { + double val = HALSIM_GetDutyCycleOutput(dutyCycleMap[i] - 1); + if (ImGui::InputDouble(name, &val)) + HALSIM_SetDutyCycleOutput(dutyCycleMap[i] - 1, val); + } } else if (!HALSIM_GetDIOIsInput(i)) { std::snprintf(name, sizeof(name), "Out[%d]", i); if (auto simDevice = HALSIM_GetDIOSimDevice(i)) {