Introduce FILAMENT_EJECTED + tune Eject operation + inc. MMU ver. 2.1.6

This commit is contained in:
D.R.racer 2022-12-28 13:58:03 +01:00 committed by DRracer
parent 58ff0efb30
commit ec1d12d929
4 changed files with 24 additions and 4 deletions

View File

@ -54,6 +54,8 @@ enum class ErrorCode : uint_fast16_t {
MOVE_IDLER_FAILED = MOVE_FAILED | TMC_IDLER_BIT, ///< E33033 the Idler was unable to move - unused at the time of creation, but added for completeness MOVE_IDLER_FAILED = MOVE_FAILED | TMC_IDLER_BIT, ///< E33033 the Idler was unable to move - unused at the time of creation, but added for completeness
MOVE_PULLEY_FAILED = MOVE_FAILED | TMC_PULLEY_BIT, ///< E32841 the Pulley was unable to move - unused at the time of creation, but added for completeness MOVE_PULLEY_FAILED = MOVE_FAILED | TMC_PULLEY_BIT, ///< E32841 the Pulley was unable to move - unused at the time of creation, but added for completeness
FILAMENT_EJECTED = 0x800c, ///< Filament was ejected, waiting for user input - technically, this is not an error
LOAD_TO_EXTRUDER_FAILED = 0x802a, ///< E32811 internal error of the printer - try-load-unload sequence detected missing filament -> failed load into the nozzle LOAD_TO_EXTRUDER_FAILED = 0x802a, ///< E32811 internal error of the printer - try-load-unload sequence detected missing filament -> failed load into the nozzle
QUEUE_FULL = 0x802b, ///< E32811 internal logic error - attempt to move with a full queue QUEUE_FULL = 0x802b, ///< E32811 internal logic error - attempt to move with a full queue
VERSION_MISMATCH = 0x802c, ///< E32812 internal error of the printer - incompatible version of the MMU FW VERSION_MISMATCH = 0x802c, ///< E32812 internal error of the printer - incompatible version of the MMU FW

View File

@ -72,6 +72,7 @@ typedef enum : uint16_t {
ERR_SYSTEM_FW_UPDATE_NEEDED = 504, ERR_SYSTEM_FW_UPDATE_NEEDED = 504,
ERR_SYSTEM_FW_RUNTIME_ERROR = 505, ERR_SYSTEM_FW_RUNTIME_ERROR = 505,
ERR_SYSTEM_UNLOAD_MANUALLY = 506, ERR_SYSTEM_UNLOAD_MANUALLY = 506,
ERR_SYSTEM_FILAMENT_EJECTED = 507,
ERR_OTHER = 900 ERR_OTHER = 900
} err_num_t; } err_num_t;
@ -121,7 +122,8 @@ static const constexpr uint16_t errorCodes[] PROGMEM = {
ERR_SYSTEM_QUEUE_FULL, ERR_SYSTEM_QUEUE_FULL,
ERR_SYSTEM_FW_UPDATE_NEEDED, ERR_SYSTEM_FW_UPDATE_NEEDED,
ERR_SYSTEM_FW_RUNTIME_ERROR, ERR_SYSTEM_FW_RUNTIME_ERROR,
ERR_SYSTEM_UNLOAD_MANUALLY ERR_SYSTEM_UNLOAD_MANUALLY,
ERR_SYSTEM_FILAMENT_EJECTED
}; };
// @@TODO some of the strings are duplicates, can be merged into one 01234567890123456789 // @@TODO some of the strings are duplicates, can be merged into one 01234567890123456789
@ -164,6 +166,7 @@ static const char MSG_TITLE_QUEUE_FULL[] PROGMEM_I1 = ISTR("QUEUE F
static const char MSG_TITLE_FW_UPDATE_NEEDED[] PROGMEM_I1 = ISTR("MMU FW UPDATE NEEDED"); ////MSG_TITLE_FW_UPDATE_NEEDED c=20 static const char MSG_TITLE_FW_UPDATE_NEEDED[] PROGMEM_I1 = ISTR("MMU FW UPDATE NEEDED"); ////MSG_TITLE_FW_UPDATE_NEEDED c=20
static const char MSG_TITLE_FW_RUNTIME_ERROR[] PROGMEM_I1 = ISTR("FW RUNTIME ERROR"); ////MSG_TITLE_FW_RUNTIME_ERROR c=20 static const char MSG_TITLE_FW_RUNTIME_ERROR[] PROGMEM_I1 = ISTR("FW RUNTIME ERROR"); ////MSG_TITLE_FW_RUNTIME_ERROR c=20
static const char MSG_TITLE_UNLOAD_MANUALLY[] PROGMEM_I1 = ISTR("UNLOAD MANUALLY"); ////MSG_TITLE_UNLOAD_MANUALLY c=20 static const char MSG_TITLE_UNLOAD_MANUALLY[] PROGMEM_I1 = ISTR("UNLOAD MANUALLY"); ////MSG_TITLE_UNLOAD_MANUALLY c=20
static const char MSG_TITLE_FILAMENT_EJECTED[] PROGMEM_I1 = ISTR("FILAMENT EJECTED"); ////MSG_TITLE_FILAMENT_EJECTED c=20
static const char * const errorTitles [] PROGMEM = { static const char * const errorTitles [] PROGMEM = {
_R(MSG_TITLE_FINDA_DIDNT_TRIGGER), _R(MSG_TITLE_FINDA_DIDNT_TRIGGER),
@ -206,7 +209,8 @@ static const char * const errorTitles [] PROGMEM = {
_R(MSG_TITLE_QUEUE_FULL), _R(MSG_TITLE_QUEUE_FULL),
_R(MSG_TITLE_FW_UPDATE_NEEDED), _R(MSG_TITLE_FW_UPDATE_NEEDED),
_R(MSG_TITLE_FW_RUNTIME_ERROR), _R(MSG_TITLE_FW_RUNTIME_ERROR),
_R(MSG_TITLE_UNLOAD_MANUALLY) _R(MSG_TITLE_UNLOAD_MANUALLY),
_R(MSG_TITLE_FILAMENT_EJECTED)
}; };
// @@TODO looking at the texts, they can be composed of several parts and/or parametrized (could save a lot of space ;) ) // @@TODO looking at the texts, they can be composed of several parts and/or parametrized (could save a lot of space ;) )
@ -251,6 +255,7 @@ static const char MSG_DESC_QUEUE_FULL[] PROGMEM_I1 = ISTR("MMU Firmware internal
static const char MSG_DESC_FW_UPDATE_NEEDED[] PROGMEM_I1 = ISTR("The MMU unit reports its FW version incompatible with the printer's firmware. Make sure the MMU firmware is up to date."); ////MSG_DESC_FW_UPDATE_NEEDED c=20 r=9 static const char MSG_DESC_FW_UPDATE_NEEDED[] PROGMEM_I1 = ISTR("The MMU unit reports its FW version incompatible with the printer's firmware. Make sure the MMU firmware is up to date."); ////MSG_DESC_FW_UPDATE_NEEDED c=20 r=9
static const char MSG_DESC_FW_RUNTIME_ERROR[] PROGMEM_I1 = ISTR("Internal runtime error. Try resetting the MMU unit or updating the firmware. If the issue persists, contact support."); ////MSG_DESC_FW_RUNTIME_ERROR c=20 r=11 static const char MSG_DESC_FW_RUNTIME_ERROR[] PROGMEM_I1 = ISTR("Internal runtime error. Try resetting the MMU unit or updating the firmware. If the issue persists, contact support."); ////MSG_DESC_FW_RUNTIME_ERROR c=20 r=11
static const char MSG_DESC_UNLOAD_MANUALLY[] PROGMEM_I1 = ISTR("Filament detected unexpectedly. Ensure no filament is loaded. Check the sensors and wiring."); ////MSG_DESC_UNLOAD_MANUALLY c=20 r=8 static const char MSG_DESC_UNLOAD_MANUALLY[] PROGMEM_I1 = ISTR("Filament detected unexpectedly. Ensure no filament is loaded. Check the sensors and wiring."); ////MSG_DESC_UNLOAD_MANUALLY c=20 r=8
static const char MSG_DESC_FILAMENT_EJECTED[] PROGMEM_I1 = ISTR("Remove the ejected filament from the front of the MMU unit."); ////MSG_DESC_FILAMENT_EJECTED c=20 r=8
static const char * const errorDescs[] PROGMEM = { static const char * const errorDescs[] PROGMEM = {
_R(MSG_DESC_FINDA_DIDNT_TRIGGER), _R(MSG_DESC_FINDA_DIDNT_TRIGGER),
@ -293,7 +298,8 @@ static const char * const errorDescs[] PROGMEM = {
_R(MSG_DESC_QUEUE_FULL), _R(MSG_DESC_QUEUE_FULL),
_R(MSG_DESC_FW_UPDATE_NEEDED), _R(MSG_DESC_FW_UPDATE_NEEDED),
_R(MSG_DESC_FW_RUNTIME_ERROR), _R(MSG_DESC_FW_RUNTIME_ERROR),
_R(MSG_DESC_UNLOAD_MANUALLY) _R(MSG_DESC_UNLOAD_MANUALLY),
_R(MSG_DESC_FILAMENT_EJECTED)
}; };
// we have max 3 buttons/operations to select from // we have max 3 buttons/operations to select from
@ -375,6 +381,7 @@ static const uint8_t errorButtons[] PROGMEM = {
Btns(ButtonOperations::DisableMMU, ButtonOperations::NoOperation),//FW_UPDATE_NEEDED Btns(ButtonOperations::DisableMMU, ButtonOperations::NoOperation),//FW_UPDATE_NEEDED
Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//FW_RUNTIME_ERROR Btns(ButtonOperations::RestartMMU, ButtonOperations::NoOperation),//FW_RUNTIME_ERROR
Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//UNLOAD_MANUALLY Btns(ButtonOperations::Retry, ButtonOperations::NoOperation),//UNLOAD_MANUALLY
Btns(ButtonOperations::Continue, ButtonOperations::NoOperation),//FILAMENT_EJECTED
}; };
static_assert( sizeof(errorCodes) / sizeof(errorCodes[0]) == sizeof(errorDescs) / sizeof (errorDescs[0])); static_assert( sizeof(errorCodes) / sizeof(errorCodes[0]) == sizeof(errorDescs) / sizeof (errorDescs[0]));

View File

@ -51,6 +51,8 @@ uint8_t PrusaErrorCodeIndex(uint16_t ec) {
return FindErrorIndex(ERR_MECHANICAL_INSPECT_FINDA); return FindErrorIndex(ERR_MECHANICAL_INSPECT_FINDA);
case (uint16_t)ErrorCode::LOAD_TO_EXTRUDER_FAILED: case (uint16_t)ErrorCode::LOAD_TO_EXTRUDER_FAILED:
return FindErrorIndex(ERR_MECHANICAL_LOAD_TO_EXTRUDER_FAILED); return FindErrorIndex(ERR_MECHANICAL_LOAD_TO_EXTRUDER_FAILED);
case (uint16_t)ErrorCode::FILAMENT_EJECTED:
return FindErrorIndex(ERR_SYSTEM_FILAMENT_EJECTED);
case (uint16_t)ErrorCode::STALLED_PULLEY: case (uint16_t)ErrorCode::STALLED_PULLEY:
case (uint16_t)ErrorCode::MOVE_PULLEY_FAILED: case (uint16_t)ErrorCode::MOVE_PULLEY_FAILED:
@ -310,6 +312,15 @@ Buttons ButtonAvailable(uint16_t ec) {
break; break;
} }
break; break;
case ERR_SYSTEM_FILAMENT_EJECTED:
switch (buttonSelectedOperation) {
case ButtonOperations::Continue: // "Continue" - eject filament completed
return Middle;
default:
break;
}
break;
default: default:
break; break;
} }

View File

@ -6,7 +6,7 @@
namespace MMU2 { namespace MMU2 {
static const uint8_t supportedMmuFWVersion[3] PROGMEM = { 2, 1, 5 }; static const uint8_t supportedMmuFWVersion[3] PROGMEM = { 2, 1, 6 };
const uint8_t ProtocolLogic::regs8Addrs[ProtocolLogic::regs8Count] PROGMEM = { const uint8_t ProtocolLogic::regs8Addrs[ProtocolLogic::regs8Count] PROGMEM = {
8, // FINDA state 8, // FINDA state