case 115: { // M115 Get firmware version and capabilities
Version vers;
- new_message.stream->printf("FIRMWARE_NAME:Smoothieware, FIRMWARE_URL:http%%3A//smoothieware.org, X-SOURCE_CODE_URL:https://github.com/Smoothieware/Smoothieware, FIRMWARE_VERSION:%s, X-FIRMWARE_BUILD_DATE:%s, X-SYSTEM_CLOCK:%ldMHz, X-AXES:%d", vers.get_build(), vers.get_build_date(), SystemCoreClock / 1000000, MAX_ROBOT_ACTUATORS);
+ new_message.stream->printf("FIRMWARE_NAME:Smoothieware, FIRMWARE_URL:http%%3A//smoothieware.org, X-SOURCE_CODE_URL:https://github.com/Smoothieware/Smoothieware, FIRMWARE_VERSION:%s, X-FIRMWARE_BUILD_DATE:%s, X-SYSTEM_CLOCK:%ldMHz, X-AXES:%d, X-GRBL_MODE:%d", vers.get_build(), vers.get_build_date(), SystemCoreClock / 1000000, MAX_ROBOT_ACTUATORS, THEKERNEL->is_grbl_mode());
#ifdef CNC
new_message.stream->printf(", X-CNC:1");
{
switch ( line ) {
case 0: THEPANEL->lcd->printf("DRO"); break;
- case 1: if(THEKERNEL->is_halted()) THEPANEL->lcd->printf("Clear HALT"); else THEPANEL->lcd->printf(THEPANEL->is_playing() ? "Abort" : "Play"); break;
+ case 1: if(THEKERNEL->is_halted()) THEPANEL->lcd->printf("Clear HALT");
+ else if(THEKERNEL->get_feed_hold()) THEPANEL->lcd->printf("Clear Hold");
+ else THEPANEL->lcd->printf(THEPANEL->is_playing() ? "Abort" : "Play"); break;
case 2: THEPANEL->lcd->printf("Jog"); break;
case 3: THEPANEL->lcd->printf("Prepare"); break;
case 4: THEPANEL->lcd->printf("Custom"); break;
case 0: THEPANEL->enter_screen(this->watch_screen); break;
case 1:
if(THEKERNEL->is_halted()){
- send_command("M999");
+ THEKERNEL->call_event(ON_HALT, (void *)1); // clears on_halt
+ THEPANEL->enter_screen(this->watch_screen);
+ }else if(THEKERNEL->get_feed_hold()){
+ THEKERNEL->set_feed_hold(false);
THEPANEL->enter_screen(this->watch_screen);
}else if(THEPANEL->is_playing()) abort_playing();
else THEPANEL->enter_screen(this->file_screen); break;
if (THEKERNEL->is_halted())
return "ALARM";
- if (THEPANEL->is_suspended() /*|| THEKERNEL->get_feed_hold()*/)
+ if (THEKERNEL->get_feed_hold())
+ return "Hold";
+
+ if (THEPANEL->is_suspended())
return "Suspended";
if (THEPANEL->is_playing())