From c0924f98f42c454667e3bd2492d282975e0a32dc Mon Sep 17 00:00:00 2001 From: AJ Quick Date: Fri, 4 Aug 2023 11:15:52 -0600 Subject: [PATCH 01/13] Update GPIOPinDetail.cpp Moves pins 9 and 10 to no longer be restricted due to being available on some ESP32 chips. Reference: #984 --- FluidNC/src/Pins/GPIOPinDetail.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Pins/GPIOPinDetail.cpp b/FluidNC/src/Pins/GPIOPinDetail.cpp index fa1c428d0..b10172c2e 100644 --- a/FluidNC/src/Pins/GPIOPinDetail.cpp +++ b/FluidNC/src/Pins/GPIOPinDetail.cpp @@ -29,6 +29,8 @@ namespace Pins { PinCapabilities::UART; case 5: + case 9: + case 10: case 16: case 17: case 18: @@ -62,8 +64,6 @@ namespace Pins { case 6: // SPI flash integrated case 7: case 8: - case 9: - case 10: case 11: return PinCapabilities::Reserved; From bae0a69b6cfdc0457c938a7bfa61b5830950a101 Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 5 Sep 2023 09:58:06 -0600 Subject: [PATCH 02/13] Update index.html.gz Update for probing fixes --- FluidNC/data/index.html.gz | Bin 116672 -> 116654 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index a0df5fdf4ecd923cdb39f369c598ddc045b54075..dca26bf73aaab9acffb4db6c6483efdf5eba69f6 100644 GIT binary patch delta 44421 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 delta 44453 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 Ne*x>&Gph1L2ml@UDy{$k From 0ab99db8627943e1c5e2dd2bfe2a80cb9585a439 Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 5 Sep 2023 10:05:18 -0600 Subject: [PATCH 03/13] Revert "Merge branch 'Devt' of https://github.com/bdring/FluidNC into Devt" This reverts commit 48ee3293a0ceb37aa8f2c480fce9417d96cf1dd0, reversing changes made to bae0a69b6cfdc0457c938a7bfa61b5830950a101. --- FluidNC/src/Error.cpp | 1 - FluidNC/src/Error.h | 1 - FluidNC/src/GCode.cpp | 3 --- FluidNC/src/Machine/Macros.cpp | 24 ++++++++---------- FluidNC/src/Machine/Macros.h | 24 +++++++++--------- FluidNC/src/WebUI/TelnetServer.cpp | 8 +++--- FluidNC/src/WebUI/WebServer.cpp | 6 ++--- FluidNC/src/WebUI/WifiConfig.cpp | 40 ++++++++---------------------- FluidNC/src/WebUI/WifiConfig.h | 5 ---- FluidNC/src/WebUI/WifiServices.cpp | 2 +- 10 files changed, 41 insertions(+), 73 deletions(-) diff --git a/FluidNC/src/Error.cpp b/FluidNC/src/Error.cpp index 45de5ab93..7722f3d2c 100644 --- a/FluidNC/src/Error.cpp +++ b/FluidNC/src/Error.cpp @@ -68,7 +68,6 @@ std::map ErrorNames = { { Error::AuthenticationFailed, "Authentication failed!" }, { Error::Eol, "End of line" }, { Error::Eof, "End of file" }, - { Error::Reset, "System Reset" }, { Error::AnotherInterfaceBusy, "Another interface is busy" }, { Error::BadPinSpecification, "Bad Pin Specification" }, { Error::JogCancelled, "Jog Cancelled" }, diff --git a/FluidNC/src/Error.h b/FluidNC/src/Error.h index 590c5a816..a8387b25e 100644 --- a/FluidNC/src/Error.h +++ b/FluidNC/src/Error.h @@ -72,7 +72,6 @@ enum class Error : uint8_t { AuthenticationFailed = 110, Eol = 111, Eof = 112, // Not necessarily an error - Reset = 113, AnotherInterfaceBusy = 120, JogCancelled = 130, BadPinSpecification = 150, diff --git a/FluidNC/src/GCode.cpp b/FluidNC/src/GCode.cpp index 1ea5e722a..3d74db282 100644 --- a/FluidNC/src/GCode.cpp +++ b/FluidNC/src/GCode.cpp @@ -1620,9 +1620,6 @@ Error gc_execute_line(char* line) { // As far as the parser is concerned, the position is now == target. In reality the // motion control system might still be processing the action and the real tool position // in any intermediate location. - if (sys.abort) { - return Error::Reset; - } if (gc_update_pos == GCUpdatePos::Target) { copyAxes(gc_state.position, gc_block.values.xyz); } else if (gc_update_pos == GCUpdatePos::System) { diff --git a/FluidNC/src/Machine/Macros.cpp b/FluidNC/src/Machine/Macros.cpp index 2284ae0d0..f58379e73 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -6,17 +6,20 @@ #include "src/System.h" // sys #include "src/Machine/MachineConfig.h" // config -Macro::Macro(const char* name) : _name(name) {} - void MacroEvent::run(void* arg) { - config->_macros->_macro[_num].run(); + int n = int(arg); + if (sys.state != State::Idle) { + log_error("Macro can only be used in idle state"); + return; + } + config->_macros->_macro[n].run(); } -Macro Macros::_startup_line[n_startup_lines] = { "startup_line0", "startup_line1" }; -Macro Macros::_macro[n_macros] = { "macro0", "macro1", "macro2", "macro3", "macro4" }; -Macro Macros::_after_homing { "after_homing" }; -Macro Macros::_after_reset { "after_reset" }; -Macro Macros::_after_unlock { "after_unlock" }; +Macro Macros::_startup_line[n_startup_lines] = { { "startup_line0" }, { "startup_line1" } }; +Macro Macros::_macro[n_macros] = { { "macro0" }, { "macro1" }, { "macro2" }, { "macro3" } }; +Macro Macros::_after_homing = { "after_homing" }; +Macro Macros::_after_reset = { "after_reset" }; +Macro Macros::_after_unlock = { "after_unlock" }; MacroEvent macro0Event { 0 }; MacroEvent macro1Event { 1 }; @@ -51,11 +54,6 @@ Cmd findOverride(std::string name) { } bool Macro::run() { - if (sys.state != State::Idle) { - log_error("Macro can only be used in idle state"); - return false; - } - const std::string& s = _gcode; if (_gcode == "") { return true; diff --git a/FluidNC/src/Machine/Macros.h b/FluidNC/src/Machine/Macros.h index ec117fa1e..a462bc0c6 100644 --- a/FluidNC/src/Machine/Macros.h +++ b/FluidNC/src/Machine/Macros.h @@ -27,15 +27,15 @@ namespace Machine { class Macro { public: std::string _gcode; - const char* _name; - Macro(const char* name); + std::string _name; + Macro(const char* name) : _name(name) {} bool run(); }; class Macros : public Configuration::Configurable { public: static const int n_startup_lines = 2; - static const int n_macros = 5; + static const int n_macros = 4; static Macro _macro[n_macros]; static Macro _startup_line[n_startup_lines]; @@ -50,15 +50,15 @@ namespace Machine { // TODO: We could validate the startup lines void group(Configuration::HandlerBase& handler) override { - handler.item(_startup_line[0]._name, _startup_line[0]._gcode); - handler.item(_startup_line[1]._name, _startup_line[1]._gcode); - handler.item(_macro[0]._name, _macro[0]._gcode); - handler.item(_macro[1]._name, _macro[1]._gcode); - handler.item(_macro[2]._name, _macro[2]._gcode); - handler.item(_macro[3]._name, _macro[3]._gcode); - handler.item(_after_homing._name, _after_homing._gcode); - handler.item(_after_reset._name, _after_reset._gcode); - handler.item(_after_unlock._name, _after_unlock._gcode); + handler.item(_startup_line[0]._name.c_str(), _startup_line[0]._gcode); + handler.item(_startup_line[1]._name.c_str(), _startup_line[1]._gcode); + handler.item(_macro[0]._name.c_str(), _macro[0]._gcode); + handler.item(_macro[1]._name.c_str(), _macro[1]._gcode); + handler.item(_macro[2]._name.c_str(), _macro[2]._gcode); + handler.item(_macro[3]._name.c_str(), _macro[3]._gcode); + handler.item(_after_homing._name.c_str(), _after_homing._gcode); + handler.item(_after_reset._name.c_str(), _after_reset._gcode); + handler.item(_after_unlock._name.c_str(), _after_unlock._gcode); } ~Macros() {} diff --git a/FluidNC/src/WebUI/TelnetServer.cpp b/FluidNC/src/WebUI/TelnetServer.cpp index 4f00c486c..f8329f9a2 100644 --- a/FluidNC/src/WebUI/TelnetServer.cpp +++ b/FluidNC/src/WebUI/TelnetServer.cpp @@ -9,14 +9,14 @@ #ifdef ENABLE_WIFI namespace WebUI { - TelnetServer telnetServer __attribute__((init_priority(107))); + TelnetServer telnetServer __attribute__((init_priority(107))) ; } # include "WifiServices.h" # include "WifiConfig.h" # include "../Report.h" // report_init_message() -# include "Commands.h" // COMMANDS +# include "Commands.h" // COMMANDS # include @@ -50,9 +50,7 @@ namespace WebUI { _setupdone = true; //add mDNS - if (WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { - MDNS.addService("telnet", "tcp", _port); - } + MDNS.addService("telnet", "tcp", _port); return no_error; } diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 8710c7cd0..2c0bf3e89 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -58,7 +58,7 @@ namespace WebUI { static const char LOCATION_HEADER[] = "Location"; - Web_Server webServer __attribute__((init_priority(108))); + Web_Server webServer __attribute__((init_priority(108))) ; bool Web_Server::_setupdone = false; uint16_t Web_Server::_port = 0; @@ -159,7 +159,7 @@ namespace WebUI { } //SSDP service presentation - if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { + if (WiFi.getMode() == WIFI_STA) { _webserver->on("/description.xml", HTTP_GET, handle_SSDP); //Add specific for SSDP SSDP.setSchemaURL("description.xml"); @@ -185,7 +185,7 @@ namespace WebUI { _webserver->begin(); //add mDNS - if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { + if (WiFi.getMode() == WIFI_STA) { MDNS.addService("http", "tcp", _port); } diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index 49c542e58..6798fc4f2 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -8,14 +8,14 @@ #include #include -WebUI::WiFiConfig wifi_config __attribute__((init_priority(109))); +WebUI::WiFiConfig wifi_config __attribute__((init_priority(109))) ; #ifdef ENABLE_WIFI # include "../Config.h" # include "../Main.h" -# include "Commands.h" // COMMANDS -# include "WifiServices.h" // wifi_services.start() etc. -# include "WebSettings.h" // split_params(), get_params() +# include "Commands.h" // COMMANDS +# include "WifiServices.h" // wifi_services.start() etc. +# include "WebSettings.h" // split_params(), get_params() # include "WebServer.h" // webServer.port() # include "TelnetServer.h" // telnetServer @@ -114,7 +114,6 @@ namespace WebUI { IPaddrSetting* wifi_sta_ip; IPaddrSetting* wifi_sta_gateway; IPaddrSetting* wifi_sta_netmask; - EnumSetting* wifi_sta_ssdp; StringSetting* wifi_ap_ssid; StringSetting* wifi_ap_password; @@ -140,14 +139,7 @@ namespace WebUI { { "WPA2-ENTERPRISE", WIFI_AUTH_WPA2_ENTERPRISE }, }; - enum_opt_t staSsdpModeOptions = { - { "Enable", SSDP_ENABLED }, - { "Disabled", SSDP_DISABLED }, - }; - - static void print_mac(Channel& out, const char* prefix, const char* mac) { - log_to(out, prefix, " (" << mac << ")"); - } + static void print_mac(Channel& out, const char* prefix, const char* mac) { log_to(out, prefix, " (" << mac << ")"); } static Error showIP(char* parameter, AuthenticationLevel auth_level, Channel& out) { // ESP111 log_to(out, parameter, IP_string(WiFi.getMode() == WIFI_STA ? WiFi.localIP() : WiFi.softAPIP())); @@ -346,9 +338,7 @@ namespace WebUI { MAX_PASSWORD_LENGTH, (bool (*)(char*))WiFiConfig::isPasswordValid); wifi_ap_ssid = new StringSetting("AP SSID", WEBSET, WA, "ESP105", "AP/SSID", DEFAULT_AP_SSID, MIN_SSID_LENGTH, MAX_SSID_LENGTH, NULL); - wifi_ap_country = new EnumSetting("AP regulatory domain", WEBSET, WA, NULL, "AP/Country", WiFiCountry01, &wifiContryOptions, NULL); - wifi_sta_ssdp = - new EnumSetting("SSDP and mDNS enable", WEBSET, WA, NULL, "Sta/SSDP/Enable", DEFAULT_STA_SSDP_MODE, &onoffOptions, NULL); + wifi_ap_country = new EnumSetting("AP regulatory domain", WEBSET, WA, NULL, "AP/Country", WiFiCountry01, &wifiContryOptions, NULL); wifi_sta_netmask = new IPaddrSetting("Station Static Mask", WEBSET, WA, NULL, "Sta/Netmask", DEFAULT_STA_MK, NULL); wifi_sta_gateway = new IPaddrSetting("Station Static Gateway", WEBSET, WA, NULL, "Sta/Gateway", DEFAULT_STA_GW, NULL); wifi_sta_ip = new IPaddrSetting("Station Static IP", WEBSET, WA, NULL, "Sta/IP", DEFAULT_STA_IP, NULL); @@ -787,9 +777,7 @@ namespace WebUI { /** * End WiFi */ - void WiFiConfig::end() { - StopWiFi(); - } + void WiFiConfig::end() { StopWiFi(); } /** * Reset ESP @@ -809,16 +797,12 @@ namespace WebUI { } log_info("WiFi reset done"); } - bool WiFiConfig::isOn() { - return !(WiFi.getMode() == WIFI_MODE_NULL); - } + bool WiFiConfig::isOn() { return !(WiFi.getMode() == WIFI_MODE_NULL); } /** * Handle not critical actions that must be done in sync environment */ - void WiFiConfig::handle() { - wifi_services.handle(); - } + void WiFiConfig::handle() { wifi_services.handle(); } // Used by js/scanwifidlg.js Error WiFiConfig::listAPs(char* parameter, AuthenticationLevel auth_level, Channel& out) { // ESP410 @@ -832,7 +816,7 @@ namespace WebUI { case -2: // Scan not triggered WiFi.scanNetworks(true); // Begin async scan break; - case -1: // Scan in progress + case -1: // Scan in progress break; default: for (int i = 0; i < n; ++i) { @@ -857,8 +841,6 @@ namespace WebUI { return Error::Ok; } - WiFiConfig::~WiFiConfig() { - end(); - } + WiFiConfig::~WiFiConfig() { end(); } } #endif diff --git a/FluidNC/src/WebUI/WifiConfig.h b/FluidNC/src/WebUI/WifiConfig.h index b13a1d0c1..ad818e294 100644 --- a/FluidNC/src/WebUI/WifiConfig.h +++ b/FluidNC/src/WebUI/WifiConfig.h @@ -41,9 +41,6 @@ namespace WebUI { static const int DHCP_MODE = 0; static const int STATIC_MODE = 1; - static const int SSDP_DISABLED = 0; - static const int SSDP_ENABLED = 1; - //defaults values static const char* DEFAULT_HOSTNAME = "fluidnc"; static const char* DEFAULT_STA_SSID = ""; @@ -59,7 +56,6 @@ namespace WebUI { static const int DEFAULT_STA_MIN_SECURITY = WIFI_AUTH_WPA2_PSK; static const int DEFAULT_STA_IP_MODE = DHCP_MODE; - static const int DEFAULT_STA_SSDP_MODE = SSDP_ENABLED; static const char* HIDDEN_PASSWORD = "********"; //boundaries @@ -128,7 +124,6 @@ namespace WebUI { extern IPaddrSetting* wifi_sta_ip; extern IPaddrSetting* wifi_sta_gateway; extern IPaddrSetting* wifi_sta_netmask; - extern EnumSetting* wifi_sta_ssdp; extern StringSetting* wifi_ap_ssid; extern StringSetting* wifi_ap_password; diff --git a/FluidNC/src/WebUI/WifiServices.cpp b/FluidNC/src/WebUI/WifiServices.cpp index b0ff51f0e..d01a002c6 100644 --- a/FluidNC/src/WebUI/WifiServices.cpp +++ b/FluidNC/src/WebUI/WifiServices.cpp @@ -82,7 +82,7 @@ namespace WebUI { }); ArduinoOTA.begin(); //no need in AP mode - if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { + if (WiFi.getMode() == WIFI_STA) { //start mDns const char* h = wifi_hostname->get(); if (!MDNS.begin(h)) { From 4841bf56322484a0e1a6ad83b454d7828f4b6982 Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 5 Sep 2023 10:05:34 -0600 Subject: [PATCH 04/13] Revert "Update index.html.gz" This reverts commit bae0a69b6cfdc0457c938a7bfa61b5830950a101. --- FluidNC/data/index.html.gz | Bin 116654 -> 116672 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index dca26bf73aaab9acffb4db6c6483efdf5eba69f6..a0df5fdf4ecd923cdb39f369c598ddc045b54075 100644 GIT binary patch delta 44453 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 Ne*x>&Gph1L2ml@UDy{$k delta 44421 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 From 93048392bf1996354a65de82d519b6aea86482bb Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 6 Sep 2023 19:17:34 -1000 Subject: [PATCH 05/13] Store startup log in RTC DRAM ... so it can be preserved across panic resets --- FluidNC/esp32/StartupLog.cpp | 52 +++++++++++++++++++++++++++++++++ FluidNC/src/Main.cpp | 2 ++ FluidNC/src/ProcessSettings.cpp | 2 +- FluidNC/src/StartupLog.cpp | 21 ------------- FluidNC/src/StartupLog.h | 13 ++++----- 5 files changed, 60 insertions(+), 30 deletions(-) create mode 100644 FluidNC/esp32/StartupLog.cpp delete mode 100644 FluidNC/src/StartupLog.cpp diff --git a/FluidNC/esp32/StartupLog.cpp b/FluidNC/esp32/StartupLog.cpp new file mode 100644 index 000000000..034e10d2b --- /dev/null +++ b/FluidNC/esp32/StartupLog.cpp @@ -0,0 +1,52 @@ +// Copyright (c) 2023 - Mitch Bradley +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#include "src/StartupLog.h" +#include "src/Protocol.h" // send_line() +#include + +// The startup log is stored in RTC RAM that is preserved across +// resets. That lets us show the previous startup log if the +// system panics and resets. + +// The size is limited by the size of RTC RAM minus system usage thereof +static const size_t _maxlen = 7000; +static RTC_NOINIT_ATTR char _messages[_maxlen]; +static RTC_NOINIT_ATTR size_t _len; +static bool _paniced; + +void StartupLog::init() { + if (esp_reset_reason() == ESP_RST_PANIC) { + _paniced = true; + } else { + _paniced = false; + _len = 0; + } +} +size_t StartupLog::write(uint8_t data) { + if (_paniced || _len >= _maxlen) { + return 0; + } + _messages[_len++] = (char)data; + return 1; +} +void StartupLog::dump(Channel& out) { + if (_paniced) { + log_error_to(out, "Showing startup log from previous panic"); + } + for (size_t i = 0; i < _len;) { + std::string line; + while (i < _len) { + char c = _messages[i++]; + if (c == '\n') { + break; + } + line += c; + } + log_to(out, line); + } +} + +StartupLog::~StartupLog() {} + +StartupLog startupLog; diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index 6da6ed47e..aed6a8608 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -34,6 +34,8 @@ void setup() { uartInit(); // Setup serial port Uart0.println(); // create some white space after ESP32 boot info + StartupLog::init(); + // Setup input polling loop after loading the configuration, // because the polling may depend on the config allChannels.init(); diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 467556244..4c2a29dab 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -705,7 +705,7 @@ static Error showChannelInfo(const char* value, WebUI::AuthenticationLevel auth_ } static Error showStartupLog(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { - startupLog.dump(out); + StartupLog::dump(out); return Error::Ok; } diff --git a/FluidNC/src/StartupLog.cpp b/FluidNC/src/StartupLog.cpp deleted file mode 100644 index 0e36e71fb..000000000 --- a/FluidNC/src/StartupLog.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "StartupLog.h" -#include -#include "Protocol.h" // send_line() - -size_t StartupLog::write(uint8_t data) { - _messages += (char)data; - return 1; -} -std::string StartupLog::messages() { - return _messages; -} -void StartupLog::dump(Channel& out) { - std::istringstream iss(_messages); - for (std::string line; std::getline(iss, line);) { - log_to(out, line); - } -} - -StartupLog::~StartupLog() {} - -StartupLog startupLog("Startup Log"); diff --git a/FluidNC/src/StartupLog.h b/FluidNC/src/StartupLog.h index 51176a2e8..fd678f127 100644 --- a/FluidNC/src/StartupLog.h +++ b/FluidNC/src/StartupLog.h @@ -6,19 +6,16 @@ #include "Config.h" #include "Channel.h" -#include class StartupLog : public Channel { -private: - std::string _messages; - public: - StartupLog(const char* name) : Channel(name) {} + StartupLog() : Channel("Startup Log") {} virtual ~StartupLog(); - size_t write(uint8_t data) override; - std::string messages(); - void dump(Channel& channel); + size_t write(uint8_t data) override; + + static void init(); + static void dump(Channel& channel); }; extern StartupLog startupLog; From 1ee2b2504a7b64ec16e4f9684256d420733c971e Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 8 Sep 2023 14:22:08 -0500 Subject: [PATCH 06/13] Basic functionality. --- FluidNC/src/Machine/MachineConfig.cpp | 1 + FluidNC/src/Machine/MachineConfig.h | 2 + FluidNC/src/Main.cpp | 4 ++ FluidNC/src/Status_outputs.cpp | 86 +++++++++++++++++++++++++++ FluidNC/src/Status_outputs.h | 58 ++++++++++++++++++ 5 files changed, 151 insertions(+) create mode 100644 FluidNC/src/Status_outputs.cpp create mode 100644 FluidNC/src/Status_outputs.h diff --git a/FluidNC/src/Machine/MachineConfig.cpp b/FluidNC/src/Machine/MachineConfig.cpp index 170030ddb..21f461066 100644 --- a/FluidNC/src/Machine/MachineConfig.cpp +++ b/FluidNC/src/Machine/MachineConfig.cpp @@ -66,6 +66,7 @@ namespace Machine { handler.section("user_outputs", _userOutputs); handler.section("oled", _oled); + handler.section("status_outputs", _stat_out); Spindles::SpindleFactory::factory(handler, _spindles); diff --git a/FluidNC/src/Machine/MachineConfig.h b/FluidNC/src/Machine/MachineConfig.h index 9541141bc..9f33ae328 100644 --- a/FluidNC/src/Machine/MachineConfig.h +++ b/FluidNC/src/Machine/MachineConfig.h @@ -20,6 +20,7 @@ #include "../Stepper.h" #include "../Config.h" #include "../OLED.h" +#include "../Status_outputs.h" #include "Axes.h" #include "SPIBus.h" #include "I2CBus.h" @@ -74,6 +75,7 @@ namespace Machine { Start* _start = nullptr; Parking* _parking = nullptr; OLED* _oled = nullptr; + Status_Outputs* _stat_out = nullptr; Spindles::SpindleList _spindles; UartChannel* _uart_channels[MAX_N_UARTS] = { nullptr }; diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index 6da6ed47e..2e47ccc3e 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -96,6 +96,10 @@ void setup() { config->_oled->init(); } + if (config->_stat_out) { + config->_stat_out->init(); + } + config->_stepping->init(); // Configure stepper interrupt timers plan_init(); diff --git a/FluidNC/src/Status_outputs.cpp b/FluidNC/src/Status_outputs.cpp new file mode 100644 index 000000000..f1034ee82 --- /dev/null +++ b/FluidNC/src/Status_outputs.cpp @@ -0,0 +1,86 @@ +// Copyright (c) 2023 - Bart Dring +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +/* + This is a class for status "Idle,Run,Hold,Alarm" pins. + + This can be used for Tower lights,etc. +*/ +#include "Status_outputs.h" + +#include "Machine/MachineConfig.h" + +void Status_Outputs::afterParse() {} + +void Status_Outputs::init() { + if (_error) { + return; + } + + if (_Idle_pin.defined()) { + _Idle_pin.setAttr(Pin::Attr::Output); + } + + if (_Run_pin.defined()) { + _Run_pin.setAttr(Pin::Attr::Output); + } + + if (_Hold_pin.defined()) { + _Hold_pin.setAttr(Pin::Attr::Output); + } + + if (_Alarm_pin.defined()) { + _Alarm_pin.setAttr(Pin::Attr::Output); + } + + log_info("Status outputs: " + << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() << " Hold:" << _Hold_pin.name() + << " Alarm:" << _Alarm_pin.name()); + + allChannels.registration(this); + setReportInterval(500); +} + +void Status_Outputs::parse_report() { + if (_report.rfind("<", 0) == 0) { + parse_status_report(); + return; + } +} + +// This is how the OLED driver receives channel data +size_t Status_Outputs::write(uint8_t data) { + char c = data; + if (c == '\r') { + return 1; + } + if (c == '\n') { + parse_report(); + _report = ""; + return 1; + } + _report += c; + return 1; +} + +Channel* Status_Outputs::pollLine(char* line) { + autoReport(); + return nullptr; +} + +void Status_Outputs::parse_status_report() { + if (_report.back() == '>') { + _report.pop_back(); + } + // Now the string is a sequence of field|field|field + size_t pos = 0; + auto nextpos = _report.find_first_of("|", pos); + _state = _report.substr(pos + 1, nextpos - pos - 1); + + log_info("State:" << _state); + + _Idle_pin.write(_state == "Idle"); + _Run_pin.write(_state == "Run"); + _Hold_pin.write(_state.substr(0, 4) == "Hold"); + _Alarm_pin.write(_state == "Alarm"); +} diff --git a/FluidNC/src/Status_outputs.h b/FluidNC/src/Status_outputs.h new file mode 100644 index 000000000..b76e84a08 --- /dev/null +++ b/FluidNC/src/Status_outputs.h @@ -0,0 +1,58 @@ +#pragma once + +#include "Config.h" + +#include "Configuration/Configurable.h" + +#include "Channel.h" + +typedef const uint8_t* font_t; + +class Status_Outputs : public Channel, public Configuration::Configurable { + Pin _Idle_pin; + Pin _Run_pin; + Pin _Hold_pin; + Pin _Alarm_pin; + +public: +private: + std::string _report; + std::string _state; + + void parse_report(); + void parse_status_report(); + + bool _error = false; + +public: + Status_Outputs() : Channel("status_outputs") {} + + Status_Outputs(const Status_Outputs&) = delete; + Status_Outputs(Status_Outputs&&) = delete; + Status_Outputs& operator=(const Status_Outputs&) = delete; + Status_Outputs& operator=(Status_Outputs&&) = delete; + + virtual ~Status_Outputs() = default; + + void init(); + + size_t write(uint8_t data) override; + + Channel* pollLine(char* line) override; + void flushRx() override {} + + bool lineComplete(char*, char) override { return false; } + size_t timedReadBytes(char* buffer, size_t length, TickType_t timeout) override { return 0; } + + // Configuration handlers: + void validate() override {} + + void afterParse() override; + + void group(Configuration::HandlerBase& handler) override { + handler.item("idle_pin", _Idle_pin); + handler.item("run_pin", _Run_pin); + handler.item("hold_pin", _Hold_pin); + handler.item("alarm_pin", _Alarm_pin); + } +}; From 84ab119bc003dd922a3124d300da51154ae18ce8 Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 8 Sep 2023 16:04:27 -0500 Subject: [PATCH 07/13] Cleanup --- FluidNC/src/Status_outputs.cpp | 8 +++----- FluidNC/src/Status_outputs.h | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/FluidNC/src/Status_outputs.cpp b/FluidNC/src/Status_outputs.cpp index f1034ee82..812d5e2ee 100644 --- a/FluidNC/src/Status_outputs.cpp +++ b/FluidNC/src/Status_outputs.cpp @@ -10,8 +10,6 @@ #include "Machine/MachineConfig.h" -void Status_Outputs::afterParse() {} - void Status_Outputs::init() { if (_error) { return; @@ -33,9 +31,9 @@ void Status_Outputs::init() { _Alarm_pin.setAttr(Pin::Attr::Output); } - log_info("Status outputs: " - << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() << " Hold:" << _Hold_pin.name() - << " Alarm:" << _Alarm_pin.name()); + // log_info("Status outputs: " + // << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() << " Hold:" << _Hold_pin.name() + // << " Alarm:" << _Alarm_pin.name()); allChannels.registration(this); setReportInterval(500); diff --git a/FluidNC/src/Status_outputs.h b/FluidNC/src/Status_outputs.h index b76e84a08..1e446488c 100644 --- a/FluidNC/src/Status_outputs.h +++ b/FluidNC/src/Status_outputs.h @@ -47,7 +47,7 @@ class Status_Outputs : public Channel, public Configuration::Configurable { // Configuration handlers: void validate() override {} - void afterParse() override; + void afterParse() override {}; void group(Configuration::HandlerBase& handler) override { handler.item("idle_pin", _Idle_pin); From db3b2ed4551ed0502aa6e9a0336597cebfe0719d Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 10 Sep 2023 10:32:46 -0500 Subject: [PATCH 08/13] Cleanup --- FluidNC/src/Status_outputs.cpp | 5 ----- FluidNC/src/Status_outputs.h | 5 ----- 2 files changed, 10 deletions(-) diff --git a/FluidNC/src/Status_outputs.cpp b/FluidNC/src/Status_outputs.cpp index 812d5e2ee..d93b197d8 100644 --- a/FluidNC/src/Status_outputs.cpp +++ b/FluidNC/src/Status_outputs.cpp @@ -7,14 +7,9 @@ This can be used for Tower lights,etc. */ #include "Status_outputs.h" - #include "Machine/MachineConfig.h" void Status_Outputs::init() { - if (_error) { - return; - } - if (_Idle_pin.defined()) { _Idle_pin.setAttr(Pin::Attr::Output); } diff --git a/FluidNC/src/Status_outputs.h b/FluidNC/src/Status_outputs.h index 1e446488c..54083b150 100644 --- a/FluidNC/src/Status_outputs.h +++ b/FluidNC/src/Status_outputs.h @@ -1,9 +1,7 @@ #pragma once #include "Config.h" - #include "Configuration/Configurable.h" - #include "Channel.h" typedef const uint8_t* font_t; @@ -22,8 +20,6 @@ class Status_Outputs : public Channel, public Configuration::Configurable { void parse_report(); void parse_status_report(); - bool _error = false; - public: Status_Outputs() : Channel("status_outputs") {} @@ -46,7 +42,6 @@ class Status_Outputs : public Channel, public Configuration::Configurable { // Configuration handlers: void validate() override {} - void afterParse() override {}; void group(Configuration::HandlerBase& handler) override { From 5063b4af74ac12f86feb1beff3b63025866a714f Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 10 Sep 2023 13:33:19 -0500 Subject: [PATCH 09/13] Added interval item. --- FluidNC/src/Status_outputs.cpp | 10 ++++------ FluidNC/src/Status_outputs.h | 4 ++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/FluidNC/src/Status_outputs.cpp b/FluidNC/src/Status_outputs.cpp index d93b197d8..2ed99b8f5 100644 --- a/FluidNC/src/Status_outputs.cpp +++ b/FluidNC/src/Status_outputs.cpp @@ -26,12 +26,12 @@ void Status_Outputs::init() { _Alarm_pin.setAttr(Pin::Attr::Output); } - // log_info("Status outputs: " - // << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() << " Hold:" << _Hold_pin.name() - // << " Alarm:" << _Alarm_pin.name()); + log_info("Status outputs" + << " Interval:" << _interval_ms << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() << " Hold:" << _Hold_pin.name() + << " Alarm:" << _Alarm_pin.name()); allChannels.registration(this); - setReportInterval(500); + setReportInterval(_interval_ms); } void Status_Outputs::parse_report() { @@ -70,8 +70,6 @@ void Status_Outputs::parse_status_report() { auto nextpos = _report.find_first_of("|", pos); _state = _report.substr(pos + 1, nextpos - pos - 1); - log_info("State:" << _state); - _Idle_pin.write(_state == "Idle"); _Run_pin.write(_state == "Run"); _Hold_pin.write(_state.substr(0, 4) == "Hold"); diff --git a/FluidNC/src/Status_outputs.h b/FluidNC/src/Status_outputs.h index 54083b150..d31cb5378 100644 --- a/FluidNC/src/Status_outputs.h +++ b/FluidNC/src/Status_outputs.h @@ -17,6 +17,8 @@ class Status_Outputs : public Channel, public Configuration::Configurable { std::string _report; std::string _state; + int _interval_ms = 500; + void parse_report(); void parse_status_report(); @@ -45,9 +47,11 @@ class Status_Outputs : public Channel, public Configuration::Configurable { void afterParse() override {}; void group(Configuration::HandlerBase& handler) override { + handler.item("interval_ms", _interval_ms, 100, 5000); handler.item("idle_pin", _Idle_pin); handler.item("run_pin", _Run_pin); handler.item("hold_pin", _Hold_pin); handler.item("alarm_pin", _Alarm_pin); + } }; From fb2078a557ab556b3985e7a563bac78310af64ff Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 10 Sep 2023 13:34:20 -0500 Subject: [PATCH 10/13] Update Status_outputs.h --- FluidNC/src/Status_outputs.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/FluidNC/src/Status_outputs.h b/FluidNC/src/Status_outputs.h index d31cb5378..793624288 100644 --- a/FluidNC/src/Status_outputs.h +++ b/FluidNC/src/Status_outputs.h @@ -47,11 +47,10 @@ class Status_Outputs : public Channel, public Configuration::Configurable { void afterParse() override {}; void group(Configuration::HandlerBase& handler) override { - handler.item("interval_ms", _interval_ms, 100, 5000); + handler.item("report_interval_ms", _interval_ms, 100, 5000); handler.item("idle_pin", _Idle_pin); handler.item("run_pin", _Run_pin); handler.item("hold_pin", _Hold_pin); handler.item("alarm_pin", _Alarm_pin); - } }; From 608e61441dbfe3149781aa5094283fc55568b140 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 12 Sep 2023 11:18:22 -1000 Subject: [PATCH 11/13] Fixed some config errors that used to panic --- FluidNC/src/Motors/TrinamicUartDriver.cpp | 5 +---- FluidNC/src/Pin.cpp | 5 +---- FluidNC/src/Pins/DebugPinDetail.cpp | 27 ++++++----------------- 3 files changed, 9 insertions(+), 28 deletions(-) diff --git a/FluidNC/src/Motors/TrinamicUartDriver.cpp b/FluidNC/src/Motors/TrinamicUartDriver.cpp index 369bb126d..97ac24729 100644 --- a/FluidNC/src/Motors/TrinamicUartDriver.cpp +++ b/FluidNC/src/Motors/TrinamicUartDriver.cpp @@ -21,10 +21,7 @@ namespace MotorDrivers { void TrinamicUartDriver::init() { _uart = config->_uarts[_uart_num]; - if (!_uart) { - log_error("TMC Driver missing uart" << _uart_num << " section"); - return; - } + Assert(_uart, "TMC Driver missing uart%d section", _uart_num); _cs_pin.setAttr(Pin::Attr::Output); } diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index 01c606f6c..5e22afacf 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -12,7 +12,6 @@ #include "Pins/I2SOPinDetail.h" #include "Pins/ErrorPinDetail.h" #include "string_util.h" -#include // snprintf() Pins::PinDetail* Pin::undefinedPin = new Pins::VoidPinDetail(); Pins::PinDetail* Pin::errorPin = new Pins::ErrorPinDetail("unknown"); @@ -113,9 +112,7 @@ Pin Pin::create(std::string_view str) { } } catch (const AssertionFailed& ex) { // We shouldn't get here under normal circumstances. log_error("ERR: " << str << " - " << ex.what()); - char buf[255]; - snprintf(buf, 255, "ERR: %s - %s", str, ex.what()); - Assert(false, buf); + Assert(false, ""); // return Pin(new Pins::ErrorPinDetail(str.str())); } } diff --git a/FluidNC/src/Pins/DebugPinDetail.cpp b/FluidNC/src/Pins/DebugPinDetail.cpp index 63e72d236..7bac835e6 100644 --- a/FluidNC/src/Pins/DebugPinDetail.cpp +++ b/FluidNC/src/Pins/DebugPinDetail.cpp @@ -5,28 +5,15 @@ #include "../UartChannel.h" #include // millis() -#include // vsnprintf -#include namespace Pins { - inline void WriteSerial(const char* format, ...) { - char buf[50]; - va_list arg; - va_list copy; - va_start(arg, format); - va_copy(copy, arg); - size_t len = vsnprintf(buf, 50, format, arg); - va_end(copy); - log_msg_to(Uart0, buf); - va_end(arg); - } // I/O: void DebugPinDetail::write(int high) { if (high != int(_isHigh)) { _isHigh = bool(high); if (shouldEvent()) { - WriteSerial("Write %s < %d", toString(), high); + log_msg_to(Uart0, "Write " << toString() << " < " << high); } } _implementation->write(high); @@ -35,7 +22,7 @@ namespace Pins { int DebugPinDetail::read() { auto result = _implementation->read(); if (shouldEvent()) { - WriteSerial("Read %s > %d", toString(), result); + log_msg_to(Uart0, "Read " << toString() << " > " << result); } return result; } @@ -63,10 +50,10 @@ namespace Pins { if (value.has(PinAttributes::InitialOn)) { buf[n++] = '+'; } - buf[n++] = 0; + buf[n++] = '\0'; if (shouldEvent()) { - WriteSerial("Set pin attr %s = %s", toString(), buf); + log_msg_to(Uart0, "Set pin attr " << toString() << " = " << buf); } _implementation->setAttr(value); } @@ -76,7 +63,7 @@ namespace Pins { void DebugPinDetail::CallbackHandler::handle(void* arg) { auto handler = static_cast(arg); if (handler->_myPin->shouldEvent()) { - WriteSerial("Received ISR on %s", handler->_myPin->toString()); + log_msg_to(Uart0, "Received ISR on " << handler->_myPin->toString()); } handler->callback(handler->argument); } @@ -88,7 +75,7 @@ namespace Pins { _isrHandler.callback = callback; if (shouldEvent()) { - WriteSerial("Attaching interrupt to pin %s, mode %d", toString(), mode); + log_msg_to(Uart0, "Attaching interrupt to pin " << toString() << ", mode " << mode); } _implementation->attachInterrupt(_isrHandler.handle, &_isrHandler, mode); } @@ -109,7 +96,7 @@ namespace Pins { } else if (_eventCount == 10) { _lastEvent = time; ++_eventCount; - WriteSerial("Suppressing events..."); + log_msg_to(Uart0, "Suppressing events..."); return false; } else { _lastEvent = time; From 37b2c34dcb55748de0c5f30cf797f27aeb32e2ca Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 19 Sep 2023 16:08:27 -1000 Subject: [PATCH 12/13] Added source URL to initial version INFO message --- FluidNC/src/Main.cpp | 2 +- FluidNC/src/Report.h | 1 + git-version.py | 10 +++++++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index b74cceaa9..3c8b5513c 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -49,7 +49,7 @@ void setup() { // Load settings from non-volatile storage settings_init(); // requires config - log_info("FluidNC " << git_info); + log_info("FluidNC " << git_info << " " << git_url); log_info("Compiled with ESP32 SDK:" << esp_get_idf_version()); if (localfs_mount()) { diff --git a/FluidNC/src/Report.h b/FluidNC/src/Report.h index 48d03da6e..221b9015f 100644 --- a/FluidNC/src/Report.h +++ b/FluidNC/src/Report.h @@ -92,6 +92,7 @@ const char* state_name(); extern const char* grbl_version; extern const char* git_info; +extern const char* git_url; // Callout to custom code void display_init(); diff --git a/git-version.py b/git-version.py index 4f1d9df8f..bc76b17d8 100644 --- a/git-version.py +++ b/git-version.py @@ -12,6 +12,7 @@ if gitFail: tag = "v3.0.x" rev = " (noGit)" + url = " (noGit)" else: try: tag = ( @@ -47,17 +48,24 @@ dirty = "-dirty" else: dirty = "" - rev = " (%s-%s%s)" % (branchname, revision, dirty) + url = ( + subprocess.check_output(["git", "config", "--get", "remote.origin.url"]) + .strip() + .decode("utf-8") + ) + grbl_version = tag.replace('v','').rpartition('.')[0] git_info = '%s%s' % (tag, rev) +git_url = url provisional = "FluidNC/src/version.cxx" final = "FluidNC/src/version.cpp" with open(provisional, "w") as fp: fp.write('const char* grbl_version = \"' + grbl_version + '\";\n') fp.write('const char* git_info = \"' + git_info + '\";\n') + fp.write('const char* git_url = \"' + git_url + '\";\n') if not os.path.exists(final): # No version.cpp so rename version.cxx to version.cpp From c203e90af6e02b3b59295b63981ce6d69b35fbdf Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 29 Sep 2023 13:25:24 -0500 Subject: [PATCH 13/13] Optimize coolant delays Removed M9 delay Delay does not occur if M7 or M8 state does not change --- FluidNC/src/CoolantControl.cpp | 10 +++++++--- FluidNC/src/CoolantControl.h | 2 ++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/CoolantControl.cpp b/FluidNC/src/CoolantControl.cpp index 7daa6d1a1..38583f108 100644 --- a/FluidNC/src/CoolantControl.cpp +++ b/FluidNC/src/CoolantControl.cpp @@ -53,6 +53,8 @@ void CoolantControl::write(CoolantState state) { bool pinState = state.Mist; _mist.synchronousWrite(pinState); } + + _previous_state = state; } // Directly called by coolant_init(), coolant_set_state(), which can be at @@ -68,11 +70,13 @@ void CoolantControl::stop() { // parser program end, and g-code parser CoolantControl::sync(). void CoolantControl::set_state(CoolantState state) { - if (sys.abort) { - return; // Block during abort. + if (sys.abort || (_previous_state.Mist == state.Mist && _previous_state.Flood == state.Flood)) { + return; // Block during abort or if no change } write(state); - delay_msec(_delay_ms, DwellMode::SysSuspend); + + if (state.Mist || state.Flood) // ignore delay on turn off + delay_msec(_delay_ms, DwellMode::SysSuspend); } void CoolantControl::off() { diff --git a/FluidNC/src/CoolantControl.h b/FluidNC/src/CoolantControl.h index 4726e4fb0..c4c368947 100644 --- a/FluidNC/src/CoolantControl.h +++ b/FluidNC/src/CoolantControl.h @@ -13,6 +13,8 @@ class CoolantControl : public Configuration::Configurable { uint32_t _delay_ms = 0; + CoolantState _previous_state = {}; + void write(CoolantState state); public: