Add alarm details and only rerender status when it changes

This commit is contained in:
2023-04-28 16:08:05 +03:00
parent 30ccb20846
commit 0b8f5a6950
4 changed files with 55 additions and 18 deletions
+32 -8
View File
@@ -34,6 +34,7 @@
#include <nanogui/graph.h>
#include <nanogui/tabwidget.h>
#include <nanogui/texture.h>
#include <nanogui/textarea.h>
#include <nanogui/shader.h>
#include <nanogui/renderpass.h>
#include <iostream>
@@ -52,6 +53,7 @@
#include <gtest/gtest.h>
#include "grbl_communication.h"
#include "machine.h"
#include "string_utils.h"
using namespace nanogui;
@@ -64,7 +66,7 @@ public:
Window *window;
grbl::jog_state jog;
Label *m_pos_x, *m_pos_y, *m_pos_z;
TextBox *lblStatus, *lblSubstatus;
TextArea *lblStatus, *lblSubstatus;
nanogui::Color red = nanogui::Color(255, 0, 0, 255);
int last_alarm = 0;
@@ -80,8 +82,13 @@ public:
Widget *status_holder = new Widget(window);
status_holder->set_layout(new GridLayout());
lblStatus = new TextBox(window, grbl::status_to_string(cnc.get_status().status));
lblSubstatus = new TextBox(window, cnc.get_status().sub_status);
lblStatus = new TextArea(window);
lblStatus->set_fixed_height(20);
lblStatus->set_font("sans");
lblSubstatus = new TextArea(window);
lblSubstatus->set_font("sans");
lblSubstatus->set_fixed_height(50);
// Machine pos
new Label(window, "Machine pos", "sans-bold");
@@ -282,17 +289,34 @@ public:
void on_disconnected() override {
}
grbl::realtime_status_report last_report;
void on_realtime_status_report(grbl::realtime_status_report report) override {
lblStatus->set_value(grbl::status_to_string(cnc.get_status().status) + " ");
if (cnc.get_status().status == grbl::machine_status::alarm) {
lblSubstatus->set_value(grbl::alarm_to_string(last_alarm));
} else {
lblSubstatus->set_value(cnc.get_status().sub_status);
if (report == last_report) return;
if (last_report.status != report.status) {
lblStatus->clear();
lblStatus->append(grbl::status_to_string(cnc.get_status().status));
lblSubstatus->clear();
if (cnc.get_status().status == grbl::machine_status::alarm) {
lblSubstatus->append(grbl::alarm_to_string(last_alarm));
// auto lines = split_string(grbl::alarm_to_string(last_alarm), "\n");
// for (auto& l: lines) {
// lblSubstatus->append_line(trim(l));
// }
} else {
lblSubstatus->append(cnc.get_status().sub_status);
}
}
m_pos_x->set_caption(std::to_string(cnc.get_status().machine_pos[0]));
m_pos_y->set_caption(std::to_string(cnc.get_status().machine_pos[1]));
m_pos_z->set_caption(std::to_string(cnc.get_status().machine_pos[2]));
last_report = report;
}
void on_banner(std::string line) override {