Check return code from VerifyEnvironmentState

pull/249/head
Guðni Már Gilbert 2022-12-11 13:13:26 +00:00
parent 6a4ebdaee6
commit abc46a90eb
1 changed files with 43 additions and 19 deletions

View File

@ -1,63 +1,81 @@
bool VerifyEnvironmentState(mg::FilamentLoadState fls, uint8_t idlerSlotIndex, uint8_t selectorSlotIndex, bool VerifyEnvironmentState(mg::FilamentLoadState fls, uint8_t idlerSlotIndex, uint8_t selectorSlotIndex,
bool findaPressed, bool pulleyEnabled, ml::Mode greenLEDMode, ml::Mode redLEDMode) { bool findaPressed, bool pulleyEnabled, ml::Mode greenLEDMode, ml::Mode redLEDMode) {
CHECKED_ELSE(mg::globals.FilamentLoaded() & fls) { // beware - abusing the values as bit masks to detect multiple situations at once CHECKED_ELSE(mg::globals.FilamentLoaded() & fls) { // beware - abusing the values as bit masks to detect multiple situations at once
WARN("FilamentLoaded mismatch");
WARN("mg::globals.FilamentLoaded()): " << (int)mg::globals.FilamentLoaded());
WARN("Expected state, fls: " << (int)fls);
return false; return false;
} }
if( mg::globals.FilamentLoaded() >= mg::FilamentLoadState::InSelector ){ if( mg::globals.FilamentLoaded() >= mg::FilamentLoadState::InSelector ){
// check eeprom content - filament blocking the selector // check eeprom content - filament blocking the selector
uint8_t eeSlot = 0xff; uint8_t eeSlot = 0xff;
CHECKED_ELSE(mps::FilamentLoaded::get(eeSlot)){ CHECKED_ELSE(mps::FilamentLoaded::get(eeSlot)){
WARN("mps::FilamentLoaded::get(eeSlot) returned false");
return false; return false;
} }
CHECKED_ELSE(eeSlot == selectorSlotIndex){ CHECKED_ELSE(eeSlot == selectorSlotIndex){
WARN("eeSlot does not match selectorSlotIndex");
WARN("eeSlot: " << (int)eeSlot);
WARN("selectorSlotIndex: " << (int)selectorSlotIndex);
return false; return false;
} }
} else { } else {
// check eeprom content - filament blocking the selector // check eeprom content - filament blocking the selector
uint8_t eeSlot = 0xff; uint8_t eeSlot = 0xff;
CHECKED_ELSE(mps::FilamentLoaded::get(eeSlot) == false){ CHECKED_ELSE(mps::FilamentLoaded::get(eeSlot) == false){
WARN("mps::FilamentLoaded::get(eeSlot) returned true");
return false; return false;
} }
} }
if( idlerSlotIndex < config::toolCount ){ // abusing invalid index to skip checking of slot and position if( idlerSlotIndex < config::toolCount ){ // abusing invalid index to skip checking of slot and position
CHECKED_ELSE(mm::axes[mm::Idler].pos == mi::Idler::SlotPosition(idlerSlotIndex).v) { CHECKED_ELSE(mm::axes[mm::Idler].pos == mi::Idler::SlotPosition(idlerSlotIndex).v) {
WARN("mm::axes[mm::Idler].pos != mi::Idler::SlotPosition(idlerSlotIndex).v");
return false; return false;
} }
CHECKED_ELSE(mi::idler.Engaged() == (idlerSlotIndex < config::toolCount)) { CHECKED_ELSE(mi::idler.Engaged() == (idlerSlotIndex < config::toolCount)) {
WARN("mi::idler.Engaged() != (idlerSlotIndex < config::toolCount)");
return false; return false;
} }
} }
if( mi::idler.State() == mi::Idler::HomeForward || mi::idler.State() == mi::Idler::HomeBack ){ if( mi::idler.State() == mi::Idler::HomeForward || mi::idler.State() == mi::Idler::HomeBack ){
CHECKED_ELSE(mi::idler.Slot() == 0xff){ CHECKED_ELSE(mi::idler.Slot() == 0xff){
WARN("mi::idler.Slot() != 0xff");
return false; return false;
} }
CHECKED_ELSE(mi::idler.HomingValid() == false){ CHECKED_ELSE(mi::idler.HomingValid() == false){
WARN("mi::idler.HomingValid() != false");
return false; return false;
} }
} }
if( selectorSlotIndex < config::toolCount ){ // abusing invalid index to skip checking of slot and position if( selectorSlotIndex < config::toolCount ){ // abusing invalid index to skip checking of slot and position
CHECKED_ELSE(mm::axes[mm::Selector].pos == ms::Selector::SlotPosition(selectorSlotIndex).v) { CHECKED_ELSE(mm::axes[mm::Selector].pos == ms::Selector::SlotPosition(selectorSlotIndex).v) {
WARN("mm::axes[mm::Selector].pos != ms::Selector::SlotPosition(selectorSlotIndex).v");
return false; return false;
} }
CHECKED_ELSE(ms::selector.Slot() == selectorSlotIndex) { CHECKED_ELSE(ms::selector.Slot() == selectorSlotIndex) {
WARN("ms::selector.Slot() != selectorSlotIndex");
return false; return false;
} }
} }
if( ms::selector.State() == ms::Selector::HomeForward || ms::selector.State() == ms::Selector::HomeBack ){ if( ms::selector.State() == ms::Selector::HomeForward || ms::selector.State() == ms::Selector::HomeBack ){
CHECKED_ELSE(ms::selector.Slot() == 0xff){ CHECKED_ELSE(ms::selector.Slot() == 0xff){
WARN("ms::selector.Slot() != 0xff");
return false; return false;
} }
CHECKED_ELSE(ms::selector.HomingValid() == false){ CHECKED_ELSE(ms::selector.HomingValid() == false){
WARN("ms::selector.Slot() != 0xff");
return false; return false;
} }
} }
CHECKED_ELSE(mf::finda.Pressed() == findaPressed) { CHECKED_ELSE(mf::finda.Pressed() == findaPressed) {
WARN("mf::finda.Pressed() != findaPressed");
return false; return false;
} }
CHECKED_ELSE(mm::PulleyEnabled() == pulleyEnabled){ CHECKED_ELSE(mm::PulleyEnabled() == pulleyEnabled){
WARN("mm::PulleyEnabled() != pulleyEnabled");
return false; return false;
} }
@ -66,19 +84,23 @@ bool VerifyEnvironmentState(mg::FilamentLoadState fls, uint8_t idlerSlotIndex, u
// the other LEDs should be off // the other LEDs should be off
auto red = ml::leds.Mode(ledIndex, ml::red); auto red = ml::leds.Mode(ledIndex, ml::red);
CHECKED_ELSE(red == ml::off) { CHECKED_ELSE(red == ml::off) {
WARN("red != ml::off");
return false; return false;
} }
auto green = ml::leds.Mode(ledIndex, ml::green); auto green = ml::leds.Mode(ledIndex, ml::green);
CHECKED_ELSE(green == ml::off) { CHECKED_ELSE(green == ml::off) {
WARN("green != ml::off");
return false; return false;
} }
} else { } else {
auto red = ml::leds.Mode(selectorSlotIndex, ml::red); auto red = ml::leds.Mode(selectorSlotIndex, ml::red);
CHECKED_ELSE(red == redLEDMode) { CHECKED_ELSE(red == redLEDMode) {
WARN("red != redLEDMode");
return false; return false;
} }
auto green = ml::leds.Mode(selectorSlotIndex, ml::green); auto green = ml::leds.Mode(selectorSlotIndex, ml::green);
CHECKED_ELSE(green == greenLEDMode) { CHECKED_ELSE(green == greenLEDMode) {
WARN("green != greenLEDMode");
return false; return false;
} }
} }
@ -91,7 +113,9 @@ template<typename SM>
bool VerifyState(SM &uf, mg::FilamentLoadState fls, uint8_t idlerSlotIndex, uint8_t selectorSlotIndex, bool VerifyState(SM &uf, mg::FilamentLoadState fls, uint8_t idlerSlotIndex, uint8_t selectorSlotIndex,
bool findaPressed, bool pulleyEnabled, ml::Mode greenLEDMode, ml::Mode redLEDMode, ErrorCode err, ProgressCode topLevelProgress) { bool findaPressed, bool pulleyEnabled, ml::Mode greenLEDMode, ml::Mode redLEDMode, ErrorCode err, ProgressCode topLevelProgress) {
VerifyEnvironmentState(fls, idlerSlotIndex, selectorSlotIndex, findaPressed, pulleyEnabled, greenLEDMode, redLEDMode); CHECKED_ELSE(VerifyEnvironmentState(fls, idlerSlotIndex, selectorSlotIndex, findaPressed, pulleyEnabled, greenLEDMode, redLEDMode)) {
return false;
}
CHECKED_ELSE(uf.Error() == err) { CHECKED_ELSE(uf.Error() == err) {
return false; return false;