mirror of
https://github.com/bdring/Grbl_Esp32.git
synced 2025-09-01 02:21:46 +02:00
Fixed ConfigAlarm
It was locking the system with a confusing message that looked like an ordinary alarm, could not be cleared, and prevented actions that could fix it. I also enhanced $T to show the name of the system state in addition to the magic number.
This commit is contained in:
@@ -222,7 +222,7 @@ Error toggle_check_mode(const char* value, WebUI::AuthenticationLevel auth_level
|
|||||||
return Error::Ok;
|
return Error::Ok;
|
||||||
}
|
}
|
||||||
Error disable_alarm_lock(const char* value, WebUI::AuthenticationLevel auth_level, WebUI::ESPResponseStream* out) {
|
Error disable_alarm_lock(const char* value, WebUI::AuthenticationLevel auth_level, WebUI::ESPResponseStream* out) {
|
||||||
if (sys.state == State::Alarm) {
|
if (sys.state == State::Alarm || sys.state == State::ConfigAlarm) {
|
||||||
// Block if safety door is ajar.
|
// Block if safety door is ajar.
|
||||||
if (config->_control->system_check_safety_door_ajar()) {
|
if (config->_control->system_check_safety_door_ajar()) {
|
||||||
return Error::CheckDoor;
|
return Error::CheckDoor;
|
||||||
@@ -334,9 +334,15 @@ Error restore_settings(const char* value, WebUI::AuthenticationLevel auth_level,
|
|||||||
}
|
}
|
||||||
|
|
||||||
Error showState(const char* value, WebUI::AuthenticationLevel auth_level, WebUI::ESPResponseStream* out) {
|
Error showState(const char* value, WebUI::AuthenticationLevel auth_level, WebUI::ESPResponseStream* out) {
|
||||||
grbl_sendf(out->client(), "State 0x%x\r\n", sys.state);
|
const char* name;
|
||||||
|
const State state = sys.state;
|
||||||
|
auto it = StateName.find(state);
|
||||||
|
name = it == StateName.end() ? "<invalid>" : it->second;
|
||||||
|
|
||||||
|
grbl_sendf(out->client(), "State %d (%s)\r\n", state, name);
|
||||||
return Error::Ok;
|
return Error::Ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error doJog(const char* value, WebUI::AuthenticationLevel auth_level, WebUI::ESPResponseStream* out) {
|
Error doJog(const char* value, WebUI::AuthenticationLevel auth_level, WebUI::ESPResponseStream* out) {
|
||||||
// For jogging, you must give gc_execute_line() a line that
|
// For jogging, you must give gc_execute_line() a line that
|
||||||
// begins with $J=. There are several ways we can get here,
|
// begins with $J=. There are several ways we can get here,
|
||||||
@@ -357,6 +363,9 @@ const char* alarmString(ExecAlarm alarmNumber) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Error listAlarms(const char* value, WebUI::AuthenticationLevel auth_level, WebUI::ESPResponseStream* out) {
|
Error listAlarms(const char* value, WebUI::AuthenticationLevel auth_level, WebUI::ESPResponseStream* out) {
|
||||||
|
if (sys_rt_exec_alarm != ExecAlarm::None) {
|
||||||
|
grbl_sendf(out->client(), "Active alarm: %d (%s)\r\n", int(sys_rt_exec_alarm), alarmString(sys_rt_exec_alarm));
|
||||||
|
}
|
||||||
if (value) {
|
if (value) {
|
||||||
char* endptr = NULL;
|
char* endptr = NULL;
|
||||||
uint8_t alarmNumber = strtol(value, &endptr, 10);
|
uint8_t alarmNumber = strtol(value, &endptr, 10);
|
||||||
|
@@ -138,7 +138,7 @@ void protocol_main_loop() {
|
|||||||
// NOTE: Sleep mode disables the stepper drivers and position can't be guaranteed.
|
// NOTE: Sleep mode disables the stepper drivers and position can't be guaranteed.
|
||||||
// Re-initialize the sleep state as an ALARM mode to ensure user homes or acknowledges.
|
// Re-initialize the sleep state as an ALARM mode to ensure user homes or acknowledges.
|
||||||
if (sys.state == State::ConfigAlarm) {
|
if (sys.state == State::ConfigAlarm) {
|
||||||
report_feedback_message(Message::AlarmLock);
|
report_feedback_message(Message::ConfigAlarmLock);
|
||||||
} else if (sys.state == State::Alarm || sys.state == State::Sleep) {
|
} else if (sys.state == State::Alarm || sys.state == State::Sleep) {
|
||||||
report_feedback_message(Message::AlarmLock);
|
report_feedback_message(Message::AlarmLock);
|
||||||
sys.state = State::Alarm; // Ensure alarm state is set.
|
sys.state = State::Alarm; // Ensure alarm state is set.
|
||||||
|
@@ -283,6 +283,7 @@ std::map<Message, const char*> MessageText = {
|
|||||||
{ Message::RestoreDefaults, "Restoring defaults" },
|
{ Message::RestoreDefaults, "Restoring defaults" },
|
||||||
{ Message::SpindleRestore, "Restoring spindle" },
|
{ Message::SpindleRestore, "Restoring spindle" },
|
||||||
{ Message::SleepMode, "Sleeping" },
|
{ Message::SleepMode, "Sleeping" },
|
||||||
|
{ Message::ConfigAlarmLock, "Configuration error - '$X' to unlock" },
|
||||||
// Handled separately due to numeric argument
|
// Handled separately due to numeric argument
|
||||||
// { Message::SdFileQuit, "Reset during SD file at line: %d" },
|
// { Message::SdFileQuit, "Reset during SD file at line: %d" },
|
||||||
};
|
};
|
||||||
@@ -297,8 +298,7 @@ void report_feedback_message(Message message) { // ok to send to all clients
|
|||||||
grbl_notifyf("SD print canceled", "Reset during SD file at line: %d", config->_sdCard->get_current_line_number());
|
grbl_notifyf("SD print canceled", "Reset during SD file at line: %d", config->_sdCard->get_current_line_number());
|
||||||
info_serial("Reset during SD file at line: %d", config->_sdCard->get_current_line_number());
|
info_serial("Reset during SD file at line: %d", config->_sdCard->get_current_line_number());
|
||||||
|
|
||||||
} else
|
} else {
|
||||||
{
|
|
||||||
auto it = MessageText.find(message);
|
auto it = MessageText.find(message);
|
||||||
if (it != MessageText.end()) {
|
if (it != MessageText.end()) {
|
||||||
info_serial(it->second);
|
info_serial(it->second);
|
||||||
|
@@ -47,6 +47,7 @@ enum class Message : uint8_t {
|
|||||||
RestoreDefaults = 9,
|
RestoreDefaults = 9,
|
||||||
SpindleRestore = 10,
|
SpindleRestore = 10,
|
||||||
SleepMode = 11,
|
SleepMode = 11,
|
||||||
|
ConfigAlarmLock = 12,
|
||||||
SdFileQuit = 60, // mc_reset was called during an SD job
|
SdFileQuit = 60, // mc_reset was called during an SD job
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -10,7 +10,7 @@ bool idleOrJog() {
|
|||||||
return sys.state != State::Idle && sys.state != State::Jog;
|
return sys.state != State::Idle && sys.state != State::Jog;
|
||||||
}
|
}
|
||||||
bool idleOrAlarm() {
|
bool idleOrAlarm() {
|
||||||
return sys.state != State::Idle && sys.state != State::Alarm;
|
return sys.state != State::Idle && sys.state != State::Alarm && sys.state != State::ConfigAlarm;
|
||||||
}
|
}
|
||||||
bool notCycleOrHold() {
|
bool notCycleOrHold() {
|
||||||
return sys.state == State::Cycle && sys.state == State::Hold;
|
return sys.state == State::Cycle && sys.state == State::Hold;
|
||||||
|
@@ -214,3 +214,16 @@ void __attribute__((weak)) user_defined_macro(uint8_t index) {
|
|||||||
strcat(line, "\r");
|
strcat(line, "\r");
|
||||||
WebUI::inputBuffer.push(line);
|
WebUI::inputBuffer.push(line);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::map<State, const char*> StateName = {
|
||||||
|
{ State::Idle, "Idle" },
|
||||||
|
{ State::Alarm, "Alarm" },
|
||||||
|
{ State::CheckMode, "CheckMode" },
|
||||||
|
{ State::Homing, "Homing" },
|
||||||
|
{ State::Cycle, "Cycle" },
|
||||||
|
{ State::Hold, "Hold" },
|
||||||
|
{ State::Jog, "Jog" },
|
||||||
|
{ State::SafetyDoor, "SafetyDoor" },
|
||||||
|
{ State::Sleep, "Sleep" },
|
||||||
|
{ State::ConfigAlarm, "ConfigAlarm" },
|
||||||
|
};
|
||||||
|
@@ -43,6 +43,8 @@ enum class State : uint8_t {
|
|||||||
ConfigAlarm, // You can't do anything but fix your config file.
|
ConfigAlarm, // You can't do anything but fix your config file.
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern std::map<State, const char*> StateName;
|
||||||
|
|
||||||
// Step segment generator state flags.
|
// Step segment generator state flags.
|
||||||
struct StepControl {
|
struct StepControl {
|
||||||
uint8_t endMotion : 1;
|
uint8_t endMotion : 1;
|
||||||
|
Reference in New Issue
Block a user