diff options
author | Clyne Sullivan <clyne@bitgloo.com> | 2022-05-24 21:00:16 -1200 |
---|---|---|
committer | Clyne Sullivan <clyne@bitgloo.com> | 2022-05-24 21:00:16 -1200 |
commit | dff847ff4455e7b8c5123167a7d01afe7c45f585 (patch) | |
tree | 1c1fa04635a3c248d07fde4dce8857885ca23952 | |
parent | 5846bda565dc100fc73550d937ec910bd29532f3 (diff) |
built-in openocd support
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | openocd.cfg | 2 | ||||
-rw-r--r-- | source/gui_help.cpp | 113 | ||||
-rw-r--r-- | source/main.cpp | 36 |
4 files changed, 120 insertions, 32 deletions
@@ -1,4 +1,5 @@ build/ +openocd/ imgui.ini stmdspgui stmdspgui.exe diff --git a/openocd.cfg b/openocd.cfg new file mode 100644 index 0000000..33f2c52 --- /dev/null +++ b/openocd.cfg @@ -0,0 +1,2 @@ +source [find interface/stlink.cfg]
+source [find target/stm32l4x.cfg]
\ No newline at end of file diff --git a/source/gui_help.cpp b/source/gui_help.cpp new file mode 100644 index 0000000..a17d9fa --- /dev/null +++ b/source/gui_help.cpp @@ -0,0 +1,113 @@ +#include "imgui.h" +#include "ImGuiFileDialog.h" + +#include <cstdlib> +#include <iostream> +#include <string> +#include <thread> + +void log(const std::string& str); + +static bool showDownloadFirmware = false; +static bool showHelp = false; +static std::string firmwareFile; + +static void helpDownloadThread(); + +void helpRenderMenu() +{ + if (ImGui::BeginMenu("Help")) { + if (ImGui::MenuItem("Open wiki...")) { +#ifdef STMDSP_WIN32 + system("start " +#else + system("xdg-open " +#endif + "https://code.bitgloo.com/clyne/stmdspgui/wiki"); + } + + if (ImGui::MenuItem("Download firmware...")) { + showDownloadFirmware = true; + } + + ImGui::Separator(); + if (ImGui::MenuItem("About")) { + showHelp = true; + } + + ImGui::EndMenu(); + } +} + +void helpRenderDialog() +{ + if (showDownloadFirmware) { + showDownloadFirmware = false; + ImGuiFileDialog::Instance()->OpenModal( + "ChooseFileFW", "Choose Firmware File", ".hex", "."); + } + + if (ImGuiFileDialog::Instance()->Display("ChooseFileFW", + ImGuiWindowFlags_NoCollapse, + ImVec2(460, 540))) + { + if (ImGuiFileDialog::Instance()->IsOk()) { + firmwareFile = ImGuiFileDialog::Instance()->GetFilePathName(); +#ifdef STMDSP_WIN32 + size_t i = 0; + while ((i = firmwareFile.find('\\', i)) != std::string::npos) { + firmwareFile.replace(i, 1, "\\\\"); + i += 2; + } +#endif + + std::thread(helpDownloadThread).detach(); + } + + ImGuiFileDialog::Instance()->Close(); + } + + if (showHelp) { + ImGui::Begin("help"); + + ImGui::Text("stmdspgui\nCompiled on " __DATE__ ".\n\nWritten by Clyne Sullivan.\n"); + + if (ImGui::Button("Close")) { + showHelp = false; + } + + ImGui::End(); + } + + if (!firmwareFile.empty()) { + ImGui::Begin("Downloading"); + + ImGui::Text("Downloading firmware to device..."); + + ImGui::End(); + } +} + +void helpDownloadThread() +{ + std::string command ( +#ifdef STMDSP_WIN32 + "openocd\\bin\\openocd.exe" +#else + "openocd" +#endif + " -f openocd.cfg -c \"program $0 reset exit\""); + + command.replace(command.find("$0"), 2, firmwareFile); + + std::cout << "Run: " << command << std::endl; + + if (system(command.c_str()) == 0) { + log("Programming finished."); + } else { + log("Error while programming device!"); + } + + firmwareFile.clear(); +} + diff --git a/source/main.cpp b/source/main.cpp index b5514e4..aa9f7c4 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -37,6 +37,8 @@ bool guiInitialize(); bool guiHandleEvents(); void guiShutdown(); void guiRender(); +void helpRenderMenu(); +void helpRenderDialog(); void log(const std::string& str); @@ -90,8 +92,6 @@ void log(const std::string& str) template<bool first> void renderWindow() { - static bool showHelp = false; - // Start the new window frame and render the menu bar. ImGui_ImplOpenGL2_NewFrame(); ImGui_ImplSDL2_NewFrame(); @@ -101,24 +101,7 @@ void renderWindow() fileRenderMenu(); deviceRenderMenu(); codeRenderMenu(); - - if (ImGui::BeginMenu("Help")) { - if (ImGui::MenuItem("Open wiki...")) { -#ifdef STMDSP_WIN32 - system("start " -#else - system("xdg-open " -#endif - "https://code.bitgloo.com/clyne/stmdspgui/wiki"); - } - - ImGui::Separator(); - if (ImGui::MenuItem("About")) { - showHelp = true; - } - - ImGui::EndMenu(); - } + helpRenderMenu(); ImGui::EndMainMenuBar(); } @@ -142,6 +125,7 @@ void renderWindow() codeRenderToolbar(); deviceRenderToolbar(); fileRenderDialog(); + helpRenderDialog(); deviceRenderWidgets(); ImGui::PopFont(); @@ -160,18 +144,6 @@ void renderWindow() deviceRenderDraw(); - if (showHelp) { - ImGui::Begin("help"); - - ImGui::Text("stmdspgui\nCompiled on " __DATE__ ".\n\nWritten by Clyne Sullivan.\n"); - - if (ImGui::Button("Close")) { - showHelp = false; - } - - ImGui::End(); - } - // Draw everything to the screen. guiRender(); } |