Fix and improve EXTENSIBLE_UI (#12117)
- Add methods to access print counter data - Clean up some inconsistent method names - Clear lcd status after filament change - Implement `lcd_reset_status` so it works like UltraLCD
This commit is contained in:
parent
8bf596bd4c
commit
f98f4ac7ea
7 changed files with 90 additions and 26 deletions
|
@ -48,7 +48,7 @@ void safe_delay(millis_t ms) {
|
||||||
|
|
||||||
#endif // EEPROM_SETTINGS
|
#endif // EEPROM_SETTINGS
|
||||||
|
|
||||||
#if ENABLED(ULTRA_LCD) || ENABLED(DEBUG_LEVELING_FEATURE)
|
#if ENABLED(ULTRA_LCD) || ENABLED(DEBUG_LEVELING_FEATURE) || ENABLED(EXTENSIBLE_UI)
|
||||||
|
|
||||||
char conv[8] = { 0 };
|
char conv[8] = { 0 };
|
||||||
|
|
||||||
|
|
|
@ -45,7 +45,7 @@ void safe_delay(millis_t ms);
|
||||||
FORCE_INLINE bool is_bitmap_set(uint16_t bits[16], const uint8_t x, const uint8_t y) { return TEST(bits[y], x); }
|
FORCE_INLINE bool is_bitmap_set(uint16_t bits[16], const uint8_t x, const uint8_t y) { return TEST(bits[y], x); }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(ULTRA_LCD) || ENABLED(DEBUG_LEVELING_FEATURE)
|
#if ENABLED(ULTRA_LCD) || ENABLED(DEBUG_LEVELING_FEATURE) || ENABLED(EXTENSIBLE_UI)
|
||||||
|
|
||||||
// Convert uint8_t to string with 123 format
|
// Convert uint8_t to string with 123 format
|
||||||
char* i8tostr3(const uint8_t x);
|
char* i8tostr3(const uint8_t x);
|
||||||
|
|
|
@ -595,6 +595,10 @@ void resume_print(const float &slow_load_length/*=0*/, const float &fast_load_le
|
||||||
--did_pause_print;
|
--did_pause_print;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(ULTRA_LCD)
|
||||||
|
lcd_reset_status();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // ADVANCED_PAUSE_FEATURE
|
#endif // ADVANCED_PAUSE_FEATURE
|
||||||
|
|
|
@ -58,6 +58,9 @@ void GcodeSuite::M501() {
|
||||||
CHAT_PORT
|
CHAT_PORT
|
||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
#if ENABLED(EXTENSIBLE_UI)
|
||||||
|
UI::onLoadSettings();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -28,11 +28,25 @@
|
||||||
// To implement a new UI, complete the functions below and
|
// To implement a new UI, complete the functions below and
|
||||||
// read or update Marlin's state using the methods in the
|
// read or update Marlin's state using the methods in the
|
||||||
// UI methods in "../ui_api.h"
|
// UI methods in "../ui_api.h"
|
||||||
|
//
|
||||||
|
// Although it may be possible to access other state
|
||||||
|
// variables from Marlin, using the API here possibly
|
||||||
|
// helps ensure future compatibility.
|
||||||
|
|
||||||
namespace UI {
|
namespace UI {
|
||||||
void onStartup() {}
|
void onStartup() {
|
||||||
void onUpdate() {}
|
/* Initialize the display module here. The following
|
||||||
void onPrinterKilled(const char* lcd_msg) {}
|
* routines are available for access to the GPIO pins:
|
||||||
|
*
|
||||||
|
* SET_OUTPUT(pin)
|
||||||
|
* SET_INPUT_PULLUP(pin)
|
||||||
|
* SET_INPUT(pin)
|
||||||
|
* WRITE(pin,value)
|
||||||
|
* READ(pin)
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
void onIdle() {}
|
||||||
|
void onPrinterKilled(const char* msg) {}
|
||||||
void onMediaInserted();
|
void onMediaInserted();
|
||||||
void onMediaError();
|
void onMediaError();
|
||||||
void onMediaRemoved();
|
void onMediaRemoved();
|
||||||
|
@ -41,9 +55,10 @@ namespace UI {
|
||||||
void onPrintTimerPaused() {}
|
void onPrintTimerPaused() {}
|
||||||
void onPrintTimerStopped() {}
|
void onPrintTimerStopped() {}
|
||||||
void onFilamentRunout() {}
|
void onFilamentRunout() {}
|
||||||
void onStatusChanged(const char* lcd_msg) {}
|
void onStatusChanged(const char* msg) {}
|
||||||
void onStatusChanged(progmem_str lcd_msg) {}
|
void onStatusChanged(progmem_str msg) {}
|
||||||
void onFactoryReset() {}
|
void onFactoryReset() {}
|
||||||
|
void onLoadSettings() {}
|
||||||
void onStoreSettings() {}
|
void onStoreSettings() {}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,9 +27,7 @@
|
||||||
#include "../../module/motion.h"
|
#include "../../module/motion.h"
|
||||||
#include "../../module/planner.h"
|
#include "../../module/planner.h"
|
||||||
#include "../../module/probe.h"
|
#include "../../module/probe.h"
|
||||||
#include "../../module/printcounter.h"
|
|
||||||
#include "../../module/temperature.h"
|
#include "../../module/temperature.h"
|
||||||
#include "../../sd/cardreader.h"
|
|
||||||
#include "../../libs/duration_t.h"
|
#include "../../libs/duration_t.h"
|
||||||
|
|
||||||
#if DO_SWITCH_EXTRUDER || ENABLED(SWITCHING_NOZZLE) || ENABLED(PARKING_EXTRUDER)
|
#if DO_SWITCH_EXTRUDER || ENABLED(SWITCHING_NOZZLE) || ENABLED(PARKING_EXTRUDER)
|
||||||
|
@ -37,6 +35,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if ENABLED(SDSUPPORT)
|
#if ENABLED(SDSUPPORT)
|
||||||
|
#include "../../sd/cardreader.h"
|
||||||
#include "../../feature/emergency_parser.h"
|
#include "../../feature/emergency_parser.h"
|
||||||
|
|
||||||
bool abort_sd_printing; // =false
|
bool abort_sd_printing; // =false
|
||||||
|
@ -44,6 +43,11 @@
|
||||||
constexpr bool abort_sd_printing = false;
|
constexpr bool abort_sd_printing = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if ENABLED(PRINTCOUNTER)
|
||||||
|
#include "../../core/utility.h"
|
||||||
|
#include "../../module/printcounter.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "ui_api.h"
|
#include "ui_api.h"
|
||||||
|
|
||||||
#if ENABLED(BACKLASH_GCODE)
|
#if ENABLED(BACKLASH_GCODE)
|
||||||
|
@ -279,7 +283,7 @@ namespace UI {
|
||||||
float getTravelAcceleration_mm_s2() { return planner.settings.travel_acceleration; }
|
float getTravelAcceleration_mm_s2() { return planner.settings.travel_acceleration; }
|
||||||
void setMinFeedrate_mm_s(const float fr) { planner.settings.min_feedrate_mm_s = fr; }
|
void setMinFeedrate_mm_s(const float fr) { planner.settings.min_feedrate_mm_s = fr; }
|
||||||
void setMinTravelFeedrate_mm_s(const float fr) { planner.settings.min_travel_feedrate_mm_s = fr; }
|
void setMinTravelFeedrate_mm_s(const float fr) { planner.settings.min_travel_feedrate_mm_s = fr; }
|
||||||
void setPrintingAcceleration_mm_per_s2(const float acc) { planner.settings.acceleration = acc; }
|
void setPrintingAcceleration_mm_s2(const float acc) { planner.settings.acceleration = acc; }
|
||||||
void setRetractAcceleration_mm_s2(const float acc) { planner.settings.retract_acceleration = acc; }
|
void setRetractAcceleration_mm_s2(const float acc) { planner.settings.retract_acceleration = acc; }
|
||||||
void setTravelAcceleration_mm_s2(const float acc) { planner.settings.travel_acceleration = acc; }
|
void setTravelAcceleration_mm_s2(const float acc) { planner.settings.travel_acceleration = acc; }
|
||||||
|
|
||||||
|
@ -364,6 +368,18 @@ namespace UI {
|
||||||
return elapsed.value;
|
return elapsed.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLED(PRINTCOUNTER)
|
||||||
|
char* getTotalPrints_str(char buffer[21]) { strcpy(buffer,itostr3left(print_job_timer.getStats().totalPrints)); return buffer; }
|
||||||
|
char* getFinishedPrints_str(char buffer[21]) { strcpy(buffer,itostr3left(print_job_timer.getStats().finishedPrints)); return buffer; }
|
||||||
|
char* getTotalPrintTime_str(char buffer[21]) { duration_t(print_job_timer.getStats().printTime).toString(buffer); return buffer; }
|
||||||
|
char* getLongestPrint_str(char buffer[21]) { duration_t(print_job_timer.getStats().printTime).toString(buffer); return buffer; }
|
||||||
|
char* getFilamentUsed_str(char buffer[21]) {
|
||||||
|
printStatistics stats = print_job_timer.getStats();
|
||||||
|
sprintf_P(buffer, PSTR("%ld.%im"), long(stats.filamentUsed / 1000), int16_t(stats.filamentUsed / 100) % 10);
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
float getFeedRate_percent() {
|
float getFeedRate_percent() {
|
||||||
return feedrate_percentage;
|
return feedrate_percentage;
|
||||||
}
|
}
|
||||||
|
@ -585,7 +601,7 @@ void lcd_update()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif // SDSUPPORT
|
#endif // SDSUPPORT
|
||||||
UI::onUpdate();
|
UI::onIdle();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool lcd_hasstatus() { return true; }
|
bool lcd_hasstatus() { return true; }
|
||||||
|
@ -594,8 +610,25 @@ void lcd_reset_alert_level()
|
||||||
void lcd_refresh() {}
|
void lcd_refresh() {}
|
||||||
void lcd_setstatus(const char * const message, const bool persist /* = false */) { UI::onStatusChanged(message); }
|
void lcd_setstatus(const char * const message, const bool persist /* = false */) { UI::onStatusChanged(message); }
|
||||||
void lcd_setstatusPGM(const char * const message, int8_t level /* = 0 */) { UI::onStatusChanged((progmem_str)message); }
|
void lcd_setstatusPGM(const char * const message, int8_t level /* = 0 */) { UI::onStatusChanged((progmem_str)message); }
|
||||||
void lcd_reset_status() {}
|
|
||||||
void lcd_setalertstatusPGM(const char * const message) { lcd_setstatusPGM(message, 0); }
|
void lcd_setalertstatusPGM(const char * const message) { lcd_setstatusPGM(message, 0); }
|
||||||
|
void lcd_reset_status() {
|
||||||
|
static const char paused[] PROGMEM = MSG_PRINT_PAUSED;
|
||||||
|
static const char printing[] PROGMEM = MSG_PRINTING;
|
||||||
|
static const char welcome[] PROGMEM = WELCOME_MSG;
|
||||||
|
PGM_P msg;
|
||||||
|
if (print_job_timer.isPaused())
|
||||||
|
msg = paused;
|
||||||
|
#if ENABLED(SDSUPPORT)
|
||||||
|
else if (card.sdprinting)
|
||||||
|
return lcd_setstatus(card.longest_filename(), true);
|
||||||
|
#endif
|
||||||
|
else if (print_job_timer.isRunning())
|
||||||
|
msg = printing;
|
||||||
|
else
|
||||||
|
msg = welcome;
|
||||||
|
|
||||||
|
lcd_setstatusPGM(msg, -1);
|
||||||
|
}
|
||||||
void lcd_status_printf_P(const uint8_t level, const char * const fmt, ...) {
|
void lcd_status_printf_P(const uint8_t level, const char * const fmt, ...) {
|
||||||
char buff[64];
|
char buff[64];
|
||||||
va_list args;
|
va_list args;
|
||||||
|
|
|
@ -49,13 +49,21 @@ namespace UI {
|
||||||
float getAxisMaxAcceleration_mm_s2(const axis_t axis);
|
float getAxisMaxAcceleration_mm_s2(const axis_t axis);
|
||||||
float getMinFeedrate_mm_s();
|
float getMinFeedrate_mm_s();
|
||||||
float getMinTravelFeedrate_mm_s();
|
float getMinTravelFeedrate_mm_s();
|
||||||
float getPrintingAcceleration_mm_per_s2();
|
float getPrintingAcceleration_mm_s2();
|
||||||
float getRetractAcceleration_mm_per_s2();
|
float getRetractAcceleration_mm_s2();
|
||||||
float getTravelAcceleration_mm_per_s2();
|
float getTravelAcceleration_mm_s2();
|
||||||
float getFeedRate_percent();
|
float getFeedRate_percent();
|
||||||
uint8_t getProgress_percent();
|
uint8_t getProgress_percent();
|
||||||
uint32_t getProgress_seconds_elapsed();
|
uint32_t getProgress_seconds_elapsed();
|
||||||
|
|
||||||
|
#if ENABLED(PRINTCOUNTER)
|
||||||
|
char *getTotalPrints_str(char buffer[21]);
|
||||||
|
char *getFinishedPrints_str(char buffer[21]);
|
||||||
|
char *getTotalPrintTime_str(char buffer[21]);
|
||||||
|
char *getLongestPrint_str(char buffer[21]);
|
||||||
|
char *getFilamentUsed_str(char buffer[21]);
|
||||||
|
#endif
|
||||||
|
|
||||||
void setTargetTemp_celsius(const uint8_t extruder, float temp);
|
void setTargetTemp_celsius(const uint8_t extruder, float temp);
|
||||||
void setFan_percent(const uint8_t fan, const float percent);
|
void setFan_percent(const uint8_t fan, const float percent);
|
||||||
void setAxisPosition_mm(const axis_t axis, float position, float _feedrate_mm_s);
|
void setAxisPosition_mm(const axis_t axis, float position, float _feedrate_mm_s);
|
||||||
|
@ -157,7 +165,7 @@ namespace UI {
|
||||||
// module and will be called by Marlin.
|
// module and will be called by Marlin.
|
||||||
|
|
||||||
void onStartup();
|
void onStartup();
|
||||||
void onUpdate();
|
void onIdle();
|
||||||
void onMediaInserted();
|
void onMediaInserted();
|
||||||
void onMediaError();
|
void onMediaError();
|
||||||
void onMediaRemoved();
|
void onMediaRemoved();
|
||||||
|
@ -171,4 +179,5 @@ namespace UI {
|
||||||
void onStatusChanged(progmem_str msg);
|
void onStatusChanged(progmem_str msg);
|
||||||
void onFactoryReset();
|
void onFactoryReset();
|
||||||
void onStoreSettings();
|
void onStoreSettings();
|
||||||
|
void onLoadSettings();
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue