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
2.0.x
Marcio Teixeira 6 years ago committed by Scott Lahteine
parent 8bf596bd4c
commit f98f4ac7ea

@ -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)
@ -272,16 +276,16 @@ namespace UI {
} }
#endif #endif
float getMinFeedrate_mm_s() { return planner.settings.min_feedrate_mm_s; } float getMinFeedrate_mm_s() { return planner.settings.min_feedrate_mm_s; }
float getMinTravelFeedrate_mm_s() { return planner.settings.min_travel_feedrate_mm_s; } float getMinTravelFeedrate_mm_s() { return planner.settings.min_travel_feedrate_mm_s; }
float getPrintingAcceleration_mm_s2() { return planner.settings.acceleration; } float getPrintingAcceleration_mm_s2() { return planner.settings.acceleration; }
float getRetractAcceleration_mm_s2() { return planner.settings.retract_acceleration; } float getRetractAcceleration_mm_s2() { return planner.settings.retract_acceleration; }
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; }
#if ENABLED(BABYSTEP_ZPROBE_OFFSET) #if ENABLED(BABYSTEP_ZPROBE_OFFSET)
float getZOffset_mm() { float getZOffset_mm() {
@ -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;
} }
@ -564,7 +580,7 @@ void lcd_init() {
UI::onStartup(); UI::onStartup();
} }
void lcd_update() { void lcd_update() {
#if ENABLED(SDSUPPORT) #if ENABLED(SDSUPPORT)
static bool last_sd_status; static bool last_sd_status;
const bool sd_status = IS_SD_INSERTED; const bool sd_status = IS_SD_INSERTED;
@ -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…
Cancel
Save