From 4a0b68d293c2732827952d29d7de3d30951def8a Mon Sep 17 00:00:00 2001 From: ballaswag Date: Mon, 22 Jan 2024 01:13:10 -0800 Subject: [PATCH] Undeath guppy (respawns when it gets terminated). Bigger numpad keys. Properly empty thumbnails where applicable. Fixed progress bar reset. More scaling for different resolutions. --- VERSION | 2 +- installer.sh | 5 ++++ k1/k1_mods/S99guppyscreen | 21 ++++++++++++---- k1/k1_mods/respawn/libeinfo.so.1 | Bin 0 -> 18632 bytes k1/k1_mods/respawn/librc.so.1 | Bin 0 -> 54088 bytes k1/k1_mods/respawn/supervise-daemon | Bin 0 -> 41476 bytes src/button_container.cpp | 5 ++-- src/file_panel.cpp | 5 ++++ src/inputshaper_panel.cpp | 12 +++++++--- src/mini_print_status.cpp | 6 +++++ src/numpad.cpp | 8 +++++-- src/print_panel.cpp | 1 - src/print_status_panel.cpp | 36 +++++++++++++--------------- 13 files changed, 69 insertions(+), 32 deletions(-) create mode 100644 k1/k1_mods/respawn/libeinfo.so.1 create mode 100644 k1/k1_mods/respawn/librc.so.1 create mode 100755 k1/k1_mods/respawn/supervise-daemon diff --git a/VERSION b/VERSION index c5d4220..eb1591a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.19 \ No newline at end of file +0.0.20 \ No newline at end of file diff --git a/installer.sh b/installer.sh index 8fe0470..3072bca 100755 --- a/installer.sh +++ b/installer.sh @@ -96,6 +96,7 @@ fi #### let's see if guppyscreen starts before doing anything more printf "${green} Test starting Guppy Screen ${white}\n" +[ -f /etc/init.d/S99guppyscreen ] && /etc/init.d/S99guppyscreen stop &> /dev/null killall -q guppyscreen $K1_GUPPY_DIR/guppyscreen &> /dev/null & @@ -176,6 +177,10 @@ else cp $K1_GUPPY_DIR/k1_mods/ft2font.cpython-38-mipsel-linux-gnu.so $FT2FONT_PATH fi +ln -sf $K1_GUPPY_DIR/k1_mods/respawn/libeinfo.so.1 /lib/libeinfo.so.1 +ln -sf $K1_GUPPY_DIR/k1_mods/respawn/librc.so.1 /lib/librc.so.1 + + sync if [ ! -f $K1_GUPPY_DIR/guppyscreen ]; then diff --git a/k1/k1_mods/S99guppyscreen b/k1/k1_mods/S99guppyscreen index af9e89d..0bc8295 100755 --- a/k1/k1_mods/S99guppyscreen +++ b/k1/k1_mods/S99guppyscreen @@ -1,16 +1,29 @@ #!/bin/sh -GUPPYSCREEN_PATH=/usr/data/guppyscreen/guppyscreen +GUPPY_DIR=/usr/data/guppyscreen +GUPPYSCREEN=$GUPPY_DIR/guppyscreen +LIBEINFO=$GUPPY_DIR/k1_mods/respawn/libeinfo.so.1 +LIBRC=$GUPPY_DIR/k1_mods/respawn/librc.so.1 +GUPPYSCREEN_LOG=/usr/data/printer_data/logs/guppyscreen.log +PID_FILE=/var/run/guppyscreen.pid +RC_DIR=/run/openrc +SUPERVISE_DAEMON=/usr/data/guppyscreen/k1_mods/respawn/supervise-daemon +SVC_NAME=guppyscreen start_server(){ - export HOME=/root sync && echo 3 > /proc/sys/vm/drop_caches - [ -x "$GUPPYSCREEN_PATH" ] && $GUPPYSCREEN_PATH & + mkdir -p $RC_DIR + + # need to check for now if installers skips the symlink + [ ! -f $LIBEINFO ] && ln -sf $LIBEINFO /lib/libeinfo.so.1 + [ ! -f $LIBRC ] && ln -sf $LIBRC /lib/librc.so.1 + + RC_SVCNAME=$SVC_NAME $SUPERVISE_DAEMON $SVC_NAME --start --stderr $GUPPYSCREEN_LOG --pidfile $PID_FILE $GUPPYSCREEN } stop_server(){ - killall guppyscreen + RC_SVCNAME=$SVC_NAME $SUPERVISE_DAEMON $SVC_NAME --stop --pidfile $PID_FILE } diff --git a/k1/k1_mods/respawn/libeinfo.so.1 b/k1/k1_mods/respawn/libeinfo.so.1 new file mode 100644 index 0000000000000000000000000000000000000000..26cf59a42c1a85a2306eaf3d2f58d94803e73a5f GIT binary patch literal 18632 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 literal 0 HcmV?d00001 diff --git a/k1/k1_mods/respawn/supervise-daemon b/k1/k1_mods/respawn/supervise-daemon new file mode 100755 index 0000000000000000000000000000000000000000..bd678b4ed1a4e08537e0de409b5277f714f8f87f GIT binary patch literal 41476 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 literal 0 HcmV?d00001 diff --git a/src/button_container.cpp b/src/button_container.cpp index 04f0900..084ca1a 100644 --- a/src/button_container.cpp +++ b/src/button_container.cpp @@ -107,7 +107,8 @@ void ButtonContainer::handle_prompt() { lv_obj_t *mbox1 = lv_msgbox_create(NULL, NULL, prompt_text.c_str(), btns, false); lv_obj_t *msg = ((lv_msgbox_t*)mbox1)->text; - lv_obj_set_width(msg, LV_SIZE_CONTENT); + lv_obj_set_style_text_align(msg, LV_TEXT_ALIGN_CENTER, 0); + lv_obj_set_width(msg, LV_PCT(100)); lv_obj_center(msg); lv_obj_t *btnm = lv_msgbox_get_btns(mbox1); @@ -119,7 +120,7 @@ void ButtonContainer::handle_prompt() { auto hscale = (double)lv_disp_get_physical_ver_res(NULL) / 480.0; lv_obj_set_size(btnm, LV_PCT(90), 50 *hscale); - lv_obj_set_size(mbox1, LV_PCT(50), LV_PCT(30)); + lv_obj_set_size(mbox1, LV_PCT(50), LV_PCT(35)); lv_obj_add_event_cb(mbox1, [](lv_event_t *e) { lv_obj_t *obj = lv_obj_get_parent(lv_event_get_target(e)); diff --git a/src/file_panel.cpp b/src/file_panel.cpp index 030b8b9..089f1e9 100644 --- a/src/file_panel.cpp +++ b/src/file_panel.cpp @@ -79,6 +79,11 @@ void FilePanel::refresh_view(json &j, const std::string &gcode_path) { uint32_t normalized_thumb_scale = ((0.29 * (double)screen_width) / (double)thumb_detail.second) * 256; lv_img_set_src(thumbnail, ("A:" + fullpath).c_str()); lv_img_set_zoom(thumbnail, normalized_thumb_scale); + } else { + // free src + lv_img_set_src(thumbnail, NULL); + // hack to color in empty space. + ((lv_img_t*)thumbnail)->src_type = LV_IMG_SRC_SYMBOL; } } diff --git a/src/inputshaper_panel.cpp b/src/inputshaper_panel.cpp index de8dfd9..05edd3e 100644 --- a/src/inputshaper_panel.cpp +++ b/src/inputshaper_panel.cpp @@ -302,9 +302,12 @@ void InputShaperPanel::handle_callback(lv_event_t *event) { if (x_requested) { // ws.gcode_script(fmt::format("TEST_RESONANCES AXIS=X NAME=x FREQ_START={} FREQ_END={}\nM400", 5, 10)); ws.gcode_script(fmt::format("TEST_RESONANCES AXIS=X NAME=x\nM400")); - + + // free src lv_img_set_src(xgraph, NULL); - lv_obj_invalidate(xgraph); + // hack to color in empty space. + ((lv_img_t*)xgraph)->src_type = LV_IMG_SRC_SYMBOL; + lv_label_set_text(xoutput, ""); lv_obj_add_flag(xgraph_cont, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(xspinner, LV_OBJ_FLAG_HIDDEN); @@ -315,8 +318,11 @@ void InputShaperPanel::handle_callback(lv_event_t *event) { // ws.gcode_script(fmt::format("TEST_RESONANCES AXIS=Y NAME=y FREQ_START={} FREQ_END={}\nM400", 5, 10)); ws.gcode_script(fmt::format("TEST_RESONANCES AXIS=Y NAME=y\nM400")); + // free src lv_img_set_src(ygraph, NULL); - lv_obj_invalidate(ygraph); + // hack to color in empty space. + ((lv_img_t*)ygraph)->src_type = LV_IMG_SRC_SYMBOL; + lv_label_set_text(youtput, ""); lv_obj_add_flag(ygraph_cont, LV_OBJ_FLAG_HIDDEN); lv_obj_clear_flag(yspinner, LV_OBJ_FLAG_HIDDEN); diff --git a/src/mini_print_status.cpp b/src/mini_print_status.cpp index 95e6fe7..322e56a 100644 --- a/src/mini_print_status.cpp +++ b/src/mini_print_status.cpp @@ -98,6 +98,12 @@ void MiniPrintStatus::update_img(const std::string &img_path, size_t twidth) { void MiniPrintStatus::reset() { lv_arc_set_value(progress_bar, 0); + + // free src + lv_img_set_src(thumb, NULL); + // hack to color in empty space. + ((lv_img_t*)thumb)->src_type = LV_IMG_SRC_SYMBOL; + eta = "..."; status = "n/a"; } diff --git a/src/numpad.cpp b/src/numpad.cpp index 806d48d..5a33c0f 100644 --- a/src/numpad.cpp +++ b/src/numpad.cpp @@ -16,7 +16,7 @@ Numpad::Numpad(lv_obj_t *parent) lv_obj_clear_flag(edit_cont, LV_OBJ_FLAG_SCROLLABLE); lv_obj_move_background(edit_cont); - lv_obj_set_size(edit_cont, LV_PCT(48), LV_PCT(90)); + lv_obj_set_size(edit_cont, LV_PCT(48), LV_PCT(100)); lv_obj_set_flex_align(edit_cont, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); lv_obj_align(edit_cont, LV_ALIGN_RIGHT_MID, 0, 0); @@ -27,7 +27,11 @@ Numpad::Numpad(lv_obj_t *parent) lv_obj_set_size(input, LV_PCT(100), LV_SIZE_CONTENT); lv_textarea_set_one_line(input, true); - lv_obj_set_size(kb, LV_PCT(100), LV_PCT(70)); + lv_obj_set_size(kb, LV_PCT(100), LV_PCT(85)); + static const char * kb_map[] = {"1", "2", "3", "\n", "4", "5", "6", "\n", "7", "8", "9", "\n", LV_SYMBOL_BACKSPACE, "0", LV_SYMBOL_OK, NULL }; + static const lv_btnmatrix_ctrl_t kb_ctrl[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}; + lv_keyboard_set_map(kb, LV_KEYBOARD_MODE_NUMBER, kb_map, kb_ctrl); + lv_keyboard_set_mode(kb, LV_KEYBOARD_MODE_NUMBER); lv_keyboard_set_textarea(kb, input); diff --git a/src/print_panel.cpp b/src/print_panel.cpp index f6b06ce..08d81bb 100644 --- a/src/print_panel.cpp +++ b/src/print_panel.cpp @@ -357,7 +357,6 @@ void PrintPanel::handle_print_callback(lv_event_t *event) { json fname_input = {{"filename", cur_file->full_path }}; ws.send_jsonrpc("printer.print.start", fname_input); - print_status.reset(); print_status.foreground(); } else { diff --git a/src/print_status_panel.cpp b/src/print_status_panel.cpp index 720ab88..00a2edd 100644 --- a/src/print_status_panel.cpp +++ b/src/print_status_panel.cpp @@ -117,7 +117,6 @@ PrintStatusPanel::PrintStatusPanel(KWebSocketClient &websocket_client, lv_obj_set_flex_align(buttons_cont, LV_FLEX_ALIGN_SPACE_EVENLY, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); lv_obj_set_style_pad_all(pbar_cont, 0, 0); - lv_obj_set_style_pad_top(pbar_cont, 10, 0); lv_obj_set_size(pbar_cont, LV_SIZE_CONTENT, LV_SIZE_CONTENT); // lv_obj_set_style_border_width(pbar_cont, 2, 0); // lv_obj_set_style_border_width(thumbnail_cont, 2, 0); @@ -133,10 +132,10 @@ PrintStatusPanel::PrintStatusPanel(KWebSocketClient &websocket_client, lv_obj_center(progress_label); lv_obj_set_flex_flow(thumbnail_cont, LV_FLEX_FLOW_COLUMN); - lv_obj_set_flex_align(thumbnail_cont, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_CENTER); + lv_obj_set_flex_align(thumbnail_cont, LV_FLEX_ALIGN_START, LV_FLEX_ALIGN_CENTER, LV_FLEX_ALIGN_START); lv_obj_set_size(thumbnail_cont, LV_SIZE_CONTENT, LV_SIZE_CONTENT); lv_obj_set_style_pad_all(thumbnail_cont, 0, 0); - lv_obj_set_style_pad_row(thumbnail_cont, 0, 0); + lv_obj_set_style_pad_row(thumbnail_cont, 20, 0); // row 1 lv_obj_set_grid_cell(thumbnail_cont, LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); @@ -158,7 +157,7 @@ PrintStatusPanel::~PrintStatusPanel() { } void PrintStatusPanel::foreground() { - populate(); + // populate(); lv_obj_move_foreground(status_cont); } @@ -184,6 +183,11 @@ void PrintStatusPanel::reset() { extruder_target = -1; heater_bed_target = -1; + // free src + lv_img_set_src(thumbnail, NULL); + // hack to color in empty space. + ((lv_img_t*)thumbnail)->src_type = LV_IMG_SRC_SYMBOL; + mini_print_status.reset(); } @@ -212,6 +216,7 @@ void PrintStatusPanel::init(json &fans) { fan0.update_label(fmt::format("{}", fmt::join(values, ", ")).c_str()); + reset(); populate(); json &pstat_state = State::get_instance() ->get_data("/printer_state/print_stats/state"_json_pointer); @@ -230,7 +235,6 @@ void PrintStatusPanel::init(json &fans) { void PrintStatusPanel::populate() { State* s = State::get_instance(); json& printfile = s->get_data("/printer_state/print_stats/filename"_json_pointer); - if (!printfile.is_null()) { const std::string fname = printfile.template get(); if (fname.length() > 0) { @@ -254,13 +258,10 @@ void PrintStatusPanel::populate() { // progress percentage auto v = s->get_data("/printer_state/virtual_sdcard/progress"_json_pointer); if (!v.is_null()) { - int cur_value = (int)lv_bar_get_value(progress_bar); int new_value = static_cast(v.template get() * 100); - if (new_value >= cur_value + 1) { - lv_bar_set_value(progress_bar, new_value, LV_ANIM_ON); - lv_label_set_text(progress_label, fmt::format("{}%", new_value).c_str()); - mini_print_status.update_progress(new_value); - } + lv_bar_set_value(progress_bar, new_value, LV_ANIM_ON); + lv_label_set_text(progress_label, fmt::format("{}%", new_value).c_str()); + mini_print_status.update_progress(new_value); } } @@ -303,8 +304,8 @@ void PrintStatusPanel::consume(json &j) { auto printfile = j["/params/0/print_stats/filename"_json_pointer]; if (!printfile.is_null()) { // filename change indicates a start of a print - // populate(); reset(); + populate(); foreground(); // auto move to front when print is detected } @@ -397,13 +398,10 @@ void PrintStatusPanel::consume(json &j) { // progress percentage v = j["/params/0/virtual_sdcard/progress"_json_pointer]; if (!v.is_null()) { - int cur_value = (int)lv_bar_get_value(progress_bar); int new_value = static_cast(v.template get() * 100); - if (new_value >= cur_value + 1) { - lv_bar_set_value(progress_bar, new_value, LV_ANIM_ON); - lv_label_set_text(progress_label, fmt::format("{}%", new_value).c_str()); - mini_print_status.update_progress(new_value); - } + lv_bar_set_value(progress_bar, new_value, LV_ANIM_ON); + lv_label_set_text(progress_label, fmt::format("{}%", new_value).c_str()); + mini_print_status.update_progress(new_value); } // flow @@ -518,7 +516,7 @@ void PrintStatusPanel::update_flow_rate(double filament_used) { flow = filament_xsection * filament_delta / delta; spdlog::trace("caculated flow {}", flow); - flow_rate.update_label(fmt::format("{:.4} mm3/s", flow).c_str()); + flow_rate.update_label(fmt::format("{:.3f} mm3/s", flow).c_str()); } last_filament_used = filament_used;