PFW-1375 MMU error reported by MK3S does not appear on LCD
This commit is contained in:
parent
7d3a50450d
commit
ace5130d9f
|
|
@ -177,7 +177,7 @@ void MMU2::mmu_loop() {
|
||||||
if (is_mmu_error_monitor_active){
|
if (is_mmu_error_monitor_active){
|
||||||
// Call this every iteration to keep the knob rotation responsive
|
// Call this every iteration to keep the knob rotation responsive
|
||||||
// This includes when mmu_loop is called within manage_response
|
// This includes when mmu_loop is called within manage_response
|
||||||
ReportErrorHook((uint16_t)lastErrorCode);
|
ReportErrorHook((uint16_t)lastErrorCode, mmu2.MMUCurrentErrorCode() == ErrorCode::OK ? ErrorSourcePrinter : ErrorSourceMMU);
|
||||||
}
|
}
|
||||||
|
|
||||||
avoidRecursion = false;
|
avoidRecursion = false;
|
||||||
|
|
@ -667,22 +667,22 @@ StepStatus MMU2::LogicStep() {
|
||||||
OnMMUProgressMsg(logic.Progress());
|
OnMMUProgressMsg(logic.Progress());
|
||||||
break;
|
break;
|
||||||
case CommandError:
|
case CommandError:
|
||||||
ReportError(logic.Error());
|
ReportError(logic.Error(), ErrorSourceMMU);
|
||||||
CheckUserInput();
|
CheckUserInput();
|
||||||
break;
|
break;
|
||||||
case CommunicationTimeout:
|
case CommunicationTimeout:
|
||||||
state = xState::Connecting;
|
state = xState::Connecting;
|
||||||
ReportError(ErrorCode::MMU_NOT_RESPONDING);
|
ReportError(ErrorCode::MMU_NOT_RESPONDING, ErrorSourcePrinter);
|
||||||
CheckUserInput();
|
CheckUserInput();
|
||||||
break;
|
break;
|
||||||
case ProtocolError:
|
case ProtocolError:
|
||||||
state = xState::Connecting;
|
state = xState::Connecting;
|
||||||
ReportError(ErrorCode::PROTOCOL_ERROR);
|
ReportError(ErrorCode::PROTOCOL_ERROR, ErrorSourcePrinter);
|
||||||
CheckUserInput();
|
CheckUserInput();
|
||||||
break;
|
break;
|
||||||
case VersionMismatch:
|
case VersionMismatch:
|
||||||
StopKeepPowered();
|
StopKeepPowered();
|
||||||
ReportError(ErrorCode::VERSION_MISMATCH);
|
ReportError(ErrorCode::VERSION_MISMATCH, ErrorSourcePrinter);
|
||||||
CheckUserInput();
|
CheckUserInput();
|
||||||
break;
|
break;
|
||||||
case ButtonPushed:
|
case ButtonPushed:
|
||||||
|
|
@ -721,7 +721,7 @@ void MMU2::SetActiveExtruder(uint8_t ex){
|
||||||
active_extruder = ex;
|
active_extruder = ex;
|
||||||
}
|
}
|
||||||
|
|
||||||
void MMU2::ReportError(ErrorCode ec) {
|
void MMU2::ReportError(ErrorCode ec, uint8_t res) {
|
||||||
// Due to a potential lossy error reporting layers linked to this hook
|
// Due to a potential lossy error reporting layers linked to this hook
|
||||||
// we'd better report everything to make sure especially the error states
|
// we'd better report everything to make sure especially the error states
|
||||||
// do not get lost.
|
// do not get lost.
|
||||||
|
|
@ -733,7 +733,7 @@ void MMU2::ReportError(ErrorCode ec) {
|
||||||
// - report only changes of states (we can miss an error message)
|
// - report only changes of states (we can miss an error message)
|
||||||
// - may be some combination of MMUAvailable + UseMMU flags and decide based on their state
|
// - may be some combination of MMUAvailable + UseMMU flags and decide based on their state
|
||||||
// Right now the filtering of MMU_NOT_RESPONDING is done in ReportErrorHook() as it is not a problem if mmu2.cpp
|
// Right now the filtering of MMU_NOT_RESPONDING is done in ReportErrorHook() as it is not a problem if mmu2.cpp
|
||||||
ReportErrorHook((uint16_t)ec);
|
ReportErrorHook((uint16_t)ec, res);
|
||||||
|
|
||||||
if( ec != lastErrorCode ){ // deduplicate: only report changes in error codes into the log
|
if( ec != lastErrorCode ){ // deduplicate: only report changes in error codes into the log
|
||||||
lastErrorCode = ec;
|
lastErrorCode = ec;
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,13 @@ public:
|
||||||
Cooldown = 2, // The extruder was allowed to cool.
|
Cooldown = 2, // The extruder was allowed to cool.
|
||||||
CooldownPending = 4,
|
CooldownPending = 4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Source of operation error
|
||||||
|
enum ReportErrorSource: uint8_t {
|
||||||
|
ErrorSourcePrinter = 0,
|
||||||
|
ErrorSourceMMU = 1,
|
||||||
|
};
|
||||||
|
|
||||||
/// Perform a reset of the MMU
|
/// Perform a reset of the MMU
|
||||||
/// @param level physical form of the reset
|
/// @param level physical form of the reset
|
||||||
void Reset(ResetForm level);
|
void Reset(ResetForm level);
|
||||||
|
|
@ -188,7 +194,8 @@ private:
|
||||||
|
|
||||||
/// Reports an error into attached ExtUIs
|
/// Reports an error into attached ExtUIs
|
||||||
/// @param ec error code, see ErrorCode
|
/// @param ec error code, see ErrorCode
|
||||||
void ReportError(ErrorCode ec);
|
/// @param res reporter error source, is either Printer (0) or MMU (1)
|
||||||
|
void ReportError(ErrorCode ec, uint8_t res);
|
||||||
|
|
||||||
/// Reports progress of operations into attached ExtUIs
|
/// Reports progress of operations into attached ExtUIs
|
||||||
/// @param pc progress code, see ProgressCode
|
/// @param pc progress code, see ProgressCode
|
||||||
|
|
|
||||||
|
|
@ -198,13 +198,8 @@ enum class ReportErrorHookStates : uint8_t {
|
||||||
|
|
||||||
enum ReportErrorHookStates ReportErrorHookState = ReportErrorHookStates::RENDER_ERROR_SCREEN;
|
enum ReportErrorHookStates ReportErrorHookState = ReportErrorHookStates::RENDER_ERROR_SCREEN;
|
||||||
|
|
||||||
/**
|
void ReportErrorHook(uint16_t ec, uint8_t res) {
|
||||||
* @brief Render MMU error screen on the LCD. This must be non-blocking
|
if (mmu2.MMUCurrentErrorCode() == ErrorCode::OK && res == MMU2::ErrorSourceMMU)
|
||||||
* and allow the MMU and printer to communicate with each other.
|
|
||||||
* @param[in] ec Error code
|
|
||||||
*/
|
|
||||||
void ReportErrorHook(uint16_t ec) {
|
|
||||||
if (mmu2.MMUCurrentErrorCode() == ErrorCode::OK)
|
|
||||||
{
|
{
|
||||||
// If the error code suddenly changes to OK, that means
|
// If the error code suddenly changes to OK, that means
|
||||||
// a button was pushed on the MMU and the LCD should
|
// a button was pushed on the MMU and the LCD should
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,14 @@ void BeginReport(CommandInProgress cip, uint16_t ec);
|
||||||
/// Called at the end of every MMU operation
|
/// Called at the end of every MMU operation
|
||||||
void EndReport(CommandInProgress cip, uint16_t ec);
|
void EndReport(CommandInProgress cip, uint16_t ec);
|
||||||
|
|
||||||
/// Called when the MMU sends operation error (even repeatedly)
|
/**
|
||||||
void ReportErrorHook(uint16_t ec);
|
* @brief Called when the MMU or MK3S sends operation error (even repeatedly).
|
||||||
|
* Render MMU error screen on the LCD. This must be non-blocking
|
||||||
|
* and allow the MMU and printer to communicate with each other.
|
||||||
|
* @param[in] ec error code
|
||||||
|
* @param[in] res reporter error source, is either Printer (0) or MMU (1)
|
||||||
|
*/
|
||||||
|
void ReportErrorHook(uint16_t ec, uint8_t res);
|
||||||
|
|
||||||
/// Called when the MMU sends operation progress update
|
/// Called when the MMU sends operation progress update
|
||||||
void ReportProgressHook(CommandInProgress cip, uint16_t ec);
|
void ReportProgressHook(CommandInProgress cip, uint16_t ec);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue