built-in openocd support

pull/1/head
Clyne 2 years ago
parent 5846bda565
commit dff847ff44

1
.gitignore vendored

@ -1,4 +1,5 @@
build/
openocd/
imgui.ini
stmdspgui
stmdspgui.exe

@ -0,0 +1,2 @@
source [find interface/stlink.cfg]
source [find target/stm32l4x.cfg]

@ -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();
}

@ -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();
}

Loading…
Cancel
Save