From 0a076188c01e26d3b0dd64879df7ccad577f5af8 Mon Sep 17 00:00:00 2001 From: dan21dan <109064695+dan21dan@users.noreply.github.com> Date: Fri, 17 Mar 2023 22:36:14 +0100 Subject: [PATCH 001/212] Insecure email notification (#838) While debugging sending email notifications (originally I just wanted to add the logging), I found that WiFiClientSecure can only connect to the smtp server if secure mode is turned off. Closes #838 --- FluidNC/src/WebUI/NotificationsService.cpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/FluidNC/src/WebUI/NotificationsService.cpp b/FluidNC/src/WebUI/NotificationsService.cpp index b2f85c3ec..1a5631777 100644 --- a/FluidNC/src/WebUI/NotificationsService.cpp +++ b/FluidNC/src/WebUI/NotificationsService.cpp @@ -142,11 +142,17 @@ namespace WebUI { break; } delay_ms(10); + log_verbose("Received: '" << answer << "' (waiting 4 '" << expected_answer << "')"); } if (strlen(expected_answer) == 0) { return true; } if (answer.indexOf(expected_answer) == -1) { + if (answer.length()) { + log_debug("Received: '" << answer << "' (expected: '" << expected_answer << "')"); + } else { + log_debug("No answer (expected: " << expected_answer << ")"); + } return false; } else { return true; @@ -225,11 +231,26 @@ namespace WebUI { Notificationclient.stop(); return res; } + bool NotificationsService::sendEmailMSG(const char* title, const char* message) { WiFiClientSecure Notificationclient; + // Switch off secure mode because the connect command always fails in secure mode:( + Notificationclient.setInsecure(); + if (!Notificationclient.connect(_serveraddress.c_str(), _port)) { + //Read & log error message (in debug mode) + if (atMsgLevel(MsgLevelDebug)) { + char errMsg[150]; + const int lastError = Notificationclient.lastError(errMsg, sizeof(errMsg)); + if (0 == lastError) { + errMsg[0] = 0; + } + log_debug("Cannot connect to " << _serveraddress.c_str() << ":" << _port << ", err: " << lastError << " - " << errMsg); + } return false; } + log_verbose("Connected to " << _serveraddress.c_str() << ":" << _port); + //Check answer of connection if (!Wait4Answer(Notificationclient, "220", "220", EMAILTIMEOUT)) { return false; From ef9bde6f8d24aad75ce9790f52491dc1e870d0b1 Mon Sep 17 00:00:00 2001 From: bdring Date: Thu, 23 Mar 2023 09:26:04 -0500 Subject: [PATCH 002/212] Changed max digital pin count to 8 --- FluidNC/src/GCode.h | 2 +- FluidNC/src/Machine/UserOutputs.cpp | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/GCode.h b/FluidNC/src/GCode.h index 8b2e45335..1307de8e1 100644 --- a/FluidNC/src/GCode.h +++ b/FluidNC/src/GCode.h @@ -159,7 +159,7 @@ enum class IoControl : uint8_t { SetAnalogImmediate = 6, // M68 }; -static const int MaxUserDigitalPin = 4; +static const int MaxUserDigitalPin = 8; static const int MaxUserAnalogPin = 4; // Modal Group G8: Tool length offset diff --git a/FluidNC/src/Machine/UserOutputs.cpp b/FluidNC/src/Machine/UserOutputs.cpp index 2aea2616d..d446eb061 100644 --- a/FluidNC/src/Machine/UserOutputs.cpp +++ b/FluidNC/src/Machine/UserOutputs.cpp @@ -93,5 +93,9 @@ namespace Machine { handler.item("digital1_pin", _digitalOutput[1]); handler.item("digital2_pin", _digitalOutput[2]); handler.item("digital3_pin", _digitalOutput[3]); + handler.item("digital4_pin", _digitalOutput[4]); + handler.item("digital5_pin", _digitalOutput[5]); + handler.item("digital6_pin", _digitalOutput[6]); + handler.item("digital7_pin", _digitalOutput[7]); } } From 34385b66efe8e69b7f8ccb5fb60d529c9b715e9e Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 26 Apr 2023 06:09:56 -1000 Subject: [PATCH 003/212] GB and TB were swapped in SD size message --- FluidNC/src/NutsBolts.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/NutsBolts.cpp b/FluidNC/src/NutsBolts.cpp index fb7271d4e..ac5070779 100644 --- a/FluidNC/src/NutsBolts.cpp +++ b/FluidNC/src/NutsBolts.cpp @@ -241,7 +241,7 @@ std::string formatBytes(uint64_t bytes) { b /= 1024; if (b < 1024) { std::ostringstream msg; - msg << std::fixed << std::setprecision(2) << b << " TB"; + msg << std::fixed << std::setprecision(2) << b << " GB"; return msg.str(); } b /= 1024; @@ -249,7 +249,7 @@ std::string formatBytes(uint64_t bytes) { b = 99999; } std::ostringstream msg; - msg << std::fixed << std::setprecision(2) << b << " GB"; + msg << std::fixed << std::setprecision(2) << b << " TB"; return msg.str(); } From 40b44ac4ee01e1b95bf6fc923993b427bf3dbdc6 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 27 Apr 2023 13:04:33 -1000 Subject: [PATCH 004/212] Fix #825 - incorrect output from analog outputs --- FluidNC/src/Machine/UserOutputs.cpp | 4 ++-- FluidNC/src/Machine/UserOutputs.h | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Machine/UserOutputs.cpp b/FluidNC/src/Machine/UserOutputs.cpp index d446eb061..e0282bbd3 100644 --- a/FluidNC/src/Machine/UserOutputs.cpp +++ b/FluidNC/src/Machine/UserOutputs.cpp @@ -61,14 +61,14 @@ namespace Machine { return percent == 0.0; } - uint32_t duty = uint32_t(percent / 100.0f * _denominator[io_num]); - auto pwm = _pwm[io_num]; if (!pwm) { log_error("M67 PWM channel error"); return false; } + uint32_t duty = uint32_t(percent * pwm->period() / 100.0f); + if (_current_value[io_num] == duty) { return true; } diff --git a/FluidNC/src/Machine/UserOutputs.h b/FluidNC/src/Machine/UserOutputs.h index 8d94af118..9aa5878b4 100644 --- a/FluidNC/src/Machine/UserOutputs.h +++ b/FluidNC/src/Machine/UserOutputs.h @@ -12,7 +12,6 @@ namespace Machine { class UserOutputs : public Configuration::Configurable { PwmPin* _pwm[MaxUserAnalogPin]; uint32_t _current_value[MaxUserAnalogPin]; - uint32_t _denominator[MaxUserAnalogPin]; public: UserOutputs(); From fd7bfa8c7c677b0079463fd88647f4e276092515 Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 28 Apr 2023 10:17:42 -0500 Subject: [PATCH 005/212] Update UserOutputs.cpp --- FluidNC/src/Machine/UserOutputs.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FluidNC/src/Machine/UserOutputs.cpp b/FluidNC/src/Machine/UserOutputs.cpp index e0282bbd3..6aebe2d38 100644 --- a/FluidNC/src/Machine/UserOutputs.cpp +++ b/FluidNC/src/Machine/UserOutputs.cpp @@ -40,6 +40,8 @@ namespace Machine { void UserOutputs::all_off() { for (size_t io_num = 0; io_num < MaxUserDigitalPin; io_num++) { setDigital(io_num, false); + } + for (size_t io_num = 0; io_num < MaxUserAnalogPin; io_num++) { setAnalogPercent(io_num, 0); } } From fef6076e777bb6990db4fd046a452c15a6cf795d Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 29 Apr 2023 09:41:31 -1000 Subject: [PATCH 006/212] Fix #782 - auto-report websocket stalls when wifi goes down In the process, I moved a lot of websocket code from WebServer.cpp into WSChannel.cpp because WebSocket.cpp is too complex. --- FluidNC/src/WebUI/WSChannel.cpp | 175 +++++++++++++++++++++++++++++++- FluidNC/src/WebUI/WSChannel.h | 26 ++++- FluidNC/src/WebUI/WebServer.cpp | 124 +++------------------- FluidNC/src/WebUI/WebServer.h | 4 +- 4 files changed, 210 insertions(+), 119 deletions(-) diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index ea7e7857a..ba8c7b4f8 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -8,11 +8,18 @@ # include # include +# include "../Serial.h" // is_realtime_command + namespace WebUI { + class WSChannels; + WSChannel::WSChannel(WebSocketsServer* server, uint8_t clientNum) : Channel("websocket"), _server(server), _clientNum(clientNum), _TXbufferSize(0), _RXbufferSize(0), _RXbufferpos(0) {} int WSChannel::read() { + if (_dead) { + return -1; + } if (_rtchar == -1) { return -1; } else { @@ -27,7 +34,7 @@ namespace WebUI { size_t WSChannel::write(uint8_t c) { return write(&c, 1); } size_t WSChannel::write(const uint8_t* buffer, size_t size) { - if (buffer == NULL) { + if (buffer == NULL || _dead) { return 0; } @@ -49,6 +56,9 @@ namespace WebUI { void WSChannel::pushRT(char ch) { _rtchar = ch; } bool WSChannel::push(const uint8_t* data, size_t length) { + if (_dead) { + return false; + } char c; while ((c = *data++) != '\0') { _queue.push(c); @@ -59,14 +69,33 @@ namespace WebUI { bool WSChannel::push(std::string& s) { return push((uint8_t*)s.c_str(), s.length()); } void WSChannel::handle() { + if (_dead) { + return; + } if (_TXbufferSize > 0 && ((_TXbufferSize >= TXBUFFERSIZE) || ((millis() - _lastflush) > FLUSHTIMEOUT))) { flush(); } } - size_t WSChannel::sendTXT(std::string& s) { return _server->sendTXT(_clientNum, s.c_str()); } - void WSChannel::flush(void) { + bool WSChannel::sendTXT(std::string& s) { + if (_dead) { + return false; + } + if (!_server->sendTXT(_clientNum, s.c_str())) { + _dead = true; + WSChannels::removeChannel(this); + return false; + } + return true; + } + void WSChannel::flush(void) { if (_TXbufferSize > 0) { - _server->sendBIN(_clientNum, _TXbuffer, _TXbufferSize); + if (_dead) { + return; + } + if (!_server->sendBIN(_clientNum, _TXbuffer, _TXbufferSize)) { + _dead = true; + WSChannels::removeChannel(this); + } //refresh timout _lastflush = millis(); @@ -77,5 +106,143 @@ namespace WebUI { } WSChannel::~WSChannel() {} + + std::map WSChannels::_wsChannels; + std::list WSChannels::_webWsChannels; + + WSChannel* WSChannels::_lastWSChannel = nullptr; + + WSChannel* WSChannels::getWSChannel(int pageid) { + WSChannel* wsChannel = nullptr; + if (pageid != -1) { + try { + wsChannel = _wsChannels.at(pageid); + } catch (std::out_of_range& oor) {} + } else { + // If there is no PAGEID URL argument, it is an old version of WebUI + // that does not supply PAGEID in all cases. In that case, we use + // the most recently used websocket if it is still in the list. + for (auto it = _wsChannels.begin(); it != _wsChannels.end(); ++it) { + if (it->second == _lastWSChannel) { + wsChannel = _lastWSChannel; + break; + } + } + } + _lastWSChannel = wsChannel; + return wsChannel; + } + + void WSChannels::removeChannel(uint8_t num) { + try { + WSChannel* wsChannel = _wsChannels.at(num); + _webWsChannels.remove(wsChannel); + allChannels.kill(wsChannel); + _wsChannels.erase(num); + } catch (std::out_of_range& oor) {} + } + + void WSChannels::removeChannel(WSChannel* channel) { + _lastWSChannel = nullptr; + _webWsChannels.remove(channel); + allChannels.kill(channel); + for (auto it = _wsChannels.cbegin(); it != _wsChannels.cend();) { + if (it->second == channel) { + it = _wsChannels.erase(it); + } else { + ++it; + } + } + } + + bool WSChannels::runGCode(int pageid, std::string cmd) { + bool has_error = false; + + WSChannel* wsChannel = getWSChannel(pageid); + if (wsChannel) { + // It is very tempting to let wsChannel->push() handle the realtime + // character sequences so we don't have to do it here. That does not work + // because we need to know whether to add a newline. We should not add newline + // on a realtime sequence, but we must add one (if not already present) + // on a text command. + if (cmd.length() == 3 && cmd[0] == 0xc2 && is_realtime_command(cmd[1]) && cmd[2] == '\0') { + // Handles old WebUIs that send a null after high-bit-set realtime chars + wsChannel->pushRT(cmd[1]); + } else if (cmd.length() == 2 && cmd[0] == 0xc2 && is_realtime_command(cmd[1])) { + // Handles old WebUIs that send a null after high-bit-set realtime chars + wsChannel->pushRT(cmd[1]); + } else if (cmd.length() == 1 && is_realtime_command(cmd[0])) { + wsChannel->pushRT(cmd[0]); + } else { + if (cmd.length() && cmd[cmd.length() - 1] != '\n') { + cmd += '\n'; + } + has_error = !wsChannel->push(cmd); + } + } else { + has_error = true; + } + return has_error; + } + + bool WSChannels::sendError(int pageid, std::string err) { + WSChannel* wsChannel = getWSChannel(pageid); + if (wsChannel) { + return !wsChannel->sendTXT(err); + } + return true; + } + void WSChannels::sendPing() { + for (WSChannel* wsChannel : _webWsChannels) { + std::string s("PING:"); + s += wsChannel->id(); + // sendBIN would be okay too because the string contains only + // ASCII characters, no UTF-8 extended characters. + wsChannel->sendTXT(s); + } + } + + void WSChannels::handleEvent(WebSocketsServer* server, uint8_t num, uint8_t type, uint8_t* payload, size_t length) { + switch (type) { + case WStype_DISCONNECTED: + log_debug("WebSocket disconnect " << num); + WSChannels::removeChannel(num); + break; + case WStype_CONNECTED: { + WSChannel* wsChannel = new WSChannel(server, num); + if (!wsChannel) { + log_error("Creating WebSocket channel failed"); + } else { + std::string uri((char*)payload, length); + + IPAddress ip = server->remoteIP(num); + log_debug("WebSocket " << num << " from " << ip << " uri " << uri); + + _lastWSChannel = wsChannel; + allChannels.registration(wsChannel); + _wsChannels[num] = wsChannel; + + if (uri == "/") { + std::string s("CURRENT_ID:"); + s += std::to_string(num); + // send message to client + _webWsChannels.push_front(wsChannel); + wsChannel->sendTXT(s); + s = "ACTIVE_ID:"; + s += std::to_string(wsChannel->id()); + wsChannel->sendTXT(s); + } + } + } break; + case WStype_TEXT: + case WStype_BIN: + try { + _wsChannels.at(num)->push(payload, length); + } catch (std::out_of_range& oor) {} + break; + default: + break; + } + } } #endif diff --git a/FluidNC/src/WebUI/WSChannel.h b/FluidNC/src/WebUI/WSChannel.h index 4ffccfc98..cb5a1635e 100644 --- a/FluidNC/src/WebUI/WSChannel.h +++ b/FluidNC/src/WebUI/WSChannel.h @@ -7,6 +7,8 @@ #include #include +#include +#include class WebSocketsServer; @@ -37,7 +39,7 @@ namespace WebUI { size_t write(uint8_t c); size_t write(const uint8_t* buffer, size_t size); - size_t sendTXT(std::string& s); + bool sendTXT(std::string& s); inline size_t write(const char* s) { return write((uint8_t*)s, ::strlen(s)); } inline size_t write(unsigned long n) { return write((uint8_t)n); } @@ -45,8 +47,6 @@ namespace WebUI { inline size_t write(unsigned int n) { return write((uint8_t)n); } inline size_t write(int n) { return write((uint8_t)n); } - // void begin(long speed); - // void end(); void handle(); bool push(const uint8_t* data, size_t length); @@ -67,6 +67,8 @@ namespace WebUI { int available() override { return _rtchar == -1 ? 0 : 1; } private: + bool _dead = false; + uint32_t _lastflush; WebSocketsServer* _server; uint8_t _clientNum; @@ -83,6 +85,24 @@ namespace WebUI { // homing where GCode handling is blocked. int _rtchar = -1; }; + + class WSChannels { + private: + static std::map _wsChannels; + static std::list _webWsChannels; + + static WSChannel* _lastWSChannel; + static WSChannel* getWSChannel(int pageid); + + public: + static void removeChannel(WSChannel* channel); + static void removeChannel(uint8_t num); + + static bool runGCode(int pageid, std::string cmd); + static bool sendError(int pageid, std::string error); + static void sendPing(); + static void handleEvent(WebSocketsServer* server, uint8_t num, uint8_t type, uint8_t* payload, size_t length); + }; } #endif diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 6dbca60bd..164a475b6 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -25,6 +25,8 @@ # include # include "WebSettings.h" +# include "WSChannel.h" + # include "WebClient.h" # include "src/Protocol.h" // protocol_send_event @@ -32,8 +34,6 @@ # include "src/WebUI/JSONEncoder.h" # include "Driver/localfs.h" -# include - namespace WebUI { const byte DNS_PORT = 53; DNSServer dnsServer; @@ -57,9 +57,6 @@ namespace WebUI { static const char LOCATION_HEADER[] = "Location"; - static std::map wsChannels; - static std::list webWsChannels; - Web_Server webServer; bool Web_Server::_setupdone = false; uint16_t Web_Server::_port = 0; @@ -91,27 +88,6 @@ namespace WebUI { } Web_Server::~Web_Server() { end(); } - WSChannel* Web_Server::lastWSChannel = nullptr; - WSChannel* Web_Server::getWSChannel() { - WSChannel* wsChannel = nullptr; - if (_webserver->hasArg("PAGEID")) { - int wsId = _webserver->arg("PAGEID").toInt(); - wsChannel = wsChannels.at(wsId); - } else { - // If there is no PAGEID URL argument, it is an old version of WebUI - // that does not supply PAGEID in all cases. In that case, we use - // the most recently used websocket if it is still in the list. - for (auto it = wsChannels.begin(); it != wsChannels.end(); ++it) { - if (it->second == lastWSChannel) { - wsChannel = lastWSChannel; - break; - } - } - } - lastWSChannel = wsChannel; - return wsChannel; - } - bool Web_Server::begin() { bool no_error = true; _setupdone = false; @@ -406,6 +382,14 @@ namespace WebUI { _webserver->send(200, "text/xml", sschema); } + // WebUI sends a PAGEID arg to identify the websocket it is using + int Web_Server::getPageid() { + if (_webserver->hasArg("PAGEID")) { + return _webserver->arg("PAGEID").toInt(); + } + return -1; + } + void Web_Server::_handle_web_command(bool silent) { AuthenticationLevel auth_level = is_authenticated(); std::string cmd; @@ -452,31 +436,7 @@ namespace WebUI { _webserver->send(401, "text/plain", "Authentication failed\n"); return; } - bool hasError = false; - try { - WSChannel* wsChannel = getWSChannel(); - if (wsChannel) { - // It is very tempting to let Serial_2_Socket.push() handle the realtime - // character sequences so we don't have to do it here. That does not work - // because we need to know whether to add a newline. We should not add one - // on a realtime sequence, but we must add one (if not already present) - // on a text command. - if (cmd.length() == 3 && cmd[0] == 0xc2 && is_realtime_command(cmd[1]) && cmd[2] == '\0') { - // Handles old WebUIs that send a null after high-bit-set realtime chars - wsChannel->pushRT(cmd[1]); - } else if (cmd.length() == 2 && cmd[0] == 0xc2 && is_realtime_command(cmd[1])) { - // Handles old WebUIs that send a null after high-bit-set realtime chars - wsChannel->pushRT(cmd[1]); - } else if (cmd.length() == 1 && is_realtime_command(cmd[0])) { - wsChannel->pushRT(cmd[0]); - } else { - if (cmd.length() && cmd[cmd.length() - 1] != '\n') { - cmd += '\n'; - } - hasError = !wsChannel->push(cmd); - } - } - } catch (std::out_of_range& oor) { hasError = true; } + bool hasError = WSChannels::runGCode(getPageid(), cmd); _webserver->send(200, "text/plain", hasError ? "Error" : ""); } @@ -671,12 +631,8 @@ namespace WebUI { s += std::to_string(code) + ":"; s += st; - try { - WSChannel* wsChannel = getWSChannel(); - if (wsChannel) { - wsChannel->sendTXT(s); - } - } catch (std::out_of_range& oor) {} + WSChannels::sendError(getPageid(), st); + if (web_error != 0 && _webserver && _webserver->client().available() > 0) { _webserver->send(web_error, "text/xml", st); } @@ -1115,63 +1071,13 @@ namespace WebUI { _socket_server->loop(); } if ((millis() - start_time) > 10000 && _socket_server) { - for (WSChannel* wsChannel : webWsChannels) { - std::string s("PING:"); - s += wsChannel->id(); - wsChannel->sendTXT(s); - } - + WSChannels::sendPing(); start_time = millis(); } } void Web_Server::handle_Websocket_Event(uint8_t num, uint8_t type, uint8_t* payload, size_t length) { - char data[length + 1]; - memcpy(data, (char*)payload, length); - data[length] = '\0'; - - switch (type) { - case WStype_DISCONNECTED: - log_debug("WebSocket disconnect " << num); - try { - WSChannel* wsChannel = wsChannels.at(num); - webWsChannels.remove(wsChannel); - allChannels.kill(wsChannel); - wsChannels.erase(num); - } catch (std::out_of_range& oor) {} - break; - case WStype_CONNECTED: { - IPAddress ip = _socket_server->remoteIP(num); - WSChannel* wsChannel = new WSChannel(_socket_server, num); - if (!wsChannel) { - log_error("Creating WebSocket channel failed"); - } else { - lastWSChannel = wsChannel; - log_debug("WebSocket " << num << " from " << ip << " uri " << data); - allChannels.registration(wsChannel); - wsChannels[num] = wsChannel; - - if (strcmp(data, "/") == 0) { - std::string s("CURRENT_ID:"); - s += std::to_string(num); - // send message to client - webWsChannels.push_front(wsChannel); - wsChannel->sendTXT(s); - s = "ACTIVE_ID:"; - s += std::to_string(wsChannel->id()); - wsChannel->sendTXT(s); - } - } - } break; - case WStype_TEXT: - case WStype_BIN: - try { - wsChannels.at(num)->push(payload, length); - } catch (std::out_of_range& oor) {} - break; - default: - break; - } + WSChannels::handleEvent(_socket_server, num, type, payload, length); } //Convert file extension to content type diff --git a/FluidNC/src/WebUI/WebServer.h b/FluidNC/src/WebUI/WebServer.h index 9434b8d60..dce80445c 100644 --- a/FluidNC/src/WebUI/WebServer.h +++ b/FluidNC/src/WebUI/WebServer.h @@ -11,7 +11,6 @@ # include "../Settings.h" # include "Authentication.h" // AuthenticationLevel # include "Commands.h" -# include "WSChannel.h" class WebSocketsServer; class WebServer; @@ -115,8 +114,7 @@ namespace WebUI { static void sendCaptivePortal(); static void send404Page(); - static WSChannel* lastWSChannel; - static WSChannel* getWSChannel(); + static int getPageid(); }; extern Web_Server webServer; From 803ee606dee5a6e18d943b09006936a56b037367 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 29 Apr 2023 09:54:28 -1000 Subject: [PATCH 007/212] Added debug messages about unresponsive websocket --- FluidNC/src/WebUI/WSChannel.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index ba8c7b4f8..1f70becd5 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -82,6 +82,7 @@ namespace WebUI { } if (!_server->sendTXT(_clientNum, s.c_str())) { _dead = true; + log_debug("WebSocket is unresponsive; closing"); WSChannels::removeChannel(this); return false; } @@ -94,6 +95,7 @@ namespace WebUI { } if (!_server->sendBIN(_clientNum, _TXbuffer, _TXbufferSize)) { _dead = true; + log_debug("WebSocket is unresponsive; closing"); WSChannels::removeChannel(this); } From 3a70b8f9de5b798e98ca49ead36e061c71748f4b Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 30 Apr 2023 11:12:02 -1000 Subject: [PATCH 008/212] Probe pin change triggers auto report --- FluidNC/src/Channel.cpp | 11 +++++++---- FluidNC/src/Channel.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index e630d44e3..fe48040d0 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -92,14 +92,17 @@ static bool motionState() { void Channel::autoReport() { if (_reportInterval) { auto limitState = limits_get_state(); - if (_reportWco || sys.state != _lastState || limitState != _lastLimits || + auto probeState = config->_probe->get_state(); + if (_reportWco || sys.state != _lastState || limitState != _lastLimits || probeState != _lastProbe || (motionState() && (int32_t(xTaskGetTickCount()) - _nextReportTime) >= 0)) { if (_reportWco) { report_wco_counter = 0; } - _reportWco = false; - _lastState = sys.state; - _lastLimits = limitState; + _reportWco = false; + _lastState = sys.state; + _lastLimits = limitState; + _lastProbe = probeState; + _nextReportTime = xTaskGetTickCount() + _reportInterval; report_realtime_status(*this); } diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index b67361eb3..116377ef6 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -45,6 +45,7 @@ class Channel : public Stream { float _lastFeedRate; State _lastState; MotorMask _lastLimits; + bool _lastProbe; bool _reportWco = true; CoordIndex _reportNgc = CoordIndex::End; From 90d362d3a87886434b0fd56050e041bf98ef32e8 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 30 Apr 2023 11:15:00 -1000 Subject: [PATCH 009/212] Added probe retract and use FluidNC G38.2 P parameter - Fixes #883 --- FluidNC/data/index.html.gz | Bin 115883 -> 116077 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index 3f66fac04176d950fa4648ddbf6418862356c2a2..41954e3a2211948f6407d9dd5f567044ff7e0ccf 100644 GIT binary patch delta 72448 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 delta 72309 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 Date: Mon, 1 May 2023 13:34:28 -1000 Subject: [PATCH 010/212] Mostly working version of file hashes --- FluidNC/src/WebUI/WebServer.cpp | 139 +++++++++++++++++++++++++++--- FluidNC/src/WebUI/WebServer.h | 4 +- FluidNC/src/WebUI/WebSettings.cpp | 13 +++ 3 files changed, 145 insertions(+), 11 deletions(-) diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 6dbca60bd..18c5ba547 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -45,6 +45,7 @@ namespace WebUI { # include "NoFile.h" namespace WebUI { + std::map localFsHashes; // Error codes for upload const int ESP_ERROR_AUTHENTICATION = 1; @@ -112,6 +113,81 @@ namespace WebUI { return wsChannel; } + static char hexNibble(int i) { return "0123456789ABCDEF"[i & 0xf]; } + + static Error hashFile(const char* ipath, std::string& str) { // No ESP command + mbedtls_md_context_t ctx; + + uint8_t shaResult[32]; + + try { + FileStream inFile { ipath, "r" }; + uint8_t buf[512]; + size_t len; + + mbedtls_md_init(&ctx); + mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 0); + mbedtls_md_starts(&ctx); + while ((len = inFile.read(buf, 512)) > 0) { + mbedtls_md_update(&ctx, buf, len); + } + mbedtls_md_finish(&ctx, shaResult); + mbedtls_md_free(&ctx); + } catch (const Error err) { + log_error("Cannot open file " << ipath); + return Error::FsFailedOpenFile; + } + + str = '"'; + for (int i = 0; i < 32; i++) { + uint8_t b = shaResult[i]; + str += hexNibble(b >> 4); + str += hexNibble(b); + } + str += '"'; + + return Error::Ok; + } + + static Error hashLocalFS() { + const char* iDir = "/localfs"; + std::error_code ec; + + localFsHashes.clear(); + + FluidPath fpath { iDir, "", ec }; + if (ec) { + log_error("Cannot open " << iDir); + return Error::FsFailedMount; + } + + auto iter = stdfs::directory_iterator { fpath, ec }; + if (ec) { + log_error(fpath << " " << ec.message()); + return Error::FsFailedMount; + } + Error err = Error::Ok; + for (auto const& dir_entry : iter) { + if (dir_entry.is_directory()) { + log_error("Not handling localfs subdirectories"); + } else { + std::string ipath(iDir); + ipath += "/"; + ipath += dir_entry.path().filename(); + std::string hash; + auto err1 = hashFile(ipath.c_str(), hash); + if (err1 != Error::Ok) { + err = err1; + } else { + std::string filename("/"); + filename += dir_entry.path().filename(); + localFsHashes[filename] = hash; + } + } + } + return err; + } + bool Web_Server::begin() { bool no_error = true; _setupdone = false; @@ -130,6 +206,12 @@ namespace WebUI { //ask server to track these headers _webserver->collectHeaders(headerkeys, headerkeyssize); # endif + + //here the list of headers to be recorded + const char* headerkeys[] = { "If-None-Match" }; + size_t headerkeyssize = sizeof(headerkeys) / sizeof(char*); + _webserver->collectHeaders(headerkeys, headerkeyssize); + _socket_server = new WebSocketsServer(_port + 1); _socket_server->begin(); _socket_server->onEvent(handle_Websocket_Event); @@ -206,6 +288,8 @@ namespace WebUI { MDNS.addService("http", "tcp", _port); } + hashLocalFS(); + _setupdone = true; return no_error; } @@ -240,6 +324,27 @@ namespace WebUI { // Send a file, either the specified path or path.gz bool Web_Server::myStreamFile(const char* path, bool download) { + std::string spath(path); + std::string hash; + // Check for brower cache match + + std::map::iterator it; + it = localFsHashes.find(spath); + if (it != localFsHashes.end()) { + hash = it->second; + + } else { + log_debug("Checking " << (spath + ".gz")); + it = localFsHashes.find(spath + ".gz"); + if (it != localFsHashes.end()) { + hash = it->second; + } + } + if (hash.length() && std::string(_webserver->header("If-None-Match").c_str()) == hash) { + log_debug(path << " is cached"); + _webserver->send(304); + return true; + } // If you load or reload WebUI while a program is running, there is a high // risk of stalling the motion because serving a file from // the local FLASH filesystem takes away a lot of CPU cycles. If we get @@ -255,19 +360,25 @@ namespace WebUI { bool isGzip = false; FileStream* file; try { - file = new FileStream(path, "r", ""); + file = new FileStream(spath, "r", ""); } catch (const Error err) { try { - std::string spath(path); file = new FileStream(spath + ".gz", "r", ""); isGzip = true; - } catch (const Error err) { return false; } + } catch (const Error err) { + log_debug(spath << " not found"); + return false; + } } + log_debug(spath << " found"); if (download) { _webserver->sendHeader("Content-Disposition", "attachment"); } + if (hash.length()) { + _webserver->sendHeader("ETag", hash.c_str()); + } - log_debug("path " << path << " CT " << getContentType(path)); + log_debug("path " << path << " CT " << getContentType(path) << " hash " << hash); _webserver->setContentLength(file->size()); if (isGzip) { _webserver->sendHeader("Content-Encoding", "gzip"); @@ -283,7 +394,7 @@ namespace WebUI { delete file; return true; } - void Web_Server::sendWithOurAddress(const char* content) { + void Web_Server::sendWithOurAddress(const char* content, int code) { auto ip = WiFi.getMode() == WIFI_STA ? WiFi.localIP() : WiFi.softAPIP(); std::string ipstr = IP_string(ip); if (_port != 80) { @@ -294,7 +405,7 @@ namespace WebUI { std::string scontent(content); replace_string_in_place(scontent, "$WEB_ADDRESS$", ipstr); replace_string_in_place(scontent, "$QUERY$", _webserver->uri().c_str()); - _webserver->send(200, "text/html", scontent.c_str()); + _webserver->send(code, "text/html", scontent.c_str()); } // Captive Portal Page for use in AP mode @@ -305,7 +416,7 @@ namespace WebUI { "interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) " "\n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n\n\n\n\n\n"; - void Web_Server::sendCaptivePortal() { sendWithOurAddress(PAGE_CAPTIVE); } + void Web_Server::sendCaptivePortal() { sendWithOurAddress(PAGE_CAPTIVE, 200); } //Default 404 page that is sent when a request cannot be satisfied const char PAGE_404[] = @@ -315,7 +426,7 @@ namespace WebUI { "interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) " "\n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n\n\n\n\n\n"; - void Web_Server::send404Page() { sendWithOurAddress(PAGE_404); } + void Web_Server::send404Page() { sendWithOurAddress(PAGE_404, 404); } void Web_Server::handle_root() { if (!(_webserver->hasArg("forcefallback") && _webserver->arg("forcefallback") == "yes")) { @@ -763,7 +874,10 @@ namespace WebUI { void Web_Server::sendAuthFailed() { sendStatus(401, "Authentication failed"); } - void Web_Server::LocalFSFileupload() { fileUpload(localfsName); } + void Web_Server::LocalFSFileupload() { + fileUpload(localfsName); + hashLocalFS(); + } void Web_Server::SDFileUpload() { fileUpload(sdName); } //Web Update handler @@ -925,7 +1039,12 @@ namespace WebUI { std::string action(_webserver->arg("action").c_str()); std::string filename = std::string(_webserver->arg("filename").c_str()); if (action == "delete") { - if (stdfs::remove(fpath / filename.c_str(), ec)) { + log_debug("Deleting " << fpath << " / " << filename); + // if (stdfs::remove(fpath / filename.c_str(), ec)) { + if (stdfs::remove(fpath / filename, ec)) { + if (fpath.isLocalFS()) { + localFsHashes.erase("/" + filename); + } sstatus = filename + " deleted"; } else { sstatus = "Cannot delete "; diff --git a/FluidNC/src/WebUI/WebServer.h b/FluidNC/src/WebUI/WebServer.h index 9434b8d60..1d6347481 100644 --- a/FluidNC/src/WebUI/WebServer.h +++ b/FluidNC/src/WebUI/WebServer.h @@ -38,6 +38,8 @@ namespace WebUI { }; # endif + extern std::map localFsHashes; + //Upload status enum class UploadStatus : uint8_t { NONE = 0, FAILED = 1, CANCELLED = 2, SUCCESSFUL = 3, ONGOING = 4 }; @@ -111,7 +113,7 @@ namespace WebUI { static void sendAuthFailed(); static void sendStatus(int code, const char* str); - static void sendWithOurAddress(const char* s); + static void sendWithOurAddress(const char* s, int code); static void sendCaptivePortal(); static void send404Page(); diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index 45f9ab4d8..7eaea7a06 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -22,6 +22,8 @@ #include "Commands.h" // COMMANDS::restart_MCU(); #include "WifiConfig.h" +#include "WebServer.h" // localFsHashes + #include #include #include @@ -369,6 +371,9 @@ namespace WebUI { } } else { stdfs::remove(fpath, ec); + if (fpath.isLocalFS()) { + localFsHashes.erase("/" + filename); + } if (ec) { log_to(out, "Delete File failed: ", ec.message()); return Error::FsFailedDelFile; @@ -498,6 +503,13 @@ namespace WebUI { } return err; } + static Error showLocalFSHashes(char* parameter, WebUI::AuthenticationLevel auth_level, Channel& out) { + for (const auto& [name, hash] : localFsHashes) { + log_info_to(out, name << ": " << hash); + } + return Error::Ok; + } + static Error backupLocalFS(char* parameter, AuthenticationLevel auth_level, Channel& out) { // No ESP command return copyDir("/localfs", "/sd/localfs", out); } @@ -644,6 +656,7 @@ namespace WebUI { new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Backup", backupLocalFS); new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Restore", restoreLocalFS); new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Migrate", migrateLocalFS); + new WebCommand(NULL, WEBCMD, WU, NULL, "LocalFS/Hashes", showLocalFSHashes); new WebCommand("path", WEBCMD, WU, "ESP221", "SD/Show", showSDFile); new WebCommand("path", WEBCMD, WU, "ESP220", "SD/Run", runSDFile); From ee59fa77645aa64068330cf89e8c670cf57080ea Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 1 May 2023 14:28:32 -1000 Subject: [PATCH 011/212] Allow browser caching of WebUI files We maintain a hash list of the files in localfs and use that to validate the browser cache. --- FluidNC/data/index.html.gz | Bin 116077 -> 116063 bytes FluidNC/src/FluidPath.cpp | 8 +++ FluidNC/src/FluidPath.h | 2 + FluidNC/src/ProcessSettings.cpp | 1 + FluidNC/src/WebUI/WebServer.cpp | 108 +++--------------------------- FluidNC/src/WebUI/WebServer.h | 2 - FluidNC/src/WebUI/WebSettings.cpp | 10 +-- 7 files changed, 27 insertions(+), 104 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index 41954e3a2211948f6407d9dd5f567044ff7e0ccf..30ddf3446f51d533a2b27c95f27150b5ee08aa33 100644 GIT binary patch delta 87791 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

0nnIo;z+M))?(FB}cIMZXJ>zWBx| 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 delta 87709 zcmV)2K+M12iU;kA2e5E#e?S4KD%4_jrczU|C1QgyAPdj=`#8BRo*d&}3$E_Lhro;D zzciX8;dF30!2!wf7*NJg>c0SetRTFO+zFb*K1(W4~T7xx8UBmnhvQDUfG;;w5gBkeL|#836i`4XpC=g83G=Bbz6B zn*H|{-qxf$ky$=JUZUwPoEjeRkkR}YJBlWuJ&f9&WZ_k(A-KrUhsi!iz|?Pr?8{vh%I7$}%=^~rJ%L@xS> z%WQW)I1jn=BDuG-8j9^%LN8QKv6}djAfj|&A`d~6K6|M_LGb+DBV9iE)G^Q0--!l)>E?n2lT!p?>?3>dm^}~Yom8?Bz+a$mIP}c*UDwXd94~b-x|v)mv4EJn z+fL*G>iAb)Hwh=5##|-p#&>$vHpu1MHSW@Err10wl+|y~f0orJM(;uBn5|u_UE#C# zNIGo0YU5Y4O?e2A`Cc};LCAO|ow>le<7&2gk#`Oo53P+y!46jDUH*e_!P}=*l`<0AC9MC6?>OhsAw7lS0lt zi+u7v;<@6FDwMJEUY*Bb;G^Sx)3Gl|IerDGteLz4j(GiWn&9D0K9}_?fRaoO$CSxf z!r}EKVv!#P<6%Fi8sP^O;kg!(vYVd7EP?T_-rZt;6h5UCX5dD&$oGCYo{RwfdvJ;} z;pyQ5Sf<>g!d?7QBa-{!%8Smz*t^#u@;2e17CR#+mGgFWBx+ShSIiu-$rHa4YDWLf7ndw2nH(mZfsiHb<);G0amMV)u1OhR6k{1CmfbV z#8uWpYsmz~*@b-KCHo9Le!i7#Z#B_qvoUIJVvvGn`y;m@MqmB)q(W988<%MHL6$0{ z0*r5gn@qjEiIEhfFL1J7L0b?eOl&ZGSo86zyls0m=Sf0}jd91x|+ z;u<7PW?9+#jQ(z#%rbwrX+Cv@I?JhHj!BSd9c|ahBIv5prdF@0-eQu=#ZckejRK?- zbJ!5OSDyQ`qC-oFmFKyK2ioqk(Q5N>8f0piRJNHDa$HQ<^c$%?I$ua(O;>M2q0McJ zl>r3AUC6g2tx^3FmhY-Le`^VUDwGiPm{he?1DOn_MR zuRJT802}h`W*bRXYPzUi1)pf_93(g#RxzWogv61Vr{ppW6v(!w*xlPq%bb5+0=5SCVVT9qlM3~Wj8E9-AlA){D}51HD*N1BHM6NR!Tw4 zrict!Dosw((w9)+BQ-&3)BqKv>h;#vs3A5b-0*eK+^4 zpZEz7lQDG_TkS_x^p~%>BqcA+>hf#nr`UW8>Q2>}{*lm~+F}YtitbdsNOy|tU@;SL znoQoe;ol{6r*K~pf&#^JD;=eydJTxw4Q706<@Kl*P@@8Hsm)50Jj`stsnEoulc9Al zQYQ}m`;pDsOl7gzI$3x@s_|tJlhY^*4E--7gMMZ%YBAR2g8O2<5xq3Z`t!c=c`nMj z`dQOlC7yt1(cj8h7(t)jkblNWd#9L!GV&`n(1V4k(edW1aiM0R0}aixUbC%5dH zcRIS0$>>J*V9ytV?NfyeWT*xHH+lYlfjrlvuq}y9Ll33F#n_Z*^$uB$pBN=o;Cak>$`;-TY)V%HIyZN7?y?j5iJG^PJYCi9Z2OeCfGnZZMATxURGdGew0 znHwV4QbT02^iGLbh3374-!+XCRw!ZmMoVN;R64?$-NIHk8M0n&);L}fGzD3k#aY{h zSqmeo!TH$Fa}i~)0eOngyb7`blr$PU_L2nlPrLwsm7O<%98LYuwo&C9K1gRF(&=%=E_g$K-e*GuE>!2ugH!xXjzB%61KWOF_w*6fRH^Jkfo z&3l^>>kg3ctNo{#k>+AEV%-Ch+%1&losXX*H*haJYZStMHmgU^Jbn!CzQ@lVKR&?| zXmx#m^(Q)n8tew;`o%4{LN_?J6;Te1enAd-vo5I@cJ*J9x^jcx!AM8owZ2IT%QYeo zFbDESO_qL%A3tVAUrmP0;5Id#gXxcec8ufEja7Pax?eWg-iZ6MKcxox=hsXMwB&mP ztNqj6Kz}=J`-?hl`;I&1r5BSSET{HnAAH(>7KvER#Y|2`VIY`)sy!jN{`wLR6u0$D zKJ&)Kh|b%{#%*kT#P{{eMgx$A-t1|I)<~F8XC6tH7IUW7qSicfQN+fr7HI%be+fcC zKmhN!fnp0dM=I?$f1s$hDcn2)!Yx^Gx8B7j_9HC`n*dT+*q{zb*Xzw(#e?EtoxD$kzsm^|yF$kade+98g-} z`ay9`UC5mWi*28bHgx0;{gA8AE#!?s>`piv+{8kP67@}nmOmbQLm#%%C^hFc=q6Hs z4D#SA&TMU)o2zD1xl$`sP)>`psXrQj_Me^}J(sQE6qHt>*lO9Jv-lW>bD5XpXj+T+ zGBf8osB|rk*$mi!6Bt;Oa7|-?=(*QbKe`vy?zciU(z8{lrDFXM0#r@ z37s60Y8EFaU<^>&%BHMja-xu|N$@u|y1U~lNlcOL5(vrA@7AidT5Zk|-_~Io>n)A-mS!0zE;PV5 z_c*|tdmG@*{SEN#Jr3~my$$g5{S9#c9tY^&+W_5#2UtUPa_9wr^Tzq`9>;lhZ{s|> z_i-NF<2VQRHqJruI2RF<}H5xKH<9v zlN7!uA;JbMi1k{3^?FI*J-i|I7@>45AU1X%{Ib>FZgpQT4(_7I<@a5HH^mF^1{dJX zPq6@RiWlIGz5s9jY76kTcmdwx0=)ex7T|610=(51;O$>+0rra*U>_G?|EE}h{o)1K z*B4-a*#%ho0#pR*z>QTV?oevu$^`vJCim18YRUTF@In}WeDmu~OVKJ~j?r6dBQF^e z&hzbi5`sbBDR?)P$!MBh!AIehXT4dI(qj0z`(|yv6iyg7-8+1r4e-59;e(&MZ`T&U zi)8?aQAi{vUG)5~@WMK~v5?rRtCI61fW3CeOADU~06D%XQsEy9++wiR3AP^#+G3D3 z5V9W$*kWLR!Qovm7In_u)OXndpDJTN$Zmnx6}biA=kDvu0)p~P(w2JCh!}4C>5zR? zVvML%cn8d{&-^$u#^D}c6Ef42KOkPG2L$}weZ9Z|w!{3|8NGL4H!K_9_eICbu^dit zkc<&)w0G9|x0Y^Bt{YRE##Cbq#s-Y_P1Q}cO_lS1b@Mgz^$fLY`D#kiI-BJmbc{C_ z+4*&Tj5mMmF}@gV>=^&Cpe+U&9pgU|u*JZFW4w8XV?0lrdE-fP^ZfbKgYQI~8IJxp z>Cq2Aci+rC`ir1``JJHtY=Zi23N`%PeOvj#G+TQS{Alpa-u|(`Ee0Fg>^~N?#UP{2 z{v!c@TMR7N?Cp6mITmFJ$3veCAGqXId>J-Qw!lIT!elKh0W7=b=j+KqIP`=QJ{2Q;DkTo-Venqo1Aqe-J{2&KFGDK_n{X?4_^h-l#)HBJ zNLYXfTYj?Y|Hme)zSv~7W>T!F&r?#_&|<28Vjc9BO@rlx*YnUFa_BJYdl6(@jaNo;cVNYI3MtH zI?lYWjJ-H^FT|Nc&aRnmR_g0-1+{dr0XOnobG`HnXquQJ#QY#nueW`HNZ@+}agSs-aR%E*k{80XwN6bS8Q z9Hbj`Xtg=g#=6uJB+KYU;1_O^}vW2S`zmkRaJP+kJrAsd1Nud*kK{ z#rt4)aa33Qy=(ClH_$XmMo??v*LSepiBQuNO?E2VWD+^rXf@DuX9FF7*fi@_Ys+e& zkqP`uW^0sRsn^;YXb*>mjAXmB!3;2K!t@QTJ-1sQE6q(baG~^Oi)<%1Hqa8djrOIN z%~pGc*OJ-Bmz!;@4wPUEN;jIHk6POs++DyHbG}2ymS}#1ptsNhrj4eV?S}QS(qg_; z8+8JhY;>BNsjXhSC0(k2Zc0-7g5oCkC4 zhD1ZzXnCesA{tB!oi6N%C7z-$d-`dPo}a{1HE;G~z0o4`GT4rPTU*H%?!kIPx-@Q~ zSu~s^+gnLxV;db$qyOT3nC=N>tpU8(0^$XPxetQ+Q#zfl2k) zVRfubx9M(VUQ&urxOp^&@p?ApFUEKb7`D!*GXAe~9Y37k_@&w0bk8;w5~04i`4MgB zYgX!xLa~>BSIp=YpBvYE?&!9yt z#s+ps-nqBXi4yq=K^_SIxvV$qADh^Yh29eCA2%?gK`xfI7)XMnp|;TZctU|RD#)5q zThK9vg=q1x5nDjxFt-U<3MXk>uuv?9M2$@g5<$X$u zJYGfc%7dDKQm_L+zHCu7i}3k!cF z-))-HpOE>^!5V(Zz`2O%K98umOnq}4MBdO(ViQZva%R6k^V)v}URqs$aR&CXy96Cf zjQrixOE>rsqb=Hw%bi+WCdnl3tgm1A$>sE{3dj1oKaSi>f3zNt0i7>_LUSXpa_yZ> zeSicAOb_U{{@DncvUiKiqI(Nc+CcpbKZqwji*ID1-U4&HHT0}AH}c`#)*LFL2xOws8g^uRnRk9;`5 z^-hp>O+Ry8j&3HGKHx`8Q2*psK1f zkiW=#n`svrvh|G%w0m$3bem!4imb)%Hrdc$Lm-xUT6xZ0cDh%8u0JAYZ2RP#+d2;M z6=Z2DHm9euf856z60Qzaf(4QT@;Ai#n8Rv{hBAH+3$;^ZdFG@_X+7sfZfU1G|)*5IZ9D<0c9cKjaKaK zepYQr&t}nd{&qC`x1-rV-_dM=My2tVGUe;HBn!-7xFco6hGOED*Zuz2BJ1eTcY%Ao zFA`S-^Lb8`8R{Lga660Ngi5;N#FN2l$S$f@IUjkSxcQlXY7N00wwm+=lzzCCs_+0i zz9BvOckgX$JVk%BB(3GYRI31bF=kCr4Lab`Xu?|KeLT19c_%#!Ih1z*&YBXM{oJHR z@x3{ijsZWaK&w6)dHD0;&9h-?RfAx)T&40Qo!{fu1Ux=T?#56i8jB#eZ3Q6(k%G(Z zS_2OY^qJ^?D-6aVumvbungg9SC>2I6*s;2K1y4NlhGITTuP$cHCNq%G?<}6hCWYB9 zd>8lVx7LjM3qE@i+;AH$as4Iomvt*=|I`%!rRG;eEr6=ou(s>15sS8gq4HR;4IYMr zzlhf9DsFC4)Q&kiVl!358k?*kA%^F{IuaJUgP`DNKmZIB=fg@^*pJy)n^aXdo^k9z zBjt4k@r#w&wUFx;p7ztL3jukw4_-D(FLo!-Qk8-MXash zWkuJF)$P=O8T&Rr%I_&$Kl6h8{s!CB$n$6)=$mi-86^o>5xTs`^)#8ha*Zuw%6^k}|9|Bu4L%$Z$ zXJK@I{lbgvv50HSdSCoT%bbQw2w~5!iv_UmVBk&QoT;Aqfn(v{>c!`r43-V-T#D;b z8LVvkZt_={yk%vtvgZQ1>j`s1b54$9ZYOpHsFoDDX2!9QxK#qR7#*P9GE95~Qz0hP zhy-#nne^zDwwju7iJ@d}wiXnEo%4C)KMUM{ITVam5s4ubiwMJb5L~$a9c!XFny6|D zUCgv-8ZZ(>z08-QUG7Jbt>Dy|L7)`qn;6c?d~Sw+@RI4o#6Dp9Z0><-{xr-(M%Ec8 z-UPRA;9mI`q*)c&xdI~}^}V3}Kq2+@rIW=Ju)>KKU^>&(b*xpwIZRnCOD2LPVAY?0 z$IiQr^vU+-XroEgPp$P4X`AMjg;9!`T~v+9;?XMvP!yF`iwve~EZj8^O5|7qsVPyKt3VL@Ct{H@Xhl+6UKvq|^#z*GeL2>S&_;zTwxGj}* z?2!6(fcmUD+DLJ?4i(|o;RwUmH!-GveVx2a)GSo|M~LPGtv8}a>d&S^f$~^v6#uh} zE(;)`J`Zy&IIQqE8O}x_Z&FXu2R;aOWL-M)SSvr3+kpCJ>m$&kK)%CLwnt5*cH4~+ zuHnblHW^236J}sigDC#3+Q$vx6_8l2wa7!s2m{0;!92o%)E^sY35Q5!RkoXdBPhBt zf;JIRKVlBB5J2vd`v9b~@uM}W@Ddmcr-J5iSaKUXrba5*@QC;F5&Nzn3@HEvSRK8b zRhoqMX!Td&pjQa?3L9JCQ1ifKxjHq82e`Ui$uPz%f-7tRW7=FPNQRWB=;%gQ( z%W5_)HnTWn;CEoa7z-SGBNk$-HbN+&C+LsC2)QE~0VLxz7X&{FC|?>kCOCfMFB+!n94y*_q<_%FK z^==;M`L(qUAWw%GLrqC(n5&`wYe9{sxyH$%p*-Iji><*4vG=eJ=YHVFm&$0*%yYDV z4zp(=%TCf4TrFC=IKjVXp2ajgU;&v+8MJ*0v2{qC!haufy(tzFJ=cz1ADv-AtLMO= zTW)ZJT)zfJ281`z=h(fm0uSvXLM!t4k|Cmmh)s~_P9~!pN(#K|v_rJJ;s=)HUO?AX zlbGduih^Jz{9x+!8ICga7hZb!sVSY|rprVFq$;;FbSxAm<>foMOkI>Tb_Y>t5G7H1 zfhb9p^?!J7)W?YDeGC>Ytf1AVe}JqB`{9DPJ3doWQ`V!QpM=q^bh8&S2FfZ#?HY8N z3RIn*!HgM_>54L>pOOWiA>%Rk;=KOq<+GV;Quqi$3pra!YLWM16{qo8+tv_`s~Ma9 z{+_s3sjejV7L!V|GuoT7#U=DNvrtUDXh4WrHSpy^}i zlz;xKXLjD7=OZd$QIJeYc}TqE?ax%kGz>-R7k$SeO{fuThLiJg7~oZ;>WR-B4>o@I z^t6wQ+UIscf6j6N6o#RlT!z;cWLe=ffd=lnNZ(}uXnWfqz?BlYVhZJ^#(9nVEEoZQ z%`C0vD&TvUdFZSZ8^o-^ORo>S)pU>A^M8y0mKiGQSJQQ;4L1+_K9r+SCVT*9(ABqi z^hx3eBtXb#Ttwk?qI)}0Z$O$NcR0kGn)j4-=`$yUk9A#d*}2n=5AxbO*P`o z5TZk2FQn4_V-b{%bQug)Ys^4VK81_psAzW)B+ahLB#isd@XWq)M|~P*UtmW@QGdpW zEXO?XiS?4{;#sHuSRDPG0;NA?)@hCzI$D=*EWPOL7JJySu3JL!C76!S&<8I|Bg;w% zb+!yro&C2X)!@4z)xl4TRD;_g)nFN<8vHjP)e>AUi@O<}jZ{I@cVmTFM+@`8Y4Ktv z_{qzM&ll%_A78vJ3yU|c@ z#&$H#=3i_-#&=_4xOwLtB!4Q*K=*XAUaA z>)|f@S^R((Rf-RJDzfw`kImjr)QMFArvVC}7M9wSNA4$!Rr|9fQ+zLO8^xR2z!np2 zYE@>5HT6mRt5H{XJI!hEg05Z)VIHF{)t@QJoQp4FSc{{Js4)*)DLhaOV{3TP!lVY~fGAquK&^WEkz@C}pTT54%jW`(Jn}VW@L=kSv8* zFIgSb?@mz7>8HghKDfp4h*y}0J7UuQZ{o|(_CijU`%B0Ll=8(iBNbYVX3W!t%ozde zMxh|h+YHJ9(@}7ATYrOaguSCX!duT0?4*8jp7dkYQo}It)5oXQ$)PoHl~~F8m?cJh z2k55p*?jO`ojk;2<-=m|6%kFaGM4u#@d6Bx5nCmU*U?4o^VplXNK%x)^O1$#BC`Q} z3^=jS!NkkXIFkg1-N$isH+kWA)RGyG-C!6mr6!|RnWZPg%75MIFc^%7hNIvXqs@xJ zgu16um5XH-D{*0iS6*}$#$JCM4jI223o*+bp;H?+!1o`PZDIC&^}yS!o$Ct4_osZG zX?F<~bTdTXSrOf&p!`#+qbq>kMjO3I?Yp3eu9+?@lJaWlJZG`cKBAdBtDP^VDxP}P zvAEN!TRW+e$bZhg0`ZaD+BFcbPriYcas#xyv!5I$m{!4%tz*EeXTlWKfCOpgVtAl5 z_JdFXP3+KD8T8AoGeGLFhJy$ z9e-HLgntbwSBXwVxYA6;Gh4ap!`wzsPmiAW2TamoHIB>u}9T*A#2*ky-P zZoh?rSIS4LFz4fqoXN>L?>AS}9NU#0Bo^5Om7R>s>hd=^y?LkGFwMqQ*`sjVxDdv% zKb*!la1cVr#%vy)1hx@xPCG)$P8OvPH_$-2qhomJ@)TGZSb=+W=0>IR7eqE#Eafh+ zourpv>?%x^pOgRz%T7SJ==K1?!l>k}VRaGKY?ZtJU)8qksv3e|b@xd~Ccv<_b72Vd z{k)pl&#RW)(0|wlj9gt`?eY>+!=ZXrMP1a$K4UpM6>``Mvd=Vji%^1y(R5C70 z7u#Y-ff>uuD7FKcWXd1M*)A1m3QFKuYdaoa&<76;qZ^2_w&PV3KrU@R^R4WmtI7Pt z(PXjfIppjh8qXW~0V`HCSe|VSu`?dP6FcZwfHa;y2MnO1@u%S0H*j{*scjfJb>x|@ zlCt@FF;9yTrM~;jNCYaLp2K1ckp&i1HMh(=tYID|}gRXGUi6EAt1BohFY zA01PQ>B+y&T>x>I+akOW&ZpP=*U5|DsuMSg5ed7CL3HU4hj7V@tN02A7n|ymsgBKQBwpMqoR}+8a<^>xM*z8pa39B%Oq$JRkZ9h)T48k#-9o|WT zcF=&RRXh-#g#IaiD-)@SsO$D>K&^@P*o1X~C@R~PIxYv*FY$b!rK%W{sVvr>=-Yr( ztYUJnU_bf;;5OZne-U)Xu+v9g7e@qB&I2~B=4OHXc#9cO8fE^g5Q+b>I=g=hz+fJn z`wttjmnbp?avb{Fs*KRh0(4uz#RhmzN$NDq`yzR&xyRmJMd&gOGk{Yv)0Lzq^5~H} znFqU_X%y#~H_F@LGqK1#XoU73awtQ5{)l))jX#8o=~W(pqGPoupXk3D``559I8{Wa zhd#0PY8eS`1X*8LI2z(hyPSWWpcI=47iZ#OZz(*SH8<9LJS1c03iC{n$H%46v0xbx zqyDgSbE|L{=K1Z437&&{oW-#V(dYYNPm5zuYXqtr4Hh?De8vqfdPbL4+WH7PvUE7f~F z`7wX`-qjc`bxNLjE`JRyF~qs8dDX}xsVi2q9RY?;%_#FOq8*ew_p{Df@{>ucj`@SZ zA%A~GR)IqXOEsC2vJNeh=3<$@xz>v$So1GChvJ-dyyZAwa{&5;!UIT%06$ zAN!wxJE)bBip)zt)OdfmU;OjZCGbu3qC5?JCS4{!Ho!04N!oXywiq*6JA-v}W3diq z$p5(SHR<1iW@x{2FOs_tas;qIX`$3UW{gjfIpH+ zcfotdH;}+?6fQ2aoOGIq`kA4C-2_dj_VXQQ~qW+7_@%?C-aY<0?~Ob!^IWK zj&**NNu3SS0XP-JMD2NU(=Tuc-v*0`ok#2>exA!5;5=|5$w>I}h#CUPk_ zfK^e)eN3E=^0$ARxj8Q~#S=S60^-zw-H#`I4|Dn`Fxx9FByNEgO3;v2bbP3tkh~DPfz_zN9B40j3e10UqG5YDfw;i3Ad6BAS}50L zLvxXx>$z2rMU_$lOvMjx4v-tcw~UhZU|)vg-*FeOgernmCs0W}xHFYW(FccPcyw~y zJVYI_OK6vq5V&~w4By9Bev$zrKXv%@wDH)zgv;a7^Ajv{9rxpK8Vvw5(Wj#LfGyV# z&(E=h8{dBf19Y*a5j|AbJByJrN&0A@*{dlD{senPWQSusVd8EA)B4>zd-cqA9v%0e zzBoDkZU5*I{ysU~@1LAJI~2c<_fJlKfALa&KRfOpy*PZNeEw(u`78PTHfX`8Cq<{GA<)ees{>fo)t6jsiZxV!Lz_m`h+e-1PCzcb3Z(@+;QrszO12hmEElkk6> z*9#jKt?VePi%VAK7n4wzCVeSnp7}|w>H9jYB#9svD2b%p%wm?%lSXYP{xNnx=?Pp7 z7#JwT^aS@J+{<0W%j+0s2)1szQ%UjdgpOpGQ(zXq$n(BuKG*k_F!NJC2pJ5;pcU=8^-`}HdjA!wH$PLq_2~x)KR6^ zJ;3nbf$6SCAIP%2dR;>eWR70GeDN|JQ=Xvl-ZkE5Nt*l|QZvY0VR7KIuviDbuoI>^ zf52ofjE^eec#ck#*<}6X8iq0j&BB@WEhDk!GxjA-9*P;k=&OvoXHq#&=O|9y3&v0U zlRsRsJsGHbGJq{tl>vE@v=e{0^2m7RnBKC=UrH*Kn5u{Fd7Tv{r@TjWKn6d^VY@^L zEwgM!vRfjQKFtg+i@b1`;VxPhGOaN_N20a-L_J5r1sMY*$!m&Br^9V3ZGnXXf zGWOK+{j((KC!dl9xcESKjn1Sg3W{K>7`Fu-Y?PgqnkkON0xuq3Dr+irvBSu8?KEKX^P}2)?)qg{={B-;)yug)lR_YnK z7|#H7y46}eUuvc5b62WfUUV|*i%kYA#z)DOp}6kJBjS*lS8?@iL_L60B_mJVWftCL zyx=AU3Gqk+cY;>||1R=6)m(#I7M8|LHv}>i|NR@9o z4gAR;=jnL|2#KU9_rcJ+=t7CL0$A7Ptt>B>X zhjb4x!4189_0Pf(7}dm^#J#q|Mf+-^!g+JNWVvFm5)qiIwx)j{*>!&Yp#7Qhw04BL zLQyykhNXI~_RoAX>sc689y)hVlWL%P9C}?LNh*9d!`-;_IZfvfnp%!1mI*tYm^1kE zh`lq!(E#a1=m)Wv-yGbzcnNn=M1I9+kCzLiTzH|Ya)ihmhgTl$3Jjv+!J3zBA-}Ml zj3k5h>iqi1!eM`HMXa)5O{9sORFZ+U$_mlXr5=uC-bg69*0W2%(0NFN^ig1#_?}tx zd?=+UWfG5PWxgpU@G}UGMbzTGb|duDgnCTk#a(Ez`!L3dYWL?T+;;zyT%bPLhw2Xs zuWhaH&CJ4Y^unKK7Jh4!P<8(kac5WoAp`D^TiMx+WMO~qqQW@$wjs}FiguW}J`nr3 zmoZ^6o++VUx|!N%p*XVjjB!X@(D}L2DvlVS=+ip)MSwoSWPQL{dsuRgsFmjy8n$e6 z644%9wpFbi<|u(|2>MK;uIdg3-UN71t9s$Ue}jv~NeF}enadG&(;QsMZg8$iz!v3e5&-%1wvS(%9@XW>zF1ZV6v9|;=UE7@!dg#cY zQ)bB*a8nMOxhWywq@_BxEd2pHd*61j0+xc)5fZHZn(drT{n4`7%8N35&6UH6KdMHoJN0M07u+XM{KTmW~k^aFgXu%lk>1< zFE9&dhJ|UTs8Imr;FeGxECSLX4^k(4Bo#x!e?1;~pGxEe@0ffkWHCZgj>1XBQm6Ix zQpfeR_9WD^pYmrTTYVks*(Zs+j=${eLlMh5cH{UujD~jR-H7ErJ3c}tB>RXYGVSbZ z63c&h0!P_3Ok4JCiRJ$0C1W@KU~4Z;J^Oe6vA-^Rvg&|p_yqbL)h z%e@FS3@<`;N0MK3;$Hto)DS;C#HaeYh^vlM%57@u~ zqz^er4(|_#2jgMM$O4re8(0_*gV+x3l^!}Q3D3DIy(CE=JTMgklD|LoQA`n2ucm)8 za)W&RO4

    `^b+mye^H5xVse?#tbUh$xLfm-=%PbrZIi#6Odbk5?k(+hG9Q|78o%q7P7ZeVsVy%Hbo7%9xmhTj#&eU#-bG_1rWjuk;s3j7TH<~ zuS_EEP>A}lXH@~Onx4KzzY2yS=e;m%>T9az8H=XW*ol;#lkjfz? z+pE+&$&R;I@6>XwJ|i^+#eT}$NsQ%jQXY}*C?4G6%`TCzN>0#w_r9A{D&16lH+f$j z@Q1m5K*+AUv(f(gwcgm=ale0l-LCDp4<5KX+nal(jdr`)?2#Un+pBMGl$`)7_v{D1 z*lX^Z-L=adO28)h3%?aq|2Oo5lC4fvM)V-xA>~!V?6vu;2Fl^D?6MFbB${HBhtueN zN)DJW4oCZ97aO*nc@o47@uVCpn5g*BD0)mJg?29G#Fxn`%<&_4a9JzDbAU-jkGSff zvWg^_LJ|iq3Ko7)I%7}-S4tE^E}nC6<(R>`jxF8V4nva+swjWX5!vLD01qap)|)*$ zVrGPpxmX6Mb4E&$JWr&R8KP?7rHJ;9XP9v*i=>aU*EYj7&V=d|rEY~_07mbL?(k9B2c1DjQefS%|#mp=V zP`)obX2I%F?rAvb73Do8o-^MC6TYTBK=XBWw#<5clhICAxHMV4)e7f8r@iT$->B2$najtkZx{Q5P_Xd|Hxk)HPMm-qR^ zPn~?)d1Oc={iJ*{d0n~4XRK2BSHXuMybgq0)Q&~X*sJE!Uhr}1O+7MH`X>}Bl> zsfU9P^9op*;c*CMt#9sHFX)x@{}1w0vKOQpW0-&7*hq$!)5Hgm^uQfYfIL-FcQAF7 z=!v_Sc)=3Yj`pALzdSN%eLW3FLqqam7~&f2**oVj7-rGkTMZ*LP)7UZU3)Dsx}*^3 zLU!F}yF2Sxe-|(r2c#`0>M-TIh`ga_ANInl$wZKg%l7u|TVgn5CE?vI&B*Mz<&|EN zo|=F8!&j9x1w-wE(Jyt%p;uleC8ry!3%967`)X7mP@u*et2&v+c$Ap$GjSBOYUP<1 zp1Cq-t%^Y|R$JsJo#vCrUgsNbkNj=^4mVQTG=>-G4Ni_%e~3)DvOh zm(6(0%>0xE(FZt}j5MsD)7)B7i?nLW=huI)rRJ8_LTzW(oEGM@_1K${SE+PbHLa@| zg=Yd$sn4vtw&v7!dNT^#zGtC}Zbm9&&37~UdQZwjGj`ueYS?K;S439SboAuZyx;RW z9Eqi^aDo@2#w7qrK(@b^i`eO87C4U;TShZHxWIe!ti(KF^oK{=T!TF{uFGpjaDpPE za62AQFT9F32J$pSKuCr9dkbnzYSvn#}p*qiAs<5`OQKDx2&aK_8 zvzyetEJGiM8N6FqJ*wKMkT+{gLVPGnm`ZDZx=Mh{`6A`~>orX~cOGU^1R-%`dN&%2 zh^aAV^4aEE2zYFoFsNLJLL_J=bq&5?hGA*4OY?l8u*>keExS~6yhR30a?`Ykf+-R@ zt`;KnW>;!l?b6UMHeJ-M4sCJ2l#}l>otxZLN^xbnzq%$g-kKhr)?RZF*ukk;6n#iNsBcHXjP z`7NR90g~gK`|7o^V6TN`7`>vNSK5jy&j-qOO}*oyl4x$bNd@}cO4GWU7F2j-$@tJn z6z3VhYohT@uFbuYYiyFa+OTCJ9D#0s9#$;nNxxHW6<;%O?qP!WQU|`mgIjY|c)az4 z^AJ6KK@qpgE5Ppa7I0i8tC4Dl;|b4BwzEj>?y4-PIjQG~+$sAikKD<}Yp?lh=onBy zPf!cYJk``lwo!Hv`UKKMDK1XbG7~ApY0#ShQxBS1s0`?y?HF2G7NV&{KU@ zalnMW9(|~RZB}{IDRjk1>9PhoKey9Gzxzb7=vAUWYu5x6Vnh}dC{W2Nxt-R~f0nnIo;!1M))?(ZyarMi+&eO`r-$tJa#X=(WIQKjco(l@=bMrkF63@L^`4J zN?sw%K+|Rj-V8asJjJUwppm>e(v*wTX>B#<9V<2dFl<-I`709!ktrTg_1ep5<{3VH zzx)M-cyQ;g7&t8>A`ILBSQEHtt~_hCvg%l?zW|b6qR=<8&H$~(lZ3Qc-JEx7f!ok3 zK%zg>uhdj48sa$JUd=H)81cciPmkoHHJJA3ri7+_jw|2FYdh{<5w+7H?;pxziK#v2 zF&PEcai$}{lCpS_CjzHisqX~ojQ#;wlVGtVf2U%+AzI;n;VrH7l%{sDB}SbECh@RI zI^1Qr_l39K2^@vQ>Yxo8w%$n`qK44(7w%8|SG`p5doUitKi|3r25rwo0CsZ3UYSWY z-SRi-0?w!FUWx|*1hj$n)Ks>U0z|K(QPeY|@Yx`gM(`Wk&<5qvn3PhS>c@i0APtQ6 zJ^joAL&~)^1+%lrOGZlKsE~VQMK!%9$)UuNUzy6oikjBb-raK(PI@9-GMyU5i5)Do zcrqn=#jx!T)9Ytt4Wl;CiNJxhaYNNLfZDWZ=^kES;Z{~m z9Ga)So^)-4@FP!HD^}Jv20+R4S>F3@Le2{mj?5|G+`RX?^iY#RAi3fRxvoxnQZbDr zqN0lbkPK18wC=OKQnpe7x5O&z)G1X}wS`TKq{(lXqs;csEUtezHBN8Sg$5Oj^X9)7 ztf;<*)^8zSIxFRdQ@=CP!AxeIC54!-u6Xq=TwhmPU%z;L+4^bg>dJNHXv+$%^n7iV zp%(+C!w>)=-2)`^t7x>s(sD9lZ?-r%arFLr1-RuF;1*ZvG@*xU!mJ$sf=I?2(Ibx* zwU{ED&b#8!XunP2!}bap##_Zn@C(GT+sAn_Z$4v0 z#`GTMm%E^u?bz_elpc!cS-i+A?tc(X@m(fMmao~?id`-ja0;9)zxNZo%gC#OlUrO& z`T^eS`Fo|?9pZ*_cpfS&bb#OKhA4LoCza1nsXH`GA0mIG>EgGZR^t{Ergl4b_XM+c z4{xLr1AlHCw|}to_7CoP`vi6aG5oW>|k6;nZnJ~)dZj6D5$j)3{A!ziq#T;L-Nv=UlZ}b$X{#H+c zsoB?4U^*V^DKHHOT1uVz!XaQBdSzbfb?VcYLwy@_2nJ&g!D7rIm`phhf^8pmD&m|# z#&uYi|7m|vK0!DmpWvL4PteZDCzxmC6XeDDO*ywfR$O@_xn<Q%R{ie@QJR4UN_z4k8Gg&t63G$d$CH9%R&@kEn+`ki67CK<=Vf|M z95T%A%EwP5=dq^{Rvmon%-)H~TDJO{`bSdYPJ+$@~%qG-rp7umn^P zPc@n3$Jtotl);^p5FCauoz1u#cexim|xu9{T6k6@$0csCu=P zUV0l!A{SMADVkh1?P7E@$rTiV=CkRHq|BxgFPcqcW>#M)fSv5zp?}^wX~&M}siXDl zu#P%Prw;YfNjnruCbF|{oi8F>9_t2v$mUTuo3)9$Gt?BmW>6Esw{8w!q*jRZ1%ewW*@gE&*b@H87Jkr z(|BI3y^@zwU)(vQaDUs&-iT5M4=X+}lE0PE7^1d=7B@TfS}p58p7&7f0hkw{mspdN zc;uIk#UzlM_~t)7@gOsE0=O&e!V&bco{ATTwNlUfqhG4Fy4uGnfCucUQ&=x7xDs9C zN__pg&=i&C%u#s-(e1t-f1wltRH06+@ib0Q!Sc*Yu01cXYJV{WLfzhutrdC@F7Wr9 z(Mw9vgKSienT3yxCcI|@G0nUd(4Ts}<)|xgz>kv)V#fG|m(?p_Z_cTg9M7o<4!cs{ zAumd6s$(Wd#K6FcQY6$bm-mutJUwIH6iO~!8yzj7jL}UPzmr!rJywnaa`Va3*&~$h zvqT)7=v6p=aesbZFf+d%QGs>t8rpU=(;BRS#Dt>nMcSjL$Oq*wnSfbO8e4Y9>)F3P zwbgi2kZirK@toJWtT!U-O)l##Wu+c;_ps?T)h8(rhDppON8b(x(6H}1o<5~84RS`Mg0dOKQUxz^!SVXdIqw=>pHR(`tDl*ssS;CDPN&38r^FSC z(08Ah*MD!UrRD~&_jyp8JPtuIF%e8}*qSjDpBJA9u70d;Ib>4+1K-Lwt~<|?4^+|J zX6f@nlk{1cBi#*mZ_XK_1^z|n@;;u@aEAP=_hh?nJ!#af$K*1P_PZV{$}yY}!K_0j z3|_wx!AV^PT3SBUb^>A$_2F_ODJskIc`adgIC~v& zrG;s(YLAwL;VALZ7Ok5zGvj&mQnk8!x<*XW862>VE-x3Su6!TeVGVt5zG;n{}(%ZhqXf>f2U* zv)YD#6Z*GO-yYQ)+g1g#FI$cJM>x1@7J1LEwv$R7el%*;_NdZqHQ;9pN;hj(rB$m# zV~}N4YS>Dnjinnc_`ShOH=&UYS#9%UrM`)7xh+;mZ^pr$lu22H z2|nLqj_%b^eQpzDFm=c#o9v0)8IC(mXy{e>p|jb~$vI7BN=(F_Z72oK2=PCpY-`!IHRYnVu-TpHq41IEv*l zvk6v>9Gs|K#_-9MJx&fgHhoOvv!4A5K19$bmV2=O5=%%w>+GQ%hd|-6((i7@*$TnL z2PocDcuXP+|AddUB7ck_L6&{OGi2g%4C|DcB%$sijjAzly|-g71%%_8U=K1SkgWIP zp&tR$V93IIp=+!{GlrruUd@jwnicSHxRWS}ja+zJ!ZbeItdANwIa;9RbOV*Y=nI)M z1MS*5?=xBjF%QbalU{&cZkTRRO-6P``&d;g2B~?+;v7sB7=K$BNv+pYOZ4o2I@Uj{ z|IDIZ&*oZo#gV}hjX_Q_Q4+K`2cCQe74MBKS9hnSKZt7uQvId*WmPpLUYhStFX1#y z-xUKbnfACAc&DTX*sZ}~qV@L}KT5d+M465my?e}`vIYb(aCV_GtG8z(j1_m3*d3eI z0V1L9jrreP&wsq#lO2K3QQ;&YHW3q$aO1#iD+d6#+>~P)NHrCiSRCvNFY#1wS7%CjG3Qc2$ zrlG>Wu>uu$O?V_soU#Ahkrm#98YZjAhlLmKX-DVsb9N0srg(nb$gm3Rz4f{=93 z&qq+fvYm+c&t)XAnc^_&@PM~nh3V&;4L_J!Grh=`QC8!Vs73b;#khYVdLfs*okJjq zPd?l{M1Q}v2yDIA3)#K0=VwJN=izARMHS>FU_JBMbSkpp62pc5e5AJ}NDi57#W%W^ z5sqivp3NtyAttE7@C48YJ)eo}rpRuh+$>)Su!arf>sRz_9bzzhFY(77IZ_ejTcUhR z?}YmbQkzyfEaw)Lq@}C(uyz(v`aMx-vWOd!Z8_j%|J(>&l4Il3E# z9bVZ8pIU$vEEqFUDmymHukBusnKYi>OaRl8=w^SKgv>gzWPH=Ge?2+mVwilF2jq(g zHXxGuND~&m7aik!54!P!rn%mF7~NQ;jDKA4$o3m)5=s5Aex^%PRexkg&L=lbe{7euI)HU1{&B?ugfsL$bmE3JXq8Yy+NI)>)Ro}P=5s+ z8(ct3w2AexIqpoC+1|`THQorZI|ZC!2DO-b)Iz*ElrzQ64?N~ z@+{$idC6FV;yCJ>1PBab%Pt(hirL9sG23>ERvMqHYzDQC_?&m6#Z}9e-Z5;@n$O zERf;iIBUGJQhbQYJ)CWd?pkq&EdmS@UF#W5u^b^xQrkQ0~ZZAS%SM zq(Q*9w20Z2nlu6Erb9tNiFJS-;4haAlgea!LJJ9l;%UZv(sEmudTC{9+1!l9UTs+k z9*W=!rFhVxax%E7$E4SO+0#3dGKIm{eS+b>ffbcI{G?^g0FBxeH~4bceTp) zd-xdBk8epY(>%OQX)uDQ%9>g}_*RL73sTB4qlUA+5?p>*OlI+OT)l-D@bLpBc zms4V7R-|7twl>R96KGuf4GzCRyzt@15@bmZp%!wEK&FXOGk?Ia&r(wwQq_vf;vi?w z%{!B7_oXUL}TG7n@kfHXI`FswG>@~VcCg$%*@7j*u{uH zpn*>0&~@7h9U+D4D78hJqsWyy@wY51#>{SF@!plD$0!bvmKs_>W3D)c`WfB2){%tE(HYt4z6e>h z>7=B-#pmjYm+Ez<)U%EoyAD*Yr2HD)GP3PJ!V(h!bgqd3N=)2E0dg?jI*ralrvgUa znS_%m&VMu+wX)X%lBlbaVhs<>a|0j465Kl$Sc(v+U=RI!mi9bGefs0UH|L?rJu?jir?Q* z_EH4nUI~k=MX*ig!<6TXUDBs41E*zb!7(*}kk7A=rHs|nF-nUSV*_b9V>1&E z7=O}CxYl{?=$8Hkhe)}z&{1RCCaKrguW0H~uqa$Grnvy3*dDV=3#O$sqmTiRa)G+s zlHi$9h^~M+-os{eL9yYCYmqzl&5N;MvFw^~9xrHo~?81n=O3N!&LcjTN!Dcpug zF4>BiSG@|xUXbi@Xq_Bd12=+mU><#$q3;SwV&0%N^b+Wkk%9|JcXSN@O#!X!+zolP zV|*E$ojv8ITqNTP!;mg!l=*NP-&9d<;mnUq8e71VTKqa1-S9A_jx}NLf*8!5Y=6nRX(Zm7y^p#jv8b2g-jHkSv?M;@u8cz-Jt4D zCLV4Fyk=26(#=XH@-m48mEOaix8_%w&Dn{aHWWHO*C|Nb9^W94?_jI>j;JLh0y_F} zY`1x#yqJ>}$RVLG9vkx{%>tCSk$*4FNGOp9&_tBLfH=f)Fp!R;@B+4ee8`$F7FL?M z&qCE#5jC9I=4u#(5phwrm4p@tN!caEps~;~Y*|sfG8H;O`1(cs#cWB0j*QB4H(MW$h?Afnt)|(nS z4se9+FR$Y8iu53WHG%m^U`#zU@5OJ_Dv5jV>`y>0pt{p%_|Jv^&fvd+{oWzhnY}OQ zahjagz@h|R$9_`Zv>iAR5`Rd1(g14qdVs&$EgNw*L3iKqxm{D82*+M>z~1tF;GKDt zE=ZJ1?Ie3PtuIEhv^z{ghb@G3jnT82!VWphP!#roaoQJUN@}>C17=fSk}c?thto

    ?orV7@q{pa5k7J1oZ($Po@(Xm(Y^fXv!q6R${i%71A#`^MZ7i;5Za zn!sZ91SSwy)$H|xJrCEk)8aq(?M|Ejd}wzz;3s=%JmC87JK=;zBqK+9q!HL;1+j$1 zAoGSoMV|4L!U~qv$2fgmZcIzXF~QNy&S6q~?+MqG=grnq9L?zpNrI9^8u)(MS zl|`gn%P8T_Tj#1%nSYvZ{f7l!G@8YCxvLKiOkl?ydyRYwYUya01348v=MsIC@qyXg zHxjxF%62&fl*LZJ$QMFT7ormmaYd1}`-GbT=v$b2M+Gho|53;q}rrHCg z_BTGcxueNTCnKIUb|*Vk*~y4!jorykRdzDsSz~vyQ||6H6w=Qhy*RrRb{HfaXM8u9EOI;qCNlCO0z_kMsUKNC6D~csjNSAnuz#=SvEm zhH!6E+uQh?yoapR^OGPjuE-fiW(K6w8D#?4z_TtlzS{(_feS#4Lq~rp>hS5ia0-yi zaR zO%~%P1#HIBvF5VQ?h0J!WtL{vpudR0>XrxD2ISOAKbEWkF=Xko$uMOsGCaz#)H!CUMvDg4 z^tx!fXRnFg(Seh)kl)mg3@UzewzsQwM?ZS@bAZc3r;u>rQ=v`TLSWZ$(2DoN?QMtA zH3bt?*W6NL4#`=hgTHk4I6=x+u9ICXmGq;wJAZ~Td@}$-n>)8snJv$`c=k*{I0-Et8jK%M3<+q?qI$0Tx_&k{?GN14& z5`RDOU6UF1%BDtPC`*npSTz5QG24V>NEoqds^2?AckA)KQNNpOD11e+YZyIpVU1H2 zrd%iyUy4v2rs7ruk^3* zg8zCpL}H$|G!{SiM{YFcziFTF-zOu_nQ+s$GU}id@DK+bAD0y@o##j>9vge9n zJ1{$AccRSt^!#^T{I6F(c5Vo2DHv!yn4ObCw0K+lCfoKV$Xf9IwVk6~U;#Qso~ z%F%Xa3P&408@kh&e&C~D0zbZWGgC&JHKHjhf6%9<6j&CdD_V@H5VH*34)NW*lSXn{VsXGW~V-&om8yf1i}o+z6TGI+crBc zZr3y(er55PSRScqWEL)3P$X9I3?k2X*k^M}YWI$qVRK1ZQBjaS3R^_47qUSwDLZVv zN#Crt(lfq(Jb1v8d6bSIOk;syfSehUC8Gjr*#Ml%Au#|sej$gcKDP$$$p1_bo-q!| z=(%`1M=RC@t&;)L6Bo-;R773l8D+$(X*6w$h9`#^^yaB4hLbDO8-LhF8~yC@^1GO2 z{{zD%8i8Q57fbT1SU#w`O@8UQBUIi#7#De>W_AX2IRGUY9guBPS*HiR3^fQdPqyV8 zL)1>1O^q?Y1t=<7Z)~VzO~Q#NNu#5c$qHq&&dfO_mM2iV2~q`cX5d32{f4s(FI`B& z2SxggNl4P{mFU%weShH7Bi2h(GUSA+!CryFaJGHJ2t)~yG-=iAw6UW!WkzFbX=9Gz zSjT4Rc~i~hD3PQT9*&7olW6o$*P>bh&{-r?KEG2lafz@fU7Hw*f_`Wqso2P}nfWsN zovObaBY)2v5{T9DN{RL=sIK*wTOE>47O@(wO#4r~gkm(m1b=)SC1wJ?+fdzGc`T-$ zfAx?odwrsJuw+1Ih@?AIgJf2jHGAwBYb4< zz2kvo#vvm!=zrXeJMZi#TX1W^4B?+T{%PQ!CjHr}*7?5;{;x=H+3&wOyvgf9thR@* z_3*b%e>dpwCjH%_zuQVpdiGcA)~RHjO4ikqq!gf*Y!JYWx>81{2&l!jso1t!%#8+p zb5SiDb5)KwK%qUg!2YWNm>wD z0JYSn3KsGWYUY*-kQ;pf{8F=FCEkBiqK5I^&s?d(z9&?vl0t?m26*@6pp%gVupQs^ zdP)_sb!QU*&N5)u7SzN$ zX5952hWCyBkKYZa5p>XiC3gMDSup92MjxKG?^$AX)LH0CyW!8*jY5q zD-n8R#jW(7Y3=CbNymB=&;-4=DXODk0{ML5V~dth(k8fUp5Ah98Oj|kWv%B)-^wQN z9(oskzyU0)@Rf26%XV^0ni+Wb0S9Y}jh(Mqgdgb({dvH{i;B+@e`Dgxzvn?u&86yP zWq%e#yTvo{YpsVyw3);@rk3;I6}5t+F6)2^z-58}UBH?d2Z3I+T*ogTc6bjt(n;1? zF|09E%A-2B$Sps3aL1W;%66A zKuna5q$kn9Sc4ErXA9>~BhgKb_%9X)-BVz(>55l`K-6IFs;*VIkbED{kLuYXbg z%+0?_=0daxvkFXTegLVLIDWg&AX1v~uR$%{S8!2VGQJt=1RzyecdB9xHX{GZ~ zLbYtP1Q4~+akEpHTSjU_Z#us8&wrCNl&UglX#z9W%rvOFIL1k!k?W4Eri>#uII}C&)&Omw{0Zr zqJIVEtYeGEgo5`&vf`E4p4mBfoMerYJNxcTmKG&KA}0_jl8_ub@%`<$zJID}yaF874ke(X~PSdnoyYePm-DWF`xEV`g zufcx?o>|R-Q{P?s6LBo4%Q7CL8U4-T!GWXzJt>|SN7;vA3-zW>x{5NX;izj)UETc< z<)Z#EyhnFL2oswHXS6zT8!`3A9HeD&GOpr-%xF$mCo}5EiF172xqn!Xub)00wh{mC zn#g~0ax{rBs?1DAhf%bRRn z9FGqda~hk;JJxKgYkx=0gestkJLCeaR;CH_90%`&C3;>t#+kzdcb5mKBS8kgA;gK$ z`P>+n;SXsqcV_8@NEKegm9GI%37GxrOWJ79Yl75bSozDkHgU6C9>Fdw_ z_Uen5Ct!3hv(wpxpm1U#ndOW*K57Bpb**JoZgJ&08ZGX)l7GezSxGBeN$b{1n(<1a zg;Na{?qJp@i+iu6)#Jx&T1o3_B^{4X8tZ}2tHy%Bc20|-To?0lUC=1aXLu!fBzT#u zK6EX)@!qx5o&fclJl?v3o{#UobdC-VW*w_zxPNiXIu^%lV{tTTdDgi&W_MW}V*`*L z#s{YAX!cPS$A3&0hfKMwj+v~EqJ7MiTu1Gk>Af_b&+c<(IxPmZlK+*IIHKRa{k=`k zj-ls@1tN+riF;fU_YBnR>^Oa2;4&b8QFpK0T3s>=pF_pL0~^jyCqGRW zH>*o{kRAOxyY-CoRdB$sl>nXW@?8h=5Vo;iUlcuinyHXb7o7| zp_j|VMSpdx{;sH%=EkPf9%s+2S}3Z9rHGvnW`YS&*?4 zWb?G_+B>VTtHQU`CG>4+Gdgw&ys*m_(a4mLdH*`VfH_Vz5)t*ltGbzRn$Xy%hP{MS zcm@H%j0-oi><}>ZS6(ma8A(1ZyQ)ZoUICPW2!G0Ph=8GII#NhAZqBCmkOY(fQ*&sC znvs9`m9?a%sHL(-QNfWhpjO@wM(6qBWnPJMq%M;~>5w%Oe z-M~s|Sb`;y5*MY9338Su=$wO64#tAWLf*uj|I`$l+A)SdMxIZaCX9bbJpgo~p%}eR zt$%=#^*l81B*>f^bEmn_p2fwG9h5#=Uc^~YBTN;QqE2OVxJcpvdF>Gxbl1gza@SlQ zZo)_?(a))AnvpP~>7hBqG~%bgPa+@n8@*;~@e76#zJHA(iI;l-K>sYcK0_!3P;Qss z3~-;JQ1gt*ZO9W%n91LTet-WuCEyW30Dl01oge`!>H=@nwWTuA4%Lx&oE#NcO3T_X zH%&<4pZBj5f*cUqK2Y-w+BzJCtphZ*dCY7cGSjGVCj|Y7P55krfmD^3bAW!E|pW-ZJ*Egk7IT>^AgV z>Vku*2x;acCqh$!Yyo!a6xczikyM+Aw2826;;^$3!l`N|zK#5p;L;=ShGA+Ip^t4b zcn`O#@#=ian*~v=y&?{lp3m4bdek@GJLK6z_GCiI4wEH!5Gj@eZquXw``F|?nrMImBpP@s93vNV zgqGqQi;lii)1Yf1Y(k!J7ep<=UAkZi?lvZx3KjBO)W6j$3842fIF9Ghx_?W!fe3R1 zqU9{lF70)J&#w#fTYfQR@rxg1dZyP@4#jNqYu?*Zj;3ZxQ&Z5)L_un$LAnfR?@09c zBlKvtL4rQ=R=aMZBSu&4q?a2UnGSwb`pnU=} zE!$53%ERarZV3}Q6I~ogIe$}(0cicy=Vyk@Epmf6322?-ob!tqd%YucMXw7?Elodl zj1Ma5nUb8t#9EA3G$8+pS-uA&&P#7+SJ%b6!GCBcUk9{sV=yXSKs`$VHlVFO2CB69 z=@pTLPl%>WWDbAwJiNfpkBUC+^|Zfuu1jNfv(7*ek@CRAy#yEnG=HDa$%t*p^=_$) ze58VkX*BJWPVxv_4tfEkr7T~#6X*5Ec3{{HU5~{Q&0FICkJz{~WGih=wy+hX%jEh&G z{|QdwK{2&+teEtR+8V%pb#SQN5jK<;OxY|hY?BoBVzsH zbL0PB7LFof{q}S7n+=K8*xUF#ggN%_a*K-}j!FEmE$;WSoPW)}@^MDQ`VU&p@kiL; z;)h@|7%hH)bP|OYG4pvyQYQUZQv$`TG=hLm|3GOJv+^u1m1l9{LqkBqWGu=vW|W=aJW3%W52H8CrwVtk1S)m3)2xP`_rB>~fQ5}yili)l@( z$GQ~d`E4&^&3^(kbn;N^fhm}vpaM!N{bH*ZRM#RP@&LG-{Y|7KKq(~cFZ8a=`ZF3p z$JPfFVla%3l+6tQnFIh;0Wq<1(|RuWBs5B~h>;j27FMt^zF#b^?Acs4Mpi_`%M`MP zD_U)l#Y2_FeHP3`jevKB&ycw6h7!n!e#=X{hFnGxDt|7ToUP*n0I0vA`dQkkXk$q3 z@kQok3<));dq|WFMg0IkRH)F0SkRZxR#8^MYXyasFKQsqr!j}h#nHPDD6pXGUVC_4(cMlEjM6s8a%f6I+`eJts7aZ~(B zpual;^@%_eB2a%Pfp!sKgSPxl+Om4l4vwUY3(!Ra4Fh-kT_4nVWmXUG(<}m z2T9~vUJL~qU-`MXHuHT~X%R;z>r-vdWdqh08~fvkYM<0~GSDgN$4l>k~c5 zclk`U_&qD892o%U^U(~IfG&4-IUma{kr(Q`?WUl;B(!^ba(9r>>sX0+-!AJsY=dOx ztbZE=?DOGX41$MY5bPKNmk{vxBH%p;0m~>WyVvpg;?ihyaogbg1O>X`F!vL_jL6aA zGDumwjH?Sj#Vap&{eb3giETH)9SJr%hxYD-@1uhpRKD~=xm(8tqmLV_C?}XWJC^w3 zTYPPbGm=g=|h@=g;pP5&(e?B=mtd0-dz*qj9~*b-#w?PQ>0*62IVb~Xh7ZpEa8 znquexUT~B6Q?C&{H9Y}RVzuGJEPn;S!RXz>WQK1mTtQTDEbIz(72&u;b_u?)%QmfB z>}4syf;WK;4ysHUf3)c0Q@H(8y!}(U_0wR4faciI#mFJ@VC(|1Bo?tGR;6}rJ?5MYMuk$fw7-QRi7@#l~j5^IGsMp9HQM-gH`3pk@c0~p$|vhy91erhr}}r>)S`u^BHZqSm8i_! zxdrVzdG{=bT?g*~2?}6yXn&7$k+BRfy-)K+R5pdxh?tE@8P_yyd#qIPVSvCFWNh+- zTUgu=M=+Bk!9og{@A!u6#8TCUMm!<3BVwv!wm^=>Vv!_CG1jF&(Z9lmyo4EH z4xiW|`VnrH-vL3|e}BM3|jbTrjlFaHl5lrjA!H04sQZe`ftg4;~3^*Fv5-QHRSgi@u^XiH57~1Z$NNMnC%hk z7>Fq>PXcE+?|(lFuJpvrf+*3G+AO%+W+7nx1hzSg&5(VXjqnb$Fjbv3hVfp#g=RA* z3D}Xn?LMkrLYHCMKD1icrC86y9n;GQ5t$Fw_kmpq{7CQ?7K1NF5@k{GsqQgxSo%z` zA+{?v`aXM%*hIWuz`siwwVh;#ZITn8s|ewiYF+1{dVgK#{)%1Ki9k`@%Z1f!TF zB_b6b6&gvS7p4!i%B7v~ZqL`# zVOp?b41fK>c0GD2S=0L3HMOrQvZFn!$F!jcuk_$tJ2J}aN|Rhv`eoJs2HK&@sk2nY zh~7~w4jon*8HG{PC)8(U@kKtqG{=Oyk4&(QGXl4G+PB-|nt>p}WoijlF=Aod^C25C zLjfrWXCB|N@F+*@`;yX_%Y}HDsQaQVE-ay^u73~grNo{z;xM6~Tz316Fd{rh?3d=V z$5SC?-B4lUk0snF`NEz-@oCOH2w(hg19X0aiDa=3z7*bV;3rGZvqHFdS*iH_q!yf| z;9v!>Aq!K6OQcv_L)jCA#V221xGv@&03$Y!@Lc9L-Jp=aNu+UnHmmThL~X4Si=7E> z7k~N9Rc0?PE^xg2H1!EY>JY|9o^e?4#6<$b(YPTfAZ3BA~z4ULRMKy>)ZT|C6t&2 z6$L;OV<5R{XDI?8^~G#0E@HNEgOd;Z-GB69qkvSaOyFYixipi*iDv%*vlB;=a3xst zw#)0&b(Sg1b*Y74FBSAcc7=qjhucj{lo=?^m#_3r?hYgBA>o}`u!rG6<9!w@G*EQl z6bb5v4TJ}mNEb>MI1|YYXu{5$ko!~7AOISaEA0Lg)`t1!8iSlh5Mi8P3VxY;!GCxy zUEcWO)Zzy}jbxZZxmRXy>H?NQ#Pc(cAJ;lH#Wiu+qa4nlKAS>v&)o>}O+w9KhXI+< zCgCOUo_BQDcH^k9MK-~{5?SKDlorr}L^@s`9$v>!fiRX!wX9q!0isGpXSE;e9g{__MxJ>J+sSI;Ic${P@ zq%EgCv>bfWR-7BZh@_`(m`9i!S^{wQhFTJ~2)@O@T^7MoBY>sK6u7Y%_kYy2wzzkV zbjPFr42~{Tmw}Lueke>?C^lhCUIH-n%j#NNDwlPmE`{-i@EPqCKHcrY=T582ekOUn zTC}PrBhzH3xC?36lZYHupH-)8mr7mRXmxE->-t8k8;VvJ%&4@_JX7JzmTaq5*Jib@ zZS=afYM}?C^YK--8kY|3dVhr(f~8X5Xf|JrMgPH8j$pMt{)^_3UC_Dry9`F6{Wcm< zI_xsisMzfeTMDPh;2t0K}|tkAAoV2;CTfdV0P%28!#Nip&Iw(PP zqzZlDKMVc_LrRC8b$`S#91r@-+Xl|g*?DoZf}ITvtA(UV7Ik4Oj^+`J1`EW+Sh;c! zp;2ahm%YB}8G{4?mTTdiD=}24mR52(whYzak8BI1fsbOJcw6Y-5$A>(QQu`(dpf}A z1u7-E=VL2OlG{*s5?GT3@GK8xJ58Cn!?ozJjVNd~C$yGib z+iEtM6=g&`2a%>6>?a|r&{%tnN+GdjTxR%~s}tZre!*eda+Y|ZkAcN1 z0i*G&hpz~kLv=Lhm<#&``Um%t$v#zWxJOkR?o!qA&h3BjfqP4n=*jgW_K;N6dZC!L z$X1eiWrzxtarC>D@-(MBBVk-#pQB9mvZ%`P8AAJ~1H*UtiO@eeXc)Y69)c66!!E>m z%q||&F`shfh{6WA&Ygh2zLv>C%?KYuCN?2xm4S!XAPHg!ty96d_Zu1PHA*3n8ph zM)rcM>qAT zhs<)KnfnmTT3@4{;HKEx_YIJm*Xo|U#k z5msUU5PFeA9I}}~&|#tP$gPyeHm!aY?@*#0n)r#%HmcX}A#1#1jiD$J6akMN=A{K{ zsuh3bF)&dcODwz8X3bcMVyOl_Xgk6 z2#ySk2Sqlv?QR2ub&*}$XXEo9-i}w30mrp867D{uYd^`MF$@qz5y!e%Ub_hYCKP`w z>IWlc>D$8Aa-whyup{D9>4DCW+SD##Y+ZjedipUt`b!PQ#~(B6E`w%>nILH&e8Ay{Q%dswRNM6JXm40)( z{BCOjTLKRUy5o3BeZ1sNp+(Rfr?1xqi2eW_B z>D6ZPfZij_@{T^^>VL6P(uR^Ya^-4U;7MS?LPaWv>Csk#WGNvOE=PWamTg1K67*23 z7PbNdbaTZL`nw9&h^&Q2xs56AY~kjx!ou-#R;_F?dSIVbXWx+LthvP{)%H<`%Vyxm z=nBL(mXu}nYGg)N9P`WAj8%DzQ5b)=yPj6X83oahH3s0Y8UiX2L=hWsTLPNr%&|%c zMG4lFbZZ5-9uIsF*2XpIdpztP)*hbx52uaXRKMNR)9l~bIV)+1RVS|8%|nNodL{1A z(k(QCLxSiL(18Hg9b%_1B7tnRv~i-oR>$s*tJ?xb}Gt{qeL$zcx8OQE9G%eQ++a|rYzsl#iRru0WvI+R^w z?K19}Su?}>6g{Y*^g`57Vq0TJjDc@yJI=*#RGfN+q>Z7I_+I#O0~VwO$87f^@!SoS zui?GNW1PfM;bv_kw!$CUO(B0|SLn^fYu9G3Zc)Yt*82*UL{+1y8c8ulRXG&46lzdz zMYv^(0XN)Lz|dJmdqqW&Le!;QU1u5Ana}3`0ds6ZHp(sW-KWl~PfO_Bd(<(a5-02r zKcq2Rlcp|?F;8w9#F!$jS+&{5Ada@mR12h5Q7b9-fov|L|IZiD`kQ|@A=wJ5v!sE< z-?Ra-??{bZUS(z1SqPSt3;_Sfz_n1>kJ7-evy9fS_Z1Vq_~8#f*N`oqr~iX`IFHayQxb8B-2fmT;5FTBNWqp3-f2}N4)&XK)O>gf-I&aomB7dwk~e>5I!IIli!rn`@QGNt zCO-1>cqR)>%2!-GYyo>!(lCmY9E->Pe(Nar!PZe-rb7U>gm+!}*67sihG zgeN6J_lX6GiWn)*UR44tYAxML7q*0QgDG5!yS^xSP(N{n%h6NWC?MrXTm{GGqQ9p2 z{E+FQ>Htg)D8xeBxD~v+hh{gOQAI>~_4)3f_GMV~5UPLt;eJyQ!QPnwVjKioVGHmY z-~6Xv{4e7dAJaLR5Q_)xQWR{vLPX*Z{F9r9Z3Pv~wwp#&2bdDz){+sj^;q3kl64>o zW1|q)@4U6FcSU;AE~DK0pCtDSkzC?gagyY&!*(yxHd^vMHji=3+uKAaB;h-22SG;t z&RbIe7Px;Zag?#DbEG(nQ%(y+|81H3v+?}@pOY^kT^uW7v_mTolh~sFmh4$%-bSzm zk6`M7z>o=S+Y_)AfrMbi2@`pJy!knRKxk^QJ@#s~cx&g`1$+0C1Q;e>9+FfLP(NIb z8sq7Nio_BTE0?;{FnnoAtOEtMhTQ`4r*n)`7adis*x59ljyPPue5#(3L zNf~`x@i#G>e6P^ZP6F08aM?t`D}z6~tc<-y7ddC+eM9PFfNrI8C?H@9ZKpzBT+ZMM zM6>7S0hljBZ$~5}f>~yhe8~M`2n{O`?2cvxOcW6l&8P}yq{th$#NJ`$&?cJP7Ky9u z{v0sDZn9cs>)HFvzPQQr^3u)ISgE_F z#_zO12-LJ7MOFWsUXtc12hTO_SsI~~Ga`u5R(1IC5eA(_tf^nMV+v#Gs_m*{9K}7=+th}5 zeKnRbb{!ODrRB$H;^PfLYXsi&eOB~wh{5`0sey($`|&&lw;9Th$zh=*iK(;tX0~&~H8|y!UNbFy2IKu^{>e@FU zrNmW*=%suJ#HS{pO_>eTW%=RnfOCJjavI$fDK4P`W~b!9vm}>1wsJJ8xeR}LlCpOK za&)RkikJf#Mdd{XpbUAAe&WM@D{XWS16t=!bS{9L$*W~(6-Nco5AA5 z5`HU0zFSNwMo2LBI6qHlY=(ciuaPVM7hb4a(!0!FTxZo*qV=#G%A&T{lD~zRoV8h4y<46IXS!%H(zd_6f>`O6; zBrMIi;x1{4U;hU=o1n9*@ek4teOhP zE&NF1Wa3O%ifJ9+8~YLpB+^GtTY$YO0SnABs~B+7P&#?0xrb;%5o(nhGgtv9b+VhP7YsP#gXCDJL!L{7nvb71Q=YN-W(^L z=S~SZ5|`l*6+1cmLn8e-c3zI7Avu;kJw0flEFDe4uJID|ZVQ_a_B>8A&v6!0lQCVq z5z*ls@hotahDfS#jkPg1A-$ z?1_zV8Idc;6xx5xIdl;#?!|4uXx$~IH}Bop@U|^5t6E{d5Vhj2(amugiNN7j(3?8n zj#u;9{IcW_d37Ny2Tp7!ioh%prNZBW5lhs36W^g@iP)`;;Kh~ueCQZfc#2skWc--# zi5>CkUS2Hza>uqq#ITe4=3!`EuGL)`MeO zc%?mvvU_n&!xEItX2~tu6}t#P9-=NV!>IhCVHa6cUR+;eaL>mpi60+{FbVM`Hg3%> zOBbF7^o_h}lG30eQWsk(NV<0+TQ!G8yc156;_~I0E$bsxhrOvC`F@UxLQ|n1?hsXq z?aC#`+$Mi+SCSN4G$W2?mbF7(+&zlU0}i8CwHU>`t8m%d7XVH5!7a*-I33A{L2?hT(=hiByqu zs!CXTA`V6m6u>)`!D+C;n&zwEcn%xAvRRq<-rIk%L55xMV@0win%`!tVs<{xMa6?7 zCn2HOcSKy>A$ha4VC1-!!Jk(%z?Sm4T|z1iwS5V4!xN|l%=ZrImW>k8O5KE2zZF_G zH!$P`XTXItQ|st-v6{VK%nRviO2Fs}e;}YHR5spS#p0jG!FSl$-=8@_g`_g32 zY8yXZvXeYAPz5Sku=jkx!E@kJ?!o<#SqFbg2eJ#xDRvAGREA-J+gCnC0&c`C%LQ`T zo*I$TRR;xM^h&O;@q3u9Vi{)%=|E#agetFkkOB@(0H)Y4^$U_lF*18GT$d4pp0|JB zgkxwRtBHz%7tg1dfQ61D-gTyL?`= zw+MX3QNTekiDl?ZU?MA$`23PvjLAcWfxGNGYIG(K2xXm$8!q;*3);a7s7pBSU=Za{ zC&h_Gw4!I)Ay{7p^f>xNn3oT>`DTC0+NN^AfeJVS8X}!J@?i55a(nq&mRdn&sp~_J z#n2hJdC>Q^mNV59ObJ(8l1$wtS@$h|1*f0x3=FjbS})kU7VLhb=u~;%zOc z%aE6y+xpSx&M#=S~V?1ch4%MI1# zh7hMACo;-yp)bVh1I@u1hY4_sJ8R7HbUdF__pUyP1qmV|ATqAcVVHlAVbteLj1taG zFEo8i3|jeSO=T7~b+#e5Lv@`%Zg80*Xwk3M68T^D!VK$N=jHY%xMUED+HMYdi*mC8Eh9uwso%91UU_fVG zC3YnXdD(M>*KlzjB{bmvue|JcI-?3j7%PGxW-SjWf&(-=oZ|&5Y+rc=Vfzx@3Ir=! zjge7c64ILP28vKbk_w{&6`(Xf z0p;ba9r7gagsXfegnhXU@R*W8$Ot8axL{WF{^Y{XXP94Gh;A(vwydfaJ_ zuYs9`EqB1tatfA!`Cn1fvl5=^Bhud>Hc2cAFYYjJkxt<;!$}0`F#QvC27LFJq_-hQ zaluiBC{=JT|CN7e#M*l{FpbF3FBSvDlg6w(hiiDqfy6LZx4gQ2`HPJOkjGS)H}@UW ze#>;=@Xcf5^7R1Uz9;^aiN|IQg+Wz!1P>cM{V5_EZCK13@byYa3!Jr34%H7jcS0rskj6JWrTs4|D>_UkzK?yiKBnj>&=V97eEjv5dn^NgIhZ$ zS@TwQ1C|%yIxqPV7Z=X=s%W5*9xq zk(ik}T~VN7S@7Q;hwPkU1-Rh1WJwgVLdrG6^1d#l!ZvFQd1VvaQ)77u4dqHxN@Ljl zaDhs6Cwsb~$%08#>6M9BDOm`cshp`jX4>a5=7WC?u@7Z+6uMe0T|h4T*NE0uC^c6C z7HSsC#;kJO6)_*Q+csfhFo4+F2^$QAy$lAz%3vVeWiSv{1_NOqgMqLpAG!?&LNypj zIg~$9jTfW1Uz)(FF`ivnObh1(|B{pt&L2ZVt1%kfL)n7)pXD*N(0GOrpG%Pu(Wf98Usa79m^Vn-js6x zc*72ZptP4kP)F)Zp~=G7Znkr9s^O;CZ8m>XW2(`nu{f3FoO>L!F7w4%EroTNy3CU! z2k|>uisU2F6FZe8C^#OWSV7btYX$6DJ-dRYk3l2_^t;sKY6MMyl@Ha&s)m6=Lk;^* zm!sL6(?2SsmK$!wQ^OC5xf^jp8NOZ6^m0x~Fsz;6>@vDhGnByG0xmf-0>`LVgOGp3 zzuId&`2R`eNV=FOsL~1|8 zSy?szPv~mQQ@QX1JLMQF9^OB2*Bt3>1dF^&sw1~Xk>tF@9jq%D^IeCz^e~BAB}9xY zn?O<&Ek#acF;%V&MA4mSa&6VYyAl$XcM%U4>u$>Wvcw9JqrnCJBEtpn5SxE&j`%8^ zoX#ms12lPO!j8sr;mpL#_d%fs_~&~dOcSEB%AGpnW^54|S>$H|Ant5xK@T7+$V6`j zT7g{r_*~c3Z=Q%_Z25tKL26p!jF-IY270c{loFI8twHl9TQYEG@eAsBoOkjpxau*y{BXkcL=g`hC#Y4`7!zke#HI)-?=8lhBr+SMYlaQyKPSj>oyw*R_I`Rz z&Ms((pp()Tj#f(pYhDQaKRZDxjWKSE{*cgJnG-a5Jt zA)~=7O%zVP0B4=#$HRZqdMKh1@C*%}VI5EZcQl?J(DYkDo{*9KVwM-#3M61Iq0*f? zkL`vg>29@H(W#e*H#3i(U)oGyt~v6Ruel#m$)|Ud=i;5N0X7@X99`B4>I2{+P&xh6 z<%>}IDRf%yBTjjm8bE5~5LD6Vs^Dq<&dZ07>3d=cUfiL(xEp`eJG0aI1hFsU-5wkU zfnUReL-DpYTsT|@DV$G9oV zcPe4RVrjc5AM}4?QI$6^SpEmz4j(eEMCWrDA937tLyk=k8&ToJ*&m?x3?E)CQm-h_ zq1beRadV}T)VJ%;=DS_hfo7JiVI5d4a||f8po~NtAy&5$o5b7ZlQ5hn3mOY$DLYRl zhD~uJxTD_%vSDA{fQKgK70TCh#0$vn2fHWOVl2eTMtFa4BDv&njirx1%Oe-T-%B=k zWR8vb2f3zAnVSMf8RaxKOIG1?T&YAu>2cS}F8M4a#ZJ1fOG!CI!e=CENn!?RW3Un) ztPaT5LqQ|l?RB;~&u5708j4wQ9>BaQc9tozo%H`$j>tua zfLS2NBtU=VJ5&({eM7kDlkH)Y~H@&cwku@o1AVPnM{w{s$pHEV&AG!2jy!6@Xj@>as zw(d7eY01RThEz+oma^h%ij^;Z>~R$y3(VrXZjsjBqqbY$>@RvFaZQasO4hB#gRi8fiyU749z8V%qh+4+53Q<5NIo+b1ID` z*RdnMWH>0zLWj612WjYwF5W@BhJBC*F4ZH#}$ zFwpckUKzqnj63M)!U#p7>U1KXO$lS@2-*8bO+&GCf}jv%d#yx&^YVpSiI=sgmt0T0 zL;MJ(P>G|Ec}VjY_)Gc++6I@i(*>^NK#n|k=Y_1H3)w{+T0%bOAzLFX1#BbLE5^fp zout6LSx>KLb58P&)sPV0xCHYOuZ(}^%Y<9(FbZcYU~Fc5j{vbfiVd?5gAPt!>aY(7 zB5NefX85^>@Jk8InrSO?;4}=5%=N%Q=N>Y8#3}n-sM|#?%KIh*URevT7c0cI3e>E% zY1{0o>`>Y@vo3gtU9)~SY_u@ZY%zVCs>}+Z=>6;T&X(7yN!?IsrSD@LjsAbyXYcHB zemxzZWyQec4~nZOyv7i!dhKw17efeXcVk3M{DWV+n`*Lr@4g6tzLSVS4LZlPJ|>IRL=x5gCWBFuWKgF~ zuj~V>G3p)mv~1PQbZa-;z5IX8rrq6GeBIsHxde6&RGr9+Vl_LvDYEr%(brVnaiohT zmk$1@&$zGO{OTLVi2D}kx1jo_K0cyyQwtsW*4gjhY@WTc^BaiPh@hi`j_Lg7z@(<{ z8{;_`<%>%`s>6ErHc0?gOAJ-iGDekQ==-FSx~KUPC%NA0@)7QI`Cxwo?}ucLCDF%9 zqB!?)A>t)+9f#RtgC3PmVGL%z+ggCd2R342`FPDY z3@NTE5-&%TXrz?lWK%4@s1U)tlPC$ql>vr$zU1X#7elX#!x$QFtPGy3SCf3#3|`+A z&fJLQUMY)(dZi70E-Zfp6V@@fxRvp}rN=(JdZ!!1hY380gbtc=#15Nn+c{rrD%VV~ zutN;ykS2rpc=pEk#Zm#5#$jAYI#O_?BqQ@J4gEXipj<@O_Tr{!SiS`hx5;D5dRW4? zAbdC$y^^$9yE7K1e*h{U%(J)F+u3}wcq^HTRUIDOAy3ApIvju5a1pTz)XXHkspv39 zkM&ULwHvdVV`&Z`KD(d@*zFqfAdHN$NYsOhtOsPl43b*nzcl$(l3-3H@y9AVU$FXG z3{4Uknxt%K5|^=NBp)bS*RZugTm))pA+bB^f0RY+vX)(krGKdUjEcCP*5XPGOF-2g z&1X}-f>FjG1XX{ii9EBFZ>Y77ktnkc?*Gd%*hUezH#S#h#5hs9*`!6 zjU*}aA>0RERAYhsav6ELjQkiUKqPi)5<#6;IxjPqHvxY?+>=G!?~}EM#UAE@ygRSbn%c9*x^2PP_J9{!)|1dDA)5LQ= z345g`Vh(?m6Z!;Bj|4;}x0GX0RYc{~0ISRFvG!kXg{w?KMhY@)zG4sBpES_VIpQE< zs(C59(1C?P=#)l+j7BaHj#7mbu1Ib9YxjjPCrXO^{qbl6c64dQqqROxKw2-2>EPKG zkX8pZl_w}QO0bPTp&E637+Wk7Wm6fl}YO<)^OjQ z0oN>7W+4h&3$H~993;RG`(?8Ve~W#CjWD7f4q#sB>QZIC zZ;O9=;q8ges$*@!iqythqC7-cTH&%v8EL7q!e(s+Cvb_FA^a^iHfX%VC{%@aEdYmO zF1=d{@A|o`lVO#|PM6PJg}NNRTXf{1(UE)GbmZr&Y%(hl*{7MhcW-jWu#7RYli_hS zB22GX#je{USg~s~MOGOe#we07(=h8>jpu*s3pVSLy9Z1K2NEKxGUasC#B9GRMFXmX|ocTy1qHRnP1*621T_U&wvEli9dCej#6K34yjK!JZ6 zIk41UbcPdT)@^A^%~ohZ)ym|)!pyrEGZlY!`A~kt+E1!oe2b%{zu(bPLRV+?pz!-$zgkeEG29FDw~aBN2A#0vZor0+SAPq;UaPuu0E z9h6)=TY_L~P;&Ne(eE8W$s67+o0)COS-iQf=Fn@-p``X!_145(eB6%RzPnW?O&tP&5DHTxNSYj?-GbT#C;&hhCC#7grunOjrWH`a_?PR#5+ zoIkOUP|i6zn<6B)Yw-|p%4VqWT?n#$t&$NU@KL;H-HoON_lPjAM4T z;eVInTNKC;yXLvjXFGpTmzDB!QGc!%s#O+uCAX^TiqAKkFT>C+lTjz)Gz3{YOe6#@ zjR4y-@|6XLD7H9G29H-@wd1G)I9IHa7GdnH1z>woOuzjNs{!zulFHBAAIy7rapkhA-U4Nm`UoJ zSQ$R%68r=weWE+X8!sV4;6z2JJ6)5W+>dcSTb$auqy6Lqi* zEqQBR<=TJR^%CiBxU0KiIK>>$hN6unEa&Vyio#o(P>qC^XSZ3dZrdcNc*^D*>`V&q z$}q;?K-GvEto??49wLEzg|W*#G`^X>Q^c}rOXib9I;wvSjt|AAC`%=rSu6)USEjmN zYMkE)z9%6GAz6C?3kwqNbBYL|d@&oEOMhWe&llJ4OsqGzS0I|{!><^9=V8LvZpoG> zT(A9h`8XxjE!b8kr-&sIaWk+Gxig|I54@KL7wYKN_kyiHPNg76)T2oT3f8Cw0lVBp z99zd>gGqm|`%XmU&Ece+YU$r1Vz2GhrIpBIYxH$d-m&~=OkC1)-XPYgOy`$DY}ryd zHu3q(g=N=Po6YM_=X8hPTC&4$?LKqrdVME#oM&ta8ij~inZ|kKi+g6kSu1^3q(|bN z;RwqOfiI3Y9Jj-QgeNKgA`YVMvsZfnrUK!=)Rl0=sFG|;TsrluQ_0&nm7v~RBuOgXeD-yL%B zy;OgqQ|b;9E!mD-?oQ$Y+*s`995WTnN8CBYG!*OHog$l5bYFCgCBjeU|P5}b1EK(BlJ@ex|q)(tLb;`y{^YoPUocTI72{GBbbSv^~C}rJwg~$`-Q)6k{lvaU^bqTHgmI z%#%FUN`!&&lIQPXP}Y*i@;mhiF{P5!%Hh`GLO;s!{=v`&g)gB9j9N1;gD-2$O{lp` zvwe~7IDl@*VcXp}Ww|}lfChHTlp4h*{%y{ZSOi`^=BZ-q6LYad#1Xo34FzWk#9x1v z6y&m%gSi&JF!t_v|Jp|mnwWh+SPC}zkj5M+|r7`%VDY8@hmB_Z<-Av`}4pTl=8jawTerighf2$EX_T@^c|L9v>R=a+d_ zg)&Pbxm+UQ9UB}c2A4?Z!eM{_8k^tX8vUi=tRusV@f~q*asw zQGa+P`GFa#hH1-vW!bO>9riS0D+BY~M&rfe+9VU8d8kIq#4OfUjZ%NcbDQxC6l9@I zltU(6W_;vs4&imL^P6>@^X_Ba1a($17`gG8i1+E@l(UIXO8g9zQ-PP6qCwpIr@x zqw@Wn-p}#gYrY@T`|*Ft;QVH_%I3w3MZQ=KhR1-rICherfTaM}tu|91#fT!|dWVLGVo2wR0o;F+PoG^{a{IYhU7bAP z$DBCZ1K$~;z|i7j>cAb*EDovo^|+W?*2OH(0eTG36M8xpY^?Fqli7&=8BozrP?ml! z=|95n)4_*w=x6imn_`l04Es7O##G`qd%c*9^MipYcQ`Gs^1*06Jf7d=`J_mgZitNm4sW)np+pIn|wmBZU{ev_RDIXohAcs@QF&~ZOqyp>)Jht)uEHkK~{ zK)z)%5(Nm5zsYO*d-22I$d#veSG)Q#ctHV~qCjCnBD~ z&3uww%;wpIU>5JLv&DtQrQT45@nxp8rNmnQa!51uMUh=GsETe)`49Twd}yq)8U}Z1 zAB)fo1`sJu8mL?vRBDKztRi6*6%rGg^CH`Y$D>X>(5e_>A2ym6^RA87KU6KUgNahO z%;_A9U&w#AP3ESsl6f{H^2S8-`%@*~I^CIN$`o)q10I7fCPc}S`~e88vgJ*-E~sn6 z(PXy1&d2Y*T+A~A6jz4Xs`~ah_3sDsk+z|NfYDc4WhEgO&x@n^@cEl;KKWZ#{8v$2 z9}GU>3WL%4G&}!+pVv3%=h=EaJlaC=?SdG$?Bsv{y!q-xO2y zOL}#h-{y}W4=&L&nzF9X&ky$0=8@IS`4k0CS*6+-;K2dyq8)?W1#$RvFf6x!ZuMrJ zty=AT@v;G5$_z)fB|bPG&(DEIW8_){bvm1zel`EUvUlHJW87RH&Ha$Qd$E{gj~`bg zb4`Dn+1tfxVs?m&#re&86IxlU56tz=+10E#JuBt}@I0RpxwHXZjAwZ^sgrzdUW?ki z&JWkcxVTwAzbloSio>Iau8-NAw$0h(5lx*rbqUUY<}Au7cJ8o zn8sRsv7kQa87d=mag)~v?+q`8zXQJmq4n&fqDU<6uETj$oNQmCt%AC>KL7U3tACsj zInK{%J%0O-FJ3IJu4!=Q1U;X1{caZ``-hBJ{>o2}Jd6%sR$Gd;_ zq*0$49dymm#$sqJm2&>-Cr2@=)8DAJebh#o3O85n8(#c0;+==kmf~;pMA{4Y%|lP5 zUTftp`#`T5sden-Y<*smZmm1NX#2m)Zq?}7Uu);gAGK@yPMxl<%YH-iIly8jYJ2>+ zV<9|$`Nf+TUw!%Is~589M_p7g>KK2};RkGFSL5^5f|$`$et?{M^4<59)C}gt6agyT z9IYu)=V;GvX8Gi_0r~W1cF-E8vUxFUJH1+8(qMHnlLGM^687nuSbTn4m!U@U6aQKE ze8AV`9Ch0Wss+iY&uFGd0;733c`{iou2De1Jh7}9iM5Q2!p})e;Q4v->0p1vwa;#f zf<-t6KztF++vebre1FJAASy5B%s8DqL4T%1C8ubYDdK?0Z(fjy{dj)1zCPAAYI41E zm}FO#T(5s_k?TqHdzWV?Pp%g;+L~83179D_X^2bww@ChBx8$#t>hgbG!@+8RUrWJO zDi;)~PcF+RRy63dOpy7rHQ9d{b6XECtNp@Ot%;7})ogC_EF95Ju{gG_$CC-t+d`pv zWChnh9-B9;bd^^-=!E{WN$?!s)Du=zHei6kS}_+grfItMiV&qY)MPsx3S51ewh)G_na**y}y60PlzU)&+Waf z7_Xo}`Qt2{!-5VznZH_FD}(-e_R093px(T!L3;D@{(wkoszIW^N>F`P z>1F=zdfKr_X@$}<9iM-6Qu=7Nv3!XH4+?8Gx90s9u(aJ+zw>R}$@p%Zh*_wOi<0pn zw>T_UsNq-Uzu-EZ-)Ei9e~;^QUar%5ZJo}W>vX87d2e>AL zz8iNadv|(%{&BtSlx13|4nEvHJ*h3EP6{f9wcWkh^PxGx=Cyx?H{ZVSU;;cJUu9bl z$j+75I3|HdZ8?aJLGfy5Lf*qmh zdA4nKROaLzrkax`p$^oGf7s?mKH<)NYF@UfvMJ)CKfQmbl0g>})9G8}@}@1#9_O>m z`O(#EGRdL#wyhmi|ZrHuZcNZ z1s|{WN+-o~APiX>gUj0x4Xsr!|7V{RlTR@MG~XE6lP4kd_voO+Pnqz3*m;}S`Ten@ z^JP7inXi9ir=!1jmUgb|-D^77v8Fdx>Gl;m8tB3Nh~^o^gz)8A3I3D2b!zZ*8@q#H zx(A?5&CNXlb%;s#gw%PW7+6DH{tOoiM41FLl?~lvwJB`bfor#96{z->Ukr(T?D*U` zor?0<#C})5N6T(`;e84_N4s^$Knb)wb(i2zquG3t{n%ZAKYi%v z{viUBAIyiNj5os7?v1c^Oqs_O9qdPC6Q^jSd66h`Y;B}_QBem6Q*uq+ z3=?>mLV1`2Lo%-iPY>Lug^UN$yiC%`fOd=(9R}5U8hpaQ8pWRu4lhwi=HrA_6(en; z!6OZ5b22Rssz#a()FIWt40bH5Y-2#08b+AQ$)I#<73SX`w`KWqYh(PG0i-$Ij=_I? z8wN&Waz7Mw9PZPw%9!_SS0<)svtj~(?=NR#+{+DrG8;#B^2i<4X}WWNt0w>CWan=1 z_;GjrU3GWWlWuOQ$RD@W6x!HQlRs{&sZ+Y8s(k(V=K~r!XLy`Fr&1TQ)z#L+>gBi? zTUU#V*~N^F*18KVtapnW>+N_>%=Lf5f(!I>Dto8X06l(JuYz?PHaZRiE>gr}*+6E9;lTC)Z&+yN0*6$7v z54R1-i#o(L$>DU4i<&EcXGsGi>pIWI>x@QiR#@Zt#3F8S^^QQ&wB+loM&p0ZaYp2w z5qT5F#AtM@=r<(l0SOs9Za&qV(_$lvUzlS#Hi}oo&?Ua{?BF}LB}@u1fMaQco-fP{EW^W&}KGjS0-Li3Xn*Mr9!MB zA(_o5uq-I1B=3Df16IAfdWUKH?t5x=6Be7|peeN*K+*MJG#{D4`Iax=zg{ga=|En; z6gFJG$|qyEQ+s91cUs%{HfU^Sqa*~2rJG`WmP1Mf8^|_8lTV0EToixf{C~TSQ^{MH zyX)0uX=$A`KdIdSa$>PfQp4=BSp0SNV>UT(+NMgKW(VyPsnK<{*Kh88dw5N!Yn>P# zSQydm=Yn#gI}U(~72SP08D4bPzOKyZjzdGa(e4t$jvh&$1_Q-?FsM)jOC)H}lQc#T z0<-vVyfL(fkNwcYT%>=#XD@yjbkAemT6OoX^h$-q&X3sc1*`=$Edk5Y(|%0Z;s({& z>7Z$7(=@3uw)>@<2@!oZG+XPYG0~AVU%;Sf$h+II&>uFCug?BWTve%PH|`Ju56%vg zlM*2%&Cy)Nvk_E=G_)5jvvAsM=KNt)RW)Kq`R2PeSlj)+;U|Ak@2>GFu$*V@YR`8< zJVJLrG|ZI@#C8*AhWia*vN7i>*KY! zhAk9(Dp>Q521YRXtdp`Cbap-93BI|y9#2kwn!a6)uX!LwQ+lCKrOKQCI;)itach0_ z(+66Av*O4!aR7hwE`U5_h$oZ9`3-mLe3j8EQ12NM24}Z8dul~NMFV>APkJ7dUw~Xc z82Cp)d_A5Fny}@Fdod-B{-9Q&S({E1-b+pfP6L5My)k<=nel-GzP|o>Jej=0brv|c zj1G>2!4KIxzMeJ3=7Jg3gN=XhtUDgCaqz}B`UUP2Vy!p6 z$)VWpb=R0_jS981JIwM~eVRYtnCH$0xz4cK;~s0aQ0BtD)$J4uh{bkdVVIl_>X zqcNFX&I*6xv=0W4|AGuw-Z259WnLBFC6DDj98syiEs6z|xa1!#f{oHOcgvI2vYRTN9l zHN2^eGa9_lR*M#JR6fM8EUK#XEaSmIFKa+o+4+B%#vdPFh(Ja?{P8VG{}l<+AGDbo zf;wAF-gQzW6Xb`{eDU@h;YD~uq(5Jee>`$Vywt1hkoMX2+Zj819bT{a*88RCgD`d2 z7>Fe#No(+GeLlX<21oqIa&T0`>Hva7HvZw5zd2gQ)n8A4efLPx8VwpFLHxr=#-K58!jO0FmB)qyf2N;h`so~}=>dP!y~Acl zo$sHXWJATE;~dr5!Hr$Dol*H}A$1+T&4z#N&ezoDqS2!5o^un`|d4f5*%)>*B4BmnEPA7|^&-~HeC^I!u4d{?Q=;g||_AN+sA zQDd+9Flrth55(_s@v+ex7sTXFn@iP5IN9M9FGK!4@xrj?WKT?Wc0Rir=lortS<@&h z9ny?SvcqHCLyjk3&GUC)m?}I0mVwva8BitAQL|rg@j>^hx612(DHm8OJr_He5#6>( zGNA#$&*nlI47Mx>e8P&r$&rm38`ggb?<%#vAq>S$hApiALA&+5$q;Q`+0GX)v-835 zXj?hH|I|XGHYsqEO|HFFlOy$0|3L`b1da}@v|25UgV;nE?;6PP+niErWyCK9yI;4D z&K93TX{&PG+u{YR6%WMcYAb)1jr;4$ zGjcnw9UhX~v28%_Gon2vCVNDO{9ag{%Ac>b#@d=JEa;-I5DOq%KcaZbIgPs3!ace>U*% z?AEOwk9Y1->D}GiC;NfRc3XdsYbxG74c)_QxY<<0eYo3^vCrCQucP^07Tx?KdK-WF z>Yuwy&D%c7TimkSbJ@Lus~x!R2{|8i&gZC$u7@8q!pG);{qn2V$`AdW?<2~y8(K2i z+(-<($Y{<8yz2i)Ikj;!CM0n?d1C$=spY_FM-Bbd{_^CzpR7ClZ(x6#8XOJikR08q zZZ?NPiLWG2zx{$BT#R#)wC)Auniz6|z|6mCq(e0K^P!WA8cR2#l1cLeahRsXJ|`LOC| z537FuuU6vm&?16>?pXN(rkynVnDoo@#qlK$yZbE(zJY(p(wdIf zr{Dbbo6|Qh@42Q7fN$S?{?L8m>WbLV^+(t!u+G=G|9u#k+iZ14Y})C66{hFm8yB|H z2W?*rfdq8ofo~Z|;M@nogVqg0fFTfx$N+G7F95~j=6re$Hl76j^B?AN(m99W;4ZK} zeE(!rV}5usoT>>;?Y$VU9M_@<&gwi9angS>Qhzd18}*52CrUph!Dn?dklwd3 zy@K6P3FKj;`XA5J-2=>jpDf*E)~A`T6me zFOKJz`1#v$F}^QZ~pt6KiR)O*}q?l{c9-sh;3mtnT~Q>ovYKZ`TZNr z5g{fha@eq2Y<(;>x}7ZT)4}t9!Bbd#=Adcd0nl|0qCe!47`6je2J+6JO}*W~n;g^~pqq+& zz&Cf(JHWr1^crw~-p-2g**ylGH^O=oA2wWTI>{FIDlku}-GV*CMaQRu;qzLBQ*qkj zHI)sIwtU&ULU*hYSq1y@E7d<)|)g=Ce6G=5-e#n)^&7*n{CtB-&E*Zag+i zA84=9=-cefh|PNCXV75>h!y;`X@iH|%#fG=;A%|5kHOu9`EFgo)p|#jfBw1NBEzJb z>(%+@?R%|%$fCfgufi@{#HjQ6@3@9Fs_gkE?N zJJY5Ra5&SOtJ!2$yxZV!@Uh6Qu4y2On^iWbMM9|fqs`jYw`S!&D5|=ujV8aonW>!w zjS;gDf5$f=nN|?o?WNs*ctGRz+|>LUhJDn|QS*g=dk12ulfhr}>_?fyuZ3-Fp(K@Uu8jAVVVy7)#jG&{jo0{1>}r&O7?#Hq>%O0KF$1;8nVU zPP(tD5_V91RcZ^(cY|?l$ zi+)c3r~KL%$Z+IuK>4g6lyMzOumR=seo)TpP{Iu;FZw|_@9xo1wE*=2*U%gIY(`wQ z0RJ;M+A}k)L9UCPpY^N!S!deO9ax+wjxDarX428Efz&A73KWpa~K# zQ4l5OlIjgi*BEqpKiyQmm=H~qPdQG16aB*ttNnK!KdNqkwNk+JmX6tEc~iSq9g4k$ z=c9d)_6Y553HZ4=ZENrDgk2lpQ6GSNkZj&zKX1>-R&o7glHs=I6d7fTS$41&v~Vr` zV3T~_W4ixTI zZ}qB2dm;8ivo1E5AnTVhcS5mN@n{dUJ?PcM@7bhz1=kCqs{YZ|`aMyAcwC3UcYSw4 zf*>4ihtQXv8uD#z`WqKIcciF)dflV_Fnb)GE#Y$GXsYDa(+3N#NB080<(77U-~ z8F6$kpgVfk&~!9Z6uY|let$3TuPHgY56B%|+^#>_xh3uI;`nY|9QWvd;`n}D+^*c& z)y1>@T|B#67teZh@$7zG+^%`rDemm=;`!aWc;2In=lAPkLoK$eS53vvlsVfICN`qx{ZM`2|#zM-ORe-^g|9M0>~ywR@{B?s(&}=}uQ+ zN4-Gy6KEP&%Wb$@?t<@lV|~;U>>h+m{qpmJhH2Ng>r6}`En^rx+|Z4dUknB8QePi! z!Z&HN`nT{#0vPR}uc|>Y)oPn^c4<#{6s+rXcEM}vDR!1@ik~}wiZ*l$dvUCkIjvxv zHOsm(QoD)Le%!qYmD!)l5JEd_&VK%RSE+{jdUw&bE_rw9rYg4=5-VWSuX2c&iIVWXB2EtFN_xJz;nGx}8j)a^JrBeE;ffsgHJ7*wn!EEH6roUc*rx(Y=b-kI0_1 z+fYox_*3j4cih1}IyvZlpQo0#PG$D8}gx%|w>(Sk>&>D?&U0d}V4yw`# zYU9eOA2_Yn39@;2)DIr&bOYmUN4L23ox!4Z6Yj2SkDio&Rj=Fuyz82(ALOd$R_@#d+A4v5%dx7tow&Ls_4S$uKVKvn6kvXipc0GSs+tsbn<7NPVNz;tv7yG&%+NPOato|wcy{8u= z>>6q^^jq|BgPMjkd;IuOU4W5pJvw-S9fJvO-Q$pd{CI2muH$+~@hvCsjvAfk=#KK` z#Rxa8FvE-?gZql8%TI3 zAm<%_Ksvm8B`Eom?|!PsmU{Bk{DIu>NZH+vy7c7f9>IL16+1#LN!>m2x2eAoW9i9L zSOmY~@T~{Eh3(;}*%669C75&x(yiiE(5yz44S~5;O~Yh0>NF+dR)u!dqxvv+i>WOD z9f3eoY^mR7q#D($m?m3lx0t0y;QLv z-VfY)2RMaL5AU=Ipd}Tx_K!wjrEYR;i-au*t(Z!iFuDc5jg7b!E2^;*cdLq?J{h#) zMYdyB6p~hPJ}S0nfo)a)xG7-gCxxbf?F<1ln(xX3JFn$|ExzxLi#a?ln#o{`u4J%9 zM>5#?7Jv;#JbT`qAGRRDr2E6D={wbboj$f!rkO-`(w%aG{ zj>%Jcifd72~oF<{l`g*S_59oi(1dRP_fr#k}l*lJaLXqrZx3D z-FIBlx+&Eu630ll%SW^Im*X!F<|OEZ&NJlaM5?d4!h%ksuw3iv>XWP4yf?P*e<@`D z=i}pAV_lB67CP%w==_)JHPVHDeY}phk6 ze5Ra<7KW>RD=(PD{_2Lr`RVFlcC$fW-4vMF6;cbq3%@>wL+UUKBSt60S)quds$C z`1xO+j~HHH{hyu;9uJfAxEQ5%+>>M;bhaGtv;wP&$}-^f{6N|%=v5Xh|h7Yl^@atQuI%FgDOjeER9xf85KJsEZE zK)iN?Ao%_tuikv~*+0G+j2^ioZT&P`U!NKQzy3~T`^^!5s@Eu`L5PC1@)sAU<2{)O)dPO4DMqxsVlx1O=G-d<*M0e{>Pek#drpSt#Z z__VV+9jrt&6C9oMPfbSLbAq!f`&A4_)OQ{PTG5c<5u|41X8x8zu8a6B&B6mnNz?}_ z=QoyDu{WK6V zkHztS!nTKV#Cj@LpAJUyG_lsjyF5F2a!af#?TEQO&XG<2YBrhV*%K)@`)=|5;hQ&K zyp&3xaFD51eN4aBwV>n7R>z$nj~g%zOn`kNo#N34wnT22csf=__W!cd6LM%7BlsKCr^kzE&9)B->9=*hqSHFyG6fzAgVjV7khv?`i{kHM~n zGD39?KHMc*H)zxdQ1w-f1mBG{Jtx_t+7O!^E!PR(w`c(E!PCu+jwB>~-QMa{usnW$ zFa%Y#-xtQk;`|0dwTnl%yC5hENK(a4IyUd_t-E;&ebvyCZ|+VK#(mo+^!%WEtM1NE z+`W@GtCkyivugKNJUrUiI}ZXU>ekf%bG0A>6YA;i@Y;amMYhOuP-@Ix`{(ie57zBwHN=!i|*j`CxiLznycSj zpU&2&6B;MDvrZPL^F^Uq0<_8+XHlD3c%$Ed>=ERiR!q`-wX+6|3Ja-prFO1gbMr7iV&gngWITgon zD)fhGpvJ7!-fjvxlk5V#dR8(Ggvxi>_lN5D%Nt=ku%zzUh!1&6>_9X7K`k9Su{nH} zNO^PUQH?8GHT+NLq`+ZkcG!$J)Z*!Yk3!xktIvG-BQFoQ=!lCBpID!2LyK$1Qg-hr z?vuf>uvi^^IzAZxjAQYy)CtCad3bVCj)ffW13jFG;Pkwd!?D|%cecj0E{U3sIa>vr zPf21QbztWZcH^qaV;TN~@#B;K_amb9YQ7JvPXroXY@6rKDK>oIeCGsPv-$N+VdMVc zEpG5W+Juwv?HrGv>CAq`oidRdj>k`*4m*aNj_OA7@5bLB&L&U6Ms8&+AJe*1-)(t~O$GaAwiLu$q`qjA*x zZtc(YVyze7N$3oYCbJbNWIZ`?Yoj%)8iASo+wlq(hbtm$Vu$`e_P&KJab;QbuP`}# z&%h9QiVqx?9||feisE~JmS?^Q0iuv#5)_>Azu&6r?xZ^eb=KPVo^!u%t#kGm`cYlo zU0qdOU0sc@qssn($;i1uz6fwZoIq|Ls#*S!UVCAXW!DQvqvEKr=Q^VwbZnq-ARgsb z!+n+9HQ0FHfudE>c0j%7eMA46%~*me=YwqzBRi^0WS0A8@QLGpk#xn*VqjYRfnUz& z##7M3!}zyi*3{CGeMmyu%tTRS&HX;j1sXnXN1`!(d3M)&VhfbH0YulSf$LOW<#b4q zkdH#Xh#tX)rf)${aMg=#2y1`?K$MqyLvy+Wiy1a+`d`W~%JHU)di3f8w8NV$g3??MLWeGh&+%z$WB-;sp$6y+RQb5=VsP!YD@^JS4 z+MLJJm>M7ZBgFP0TK>TL;C2Zb9!P(4oe_Q!=1`YjA~e=d;y z{1a>Z7FO&YPgsy(_W}FO1+TGHkefu(lowbwLj5*>w_(czWy3)A$cq*S%D&C)WPH~e zB~uySIdq;)cN^3gP;@lg^nqbMXrC%n{PSn}L)IY87!DyFA1U(#i>d!Xi>bd@`r8;Q z=*}FH!1qIw-fw`O6T#_)(`eIzn`d0nhA|hzGStn0LNdyv_|k_Gih=n((y1kJhQjaEkzHE@kRz@BaVb* zpl7=iDwmYJgy^u5ihh%dZhp#_?L}w{2OnU6*rJ`ZMxH*D!olgx<0x!4Ro2>4PlCFC z%=IGx@@*~){%~aj)D1jO|9wQ!;V0>(q6kYlLkCYgF(24Q;)`hS3tA?%YS0IC(16;w z?aBUkvQYY-TPofDD!`xRTli=F_Sg4Z{&tf->7UKipPB!ea{tPv$Q9#LKF%PRFi?ws z0-@Vzq308HDUqB`ry1#gDLS%gnIJ>el^?K{{xJgG>>N)F?lVEuo zyNR2iMJg)Htx?!<=@u+eD_Ug3!WCNSz}^uUVbFbGQ?sNf`rWz(MRx;uz-CghZhrp! zyU%yV?3`0&I`p7U(AQr)E|JbdVtYe>Ob-Q~;JKu-5g3a=sae2rSUN_v#c;XF`c)f#(21}HkKy4Iw zWnbSZo0%P*WNg{cWrJeb(mSJW+0nVgD7!jmO=Vl>tf)NE=@JigPzP-X{Lc1$N zV3N|)X^A3Y=3FRP(xAYINxv?ClwU37*Pfy&28Kos6Qt-Tc{BR!SL_D!Tg6unjw7ZA zAEjk#uAv`Y)9bj_IC@h3dyUSw#V2!4b5OKV^(>DY9#cx4E#GGDbFkW=blgVB=N_3y zr~qOK5H+>}q)oOH8O{Q0iV8}yr$iw(I*x)@?EW6G}lCx z@`vyI;7dZ%({y7a^Z-SdPvj7DHVz|HBdplK$%iEOaT)ZTd*UE9p zIV}~J9vUzuTF|6zp+-5<1ZxYdV631ryqcDp8@FJi9FEooLq)<)@}J$zl?AebH^o^8 zrH+vM0#(?w)$@+B9XV-#(77iW|M;X>zvEPKc7qcSm2H6maKJQ6Ru3M1+KsEHlaT|N zN>EQ3dG2@@4k*jQ!RA?tVJ2qa=Y1dMW>KEHgarDpI1kwbJ?13Ni#>@eCqvHwrYxAh z>Dc{-W54j+*HY;@?GWTYUV2L{*lux)n!JoF^Gk+P;l@X((0HGJ0u7|Tpc+zD|`?Y&Z+X&$l%6^aHTTySdsyJKyO$u zNq?!aP>+b8QE5Wo?DhK--Cs1(xRYAE&lMZ0IM0a>dMmNriafQjJ6_;R67Pfb_k2yF zKon<_MFaF#y{SIj6~&)wF7@v^RK3?(${PuyXZuJtG_NBVd*#{^)ov9ZyjE+%K^-l|HrfSVz^!MW2ofxk@3P@8d!3r6#CHl z-EdFOoQ09bnFT$>k*w=V!N5*0%1cK0u-?Elx}>#*H3!QJj?qlA=tK6mfh)scnQW6N z>`n328I}tUhp@gx*K8zeI4ve^K22E`MSh1~&%7RgnejArU)5z^SZ&`NbE8?8ooLU1 znW3b>t(x7fX#ZvA@c&4JfilbM(JdX8BFRJ#pbahi!4u%Snl7O(+Yp?wX@8*cVsW*) zwK~_hrp+}T`7I4Xh>JG&4h2IY^%F1CMu#!DTB{5r?(rfe(ceiKX>@<(8-14k>sMSI z+fhq@shZ*#uy>OZDY~kEQrCKtDOEV65QTq{NfP#DH7FYvWoM;|#s(T4U2mK7YhCar zx56k!u*Lf^v7+)S{@4npE_T&RbfPi83QkNMEHBNDhCgugg~SbYhw-(5+65$lZRUX{ zu$??_Xi>QWFIRY{T#=V6hUFxFx+p^eu>1yp@MQ|S)D6dlUv*=Q1X$x+kCMX|lz96w za^?YJ;qaz{BS;{JH=Y|`a4Cxul(>;aKcTB+ACWFsag(1k*LWP8AwPm-WZT3bkeG>g zwN6H8Hz!`S|M@OIg-53Q|*rq@sir%kv1P)AGt>^#3Lo51}us z(3i^#vr6S?=%a`-qiEm^mjq&$a1`s$tIQCk@#N1AY1&385dISkXq!(s)DC3bTdW5p zg3v!St|ceLT>+NO-KR;(O2Bp`fld;CWlgWQe(W8$&yK3ix>!;GHnLEIbk>|$V{wC0 zSU4ylwy|A`a!I*Mm)4HOHVOTSYcM7g+bPr>S*I==I}OrzbuFSKTt zo@2+d{X{ka3U0y}4xMKYV@TgScpf%|^@Fw@;eUcU-5olZ0CXXL@f$_0q9+G`h+hs2 zUu}sd26o%n%AJYp-e!)_zQejD+^ZJ%;o6xbK!r$5fc(*!D#2(@N07MW6UGy4@o>77 zroGI<4)CoScT5ZhK&~Ak*Q&PLm&d0JL7_ZEh5>g4kx{Tb>bo)+*iQx+c0xg?-@pu` zj?7~PmE(~TR9%Qr`@&s{Ojc5V^+k(j@w(K{2H@(xYjZlwY` zs>N@&_ytGGk6WC@Hx_5%t;HEtP2|Pdt|hjSZ7y7&4K}wjF(;r>2P&}{YP5gU8mIMb zj7=LXS3Yc7>aF!uliQ(ia@_MC$RF1xbDYQ47+tXTg2sMq@71>t-fBUA9?`HRj=kC? z3}k}PTc?d?_4FE_Q;Db7*xEe21Y1Y-?c<}`0vPg|nj__6JShtjT)d}_%tA^6`99BI zMoW)MO~t<<`w-G1LYz}$`O`&GN`NU+I`*?=SguzIuWrlUnM--yu9%y`PpXW*Za-f) z(rN#jy^-SAz)f_0Grn7Ype@~2tnc|-;ZS0{qR*I50eLTh19@AsT|A^*(Af7|ow+%R z=Aa!r#qXz^-|bu7su)X!a1gXtGcz#k z?$C6-@55UtlGBxxRMJW5an-0a{+qe8Fw_wi1RXdur8NW%F_$%eV0p@b?&dU|5=Cn; z>-gS>`Rmuu*HoAqqJtTcDq-fU)E>Sp;yZ{bMRnbQaX18j#^AMQc4xu5Ll&&(~>`tvJ!L#6?B zYb5-sR2~8y_SqEofUWzcUHSCM7vH*{v7J^hW|$-WW`1>*pUCCQ<|{hODfywZvCS9} zdenu^i_Cii7%2a6Dr7Qa?xm9yXGggW_nQ+^g3G3V3;C0a{K>=pux ze?$8>uE*h~_AmbTi2jOqOE3!BruH?OW^E?D3O_>Vq;&R`VeY;39*$S(V7O*JOq;xa zjCl{!z*v-&??c_Y1x93rFw2JYZKHdLS4pzJ*l`evj@>c*q^6~Z>9>mrUxPqm$N}D< z!qBdN7?PWyMTs4+VgWV7-_M_AGR=LfutksLhzE)dDc~Rv&FoF?Jl`eO6fKbo!=S(- zj+34Kf0NwIpy%;6aGt84%!xa`AnO1JTGogcplP};S$6E#SD4u!jN4UW7+`xgx^sZ1 zY94(=Gcus4fST*Ln=xxr@X*(C+=2y|i<>ilaS~uKCLMqcvL#6WB)&uDw<&Nd2My{! zDC8nc?D5?_D3%%67g>G#*ROc4met24pk6Dl)2w-)1@GZcLwssh^izw^S*pFglkQI zK0w|uGA2c%M18a(|M>OmQ(iYR9kDaP{7*TZIk;%p7r@ZSJiC_9^HMtR9Mhadm+&56 z=E0ol2JrqE&LBmM3+3n!GU;!_c+uu1^gvFUFx2cxVwhV$ zmGTF!^PE7ja0Wo@%-?z2u+hUF$2(zvusc=>1O7k2P2L7tc40J3AOA+Vp*vYDBtCz<|w!Rhs2@06M9Gf0~$X*2x=(q5Fb7s@)$u{HQdapf6{D2!p9s@vI~xKAEhXG__+=h47Y<{`3z)<$itWb5IV4XGF|wwjH=bp!LM}<55oJdF#_!slD)Bo`V#yo zK?Rso18pEpDCWbD0Mk$>+s!F|ObU?(R>Mb*D|DYfPckqZ%!Dd;?={8WHG;vI1Vcmf zF8#zQmwvvy>Ncwo?ES7_wOpmBR*-fLY1b*L8l>Go+D+V#{H zw+0oaAXaAZzZa;un~(H1|KZ-||3B<)A=2BzhkIN2AM33Vso#L~Mx_3KKBVnO>K{Pb z0o1o*M++G01oW+|>lQ9U&~1LQ$ZFq_OCeVRE_AyAKiGB^QrLzSlHsFpy8%TJD1x-H zs4a@xqNptuHK3>gMGY)!h@yrlYVe}3;!+Occ5|iR<|1w{I>(RU<_g?gft!mBG6fd! zd(kN}9MtRHwr42l8M80lI+;y5w{TXJrU~U$Z4dy;Es|OUbU3vHaEh>McR`5@u%$Dc!3KvxT&q?R9v!^l_4HEzL}e5KkO742`=7=A z&*J`Pans^nys-a&U##n8WnH6QlbcIfjjB4U^5UmCQrEtup}vx?v=)W1_E89H9Kw1O z!um%ctTPCOsCrsZ^ixu#RS1D@o#POqDqkW0Q3!d00K9N5Q_!NE6w^M;OtEkPs~7{T z_&czQA*|&XSj)cyYdM5fih))79atp}YqstABvze5)OX-Sg5mA0sa=N^iQp?VivNN^pi(2+YDf?2%rOHX> zT1Utx{Yq46(=il;f=s$1kS#0B0(|nGEoT?7$HWZ{`5L zC;(rUOl3eS=o1diXT1<*KK~1*18J%lAx(wlqp1gf^(mD!MQWLfGt!K3w)N%T1H*aT zdW6TVmwpcn<91DT)i#wy%k5GT`7Rl&2!gs`oB7{>z!qz>ph7781_UOQo5e^sioes3 zBJW6KtJPGdmz(8O7@@6>&24iz0%G|$K(Kjjs?*vm{RRX+r7H>&rV`NLEFyE!qzI{0 zPZ3>z%)>}D%(V35vdnXUKlIMR(u_ zGkd!gUzpH!FTC6CZsHqCWmh*@zA%?V`B031u`=d{O{_VoHfg6)xD&0=&aOgxJ2WaQ zhDg}U_^GHt9p#9cFpDMtv*a7cpRXJIAm+iGc}W=oCxt=Z-MY~kB;^78(5aL-6(DbN zyhjbYb@LWa$3-vLun&1c&#wIB!&vroX~4?v>xN6m^s+C+PhndxE0*@x;7roZ^uvLF zl8;+>zTDAJ!~n5SMZ)dfTGT_T;=S3HvdPTQ)3M2k9vu1!2$4ojwLTjz6AO!jG5K^a z+0noMgefd*qO8W^9>krFO6MqYkHTaM=o9>UebpIg%WImxYjw_X?=}ZNxVnOSIt=d+ z0ATw+2~1-Iq+%JvcLC+z0aU&7oZ-ZOH)~wId;`{c6qZm)C2*%EC`Q)Phrs3E2ghw? zZ$QbfMxfBvTmr#OT5o|^dj|wJIK2g8{Y?-O^~L}RqAjx%!blMvMRRVkCHa6*<^WtlKibU z&2pqrq|$7@lE3LkD$OF5Ugj&=n|7qq3v3ol^4J5MEi$sfpTh0`cB}&`2=)yNX+b@o z$9)IJcrnZ9tb|Y_>pq#-A zVwHK&*MA@MYys$-zYqFl0qDkmdyHS+0OC!qc@X;_264Rz#KDI_+$;id`UVJ7P>UI% z7BhuGh2EkzGX+}S>upN!pmP$tuFr2bvL7Nquck@woKX(DeYxN^ohT8$9~kpO87q|x zqVG{iE|!*)9WHEi(-wufy4_b>Ol8cWiM$gPmOA_Nwr1Pn?rKsaUcN+s(XCVH?QBXO z;h=wpUEfqXUXFxJO*~s&e^B|t-aCj7x#~M(j0#VI{DM`VHIN_BkX+{ljIu^(6}|;;zomXEATio6quluT0;Gn2q_uKF5ICpn_b7OS zzc>eKfWRe@)R-4$1cA6_9de&#?xXq>zNQ&E+dknN7m+>y?6mX!iM#Pu3Q*p9t9%(> zXM^H%V-a0qcl4;*Zw;AtY2KYT62Lz^@|*h$qo+q2d^YcXOspRqr2ZkSbzfREN{v|7 z{2E;?F>ibRwdE3j4KBiR=_Sy2pYxQ0F-D&boi9H3AZ8$5;vSuhL0`pCS?=?~X@i@c z=?chiE^{>wLEPZ6;rWZtOBHgrR7MlhUp${H&nypp(nn|KL+ol7<1En68bgRVvgUQq z?y`5r;lp{LQ0qaschejPu_zh)1F>s&KYymODGWSJ)y?OBM0L`&oTP@47|I5IXP=Fy zjXT3LSC;i`c5-rBh5s&_?ZfBu#&xyoT|Zp)os;Kk-MBuy>^)retBu_ArI&5^P;R%@ zzxJ#B>g*_ea%ohn*5J8$Ia=ObJ2^S6ShjssVEyzZJ6k)c z*0!K%|D<|x2oxxk>4Fm+#`GK^{QHt_bgOm1{b2dY$0TdhyGp3SxU&Y82b{?a&b>)qOQ zW6~;rH2cSwJMDUL`T5#9Em@Bzt^3@5!*njX!`ErbnaV<*0a4T3vZU+|$JZ{9DS_kNbdsdhMb=I6(@jBCXt1&#PPc%SNtsGwD+* zQcAU2e<<3g-NGX!ZNt1&*?(KxkM;V=>EU+&dAzmT9PU3fUe@jp2D?x9%MUB}FQ@jS z;T;`72M48oV|8oa*v?n;Rp)5ye!qV=tBx<)%Z=Lbre8ZRU7lB`^@G~cXjDDid$}2Z z=XM@m@;lA5(eBO={?=zsw_!YWwyWoRwM+K^h-TR^3eI-FaaiA)jBomTPt`$vt8=q* z@0@H++p8JoV0MRcF<7j!zo)W39F2Ke@H~&DPQN zQEB>o^gKN|?LDvEoRpqVE)JiL*N(4$&(ov5r=7!LZICN9yZzOzvz2T2v^Cz|da;{Z z1vi_W9_-)GX2*kcr!jI1+2yX|b)IW0ws~_uxj9{i6;<83rV*Rvr=9MJKfT_%zP{;N zy@&H!|K;V%xU$#RZgP&b-Z(rjjkfN0sz;;K=i$YEF}reqU8|0!hE>~zAJhAPlauZ3 zgNM_*?8-ww`+S*xXz!P@S@+PndpK-c2cySUHfKHTPijWnX!o)!`_|$0Vg1^^%%)-O z=Pyq$_7Ah`_0dWG`ljJMWmisKo@b@Uht+J_ub=1ahoM)@zBJC8t%IYh?8@xsu$O+= z=~sLG-Pz$z_5Ardpp{OybZ#AgwJxr(Z)2i~dhX)pnDra=;f1^N zu+>iQ53F>(I+>)02i1q`^LoP@)vI-<0wz1&-Uc*)k=dzY>1 zWA>r5eL8sD@|(Z|TixdBlQmpD-CbX+7QD{t%kj$1(;1|WN5|*Yn=^ZV|1y1aHGLd) zm-F4n{gu(-+11o-jqQsy0BO6{k^)v?`eJwaM`|8)IeGFj`Ht*41K88~kL@_xM9 z>}6Z0_tVbKcB}SqSx1k1uWABn$A10!Vz+&g9yCU|qq~E(%d5^=y^%X_ zIY!~=Zg+WBILPJp>z8*o#?$`Q!?p3~tZ$$0wM(U)&du5V0W8R)184jC+-{%b+{>wZ zbGLJFchDFdAGB`Fd}sgQ<)&?%xQ*HQ;a=@#bWu83p3d4{?eyS(^4Ogi_O5?_xPP@% zA3Yn5yV~JZZqR6Lou9NWb}k-H9%|0{QLpXP`X{>wE%U*dn!7L6<=Xj^Z7<(VUphCg zzdy6a2ffzOtn{2-AKF*X{YTH5?H!rzi?KO+UcS4$TOWJZ<|EO{mQ&q2@t0@Ki|IA7 z`-c+;{@r`J9v_x}Mk`fZAlp|pq?KA}{r+xvX1OQk`eeN0jc)G7%}IB*diavR%Ga*F z>G5&)oYyk1vl8_ML`%c~|T- znx=Vtv@(1tOh#vq&8v&G=6x|YyKIf`owl()xj$HI&&>UQR%uom9be{aD}$#)b8J4D zK$%3iJiMG9+#K)iR*myntux-)Y9H>dH@8o!hah_UCtl%tVjp`ihwbX@^Hsb`t|hu zap-oY2P+Tx!;_PaH=13WC#^1k>`iuC)%Nz*L+7G-a`HI7*!Kn#EAKyCo$Q}nb5T1H?!J*uvu(Oj_ME7m+j;IoINX?4UQgW zr-qfkTQNbj6uU1+yDvu|E|(|Or@gb1cYfNr+1}|)4h{#$JKoyp5V%9tUp~LA0u5|2 z39|fnx98;i#{I>^`8ne&&(*D78-(%ABa=*apJY&e@4h(}GU$e6P_1YW_agSu-!zXSIWsN$d1w zTDr=wnYE|;r<0Z0fwO+oZm$fp*)`C0TL;-gP%jz{+dbaN?mX3;YVEqZyVcyiTix;N z?x@tfY7R%OD$H2_(l=IbriH$fUYqXc&aLgcwZpx=ZqL7*9q!jb*i{=|BYl2%HCb7I z?cOx+NB!FF_U=n1q`|ZJDcegS1u2)fxv`*drc6F;;o1Bz( zw^wVAt&{Ek-QE6q)j4gS-=~inb*rDd?#(XG2TuNCYio=mXq&Zxo&B%etLG(9zC8HS6~z-qn9HP8_wNR_G-HP zv~Jx$v`^bdhbM#TvDMUcyU!QvcOBuyXW}>_v)~>oZEFQ zYv<|!bkE1JW7V$QfU0n~K z{p{s|RXAGi(mrS#6q5V%)1$`TxOua+du(ojUhEb-lg^?xw$CeCDtu}uYEQ_&3X1_A%g$trHJP>jZ5D>*=d%SB zo-=`Q{PX8%O6JLby2GoEi*u5N97g0ryG2o7&gJxcF7@h}c6XauR}}XIw7;}iI31o% zM>!PQycK#>U>xi-N2w`6OybFWVmF7TD)jcLH98};8KsxHT$NW)N;3dFkSCoV;pINW zaR&y~>$s+=_-LRFrt5U*6gne5xRom7nvWCH^TV1+X`Zu7hiA^X5=q*lw|JpjQ_KHAuhe1-yTDMcFDx97Z{aua^__ly zXvSlVwoFk?OKl_rw0c2tKDL``f69@`O(pRP6TS<&10X!JtF+=Zdo~Y!uK#aAfb<9- zVCO*lPJf4A!p6Yz-0erXIg<1%Nk3b`tMvFT<&HIfHM_||DmoJTmEHCH4!){xrs;&} zRqs2}d_*EKsi-qPl{E1crN}(KSx=p~d@gZV$R%3D&}2|=!ss}T+qG;M0Ujcm25kc) z{0M+~0vHzDh;Tx7?q-clXX5{`x|N(haE9FS za9bXK>+$0}GsB<9QD)0uFk1ouo3Rj{_z0%3m;#7NGj3*441_ZZLzxz}X=;^WhqBCG z4}Iz5je9|cJY+X=l!(-90DTW%jzS0nbDBWN zNsU5@nl9+2u(}oZc;G%vRBf0nHak|rXfwWH*&eNQT2B)91N_g}ucTmdAwSgd7E4Nh z7nR9aMWiz{4Of5-8%u3`7(>ovH>IQn6a{z6Ayndro>ELJEawjC-A+|lE~oY8}sJldU~ zu0TrK{0{%#ZjiE}JZ5139ssTm`1}nF;c&J{!NI%D7(`^Zpxl&*Xmx8E1q{f4EdWnI zu)i)+%wdtM+;#3oDP<>rUX^qDHT>_UoO`7*^ZA&59ZkPx>2vTn9PMi9I<3ihKEhfu zpfQ6LNXHeB@|Uic764cZAS}g05CviZ@VYTIDQ6yL0B;^)f$Ys(r5jP{COw~pIj`T% z+YKOgGs)E~;4VPlZHmP2xN|D4jS)yGe+(%;_G?tQjzq6Qe$V7`c|C*w%j@`&E5bkU zzoL#Gxf1*X|10Sw0#PWLOYm(jE$h5uE-02~74bWd^`TN8fWW^wy_mbjXX@~VA~cCD z<#98gW9<~NK#p3`OF8&|@=E^xA-Grp0U>}AS_sS{HU(t6@f}x2E~n}AH_!hTfB4@b z`R4M0(NlyMN0AYgm=}1-l`fpU|H!-2E`C ziywREg|UrbPs%P{@ck(0gJTv0Yy-Ab0BD>0qmepBGy?lavr;jjHDf%+fXUq$i(0y&|y^kzF7AMC#H?_E3! zu(=3uiwp(D)R@>PkziiXVR4HB8Sk;XJvuo@DoGp4Tep-G#wp_u?tnZFAH!ivu=?=9 zHtO6JTQ?;_FqAhf4g*v|=wXBGRZmp4G@ZHn%;PQt>^c%W*mXtAf^3Z@e?{KyI}Hb7 zAwpwg;+X+L^Fya%BtuO7oG<2sPL%8d6isW}VYoWp%1cGaiO?vJ~_7``?Rn&Ppuq^R? zAWR^%$rqfgf*8Tq=Hy6i=0Lq8eup zNi8EDiX0o=L`Hr(QqwKLR2LOTSIO8?UDp}oo@R+z0pkl9Q_EWtS345HC65mkejm|D zg@vfTg@yI&7qww@fBXx}n;1ju1qnN)M@ZMwW5^X9AZaq&L(?2rT@n?*onj(cujYBI{r z<=8^eQl+?3$Gx5wd2c9&TfYX3k7q6g#t&_dyVJm^r9I^G5uP9PnSO2tp|0fAR9WLH zltZ4rHD-*Wg`9zJ7lv4~r}p#xID%7SX2(v_5z z9K#EWC#`>1;ODn|ZWC}wTV;!1R^bv;Y73Ao=TtnOfw?S^*T1F*;cqCPUP#sg|6+vS|lXWgt zp3BY7S+&!#M>~npC_A!%A!rH9rmqye2`f{PoDfiH*-mY!9SjFkmzv<;7~((=gO4DJ zx)QZwBN+caI?uB)@x%;aSP~CpEAg8I=>V_?`DA7=lsxM^b>iQ;m**b2g zQap;^`~k-1a=Ea9Wj=q#e-~^zc|Z6zhf}ncMj47~5XSP>1x0){Br5pkZx+ff*}s|} z2S56K@XBuQcpTo*)nO+p!Z*IVsdJQ#TBJCle|UsiEry|R!mXA8KY~r41wWYi7q?k5 zG)LAhNj;Kvi=Sj{8+EOoH6$DI!0L8Qdvjh7DVx(VY)is~R5J3aUsP}T84DV%nEXXW zJhD^L)mt#?;S#-T?tlOtvBMVS`JM=Bi`&jEXgjCgfqA#-;Nr>-G+@)4uhQ0J?2IRP ze<$mV)HEy-=>4HWj}$_N0K}2KD5*OY1*o{Vmc`cu>EVW@JY6$YtShPkA{QJWpeYQh zV%Pyaq)toMa1)qd90psWhlLW^b`4+1UMiq_3B4@v>z7h1lhO30y#6Uq@vID-FLS}d zqW!q&W7{H7m3`QH$(JS$?T%uB`@e*uW`4ZWswEx-||Ne^|)8 zm00+ADRc&Z^0yfA9z&2yrjlTU@kKcKCYJ`H2=DA7fs>#M&!=?c_z0E$=K0^k?VGX& zTN0uDlU$_E%Nx*+<{Q+KFj0)$=|){Q72J3Oz;s5FWO|dbm7z600&)RyxOL}DtKI|o zsD#Vh@E)3BK8$#@G!XARfSexVf7G?$u$Z6gEG(=ZmwvGH{K4eg6=%PL)9kl!n!SaS ze6HjVP&ujF-QZaX{~Ku2+!~tO2w&F_+z&X^Qhvi7n4t6gpWL)Z{*6-U;v*=rSoKAmpX-tg3ZN3l70GZ z@ucx7z5<){K|7Idt8#l^GQyZZHB@|mylxhX0!LCx0cV|)zjG(o)cmffmh^>rO%;F} z6vifl0tpmRrXP8!Opjjff2#aplGPjJSxPo{N83UU6t+b4qOx047hzBEKs$p0Z`cuj za|@kG9)2oxS(!%-5*CQKikc<;T5Vv|h8c zpqi>d{hap{?aVquGuD%no$|#TGhz%wh1%0eb2DECeV+n7e}4XK25&|o(^5PeBQ-1N zj!h4T%AxX1`MfS9Ay8_{`WP$Ltz2Vyh<>1OUzXfAjT0OZ_N-^KrEL>^GXnL71=q zvF2Mw-<)s#lkBk_QK9i%7T`p19PQL8`qpxmX@A!#KI5U$|1MO zDdRPSy1}}Ub1EE-H2jr$aS|;KZ+By9u1fxmD&j0e_RCWQdqCX4tNsRQ%L9d6@10@F z#|;zKf0Hm9b*(yTFMu0GX{H|VdFHjO(P{6Vl=#L)AmHFsmFb?wyh%}DO@+Q9*+efS1#KxD~fm{K^DeZSMtZ1}q zqbpVB&`2CgjodlinK1E1iUvkmEE6?+I>Y!{e+`TzW;_Aq+vua24pWt5U?nH8O-gCf zDY&LOs;FkkKy=L07|0K~cS{O_cZRE_mLgrzDZrSzqm6KMEF*1zeLOV7>3}V4Djk=> z(1mL0N+Bo3RtkgzL#tvg`DtxD)#gIS?c#Rj!ZM$MYB1_rQr<@@W}gjdtAy)$+rWo3 ze_5r4_M@;le6bz+7<&H*3xlOQ6;hu-_rtN^A+0oebSG4oNTp(@H=dl{HKm+kCATpQ z6C*nRm0FhVKn+@tZoHQcaoH@Dra6wr&L9(R+#iKED6`NX@onbR2D@CNf1>I}B3${%M);oSO!9q#Nd=l`43m(S2$w}Gaq_IcX_)4LYJfgz8W!tWsxypEdjUx z$+&8n9db=I9a#iE!~Xhq$(bm5{a(ozQS#=!l7=W*#gfXRMR{wV6;M4(|;4IG^Xqh z5#4l~sXwQ<@oqWj&o>J{DYa&~l{`yjpZ=J+{;^kM{V`5&yTVSk;8PuE#0_&fps&fv~+`gJ-@ zo0-|y=?wn7e4W08`7_F&f3f@-%b$h$uR1!=8L%`)mLJn7_YdHdv6+l|bre(SFWQ%~ zDY<#1Q5L+?W58G3s~kSB!_PJlXZY*X=vou6vci5q?=SZ%g|A^wdRgysUj_xg@wgHW z7aqT{2B&9E3lJG5$K%X2wG_fxDsVhzQi)ki2|^DRA1vv{2zOqFe{UoSI0GOdDt+S0 z&fJ-O%SKCLGBvk+5ftbxw61%=9Ac6Uw?k;_h?z7vS=hg!6L?N9d?kmZR)fxgIV8C; zy#9^Db?jPziaKD9JYdS(((fYgn%xjX2QhRgy0?N+p6ck?i77p#q^i6mYu zr?Y}`F_vb=^h$^we`Ju#WpbuzHreUrk~qcmSxTO#P}KR{#;gegldn_+Jw<_3LIs~joC&7k6nw7EClF#SDjxAyZ`Bo&~ zh~)dR`EnB*3M-}wgwLd$s>3X&R1O_iZU*IMDV1@va>g_%f2Zn}43F4(TseGx65vTp zJ{LoqoOm2Ub0*VHOcH<6R8HbgUCK%Pozz9Jl+{3fvYJYs(_{9YJ1nZ;i!EDV^MWbG zadlSctC{8yUiI1H(n~?{iPB&H1*gBTW>YL}EH;mdimC1n}dm68s8LhjB|;j5j>!uCFg zr^ETOiAy)B^pO|wv4{^v{J;wp*BLshZ6rD3nf0$0e{)vl37i&E0qNNawqLo>5It4f zRm#r3a#$NtstE*7PUl5LYXWYtV7Mw<62dB!Ldi^S`754$JiF-r)~%VifV{{7NPaE% z)y#5XA`boWfMwGx7gus=lc|{e0*)6xm=t}1Luj!k_x>DvGCu@_$EKWMD_m|7HynHT zkNH8Ke+Z>#So&j}F$VS<{854}bIDib*(h~Pn8#yuTtKzMYnj30naNHCA0ojQxI3ws zQR~PF#{4jHCvWV{(zpX%a`AhH-!mPcnIe6N-#p!9y&TNOj-PaNpym$lA7~Rnj%;Ky z1u__J=DvCGzlsb0IGfJ5ipNl{7!|ZWr^@&je=6t7m`@+UZ(a$pH-4t z6GhAX52ktFDozBB9cj&ARRWZF%6!d@PNlPnW0N+^!K}+<0n7o1E0Qhfz^E8hdr4#i zJxaBKK~n8VHn05=UBLJd)teup_Rfc>+>cN>Q*@la@($Q9IkX4?`z0rQeVi>pPp7BH4PI&jU#yhJO2J;pE+mJ#7d%kT zQYJdaPN=9ng)E()&{+@`Q#V}+_6lY6e_#5B=fd5kFcs~w6-rE3c+%ITxw%v*V?><% zHwJO86uh^kVUyW4hrV$(Fny!aUGjk29$K(jvA)?GRyv)cf9!On z>$3vW3d~Nr!%=m-B;_+`K$I|HBGbcFDrLR^ke4VeLPk8PZOEkdstY&InlRwY8rkc{ zT(=fG&|&vry#7=a`8? znHz7^YQ->Ft|E>c6_~GqEi9Q*e>9ljh9QVtC7r!Z2n!e%PIS|oWZ_oiXJGIMBk;eK z0i`nNRJ-FkBjk%-duDgYPNFK+Nr}_qxx(9QRz^CSCGb`diWFLald$k0Ta54aJ0ucb zc!@+BMhh9`8VBc&gdf+(6PKw`T z4wA0q@q|_}xTo}mzV8U(RqSH_;;F;Xu=^8y?n*-&gZM@MkCpG=DN(CKamyRPm&v|p zO>4Ke((5Y|YuNpvRL4OTe`lqBMf=7alEhm>@~SOlfa#LQr`k(|$ixgke-@>DlG&nQ_lNWf zS1^J25xBqOj~^(}*+={!u{;#M2e;kwipWr2&oBkF*5gc@W z;$$%2gE73-gIC|@>mVzi2Ncvz1p^ve5JyJD5si>mMf;Ktz@)!u(#xD*(({nQc%yGF zex>C&;w9Hy{)!$(2ej-yg$HCK^MmK~;x4DMytm$24N8RXtkPwTXLd<~u9KwVxRCq? zA-^1%=nNdsf1G=vZ|wGa&(TD7>#_H|bVq?QxT_DtX72GlO=mbQG2t5C_7fRm5TGAF zV1*AqfOEawD%KJ#tO}G4{F^8p^q`&L#OfYx^9wyZ@QUmVIE22k>NVKju%N%{EN!CM z+Q-q4#b9gV%`%yc%&_Ea20LMS2@XzAjA4fho5g3tfASNs{Yk*Gac3EP)s(Oa-n0*q z#K0vCsh$;j(CO@2f;^yfb!8(mMZsj~Njy#vca5b|W!cp$6*sN9;4Z^vUV`y9k>RU_ zn2K+F#}3ZF>;%8=t-lFLa$Nft9Uoik6BE*+UaC>&~npi+G2p32tp{3Fb_yYyLFr_#fY3<)?Ul7K* zOf$fTdX_s{NXRWlmb}p*pZiv8GnjtZ!=>PR;QQkr z_+sV6wmJq@{ec8&c2j?A32w^}y#!*-M|C($f3ODLSd<&)&@-j|QS6d~9S-g}cVMrC z#si(bwCl&bwCjI2ZgmH5`KK*@VZE(w*gOD4(!uBec+*S|lC;qb+xUJ9Y*G*FrCya~ z9-#CCH*D|o>8K>iMM62qY(vcvf?$#4lKDf(0yvZZ4=)3{sf?HQf?N1RUeB=Q)MJ-3 zfA6<=+?1DRkDIF6b{=-DXfnUa`K4|F; zdIB09&=;*y;PyE6WZc7OOVN2*{LJv%f2%-H?tfY}ir0c-6&+CeO>g{z!rlMC&CF)< zZQe#N7E|P-BrtrXYFbNadYHt+il_eCI!mxY#aEG2={caf+HxhADt`=bebEcee-l9j zMzG#{4SJsJqH#Mo$B?MZk}sab7)G{cbTviRBAL&ASWCJUA8%O+A9^;`JJ`N>e&DH99YLphG0v6*_B7-1SmmiIbpq366 z_2a~JXX3gGUVaB4aj~*Z8MMMW_$6M}KKm)(&_nfdj;twF=?n$8RQu9le@T&L5)_Pp z?lvq#*e$XFQU;Zt%c|83ztp)lqNgZiUO%O~~g z*Ia|_M8XJfLt%rVZIB%(81f;4@!gKUSQWijg^Dh9`r;aCVqzCdNiUZ6@yH>fuL z(oHEEY5AO{^3$}-;TcZ*f2>;8n7bu~6{Luq)mB-nl2)2%p`X5{Z=IF3Enwrm; zgYgB+_$U^Bz;12?x|?ri5_sukhG9!s_|}XlnioYaduhy-Wh@OemB7m?34Z`w1@=S< z14Gkdy_(~=)C7Jo6G}I>0V;?M@IzaQ06oUSRMYbjzHx83nZ&kXe}D0L)dYs?916e! zPC+z?^oKAA>m($ANPED20`A#hbW^|Em7>}ezW)PE04UXmrH$|@>KZntC#+rqwr8+d zaY?_^M)k0I+GOJll${vjm5Ri`@Dg{XiPlmJA1T2OiBSrI4OiLQ8goUV? zATI+5LmyjSVgZ@3fAGNS51_DX;wBo@95#BaeH^~F)AM=z47SDwmlA`-V!k<0BG?u{j;nQDTD2f4&5T|AcM=TS0BGWDA^cLp#Rw@L8vApBq(=OxJdB&@p{t=on<^k<;`LW@|QEjk!(S_v|^5Xf2- zNNWNM!s+z_fApCO5A#KPKTe9wK?l%v@!=T^q3O|xLggi_42aSY;{rt?1w({Lgzc_J z+ue31LpH`3he~NijIRgn!!Hq;!<%a!cC8$3J<&Diu?k|##^J@DGs7j%7Z}VhEGXQp zKs6YWgpt6@jHXKyX|QAOOyZEG;eZqN=;RW@!zJ9be>}oNAx)_f1_^Ppfs?vchbOS> zT!OYC&5{7)`ojqJi7)^9lJI6AAx9`VFg{Lz3of9(ZM{Hq$hs$Ej5u#fKyWb~nSF!k zjWr5&O!(C$x;5+&VG%rz_d9@53TKj$D$eJ`HIdni1&zp5l9{9zIHDN?Ho;|O>aC!W~}>*Hdm+KGC-b$Z-{P6V4z;Byn- zS#kr3VDx&dL%b|T1!K-$tY;EZYw{S2!R=6tc*F<8NFc{V$xg+fr;XZSJ(H;09*lsO z@J1-%aUr?})4bVQG!pmDUD(cgNOZgvX7Xgbe;6+d1{H~CJM=yv<7yJ=<`i+^NtlYU z$AyH@I4>}Uo+I)kI86FaVTBkdn@!hCKnD`I@!)cX=?w@w`GaT|j#IMWr7dqM@xu8P9 zf3>iMo;Hx%a}unq>rcjN#|7C?BGW5MSd@oS`Thz-9^uqEEynfxzW*Xm~KI7z>+XZCOaLt;;6eO`Z4> z3q!g(w}X+#Ml74y5eFP#Ld*}PFm0P9e-K1cD12${f{H&^6ZJIDz}1dtX$gGOX1o|4 z(h@%2$w+0uiEd{4Y|KzCK`cF3p0Kz{-w7)h=ayU0L^u)#Sz=63^P&u|u>4+UAl;WB zO#u%kOcwU1MB3CC`CBlkBpMdhKq5GD76T{#9l^^9ydL-{v(*3!9EjBbUs!G_;;x)5@&VcI6e=6pkR5uGl;;zqC;0Cjwkd! zz`o;&AxHp$pncva^1;2&(14F%e>No`MWQwy28YuZV;c-{Do*(#QP z7dwY;iAC{SA?`r3Fr3!Kq+UdN+FdSY@`>)uHb$WBpr5W_rMwNUGr$%c*dJFv@sP7W zap_lB0f$V2jwFa)oPt^vodNa3kc~x_^$Lm4nxycKpbLJOpJ(|U+z^I^e^9`%g9co1 zsCWRahm{J8E3qKFjynrW7g_0TEFENrYGqh(St>}4o1?KG0$Rns1QrIVVfMb)tKJ)O z^9A?D!1Fk^%8;=#2aLp_(*g39vUFa$&DA%lY>*U`VIha45-dR%hg1pX?@w3?!la;FZy1AAp6;q!B+V|K0KhGB)4 z6zCLyV&7wD;zGs+(^f$rM#YM$(LzPLGyP{|z&VfTYJJ^HeELMP28Y|6pm1gZwLd!@ z%k69c>Rksk{m&--^j%a|@Lzxcbie^fjha*6opg~8nLt<;$oy#AdHxV6$6$S3{GNY9 z|IQ|pn$Pm7!WH#M5i!N-T1`!}}0i!TCNC~>Hz4?@KX2)6Vl*b;w7w)jzG zOAK2q4?wT36XH2vF3A2mV;O!iI-Sp^fm@)Bq4?l?Kxk+IlTmn##9?lJ7qh>H*v;?a z72Mk>i%)#!xOxZjwM>r{kMY*DCdmnO*_`3>-Bx9Q@8F}{$P&tGg}{cmsAf<=0fBpd z_SRlmtBG!+pd|i`@HPF^>;ivxFl--HZ~m$2Wbfl9KuzC5X4Aq8255|dgzbTWdIg}t zKA?yLLKuF7V8sP5?v|CchK+8Xj*ZU9n4+_AAy{-2jyxs3p zHn}G&&SwLkT_g`@kPyzD;HA9Cgv~Om2C&g)2h6h9Gdc)*8?EKIb%KA+;7@wvTSMEM zIicUo`cT&R7tW`8A5Iu0?m){1BnQC#V53Qwqu3p|1df)Q(aMo}pa(uqM88e6$;0Lh zr@}P_gbBdF`y(^+C4mpxprT8vW*i2e-f7`ewBB#tC1B|0hu&q4C(_!D!;X-RDq z#z1_FztR3Myy(s(%+-I;WG>RZP~R&j7?ooQs5tx*&@WCRHQJqo?cmFk4%96t763-F z{}@az&IBYI!+MEhFh8nx)urf$>6Z8U_G+bb;&V zW$DR*DK>4_>|>-Jcas9_V5^)thPrF;@HCzbqER(i!Pp_33bh8VO}eX8#w$zoGxqG1 z&7T*{$=r!)3-o`jkr4boDiM*Q;^4FnACWwMX`bxaW;p-%IK#YTouLcWh31O2MX%3r zS5g-}!k=YnX8GImOVdhgyT=YKua;*JK%q|WNx56JSz7AU?0}VF!+Vw z*#&7FUWMSbouTubNS1O-Mc&~+pxpt-3Nv(VkL`77oIyTKU~%_NHqIg|uV%q0@0r6f z^qthz1`r)A&<er4+xu$ie#Tn|{G`AAxG+xDTKk1dJTGhel6=iw(UnG}FTJ z5GR%c^wbUJ8A=2^1i(7j03vtX=}g8%UD#;&OVfXkq1EFD_{$zig&*t#D@|xfT@0f| zDh3&KQ19Tk@i~u2^T0(b5pevl06k|a8yE0CE4nfOHz0mXTbmg95`y5jda2hw`Z|~| zq~B=#3FyF7!}`MokNBOiMq}3k<$~0u-P5hZcgkZC)XNAqiI1SVxU5b38hz0K!Vfkv zlpcQ!e?KJ7Q?m!92gH8yMPrYa^SpCNFpVR8ND5YrV2QC_B8y6gh2u&o(B`jB$5nw+ z%E+Ih$|8}fqIB``3LklA8q9mp}4YX_#sN&^*QRiqeEz@;SW zU0taK>9~F7{RXfu{14maa!VFjXcwZD)2@HvTRfez=F$EhZ{H@kHp+&hZa+DeNMf2b z7GfDQ);UvjXhDCliXWm&U9kGL0gR0O#osR`Y7M}q0q1tRQ3KlRqO9pzv{N|a?_Q6@treduSiF*XJNLhgLP3=j#`{e&VG5}SWv z$q$5ziIv$V8kB(x>Iq~OhVP@N#S8B8+)(Kub_kkXo7-6yaPYPhi)6bQyNGIWR2VxkJ+crK_{_1kx>q;7QYgVZkXx^ z`v^!mzM}}bJx!-FWh}~+yh|6RHUWP_Z_Mkb+@g;pb&bS!Jh4C;V^n?s4LjTsu!zSA z$s8M({-iSj-iT_*h-o7u#bJ#(s*y;JNMzjA8k26~l&OD0kK(61!R`px-Ox10iKeXZ zn29HoEg|jFyaUXpU&4@+w_GhF6UuYrMsZ0IG%3{dChcW_lXY^tVw@G&$_gB zEX0TT;3aVNYRd8rX&l8ml}C^rJ`_Pskn0{EXs|;VL~D%KLKj!ydV?4QT+~=gZEmhs zqos@*{1ioMd)qKAH99Jx*`z9+GOJ1{VK*rYYGYqpu$`Nl^G)$WO~ZSjbAAtC&_)b) zFH7&B$?NU{Av_ys)a74c$!dS=sas|4y#AgXq8##Y~o1l|9#tafi zXD#@x<`*LQg-Cuel3&DpcE-AMNlFTr#T`EXHBz5Z+c#)SqgY0mZVlr(!CifawkxRA zNVT>cplZ5UuZ4CDUJ-{ctd_u8m{%BEr~-rb-ma0IDk#lODbhH#$&e6N)}stI_LAC? z;JUGxgjQ&h;S4>rQ<#4s|DqZWVkc~}zXd9IE0^(`iT69zLmDxB)tLYG#{TMBv9G^f z_y!FYA1qrZJ1!c06Gpe|G9szc2Wq;C1sHVE$vCp@VWR+&(8El&>t_oIsQ?W|Mr7Xv zvp7Ka0g8vf9GeHQwZZq_`0Dj zT^!+!=S)gn0&lV%A#V8Dt_pAJU&(rPJYVJ7MyTF`g1(JaSP7BbtO1 z0?3ZIon;i9uxFUv*0NE#6<RosYA%?v2~d2Qmyn0OzjyF>YYO9ylWsE|LW|di@nD*%JCHH4$txR}G}VT2!nwXg z|1YIMMB6r*55`?+@y6frJ&6;bAPXLG!@y=iGMr;iuMsW7X48uwEVh`AEz$-*G{ec5 z(bB)bl@5P&`~<}IWO>{m!dCZtCOX_k8n~7Xa(nM{l`QnY@@MEZ&t$CRr+^?1~`1Cggvg4Qy^W449{KmMQnaLtlts>X2Y@+L^eg zdt@m0vJrO428y2+W8cLtn2T$A#M@&>1~FLxN7IcizLc%eAJhQoWJ}Y5vAbn$LS`kN z)JIrl&9XtvN-BQ@Ft-zZnr~8AkUmL_3ueH$|1N-(q@q_S@<9i|VvQ2iPi(-EO zVPdijCGb%BBTrNKEx!_6KJdmcyxfm!q;NzWapTFcT$(97AtL}Vb66k#ct~g_2SBzq zH?+0UpvXKp%5ovEJ-HiM=$ztAU?uppjJMf3lWYzwMW}EJl31SWYm1uU{sD-|5sA_>MP$IvK=|uD-^rS+-V2f9;mD16R~&~?+*fxznge7#lz*3Fjaqg;kFbt zYv8XUA;y~pfF3&i;0SffHg1rF*Dho^-wCrrifF2o$c`dW-iIfUl4xf#7!{G==w9)! z2)7V;zOca1zz!5pt6a+z6C#c>x!GrerHA`C6J54Pp6nJ0Ao(3Otjo3v6a*2E=uD7C zxW}WzyFj}M@S`kE-!aLkP}YBT_|}T7bOYx(!QN7Wv0zrXY7bkDI#O`{uk5zTIG!L2 zKZBtu_HwrDBfHWVDBQJUAkN%T{xBypGKz>pAll1)tYiR_T}+LK5|bCyyQAA!F|H+E zFeDxyldSBvJHF5Dm_}bcuZ40yhnfP_Z?_$8Q9V?M|{29LLdxt z@P(3beI?W+$QWT0@LRm(HUm6qAyx^rdOLfLRnY1rp|GLU011EQ3YRLbzeU#toeY5^ z00r-IJ@bMfGRcv4z%L(uKKl^0!K-udoqwoBAbz#*pSE1IcS4b6{)Q-9Xjh9%xLzVU zsKps%a#-d&rWeh(U(F!eeMg16XP5l>r|<{}PVGW~$MIy@sgvac)XJ=)NmKs#?3gCz(`pF}qK78^B0}X^6%*t3^ z>1NE=*hJ{bd?ouLW`}Yx*5t&eO>iOQvSnSs_?T2coZf%gugw@eT!P#G{2J1=;Sv(L zgG9-nibu~*^j5mCbe-+osY3-{q!%|7f>Dl+M|7VHL<#+6Yd{p_F;AEn4`hesc`Glw zYQYFbBM1SWr1aYr-NFt&c?~%WT2qWYwGN007|AUpA>Tw_`)=`so`BB$@?rG3r>otI znRo#9^Y4G~D{}jMA^(!c!TZ1Z%q>EQOz|x&8u1&ZpqQws`GJ!0-QcZvG-2B{cmOVza5n}Fl@I6SSb=XqZdn;XcRr!}d)AGwE#>At+32fL zDk1b^;Iv`SnS9aNc;8cd04#r<${6lJGbiR_o+I3m~xlrI}RROoWvLI&Wp4fo~a*@xj%{Iv@!XZMC~r$uM`Hb?_qJ=$RaOmMU@y&cKPB5%P$GPA#)@Jz(p+X>?7DfxpBor%QTk$A>2KYi4t_5L;z!5|V zo~s4T(j`nPmLq``=4PnC4W#=4-Cuvnks;wEd(DS}{S+J!06Y>WyR~8;+@)zycU-mS zUnsWU?v^)J90(n>Fr<1%+p}jd!&Z=&kKt3(8%&}VN@Td$g1|1syRGET!C+y}c5 zOCF1bzZbKsyV%0Hj*3``DTq5Gltjw473Z-XpCQLL+f3HvN^B)e)50o+C{TZRVg>9& z_@e~BJYG@5`uUd9XRLa<(tu<&y%c+agQE@heU3GYO>bUDZ_`rs6OPW^M#hTG;#RO} zW?O>XV4ZVN(~RFXIH7>cCC4nZ$WhJO06n9+h=|~73|noy1~LZ2HArEsdmAo;;jpE2 z>1H$kdU3;28WBK|4rVn07h!+P3fGY^@YESE=j~+nfpk+}+@0^9UD6eil~D(F1k<<# zJ7xCVzoK{k)*N@)6VQ)2##_oD^2Os1CF_H|eyqXJ=?3AxEL=H*@GbKf_bB>#iTNnd zMuWZ(9^u3RFko_@BZA6S*czl#YJ41omBYhwhe%R4c;T9Ylycy&cE*3@46bP$E%{`8 zxFnW=CAbU}-4~XE7ibmqE?l*a0dWMn2XpN?M3f#Q^%3Pue2ebNcwN)3#{EH?u3iUl@a!&tTU7=8<*jgnN1dw_g}DiR$m2y{B^MQ(V`pf@ zuv1nF;M_(D>zvh~k=_E>7&~@1Vxd%9K=>0cmwl%JbASI>cNlFzKW;RJ=Km?28*%`i zx?XO%-nXFd-$2|J0=^qq4+{t2kIawowMxntomrNVh3WSI1JM+R#F#RG2RTVek=%#aEFp)DbWQa7#+b9 zsxn+mLb@(JBWyyJeFN6f4)xoOC=!qg9f(3H2LR4Tf_z!Zm_Ate@u=iAqLev!g%2TS zPbUUDDzO%r8KO({K#xCe1}H^J|__v3it7G@n>;jmedm)~09h z3YR&l0gQir3lWAy@c_aaTlpXeSMw_e=kb@y{bx5kJPHAQyyEAvu-fL|OP9}G(d39| zKpaTBS7>h!_CWV{zLMvi)0ak@8gTZ4x(68)%r4nR_Gj5Tr;MsZ-GBt$2}+z1h@_>7 zBUq$vrO^8UU+Bd`-+bZD1vvDtucQW!B|0#Y&i;RtwYsXfv@hhKTL_bZ6BHpPxu5s) zS{d6`?8^e2$ z1OTH?B6y{?VSIgTH#6KBzrXkO98z1h3yEd<_58g%Z~dfbvaUXb|Es(Z|Ce>uHK##P zOZb0#KTONFev%he-JQb!b(P`&RoBV?bNauo<>!+AZ|MKBhv$l{&Kvo;Kh56yNmG|? zb=vo$#d+Q})}v)t^tt>j|F0`5vS^{Gs?J;NX_3j_o632P%BynueGAVwbs?I1M1W1| zb;EjFwIv&!x+tAd%h+ex<)-U#604%j^eBJjW|R~b-Rl^Yy|F#9Uzu7Bx$M9EKbPZB z=4^cQl&jU!mS&YeMSKiyvHz(^qUtwmZPz_EsVGae_H)_0ww6t4b+2H-Q(dFirRujoqOKW~R8dLMVWpzcRf#whsfd56 z;ipV<#G=Y&bJV(3``ueqrg_%l8U$Ho`=*lb*M%iNikuer&@k7@!{%*z3$xXg)bKg) zvF^T?Wf+;2u`xL2#@q`b)@}SuoHKdboLVwOeR0cTbPQZJdLY6Ruf261O0C6{wC7uHjT z8cNYtLaIfOeD_y_l}=lBLOnkn1^$Khl-SR*Xo}+Wh!xv#!Gp!NT#c`bnmq>x6Ji!B z9x7^fBc}Qkk77Ky%DkZI%f*I;&uv+taMz3`_}cJ#K^(E&`B!w41G4tczqyybtN|ie z`shqU*PmKg%B+ET&2{3w(IsoJWh&F1BPi3tU#7R^Ftmk!m|-!~Z1-FpFJN;hSZ12< zNaLiwC+B?-x0$}NjlZrzRif03wXA3kngXY}YV$qR7YX@{mpH8fMnb>m+T?0;7ae=P ztV1$X>|tteRW+HT{i;P#I96}Yv{-E{sCtyq&{f>(ll2!QgJW3O@gY1`m-Vr67_9cd zT=z|nm%yz7M1TJ@Tehg{3=KJ9+0oVq^@E^glhMTk#V`xl+POlj$@%Qb*>StAPqkcW z9TnFu>Wm9&x$0>32z4$;!K{(XnILt1KVg+Z1Dtd1qhg1fIbFL`27PY(*z`lKI?`l2 z!pEtLk#4U?{V1M8LZ|6*m>U?zI9NJu`&#->D!wh9ZGX!LFab@Sod@bTvyQ0ac_*jM zpmn@A)VU(h<^M$svcSN*Uq{g0>8tT=Y3A1StkLT?gbJ@pE^CrgLM5rQ(*P*EZh==a zTMG2M4;*j3U-Q+d&U9~S;ZoMH^00{uR9}j$SN`!9eO?@8{?K_2fzuycrVDC+Xn{Ty zeo%Oc<$pPdi|<+*ae(|Wn}oyUr+V;w9R1Wc!$A9Z@SvnGg`|H#+{`xZ zgGz}ifEGP&>A%TPv+=kVT%C8SNia&!u#Xv_G&`wx$Y7J$E>(L#0}c5Dy;C@LQ$1SN zFjoY(@Q1{Yr>z9JB;ZT`S@Ux$-=NhO{Ej^7IWI+2^jb94thz;g)MyHvAgZbQ!)4?ye5GFZC2#bQ~nV zhjgzIa*i<{p-~~p`D4*{xIei(9@Yn9?_g&;vwanphjB3#dDYjaiq(T!$vaoIIK+qo ziV%PHn&3kcHaOfKqRfuME|x=nDzV2Q-Uiz4(`=~;#`Y9;k-eHhL3=4lOR+eL1hMhD zU37}~WV+EBVnrD$#dRCdZs8(i_TDT&momLnJ{pEZWok(-vC1C(!}<0}SN15WtV;3> zo!=`^%u4@%u=pw73g>gcLmd5}PBpF)pKgG@R z2@oqnU&;H3X#c}PVmPOm@2|7lhpA%^Wy45bTh2XrU}RB zz2g$4fgz?*f4NLE_a9D~Zl7z$`etbIIKvG4=n%`O21O&|rKOcgni=u0Pcmc7Qeg+t zCTg;ZRF{%c1{vuLeHiG3Lpy^F%25;i+M%K0M|AG= zJ<~@F<@!6kG{b=#_vHb)8doiMZEyHLZ%s=509}ora5P#}n7Af2VvmVhxL+)m$kx0Zp`Ji4`Yi<;65ak2q&)0min1oEe;zqVG`U zIEY|}Cw9AXO1Ye}u)0nO=gPOIuC<`3HLh>&<+A!AjjQ4Oh(Wp@cQ7n}lZ?o@7M2RX zTa`x)Pg!{q&rgcK&Lj#QVpxB37t4G5Fb0Y5t@32Lf#`mb*-j$uFe`KJ4%hDQ!m%)P z+IwxMq^o35G2B_yf}YMqG(O_iveYf=g6TYFX2va*p_w=uy;0h7Do*80hLR+hFM~4r zvcB)F849F3wQa)8f~C{2l)b6rR-#xbM01Kjz5AvQtCeIZo!s3XV|IVSF9V+Y0J)PK zak-MJs*(}Jtg(A21)Vsbg_3*(!l(NW&2%0kkQj13sSO`W=xk51rPi))GE9H8UCZ6+ zKE|Y4Q@QeYs>X&dnoQ=fqB_d(0l)VEhVsJFT$qQFVqu(=d~b696gl~J$}-c6%yA;l z%9R@nGsM)CG&wRB2rz$gMMu2Ke1aU==e`5(1<&*y=4MMCK$#{I7{Gt@r0;Q7xAa7V*V*O} zrQCD_){BL_M$$PIX>!QP_|E8M_|^fwFV+K)o?b8 zr&P=5w9_xJ6Q_ULJ}tl2;PxW*Pw?{iG-WF$Im%7y1^rQdzX<8zVA6+Cpw> zsGT4z83Jurxvg97K^8d16_~0PSVP|T6yZ<_mvFELmb<=wG>K$zQhTB}0`3W(n|r!> zGYr{rD;IYa^WoSEaOn^yC~b-=F_4zyGbW~wvUg1+M5li^;(n47M7@>xQ-=^>H)LMN`NnKy?!qH(kBq@ZHRKKq#M31~Q zc$QHfOIfdfgf;R$Tb?-lV1P4WmrG6hCL} zaDv!txsQLVdM?>KS@wTZd0H$Z`3ygt@t_1A&ql~hNKIh0pebg{(6Pf-Zh%qrSjJ-l z*J#q!x4sOT3)`#_Sq;WMQ_B5bBZ(Nnz& zto#o<)<@x=GSABDG|YB7SUQzb$}10A-HxRHrL%vaj@@JWEK`#cEFyk`(lRY96@P?H zbqu^Bm_`u1xEUc|jlo__zd1Tqae%fp6;R{&jdA#3V;2&SUoqp7Jv(0cigY%%^I{~l zd)*M8wzK0Tw*KnfuW*mq_89l4_h|^H%1t{6rq{x#b?M^Jeg%27yW`g)rdPySdf}+a zTIqkDYQhN+-WVx8wv&k*Rdedo`o4Pk53hdsw^u*>$E%nB`Ra$ief7h?zk2!d)ysc+ z_42=7z5Jh7FaPS*U;gu}AO6~-_C25locwqEN{UYk>=qjI#cFkBxRJ(Nm!c#o;$hbt z;F1oT3y|hYp7w`!+*@zXOYr6@e&V>$(sX~tAP9PO`IbGR_>0Fhb4F*(ptUSzZ-(i# zE~hbkh6)?H?%8&2rI%-r)L6dYUaR3;#>PQo3@xq1VW2CPET*PX`A8Ck$VYieJ^1)b}?aXE+)|5E`@)y z{mJ8S4x!d`S;sk?2a~Bauk-YLW+H%|o>4tO6&({8gYq*x4<5~QFaseggP~r~!NXIh zOa@#Qnx)#6g)ULGS_u>Ha5-$&?4!kG?T%WI!rJ{N$YJe#<55_%k1mHbesa$hkG~o} z1)g#ltjA71FS-vlbMII#7fF#>EV zf;%y0Zz~kd2;;T)RgCERctAz^y!BbK>6^o0Xbh?L5g=`1T-=A^kqp7f4MQ{eEZ?`) zmM~HH?e)B@3krE5f?J$&+~l+h^{40)9K$;Pc^eeur~nmq*aQ$dDD11!8@Ye?cS1H! z(Q@?2o~K8O@evy!RX(kwuI(YOs3QpVp%eJ+_I4zGw@=DQUVaV~D`s z6eKN&p+1&QI#$X1oL2)8$1t+8|K5}_38oU^*c7AlRYuATj>*XKhV6gaB~Y9g@1+SV zeuPAuRC!!V3QqFqOM9&U7U z<)H;$<|WzXUC&^|LvozMhV$IdfH3OSdC4gWbdp9{I`?dBuZioigZ)xZzJulGJsQ*u zGl}7iC~cm~+t38dB`SY#?vkWTww6w9%gqvoO&6c+v6TpweZ+z(!7Qr4ok}Hsv_p)K zip;)pnHd}eKohVil)A2xO%lb^SO@hL2lDS`U1hIMZm&%^R%v!hX*==3vE@paBuAjo z+5hjY*Sxo?q_hQhkWw?bVzz&4Q*gBX)?5RCN-Dd? z`Y1IrYhHT?axF)6^7+VE_G!;~VU{Ks!}YGvJ4xyKDwz!P2!lsDruu%s1rOek+!4n6 z3^PylaD820H*1MwvMh=`o;P~{`wUHb|3>Z%PZm3asn~zBY}tI+Vj90pQ1gI*HJGU! zZz+oaCO=^jb-6;}DQfS1HV>Vh#kBvTs`9-S8F6}p6JW${vu_3Z47;WDsv3ez{JqUc z0jl$?+B6{NNw`#_q^`m=ZA3d%qolMw2l17QZ3_@E zkaaX|jRuu+8jUK3xYx!Q=J%W`sd&_N78DEmJtbEAY_J`MU=%%%oc_rjZCP7M7i58&N)4{ zbCp-`rJjqpEaQ2L#e|-hk7zrQHzC!Lx2vr?t?o4ezjm!53RQvJTv| z5vPCz#_qBtFFOrECxxTxzmSnhBG5W^_3L6W{`&m~9|WgOMablF>;VH!i)c~Xd*>Qi z*f)RbJ2k?ml%EP#NpeZwDdI0+Js3mBZR)5VlfBZYQrUq%b{~KtNg3S)E7f#m4xt_El>QN%p{BLVQ}0jJxOw1{B1YX?PhoGd9>1I-Id zsj_7!pKMMn&vc!U!y|@JSUM;3-ntT5S?+&qI_kziyv7x-Nn20`QXFrLn93$kN-S{k zVANJ3VyrT2dM^6)Xftn5K%zA-P0TA4p@+nsk;)N0dhK-^WW|bYr2O6y+?uDyl$`V{%T5Y$iCJ zKC1hZ7d-JTl-~h|2t}L7zAMGHu0sqA(n$`tb+g3e<$)%a88)$06?~NGyqBCc+M|Z{ z>5YdKKN}ATPQ=zqqC3!ARpx(t@BOg%XcR@G$ll;BZG}+}k*FoQZ3>=SC(9RV+()Gy zdFfhOlw}IgeiKAucLzenm-8{VQCQDiNYvQt&c#8l3t zqCVV}R(AS!O%*`Zim5ekfa^Ks{A@Cf;b_i#juaUoP1!4~Y3j`ru_N6us}K`?!|)Z| z+Xdk)ykx8>E46W7@{xaWW!a2FF+L7TuBn79l_y(NftzhsmSU_w{r>Z4+FjmSyAMR& zmF=rW+cyf!C0*q@&=>Nsw6K3PX)=rYx-pXdhWp_PDaO89o_}*?F(0ZvJ4uGaVKE`2 zvcd)oL#z_QujJTwBexMIBFQ0Hz(c5JqyilY3f_0|=@PGZ=U;yTo#4%GY+zF8F*S$x z_0!qq{KfKecd5WVH}mIi*mKI-EVjGV&1@@n*~Q6TGNObKChjR(KB2g3l6vxs z&GmOS`GHo)a}Jc|k|2nFEU%uOob1VwwKmOex{^jqT-{q^zi`8Owu~^N&hu>GLrFlPW*E*Nl!U3ZJKbL;P0WE*8e!7rr z5Ljzs>&Mttxu-R;VZDBOGh4x8@r&9cMb9q!SAYc=DS8h$1y=O+C6H~Le}BGO_zUjv zwCX@z7t4*m?Ne(@6c4g0IQH+!6Ma%OWnB{1P*=#Sw=&In@SN9G=>}{Ui*NR8z(~Ot ziznARTJV9hBX!~&%vA%bS%iOv-pShGso&n2A{(miFj<>FrFk>!?o&|TmRtDa`HR_> zu*3*b@!ssyhadA4cd56h;fx{5L)qyirK00hF2E;VjaKO8)E`pegSpUi5Ny{!c&4ZL z*!%HIVUsP^+jntdtPl6@Jhp#%Z2xj*|8i#k^5qQX0+eiP!GAdm*iV14rTsWm!s96= zoP|m_n^MA;v-{`g3ph>GiS@2n(tlp4zDVBW!29$V^defqD^S&#iP9#1Xf%rE0?Y8f8_p!?#*&Eg7>U$?Wjff(i#s0_D@^&IBT|*#H0l diff --git a/FluidNC/src/FluidPath.cpp b/FluidNC/src/FluidPath.cpp index 610d6e8d8..ffe743cee 100644 --- a/FluidNC/src/FluidPath.cpp +++ b/FluidNC/src/FluidPath.cpp @@ -5,6 +5,8 @@ #include "Driver/sdspi.h" #include "Driver/localfs.h" #include "Config.h" +#include "Error.h" +#include "HashFS.h" int FluidPath::_refcnt = 0; @@ -68,3 +70,9 @@ FluidPath::~FluidPath() { sd_unmount(); } } + +void FluidPath::rehash_fs() { + if (!_isSD) { + HashFS::rehash(); + } +} diff --git a/FluidNC/src/FluidPath.h b/FluidNC/src/FluidPath.h index 0701eceba..134493c31 100644 --- a/FluidNC/src/FluidPath.h +++ b/FluidNC/src/FluidPath.h @@ -26,6 +26,8 @@ class FluidPath : public stdfs::path { // /localfs/foo -> true, /localfs -> false bool hasTail() { return ++(++begin()) != end(); } + void rehash_fs(); + private: FluidPath(const char* name, const char* fs, std::error_code*); diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 892293d18..5898e62c2 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -634,6 +634,7 @@ static Error xmodem_receive(const char* value, WebUI::AuthenticationLevel auth_l } else { log_info("Reception failed or was canceled"); } + outfile->fpath().rehash_fs(); delete outfile; return size < 0 ? Error::UploadFailed : Error::Ok; } diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 18c5ba547..73bd48b1f 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -32,6 +32,7 @@ # include "src/WebUI/JSONEncoder.h" # include "Driver/localfs.h" +# include "src/HashFS.h" # include namespace WebUI { @@ -45,8 +46,6 @@ namespace WebUI { # include "NoFile.h" namespace WebUI { - std::map localFsHashes; - // Error codes for upload const int ESP_ERROR_AUTHENTICATION = 1; const int ESP_ERROR_FILE_CREATION = 2; @@ -113,81 +112,6 @@ namespace WebUI { return wsChannel; } - static char hexNibble(int i) { return "0123456789ABCDEF"[i & 0xf]; } - - static Error hashFile(const char* ipath, std::string& str) { // No ESP command - mbedtls_md_context_t ctx; - - uint8_t shaResult[32]; - - try { - FileStream inFile { ipath, "r" }; - uint8_t buf[512]; - size_t len; - - mbedtls_md_init(&ctx); - mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 0); - mbedtls_md_starts(&ctx); - while ((len = inFile.read(buf, 512)) > 0) { - mbedtls_md_update(&ctx, buf, len); - } - mbedtls_md_finish(&ctx, shaResult); - mbedtls_md_free(&ctx); - } catch (const Error err) { - log_error("Cannot open file " << ipath); - return Error::FsFailedOpenFile; - } - - str = '"'; - for (int i = 0; i < 32; i++) { - uint8_t b = shaResult[i]; - str += hexNibble(b >> 4); - str += hexNibble(b); - } - str += '"'; - - return Error::Ok; - } - - static Error hashLocalFS() { - const char* iDir = "/localfs"; - std::error_code ec; - - localFsHashes.clear(); - - FluidPath fpath { iDir, "", ec }; - if (ec) { - log_error("Cannot open " << iDir); - return Error::FsFailedMount; - } - - auto iter = stdfs::directory_iterator { fpath, ec }; - if (ec) { - log_error(fpath << " " << ec.message()); - return Error::FsFailedMount; - } - Error err = Error::Ok; - for (auto const& dir_entry : iter) { - if (dir_entry.is_directory()) { - log_error("Not handling localfs subdirectories"); - } else { - std::string ipath(iDir); - ipath += "/"; - ipath += dir_entry.path().filename(); - std::string hash; - auto err1 = hashFile(ipath.c_str(), hash); - if (err1 != Error::Ok) { - err = err1; - } else { - std::string filename("/"); - filename += dir_entry.path().filename(); - localFsHashes[filename] = hash; - } - } - } - return err; - } - bool Web_Server::begin() { bool no_error = true; _setupdone = false; @@ -288,7 +212,7 @@ namespace WebUI { MDNS.addService("http", "tcp", _port); } - hashLocalFS(); + HashFS::rehash(); _setupdone = true; return no_error; @@ -328,18 +252,11 @@ namespace WebUI { std::string hash; // Check for brower cache match - std::map::iterator it; - it = localFsHashes.find(spath); - if (it != localFsHashes.end()) { - hash = it->second; - - } else { - log_debug("Checking " << (spath + ".gz")); - it = localFsHashes.find(spath + ".gz"); - if (it != localFsHashes.end()) { - hash = it->second; - } + hash = HashFS::hash(spath); + if (!hash.length()) { + hash = HashFS::hash(spath + ".gz"); } + if (hash.length() && std::string(_webserver->header("If-None-Match").c_str()) == hash) { log_debug(path << " is cached"); _webserver->send(304); @@ -874,10 +791,7 @@ namespace WebUI { void Web_Server::sendAuthFailed() { sendStatus(401, "Authentication failed"); } - void Web_Server::LocalFSFileupload() { - fileUpload(localfsName); - hashLocalFS(); - } + void Web_Server::LocalFSFileupload() { fileUpload(localfsName); } void Web_Server::SDFileUpload() { fileUpload(sdName); } //Web Update handler @@ -1040,11 +954,8 @@ namespace WebUI { std::string filename = std::string(_webserver->arg("filename").c_str()); if (action == "delete") { log_debug("Deleting " << fpath << " / " << filename); - // if (stdfs::remove(fpath / filename.c_str(), ec)) { if (stdfs::remove(fpath / filename, ec)) { - if (fpath.isLocalFS()) { - localFsHashes.erase("/" + filename); - } + fpath.rehash_fs(); sstatus = filename + " deleted"; } else { sstatus = "Cannot delete "; @@ -1173,6 +1084,7 @@ namespace WebUI { // _uploadFile = nullptr; auto fpath = _uploadFile->fpath(); + fpath.rehash_fs(); delete _uploadFile; _uploadFile = nullptr; @@ -1205,6 +1117,7 @@ namespace WebUI { _upload_status = UploadStatus::FAILED; log_info("Upload cancelled"); if (_uploadFile) { + _uploadFile->fpath().rehash_fs(); delete _uploadFile; _uploadFile = nullptr; } @@ -1218,6 +1131,7 @@ namespace WebUI { delete _uploadFile; _uploadFile = nullptr; stdfs::remove(fpath, error_code); + fpath.rehash_fs(); } } } diff --git a/FluidNC/src/WebUI/WebServer.h b/FluidNC/src/WebUI/WebServer.h index 1d6347481..40284f8ab 100644 --- a/FluidNC/src/WebUI/WebServer.h +++ b/FluidNC/src/WebUI/WebServer.h @@ -38,8 +38,6 @@ namespace WebUI { }; # endif - extern std::map localFsHashes; - //Upload status enum class UploadStatus : uint8_t { NONE = 0, FAILED = 1, CANCELLED = 2, SUCCESSFUL = 3, ONGOING = 4 }; diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index 7eaea7a06..aa3806f5c 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -22,7 +22,7 @@ #include "Commands.h" // COMMANDS::restart_MCU(); #include "WifiConfig.h" -#include "WebServer.h" // localFsHashes +#include "src/HashFS.h" #include #include @@ -365,15 +365,14 @@ namespace WebUI { } if (isDir) { stdfs::remove_all(fpath, ec); + fpath.rehash_fs(); if (ec) { log_to(out, "Delete Directory failed: ", ec.message()); return Error::FsFailedDelDir; } } else { stdfs::remove(fpath, ec); - if (fpath.isLocalFS()) { - localFsHashes.erase("/" + filename); - } + fpath.rehash_fs(); if (ec) { log_to(out, "Delete File failed: ", ec.message()); return Error::FsFailedDelFile; @@ -447,6 +446,7 @@ namespace WebUI { while ((len = inFile.read(buf, 512)) > 0) { outFile.write(buf, len); } + outFile.fpath().rehash_fs(); } catch (const Error err) { log_error("Cannot create file " << opath); return Error::FsFailedCreateFile; @@ -504,7 +504,7 @@ namespace WebUI { return err; } static Error showLocalFSHashes(char* parameter, WebUI::AuthenticationLevel auth_level, Channel& out) { - for (const auto& [name, hash] : localFsHashes) { + for (const auto& [name, hash] : HashFS::localFsHashes) { log_info_to(out, name << ": " << hash); } return Error::Ok; From a5b3981c0169db2eaf7ecca5632a1c994a160180 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 1 May 2023 14:32:24 -1000 Subject: [PATCH 012/212] Added new files --- FluidNC/src/HashFS.cpp | 91 ++++++++++++++++++++++++++++++++++++++++++ FluidNC/src/HashFS.h | 12 ++++++ 2 files changed, 103 insertions(+) create mode 100644 FluidNC/src/HashFS.cpp create mode 100644 FluidNC/src/HashFS.h diff --git a/FluidNC/src/HashFS.cpp b/FluidNC/src/HashFS.cpp new file mode 100644 index 000000000..4a8b67235 --- /dev/null +++ b/FluidNC/src/HashFS.cpp @@ -0,0 +1,91 @@ +#include "HashFS.h" +#include "FileStream.h" + +#include + +std::map HashFS::localFsHashes; + +static char hexNibble(int i) { + return "0123456789ABCDEF"[i & 0xf]; +} + +static Error hashFile(const char* ipath, std::string& str) { // No ESP command + mbedtls_md_context_t ctx; + + uint8_t shaResult[32]; + + try { + FileStream inFile { ipath, "r" }; + uint8_t buf[512]; + size_t len; + + mbedtls_md_init(&ctx); + mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), 0); + mbedtls_md_starts(&ctx); + while ((len = inFile.read(buf, 512)) > 0) { + mbedtls_md_update(&ctx, buf, len); + } + mbedtls_md_finish(&ctx, shaResult); + mbedtls_md_free(&ctx); + } catch (const Error err) { + log_error("Cannot open file " << ipath); + return Error::FsFailedOpenFile; + } + + str = '"'; + for (int i = 0; i < 32; i++) { + uint8_t b = shaResult[i]; + str += hexNibble(b >> 4); + str += hexNibble(b); + } + str += '"'; + + return Error::Ok; +} + +void HashFS::rehash() { + const char* iDir = "/localfs"; + std::error_code ec; + + localFsHashes.clear(); + + FluidPath fpath { iDir, "", ec }; + if (ec) { + log_error("Cannot open " << iDir); + return; + } + + auto iter = stdfs::directory_iterator { fpath, ec }; + if (ec) { + log_error(fpath << " " << ec.message()); + return; + } + Error err = Error::Ok; + for (auto const& dir_entry : iter) { + if (dir_entry.is_directory()) { + log_error("Not handling localfs subdirectories"); + } else { + std::string ipath(iDir); + ipath += "/"; + ipath += dir_entry.path().filename(); + std::string hash; + auto err1 = hashFile(ipath.c_str(), hash); + if (err1 != Error::Ok) { + err = err1; + } else { + std::string filename("/"); + filename += dir_entry.path().filename(); + localFsHashes[filename] = hash; + } + } + } +} +std::string HashFS::hash(std::string name) { + std::map::iterator it; + + it = localFsHashes.find(name); + if (it != localFsHashes.end()) { + return it->second; + } + return std::string(); +} diff --git a/FluidNC/src/HashFS.h b/FluidNC/src/HashFS.h new file mode 100644 index 000000000..93d47e8a7 --- /dev/null +++ b/FluidNC/src/HashFS.h @@ -0,0 +1,12 @@ +#pragma once +#include +#include +class HashFS { +public: + static std::map localFsHashes; + + static void rehash(); + static std::string hash(std::string name); + +private: +}; From 857ae601745afb5b21528bafe273ba7dd9fed3f0 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 2 May 2023 11:48:59 -1000 Subject: [PATCH 013/212] Added $heap/show aka $heap to display heap stats. --- FluidNC/src/ProcessSettings.cpp | 6 ++++++ FluidNC/src/Protocol.cpp | 12 +++++++++++- FluidNC/src/Protocol.h | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 892293d18..65f4df668 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -748,6 +748,11 @@ static Error setReportInterval(const char* value, WebUI::AuthenticationLevel aut return Error::Ok; } +static Error showHeap(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + log_info("Heap free: " << xPortGetFreeHeapSize() << " min: " << heapLowWater); + return Error::Ok; +} + // Commands use the same syntax as Settings, but instead of setting or // displaying a persistent value, a command causes some action to occur. // That action could be anything, from displaying a run-time parameter @@ -797,6 +802,7 @@ void make_user_commands() { new UserCommand("N", "GCode/StartupLines", report_startup_lines, notIdleOrAlarm); new UserCommand("RST", "Settings/Restore", restore_settings, notIdleOrAlarm, WA); + new UserCommand("Heap", "Heap/Show", showHeap, anyState); new UserCommand("SS", "Startup/Show", showStartupLog, anyState); new UserCommand("RI", "Report/Interval", setReportInterval, anyState); diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 3937c9c6d..96431ef49 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -261,7 +261,10 @@ static void check_startup_state() { } } -void protocol_main_loop() { +const uint32_t heapWarnThreshold = 15000; + +uint32_t heapLowWater = UINT_MAX; +void protocol_main_loop() { check_startup_state(); start_polling(); @@ -309,6 +312,13 @@ void protocol_main_loop() { idleEndTime = 0; // config->_axes->set_disable(true); } + uint32_t newHeapSize = xPortGetFreeHeapSize(); + if (newHeapSize < heapLowWater) { + heapLowWater = newHeapSize; + if (heapLowWater < heapWarnThreshold) { + log_warn("Low memory: " << heapLowWater << " bytes"); + } + } } return; /* Never reached */ } diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index 8234d2864..d28e16b37 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -120,3 +120,5 @@ void send_line(Channel& channel, const std::string* message); void send_line(Channel& channel, const std::string& message); void drain_messages(); + +extern uint32_t heapLowWater; From 1c737c156f83ad1075f36e586d891b637da90853 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 2 May 2023 11:49:39 -1000 Subject: [PATCH 014/212] Save memory by restricting SD to one open file at a time. --- FluidNC/include/Driver/sdspi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/include/Driver/sdspi.h b/FluidNC/include/Driver/sdspi.h index c60ecbfbb..be038b019 100644 --- a/FluidNC/include/Driver/sdspi.h +++ b/FluidNC/include/Driver/sdspi.h @@ -4,4 +4,4 @@ bool sd_init_slot(uint32_t freq_hz, int cs_pin, int cd_pin = -1, int wp_pin = -1 void sd_unmount(); void sd_deinit_slot(); -std::error_code sd_mount(int max_files = 5); +std::error_code sd_mount(int max_files = 1); From 36eebb6e922faf4b033efa589f4d12869c8bf3af Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 5 May 2023 19:11:43 -1000 Subject: [PATCH 015/212] build-release.py creates new release format --- FluidNC/include/Driver/sdspi.h | 2 +- FluidNC/src/ProcessSettings.cpp | 6 ++ FluidNC/src/Protocol.cpp | 12 ++- FluidNC/src/Protocol.h | 2 + build-release.py | 158 ++++++++++++++++++++++++++++++-- 5 files changed, 171 insertions(+), 9 deletions(-) diff --git a/FluidNC/include/Driver/sdspi.h b/FluidNC/include/Driver/sdspi.h index c60ecbfbb..be038b019 100644 --- a/FluidNC/include/Driver/sdspi.h +++ b/FluidNC/include/Driver/sdspi.h @@ -4,4 +4,4 @@ bool sd_init_slot(uint32_t freq_hz, int cs_pin, int cd_pin = -1, int wp_pin = -1 void sd_unmount(); void sd_deinit_slot(); -std::error_code sd_mount(int max_files = 5); +std::error_code sd_mount(int max_files = 1); diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 5898e62c2..80793d7fb 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -749,6 +749,11 @@ static Error setReportInterval(const char* value, WebUI::AuthenticationLevel aut return Error::Ok; } +static Error showHeap(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + log_info("Heap free: " << xPortGetFreeHeapSize() << " min: " << heapLowWater); + return Error::Ok; +} + // Commands use the same syntax as Settings, but instead of setting or // displaying a persistent value, a command causes some action to occur. // That action could be anything, from displaying a run-time parameter @@ -798,6 +803,7 @@ void make_user_commands() { new UserCommand("N", "GCode/StartupLines", report_startup_lines, notIdleOrAlarm); new UserCommand("RST", "Settings/Restore", restore_settings, notIdleOrAlarm, WA); + new UserCommand("Heap", "Heap/Show", showHeap, anyState); new UserCommand("SS", "Startup/Show", showStartupLog, anyState); new UserCommand("RI", "Report/Interval", setReportInterval, anyState); diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 3937c9c6d..96431ef49 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -261,7 +261,10 @@ static void check_startup_state() { } } -void protocol_main_loop() { +const uint32_t heapWarnThreshold = 15000; + +uint32_t heapLowWater = UINT_MAX; +void protocol_main_loop() { check_startup_state(); start_polling(); @@ -309,6 +312,13 @@ void protocol_main_loop() { idleEndTime = 0; // config->_axes->set_disable(true); } + uint32_t newHeapSize = xPortGetFreeHeapSize(); + if (newHeapSize < heapLowWater) { + heapLowWater = newHeapSize; + if (heapLowWater < heapWarnThreshold) { + log_warn("Low memory: " << heapLowWater << " bytes"); + } + } } return; /* Never reached */ } diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index 8234d2864..d28e16b37 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -120,3 +120,5 @@ void send_line(Channel& channel, const std::string* message); void send_line(Channel& channel, const std::string& message); void drain_messages(); + +extern uint32_t heapLowWater; diff --git a/build-release.py b/build-release.py index 97dd45959..e9768c800 100644 --- a/build-release.py +++ b/build-release.py @@ -6,6 +6,7 @@ from zipfile import ZipFile, ZipInfo import subprocess, os, sys, shutil import urllib.request +import io, hashlib verbose = '-v' in sys.argv @@ -24,7 +25,7 @@ def buildEnv(pioEnv, verbose=True, extraArgs=None): if verbose: app = subprocess.Popen(cmd, env=environ) else: - app = subprocess.Popen(cmd, env=environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1) + app = subprocess.Popen(cmd, env=environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in app.stdout: line = line.decode('utf8') if "Took" in line or 'Uploading' in line or ("error" in line.lower() and "Compiling" not in line): @@ -41,7 +42,7 @@ def buildFs(pioEnv, verbose=verbose, extraArgs=None): if verbose: app = subprocess.Popen(cmd, env=environ) else: - app = subprocess.Popen(cmd, env=environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1) + app = subprocess.Popen(cmd, env=environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in app.stdout: line = line.decode('utf8') if "Took" in line or 'Uploading' in line or ("error" in line.lower() and "Compiling" not in line): @@ -71,17 +72,160 @@ def copyToZip(zipObj, platform, fileName, destPath, mode=0o100755): if not os.path.exists(relPath): os.makedirs(relPath) +manifestRelPath = os.path.join(relPath, 'current') +if os.path.exists(manifestRelPath): + shutil.rmtree(manifestRelPath) + +os.makedirs(manifestRelPath) + +manifest = { + "name": "FluidNC", + "version": tag, + "source_url": "https://github.com/bdring/FluidNC/tree/" + tag, + "release_url": "https://github.com/bdring/FluidNC/releases/tag/" + tag, + "funding_url": "https://www.paypal.com/donate/?hosted_button_id=8DYLB6ZYYDG7Y", + "images": {}, + "installable": { + "name": "installable", + "description": "Things you can install", + "choice-name": "Processor type", + "choices": [] + }, +} + # We avoid doing this every time, instead checking in a new NoFile.h as necessary # if buildEmbeddedPage() != 0: # sys.exit(1) -if buildFs('wifi', verbose=verbose) != 0: - sys.exit(1) +# if buildFs('wifi', verbose=verbose) != 0: +# sys.exit(1) + +def addImage(name, offset, filename, srcpath, dstpath): + fulldstpath = os.path.join(manifestRelPath,os.path.normpath(dstpath)) + + os.makedirs(fulldstpath, exist_ok=True) + + fulldstfile = os.path.join(fulldstpath, filename) + + shutil.copy(os.path.join(srcpath, filename), fulldstfile) -for envName in ['wifi','bt']: - if buildEnv(envName, verbose=verbose) != 0: + print("image ", name) + + with open(fulldstfile, "rb") as f: + data = f.read() + image = { + # "name": name, + "size": os.path.getsize(fulldstfile), + "offset": offset, + "path": dstpath + '/' + filename, + "signature": { + "algorithm": "SHA2-256", + "value": hashlib.sha256(data).hexdigest() + } + } + if manifest['images'].get(name) != None: + print("Duplicate image name", name) sys.exit(1) - shutil.copy(os.path.join('.pio', 'build', envName, 'firmware.elf'), os.path.join(relPath, envName + '-' + 'firmware.elf')) + manifest['images'][name] = image + # manifest['images'].append(image) + +flashsize = "4m" + +mcu = "esp32" +for mcu in ['esp32']: + for envName in ['wifi','bt', 'noradio']: + if buildEnv(envName, verbose=verbose) != 0: + sys.exit(1) + buildDir = os.path.join('.pio', 'build', envName) + shutil.copy(os.path.join(buildDir, 'firmware.elf'), os.path.join(relPath, envName + '-' + 'firmware.elf')) + + addImage(mcu + '-' + envName + '-firmware', '0x10000', 'firmware.bin', buildDir, mcu + '/' + envName) + + if envName == 'wifi': + if buildFs('wifi', verbose=verbose) != 0: + sys.exit(1) + + # bootapp is a data partition that the bootloader and OTA use to determine which + # image to run. Its initial value is in a file "boot_app0.bin" in the platformio + # framework package. We copy it to the build directory so addImage can find it + bootappsrc = os.path.join(os.path.expanduser('~'),'.platformio','packages','framework-arduinoespressif32','tools','partitions', 'boot_app0.bin') + shutil.copy(bootappsrc, buildDir) + + addImage(mcu + '-' + envName + '-' + flashsize + '-filesystem', '0xe000', 'littlefs.bin', buildDir, mcu + '/' + envName + '/' + flashsize) + addImage(mcu + '-' + flashsize + '-partitions', '0x8000', 'partitions.bin', buildDir, mcu + '/' + flashsize) + addImage(mcu + '-bootloader', '0x1000', 'bootloader.bin', buildDir, mcu) + addImage(mcu + '-bootapp', '0xe000', 'boot_app0.bin', buildDir, mcu) + +def addSection(node, name, description, choice): + section = { + "name": name, + "description": description, + } + if choice != None: + section['choice-name'] = choice + section['choices'] = [] + node.append(section) + +def addMCU(name, description, choice=None): + addSection(manifest['installable']['choices'], name, description, choice) + +def addVariant(variant, description, choice=None): + node1 = manifest['installable']['choices'] + node1len = len(node1) + addSection(node1[node1len-1]['choices'], variant, description, choice) + +def addInstallable(install_type, erase, images): + for image in images: + if manifest['images'].get(image) == None: + # imagefiles = [obj for obj in manifest['images'] if obj['name'] == image] + # if len(imagefiles) == 0: + print("Missing image", image) + sys.exit(1) + # if len(imagefiles) > 1: + # print("Duplicate image", image) + # sys.exit(2) + + node1 = manifest['installable']['choices'] + node1len = len(node1) + node2 = node1[node1len-1]['choices'] + node2len = len(node2) + installable = { + "name": install_type["name"], + "description": install_type["description"], + "erase": erase, + "images": images + } + node2[node2len-1]['choices'].append(installable) + +fresh_install = { "name": "fresh-install", "description": "Complete FluidNC installation, erasing all previous data"} +firmware_update = { "name": "firmware-update", "description": "Update FluidNC to latest firmware version, preserving previous filesystem data."} +filesystem_update = { "name": "filesystem-update", "description": "Update FluidNC filesystem only, erasing previous filesystem data."} + +def makeManifest(): + addMCU("esp32", "ESP32-WROOM", "Firmware variant") + + addVariant("wifi", "Supports WiFi and WebUI", "Installation type") + addInstallable(fresh_install, True, ["esp32-4m-partitions", "esp32-bootloader", "esp32-bootapp", "esp32-wifi-firmware", "esp32-wifi-4m-filesystem"]) + addInstallable(firmware_update, False, ["esp32-wifi-firmware"]) + addInstallable(filesystem_update, False, ["esp32-wifi-4m-filesystem"]) + + addVariant("bt", "Supports Bluetooth serial", "Installation type") + addInstallable(fresh_install, True, ["esp32-4m-partitions", "esp32-bootloader", "esp32-bootapp", "esp32-bt-firmware"]) + addInstallable(firmware_update, False, ["esp32-bt-firmware"]) + + addVariant("noradio", "Supports neither WiFi nor Bluetooth", "Installation type") + addInstallable(fresh_install, True, ["esp32-4m-partitions", "esp32-bootloader", "esp32-bootapp", "esp32-noradio-firmware"]) + addInstallable(firmware_update, False, ["esp32-noradio-firmware"]) + +makeManifest() + +import json +def printManifest(): + print(json.dumps(manifest, indent=2)) + +with open(os.path.join(manifestRelPath, "manifest.json"), "w") as manifest_file: + json.dump(manifest, manifest_file, indent=2) + for platform in ['win64', 'posix']: print("Creating zip file for ", platform) From f583b298c085e8aeb64e6e5fe5626300a4b3f66f Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 5 May 2023 19:13:35 -1000 Subject: [PATCH 016/212] Added deploy to github pages step to release action --- .github/workflows/manual.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 47597204e..a210a4898 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -47,6 +47,14 @@ jobs: release/*.zip release/*.elf draft: True + - name: Deploy to GitHub Pages + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: releases/current + repository-name: MitchBradley/MitchBradley.github.io + ssh-key: ${{ secrets.GHP_DEPLOY_KEY }} + target-folder: releases/${{ github.event.inputs.tag }} + # - name: Upload mac bundle # uses: actions/upload-artifact@v2 # with: From c6fc31415b2467d659a141010d7f212f83fb9371 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 5 May 2023 22:58:35 -1000 Subject: [PATCH 017/212] Fixed typos in manual.yaml deploy step --- .github/workflows/manual.yml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index a210a4898..182a4c14c 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -48,13 +48,12 @@ jobs: release/*.elf draft: True - name: Deploy to GitHub Pages - uses: JamesIves/github-pages-deploy-action@v4 - with: - folder: releases/current - repository-name: MitchBradley/MitchBradley.github.io - ssh-key: ${{ secrets.GHP_DEPLOY_KEY }} - target-folder: releases/${{ github.event.inputs.tag }} - + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: release/current + repository-name: MitchBradley/MitchBradley.github.io + ssh-key: ${{ secrets.GHP_DEPLOY_KEY }} + target-folder: releases/${{ github.event.inputs.tag }} # - name: Upload mac bundle # uses: actions/upload-artifact@v2 # with: From 0c2e2b37e49a7b66c07313671ff92c20e01c2dc1 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 10 May 2023 10:08:44 -1000 Subject: [PATCH 018/212] Fix #891 - bad OLED DRO after WCO report --- FluidNC/src/OLED.cpp | 20 ++++++++++---------- FluidNC/src/OLED.h | 4 ++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/FluidNC/src/OLED.cpp b/FluidNC/src/OLED.cpp index ec7c9a501..aa2d377d4 100644 --- a/FluidNC/src/OLED.cpp +++ b/FluidNC/src/OLED.cpp @@ -205,9 +205,7 @@ void OLED::parse_numbers(std::string s, float* nums, int maxnums) { } while (nextpos != std::string::npos); } -float* OLED::parse_axes(std::string s) { - static float axes[MAX_N_AXIS]; - +void OLED::parse_axes(std::string s, float* axes) { size_t pos = 0; size_t nextpos = -1; size_t axis = 0; @@ -219,7 +217,6 @@ float* OLED::parse_axes(std::string s) { } pos = nextpos + 1; } while (nextpos != std::string::npos); - return axes; } void OLED::parse_status_report() { @@ -234,9 +231,9 @@ void OLED::parse_status_report() { bool probe = false; bool limits[MAX_N_AXIS] = { false }; - float* axes; - bool isMpos = false; - _filename = ""; + float axes[MAX_N_AXIS]; + bool isMpos = false; + _filename = ""; // ... handle it while (nextpos != std::string::npos) { @@ -249,13 +246,13 @@ void OLED::parse_status_report() { auto value = field.substr(colon + 1); if (tag == "MPos") { // x,y,z,... - axes = parse_axes(value); + parse_axes(value, axes); isMpos = true; continue; } if (tag == "WPos") { // x,y,z... - axes = parse_axes(value); + parse_axes(value, axes); isMpos = false; continue; } @@ -305,7 +302,10 @@ void OLED::parse_status_report() { } if (tag == "WCO") { // x,y,z,... - auto wcos = parse_axes(value); + // We do not use the WCO values because the DROs show whichever + // position is in the status report + // float wcos[MAX_N_AXIS]; + // auto wcos = parse_axes(value, wcos); continue; } if (tag == "Ov") { diff --git a/FluidNC/src/OLED.h b/FluidNC/src/OLED.h index c9937ba89..25e599696 100644 --- a/FluidNC/src/OLED.h +++ b/FluidNC/src/OLED.h @@ -53,8 +53,8 @@ class OLED : public Channel, public Configuration::Configurable { void parse_AP(); void parse_BT(); - float* parse_axes(std::string s); - void parse_numbers(std::string s, float* nums, int maxnums); + void parse_axes(std::string s, float* axes); + void parse_numbers(std::string s, float* nums, int maxnums); void show_limits(bool probe, const bool* limits); void show_state(); From 67d5ac184cbcf974f708b6007e44fd4442c63db4 Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 20 May 2023 14:23:41 -0500 Subject: [PATCH 019/212] Added ToolSetter Pin There are now two probes. They are OR'd together. This allows a user to have one as :high and one as :low --- FluidNC/src/Probe.cpp | 14 ++++++++++++-- FluidNC/src/Probe.h | 3 ++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Probe.cpp b/FluidNC/src/Probe.cpp index 0017cb70c..b21565557 100644 --- a/FluidNC/src/Probe.cpp +++ b/FluidNC/src/Probe.cpp @@ -18,6 +18,15 @@ void Probe::init() { show_init_msg = false; } } + + if (_toolsetter_Pin.defined()) { + _toolsetter_Pin.setAttr(Pin::Attr::Input); + + if (show_init_msg) { + _toolsetter_Pin.report("Toolsetter Pin:"); + } + } + show_init_msg = false; } void Probe::set_direction(bool is_away) { @@ -26,19 +35,20 @@ void Probe::set_direction(bool is_away) { // Returns the probe pin state. Triggered = true. Called by gcode parser. bool Probe::get_state() { - return _probePin.read(); + return (_probePin.read() || _toolsetter_Pin.read()); } // Returns true if the probe pin is tripped, accounting for the direction (away or not). // This function must be extremely efficient as to not bog down the stepper ISR. // Should be called only in situations where the probe pin is known to be defined. bool IRAM_ATTR Probe::tripped() { - return _probePin.read() ^ _isProbeAway; + return (_probePin.read() || _toolsetter_Pin.read()) ^ _isProbeAway; } void Probe::validate() {} void Probe::group(Configuration::HandlerBase& handler) { handler.item("pin", _probePin); + handler.item("toolsetter_pin", _toolsetter_Pin); handler.item("check_mode_start", _check_mode_start); } diff --git a/FluidNC/src/Probe.h b/FluidNC/src/Probe.h index 14c5176c2..f83d83a95 100644 --- a/FluidNC/src/Probe.h +++ b/FluidNC/src/Probe.h @@ -21,6 +21,7 @@ class Probe : public Configuration::Configurable { // Configurable Pin _probePin; + Pin _toolsetter_Pin; public: // Configurable @@ -31,7 +32,7 @@ class Probe : public Configuration::Configurable { Probe() = default; - bool exists() const { return _probePin.defined(); } + bool exists() const { return _probePin.defined() || _toolsetter_Pin.defined(); } // TODO // Probe pin initialization routine. void init(); From 2da75e6a412f80c72f78f936bdab3b45ff40b80c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 29 May 2023 06:21:15 -1000 Subject: [PATCH 020/212] Wrong load address for the filesystem image --- build-release.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-release.py b/build-release.py index e9768c800..6d2a18391 100644 --- a/build-release.py +++ b/build-release.py @@ -151,7 +151,7 @@ def addImage(name, offset, filename, srcpath, dstpath): bootappsrc = os.path.join(os.path.expanduser('~'),'.platformio','packages','framework-arduinoespressif32','tools','partitions', 'boot_app0.bin') shutil.copy(bootappsrc, buildDir) - addImage(mcu + '-' + envName + '-' + flashsize + '-filesystem', '0xe000', 'littlefs.bin', buildDir, mcu + '/' + envName + '/' + flashsize) + addImage(mcu + '-' + envName + '-' + flashsize + '-filesystem', '0x3d0000', 'littlefs.bin', buildDir, mcu + '/' + envName + '/' + flashsize) addImage(mcu + '-' + flashsize + '-partitions', '0x8000', 'partitions.bin', buildDir, mcu + '/' + flashsize) addImage(mcu + '-bootloader', '0x1000', 'bootloader.bin', buildDir, mcu) addImage(mcu + '-bootapp', '0xe000', 'boot_app0.bin', buildDir, mcu) From d67848e569c42cd111170fa0ab1e513a4e7b2f57 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 31 May 2023 10:37:07 -1000 Subject: [PATCH 021/212] Remove leading and trailing blanks when parsing most config values --- FluidNC/src/Configuration/Parser.cpp | 3 ++- FluidNC/src/Machine/MachineConfig.cpp | 3 ++- FluidNC/src/StringRange.h | 12 +++++++++++- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Configuration/Parser.cpp b/FluidNC/src/Configuration/Parser.cpp index 9cdecaa5a..074fd4245 100644 --- a/FluidNC/src/Configuration/Parser.cpp +++ b/FluidNC/src/Configuration/Parser.cpp @@ -38,7 +38,8 @@ namespace Configuration { return result; } - StringRange Parser::stringValue() const { return StringRange(token_.sValueStart_, token_.sValueEnd_); } + // String values might have meaningful leading and trailing spaces so we avoid trimming the string (false) + StringRange Parser::stringValue() const { return StringRange(token_.sValueStart_, token_.sValueEnd_, false); } bool Parser::boolValue() const { auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); diff --git a/FluidNC/src/Machine/MachineConfig.cpp b/FluidNC/src/Machine/MachineConfig.cpp index 11b16ee77..6efa24e87 100644 --- a/FluidNC/src/Machine/MachineConfig.cpp +++ b/FluidNC/src/Machine/MachineConfig.cpp @@ -187,7 +187,8 @@ namespace Machine { return false; } log_info("Configuration file:" << filename); - bool retval = load(new StringRange(buffer, buffer + filesize)); + // Trimming the overall config file could influence indentation, hence false + bool retval = load(new StringRange(buffer, buffer + filesize, false)); delete[] buffer; return retval; } catch (...) { diff --git a/FluidNC/src/StringRange.h b/FluidNC/src/StringRange.h index 9e81c74a0..de105d084 100644 --- a/FluidNC/src/StringRange.h +++ b/FluidNC/src/StringRange.h @@ -14,7 +14,17 @@ class StringRange { StringRange(const char* str) : start_(str), end_(str + strlen(str)) {} - StringRange(const char* start, const char* end) : start_(start), end_(end) {} + // We usually want to ignore leading and trailing blanks, so we default to trim=true + StringRange(const char* start, const char* end, bool trim = true) : start_(start), end_(end) { + if (trim) { + while (start_ != end_ && isspace(*start_)) { + ++start_; + } + while (end_ != start_ && isspace(*(end_ - 1))) { + --end_; + } + } + } StringRange(const StringRange& o) = default; StringRange(StringRange&& o) = default; From efcb3d50cda5aa01613c42a58b7d1349aaefef96 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 2 Jun 2023 14:33:40 -1000 Subject: [PATCH 022/212] Limit GPIO inter-event period to 5 ms to quench switch rattling --- FluidNC/esp32/gpio.cpp | 174 +++++++++++++++++-------------- FluidNC/src/ControlPin.h | 1 - FluidNC/src/Machine/EventPin.cpp | 1 - 3 files changed, 97 insertions(+), 79 deletions(-) diff --git a/FluidNC/esp32/gpio.cpp b/FluidNC/esp32/gpio.cpp index c71053e7c..2c95c4730 100644 --- a/FluidNC/esp32/gpio.cpp +++ b/FluidNC/esp32/gpio.cpp @@ -40,24 +40,10 @@ void gpio_mode(pinnum_t pin, bool input, bool output, bool pullup, bool pulldown } gpio_config(&conf); } -void IRAM_ATTR gpio_set_interrupt_type(pinnum_t pin, int mode) { - gpio_int_type_t type = GPIO_INTR_DISABLE; - // Do not use switch here because it is not IRAM_ATTR safe - if (mode == Pin::RISING_EDGE) { - type = GPIO_INTR_POSEDGE; - } else if (mode == Pin::FALLING_EDGE) { - type = GPIO_INTR_NEGEDGE; - } else if (mode == Pin::EITHER_EDGE) { - type = GPIO_INTR_ANYEDGE; - } - gpio_set_intr_type((gpio_num_t)pin, type); -} - +#if 0 void gpio_add_interrupt(pinnum_t pin, int mode, void (*callback)(void*), void* arg) { gpio_install_isr_service(ESP_INTR_FLAG_IRAM); // Will return an err if already called - gpio_set_interrupt_type(pin, mode); - gpio_num_t gpio = (gpio_num_t)pin; gpio_isr_handler_add(gpio, callback, arg); @@ -81,6 +67,100 @@ void gpio_route(pinnum_t pin, uint32_t signal) { gpio_set_direction(gpio, (gpio_mode_t)GPIO_MODE_DEF_OUTPUT); gpio_matrix_out(gpio, signal, 0, 0); } +#endif + +typedef uint64_t gpio_mask_t; + +// Can be used to display gpio_mask_t data for debugging +static const char* g_to_hex(gpio_mask_t n) { + static char hexstr[24]; + snprintf(hexstr, 22, "0x%llx", n); + return hexstr; +} + +static gpio_mask_t gpios_inverted = 0; // GPIOs that are active low +static gpio_mask_t gpios_interest = 0; // GPIOs with an action +static gpio_mask_t gpios_current = 0; // The last GPIO action events that were sent + +static int32_t gpio_next_event_ticks[GPIO_NUM_MAX + 1] = { 0 }; +static int32_t gpio_deltat_ticks[GPIO_NUM_MAX + 1] = { 0 }; + +// Do not send events for changes that occur too soon +static void gpio_set_rate_limit(int gpio_num, uint32_t ms) { + gpio_deltat_ticks[gpio_num] = ms * portTICK_PERIOD_MS; +} + +static inline gpio_mask_t get_gpios() { + return ((((uint64_t)REG_READ(GPIO_IN1_REG)) << 32) | REG_READ(GPIO_IN_REG)) ^ gpios_inverted; +} +static gpio_mask_t gpio_mask(int gpio_num) { + return 1ULL << gpio_num; +} +static inline bool gpio_is_active(int gpio_num) { + return get_gpios() & gpio_mask(gpio_num); +} +static void gpios_update(gpio_mask_t& gpios, int gpio_num, bool active) { + if (active) { + gpios |= gpio_mask(gpio_num); + } else { + gpios &= ~gpio_mask(gpio_num); + } +} + +static gpio_dispatch_t gpioActions[GPIO_NUM_MAX + 1] = { nullptr }; +static void* gpioArgs[GPIO_NUM_MAX + 1]; + +void gpio_set_action(int gpio_num, gpio_dispatch_t action, void* arg, bool invert) { + gpioActions[gpio_num] = action; + gpioArgs[gpio_num] = arg; + gpio_mask_t mask = gpio_mask(gpio_num); + gpios_update(gpios_interest, gpio_num, true); + gpios_update(gpios_inverted, gpio_num, invert); + gpio_set_rate_limit(gpio_num, 5); + bool active = gpio_is_active(gpio_num); + + // Set current to the opposite of the current state so the first poll will send the current state + gpios_update(gpios_current, gpio_num, !active); +} +void gpio_clear_action(int gpio_num) { + gpioActions[gpio_num] = nullptr; + gpioArgs[gpio_num] = nullptr; + gpios_update(gpios_interest, gpio_num, false); +} + +static void gpio_send_action(int gpio_num, bool active) { + auto end_ticks = gpio_next_event_ticks[gpio_num]; + int32_t this_ticks = int32_t(xTaskGetTickCount()); + if (end_ticks == 0 || ((this_ticks - end_ticks) > 0)) { + end_ticks = this_ticks + gpio_deltat_ticks[gpio_num]; + if (end_ticks == 0) { + end_ticks = 1; + } + gpio_next_event_ticks[gpio_num] = end_ticks; + + gpio_dispatch_t action = gpioActions[gpio_num]; + if (action) { + action(gpio_num, gpioArgs[gpio_num], active); + } + gpios_update(gpios_current, gpio_num, active); + } +} + +void poll_gpios() { + gpio_mask_t gpios_active = get_gpios(); + gpio_mask_t gpios_changed = (gpios_active ^ gpios_current) & gpios_interest; + if (gpios_changed) { + int zeros; + while ((zeros = __builtin_clzll(gpios_changed)) != 64) { + int gpio_num = 63 - zeros; + gpio_send_action(gpio_num, gpios_active & gpio_mask(gpio_num)); + // Remove bit from mask so clzll will find the next one + gpios_update(gpios_changed, gpio_num, false); + } + } +} + +// Support functions for gpio_dump static bool exists(gpio_num_t gpio) { if (gpio == 20) { // GPIO20 is listed in GPIO_PIN_MUX_REG[] but it is only @@ -378,7 +458,7 @@ struct gpio_matrix_t { { 228, "", "ig_in_func228", false }, { -1, "", "", false } }; -const char* out_sel_name(int function) { +static const char* out_sel_name(int function) { gpio_matrix_t* p; for (p = gpio_matrix; p->num != -1; ++p) { if (p->num == function) { @@ -388,7 +468,7 @@ const char* out_sel_name(int function) { return ""; } -void show_matrix(Print& out) { +static void show_matrix(Print& out) { gpio_matrix_t* p; for (p = gpio_matrix; p->num != -1; ++p) { uint32_t in_sel = gpio_in_sel(p->num); @@ -432,63 +512,3 @@ void gpio_dump(Print& out) { out << "Input Matrix\n"; show_matrix(out); } - -typedef uint64_t gpio_mask_t; -static gpio_mask_t gpio_inverts = 0; -static gpio_mask_t gpio_interest = 0; -static gpio_mask_t gpio_current = 0; -void IRAM_ATTR check_switches() { - gpio_mask_t gpio_this = (((uint64_t)REG_READ(GPIO_IN_REG)) << 32) | REG_READ(GPIO_IN1_REG); - if (gpio_this != gpio_current) { - gpio_mask_t gpio_changes = (gpio_this ^ gpio_current) & gpio_interest; - int bitno; - while (bitno = __builtin_ffsll(gpio_changes)) { - --bitno; - bool isActive = (gpio_this ^ gpio_inverts) & (1ULL << bitno); - // protocol_send_event_from_ISR(&pin_changes, (void*)(isActive ? bitno : -bitno)); - protocol_send_event_from_ISR(&motionCancelEvent, (void*)(isActive ? bitno : -bitno)); - } - gpio_current = gpio_this; - } - ++gpio_interest; -} -static gpio_dispatch_t gpioActions[GPIO_NUM_MAX + 1]; -static void* gpioArgs[GPIO_NUM_MAX + 1]; -void gpio_set_action(int gpio_num, gpio_dispatch_t action, void* arg, bool invert) { - gpioActions[gpio_num] = action; - gpioArgs[gpio_num] = arg; - gpio_mask_t mask = 1ULL << gpio_num; - gpio_interest |= mask; - if (invert) { - gpio_inverts |= mask; - } else { - gpio_inverts &= ~mask; - } -} -void gpio_clear_action(int gpio_num) { - gpioActions[gpio_num] = nullptr; - gpioArgs[gpio_num] = nullptr; - gpio_mask_t mask = 1ULL << gpio_num; - gpio_interest &= ~mask; -} -void poll_gpios() { - gpio_mask_t gpio_this = (((uint64_t)REG_READ(GPIO_IN1_REG)) << 32) | REG_READ(GPIO_IN_REG); - - gpio_mask_t gpio_changes = (gpio_this ^ gpio_current) & gpio_interest; - if (gpio_changes) { - gpio_mask_t gpio_active = gpio_this ^ gpio_inverts; - int zeros; - while ((zeros = __builtin_clzll(gpio_changes)) != 64) { - int gpio_num = 63 - zeros; - gpio_mask_t mask = 1ULL << gpio_num; - bool isActive = gpio_active & mask; - // Uart0 << gpio_num << " " << isActive << "\n"; - gpio_dispatch_t action = gpioActions[gpio_num]; - if (action) { - action(gpio_num, gpioArgs[gpio_num], isActive); - } - gpio_changes &= ~mask; - } - } - gpio_current = gpio_this; -} diff --git a/FluidNC/src/ControlPin.h b/FluidNC/src/ControlPin.h index 6eaa2bd61..01f72191f 100644 --- a/FluidNC/src/ControlPin.h +++ b/FluidNC/src/ControlPin.h @@ -1,7 +1,6 @@ #pragma once #include "Pin.h" -#include // IRAM_ATTR #include "Machine/EventPin.h" namespace Machine { class ControlPin : public Machine::EventPin { diff --git a/FluidNC/src/Machine/EventPin.cpp b/FluidNC/src/Machine/EventPin.cpp index bc9baabbe..b8e4beebd 100644 --- a/FluidNC/src/Machine/EventPin.cpp +++ b/FluidNC/src/Machine/EventPin.cpp @@ -12,7 +12,6 @@ namespace Machine { void EventPin::gpioAction(int gpio_num, void* arg, bool active) { EventPin* obj = static_cast(arg); - // protocol_send_event(obj, obj); obj->update(active); if (active) { protocol_send_event(obj->_event, obj); From 58cc2fcaec53fced745d0b652ec4cfd9a7d7d9a5 Mon Sep 17 00:00:00 2001 From: alex <1678423+alex-codelab@users.noreply.github.com> Date: Tue, 6 Jun 2023 13:13:09 +0200 Subject: [PATCH 023/212] refactor fluidterm --- fluidterm/fluidterm.py | 202 +++++++++++++++++++---------------------- 1 file changed, 93 insertions(+), 109 deletions(-) diff --git a/fluidterm/fluidterm.py b/fluidterm/fluidterm.py index 1a99fb98a..093c571f6 100644 --- a/fluidterm/fluidterm.py +++ b/fluidterm/fluidterm.py @@ -9,6 +9,7 @@ from __future__ import absolute_import +import contextlib VERSION = 'v1.2.0' import codecs @@ -62,7 +63,7 @@ def key_description(character): # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -class ConsoleBase(object): +class ConsoleBase: """OS abstraction for console (input/output codec, no echo)""" def __init__(self): @@ -82,12 +83,6 @@ def getkey(self): """Read a single key from the console""" return None - def write_bytes(self, byte_string): - """Write bytes (already encoded)""" - - self.byte_output.write(byte_string) - self.byte_output.flush() - def write_fluid(self, byte_string): """Write bytes (already encoded)""" self.byte_output.write(byte_string) @@ -201,10 +196,8 @@ def __init__(self): def __del__(self): ctypes.windll.kernel32.SetConsoleOutputCP(self._saved_ocp) ctypes.windll.kernel32.SetConsoleCP(self._saved_icp) - try: + with contextlib.suppress(AttributeError): ctypes.windll.kernel32.SetConsoleMode(ctypes.windll.kernel32.GetStdHandle(-11), self._saved_cm) - except AttributeError: # in case no _saved_cm - pass def getkey(self): while True: @@ -212,7 +205,7 @@ def getkey(self): if z == unichr(13): return unichr(10) elif z is unichr(0) or z is unichr(0xe0): - try: + with contextlib.suppress(KeyError): code = msvcrt.getwch() # The z value is somewhat context-dependent # When running PowerShell in its own window, @@ -221,12 +214,7 @@ def getkey(self): # with the same code value in either case. # The solution is to duplicate the navcodes values # in fncodes. - if z is unichr(0): - return self.fncodes[code] - else: - return self.navcodes[code] - except KeyError: - pass + return self.fncodes[code] if z is unichr(0) else self.navcodes[code] else: return z @@ -237,7 +225,7 @@ def cancel(self): ctypes.windll.user32.PostMessageA(hwnd, 0x100, 0x0d, 0) def clear_screen(self): - os.system('cls'); + os.system('cls') elif os.name == 'posix': import atexit @@ -246,7 +234,7 @@ def clear_screen(self): class Console(ConsoleBase): def __init__(self): - super(Console, self).__init__() + super().__init__() self.fd = sys.stdin.fileno() self.old = termios.tcgetattr(self.fd) atexit.register(self.cleanup) @@ -340,13 +328,11 @@ def rx(self, text): class NoControls(NoTerminal): """Remove all control codes, incl. CR+LF""" - REPLACEMENT_MAP = dict((x, 0x2400 + x) for x in range(32)) - REPLACEMENT_MAP.update( - { - 0x20: 0x2423, # visual space - 0x7F: 0x2421, # DEL - 0x9B: 0x2425, # CSI - }) + REPLACEMENT_MAP = {x: 0x2400 + x for x in range(32)} | { + 0x20: 0x2423, # visual space + 0x7F: 0x2421, # DEL + 0x9B: 0x2425, # CSI + } class Printable(Transform): @@ -415,26 +401,25 @@ def rx(self, text): self.buffy = self.buffy + text.replace('\r','') retval = '' - if ('\n' in self.buffy): - rx_lines = self.buffy.split('\n') - - if (self.buffy[-1] in '\n'): # is the last character is a new line - #everything in the split is ready to be parsed - for a_line in rx_lines: + if '\n' not in self.buffy: + return '' + rx_lines = self.buffy.split('\n') + + if self.buffy[-1] in '\n': # is the last character is a new line + #everything in the split is ready to be parsed + for a_line in rx_lines: + retval = retval + self.rx_color(a_line) + '\r\n' + self.buffy = '' ## clear the buffer + retval = retval[:-2] #remove extra line end + else: + #last in the split does not have a crlf + for a_line in rx_lines: + if a_line == rx_lines[-1]: # if last in array + self.buffy = rx_lines[-1] + else: retval = retval + self.rx_color(a_line) + '\r\n' - self.buffy = '' ## clear the buffer - retval = retval[:-2] #remove extra line end - else: - #last in the split does not have a crlf - for a_line in rx_lines: - if a_line == rx_lines[-1]: # if last in array - self.buffy = rx_lines[-1] - else: - retval = retval + self.rx_color(a_line) + '\r\n' - return self.input_color + retval - else: - return '' + return self.input_color + retval def echo(self, text): @@ -446,7 +431,7 @@ def rx_color(self, text): if text[0] == '$': #colorize settings rx_lines = text.split('=') - if (len(rx_lines) == 2): + if len(rx_lines) == 2: rx_lines[0] = self.cyan_color + rx_lines[0] + self.white_color + '=' rx_lines[1] = self.yellow_color + rx_lines[1] + self.input_color return rx_lines[0] + rx_lines[1] @@ -537,6 +522,8 @@ class Miniterm(object): """ def __init__(self, serial_instance, echo=False, eol='lf', filters=()): + self.rx_transformations = None + self.tx_transformations = None self.console = Console() self.serial = serial_instance self.echo = False @@ -545,7 +532,7 @@ def __init__(self, serial_instance, echo=False, eol='lf', filters=()): self.output_encoding = 'UTF-8' self.eol = eol self.filters = ['fluidNC'] - self.update_transformations() + self.exit_character = unichr(0x1d) # GS/CTRL+] self.exit_character2 = unichr(0x11) # GS/CTRL+Q self.menu_character = unichr(0x14) # Menu: CTRL+T @@ -581,6 +568,7 @@ def start(self): self.transmitter_thread.daemon = True self.transmitter_thread.start() self.console.setup() + self.update_transformations() def stop(self): """set flag to stop worker threads""" @@ -622,16 +610,12 @@ def dump_port_settings(self): ('active' if self.serial.rts else 'inactive'), ('active' if self.serial.dtr else 'inactive'), ('active' if self.serial.break_condition else 'inactive'))) - try: + with contextlib.suppress(serial.SerialException): sys.stderr.write('--- CTS: {:8} DSR: {:8} RI: {:8} CD: {:8}\n'.format( ('active' if self.serial.cts else 'inactive'), ('active' if self.serial.dsr else 'inactive'), ('active' if self.serial.ri else 'inactive'), ('active' if self.serial.cd else 'inactive'))) - except serial.SerialException: - # on RFC 2217 ports, it can happen if no modem state notification was - # yet received. ignore this error. - pass sys.stderr.write('--- software flow control: {}\n'.format('active' if self.serial.xonxoff else 'inactive')) sys.stderr.write('--- hardware flow control: {}\n'.format('active' if self.serial.rtscts else 'inactive')) sys.stderr.write('--- serial input encoding: {}\n'.format(self.input_encoding)) @@ -653,36 +637,26 @@ def reader(self): if data: if self._xmodem_stream: self.console.write_fluid(data) - self.serial.timeout = 0.5; + self.serial.timeout = 0.5 while True: data1 = self.serial.read_until() if len(data1): self.console.write_fluid(data1) else: break - while False: # self.serial.in_waiting: - # Flush report message - ch = self.serial.read(1) - # ACK, NAK, CAN - if ch[0] == 0x06 or ch[0] == 0x15 or ch[0] == 0x18: - self._pushback = ch[0] - break - else: - self.console.write_fluid(ch) modem = XMODEM(self.getc, self.putc, mode='xmodem') if not modem.send(self._xmodem_stream, callback=self.progress): - self.console.write("XModem reception cancelled\n"); + self.console.write("XModem reception cancelled\n") modem = None self._xmodem_stream = None + elif self.raw or collecting_input_line: + self.console.write_fluid(data) else: - if self.raw or collecting_input_line: - self.console.write_fluid(data) - else: - text = self.rx_decoder.decode(data) - for transformation in self.rx_transformations: - text = transformation.rx(text) - self.console.write(text) + text = self.rx_decoder.decode(data) + for transformation in self.rx_transformations: + text = transformation.rx(text) + self.console.write(text) except serial.SerialException: self.alive = False self.console.cancel() @@ -718,7 +692,7 @@ def writer(self): self.upload_xmodem() elif c == '\x12': # CTRL+R -> reset FluidNC self.reset_fluidnc() - elif c == self.exit_character or c == self.exit_character2 or c == unichr(3): + elif c in [self.exit_character, self.exit_character2, unichr(3)]: self.stop() # exit app break else: @@ -733,11 +707,11 @@ def writer(self): except: self.alive = False raise - self.disable_fluid_echo(); + self.disable_fluid_echo() def handle_menu_key(self, c): """Implement a simple menu / settings""" - if c == self.menu_character or c == self.exit_character or c == self.exit_character2: + if c in [self.menu_character, self.exit_character, self.exit_character2]: # Menu/exit character again -> send itself self.serial.write(self.tx_encoder.encode(c)) if self.echo: @@ -747,35 +721,36 @@ def handle_menu_key(self, c): elif c == '\x15': # CTRL+U -> upload file self.upload_file() elif c in '\x08hH?': # CTRL+H, h, H, ? -> Show help + sys.stderr.write(self.get_help_text()) - elif c == '\x12': # CTRL+R -> Toggle RTS + elif c == '\x12': # CTRL+R -> Toggle RTS self.serial.rts = not self.serial.rts - sys.stderr.write('--- RTS {} ---\n'.format('active' if self.serial.rts else 'inactive')) - elif c == '\x04': # CTRL+D -> Toggle DTR + sys.stderr.write( + f"--- RTS {'active' if self.serial.rts else 'inactive'} ---\n" + ) + elif c == '\x04': # CTRL+D -> Toggle DTR self.serial.dtr = not self.serial.dtr - sys.stderr.write('--- DTR {} ---\n'.format('active' if self.serial.dtr else 'inactive')) - elif c == '\x02': # CTRL+B -> toggle BREAK condition + sys.stderr.write( + f"--- DTR {'active' if self.serial.dtr else 'inactive'} ---\n" + ) + elif c == '\x02': # CTRL+B -> toggle BREAK condition self.serial.break_condition = not self.serial.break_condition - sys.stderr.write('--- BREAK {} ---\n'.format('active' if self.serial.break_condition else 'inactive')) - elif c == '\x05': # CTRL+E -> toggle local echo + sys.stderr.write( + f"--- BREAK {'active' if self.serial.break_condition else 'inactive'} ---\n" + ) + elif c == '\x05': # CTRL+E -> toggle local echo self.echo = not self.echo - sys.stderr.write('--- local echo {} ---\n'.format('active' if self.echo else 'inactive')) + sys.stderr.write( + f"--- local echo {'active' if self.echo else 'inactive'} ---\n" + ) elif c == '\x06': # CTRL+F -> edit filters self.change_filter() - elif c == '\x0c': # CTRL+L -> EOL mode - modes = list(EOL_TRANSFORMATIONS) # keys - eol = modes.index(self.eol) + 1 - if eol >= len(modes): - eol = 0 - self.eol = modes[eol] - sys.stderr.write('--- EOL: {} ---\n'.format(self.eol.upper())) - self.update_transformations() + elif c == '\x0c': # CTRL+L -> EOL mode + self.eol_mode() elif c == '\x01': # CTRL+A -> set encoding self.change_encoding() elif c == '\x09': # CTRL+I -> info self.dump_port_settings() - #~ elif c == '\x01': # CTRL+A -> cycle escape mode - #~ elif c == '\x0c': # CTRL+L -> cycle linefeed mode elif c in 'pP': # P -> change port self.change_port() elif c in 'zZ': # S -> suspend / open port temporarily @@ -821,7 +796,16 @@ def handle_menu_key(self, c): elif c in 'qQ': self.stop() # Q -> exit app else: - sys.stderr.write('--- unknown menu character {} --\n'.format(key_description(c))) + sys.stderr.write(f'--- unknown menu character {key_description(c)} --\n') + + def eol_mode(self): + modes = list(EOL_TRANSFORMATIONS) # keys + eol = modes.index(self.eol) + 1 + if eol >= len(modes): + eol = 0 + self.eol = modes[eol] + sys.stderr.write(f'--- EOL: {self.eol.upper()} ---\n') + self.update_transformations() # Support functions for XModem file upload def getc(self, length, timeout=1): @@ -899,20 +883,20 @@ def file_dialog(self, initial): pathname = self.mac_file_dialog(initial) print(pathname) destname = self.mac_askstring(os.path.split(pathname)[1]) - return (pathname, destname) + return pathname, destname else: try: window = Tk() except: pathname = raw_input("Local file to send: ") destname = raw_input("File on FluidNC: ") - return (pathname, destname) + return pathname, destname else: pathname = filedialog.askopenfilename(title="File to Upload", initialfile=initial, filetypes=[("FluidNC Config", "*.yaml *.flnc *.txt"), ("All files", "*")]) print("path",pathname) destname = simpledialog.askstring("Uploader", "Destination Filename", initialvalue=os.path.split(pathname)[1]) window.destroy() - return (pathname, destname) + return pathname, destname def enable_fluid_echo(self): right_arrow = '\x1b[C' @@ -940,11 +924,11 @@ def upload_xmodem(self): try: self._xmodem_stream = open(filename, 'rb') #show what is happening in the console. - self.console.write('--- Sending file {} as {} ---\n'.format(filename, destname)) + self.console.write(f'--- Sending file {filename} as {destname} ---\n') #send the command to put FluidNC in receive mode self.serial.write(self.tx_encoder.encode(f'$Xmodem/Receive={destname}\n')) except IOError as e: - sys.stderr.write('--- ERROR opening file {}: {} ---\n'.format(filename, e)) + sys.stderr.write(f'--- ERROR opening file {filename}: {e} ---\n') # self._uploading = False def upload_file(self, name="config.flnc"): @@ -956,7 +940,7 @@ def upload_file(self, name="config.flnc"): if filename: try: with open(filename, 'rb') as f: - sys.stderr.write('--- Sending file {} ---\n'.format(filename)) + sys.stderr.write(f'--- Sending file {filename} ---\n') while True: block = f.read(1024) if not block: @@ -965,9 +949,9 @@ def upload_file(self, name="config.flnc"): # Wait for output buffer to drain. self.serial.flush() sys.stderr.write('.') # Progress indicator. - sys.stderr.write('\n--- File {} sent ---\n'.format(filename)) + sys.stderr.write(f'\n--- File {filename} sent ---\n') except IOError as e: - sys.stderr.write('--- ERROR opening file {}: {} ---\n'.format(filename, e)) + sys.stderr.write(f'--- ERROR opening file {filename}: {e} ---\n') # self._uploading = False def change_filter(self): @@ -976,7 +960,9 @@ def change_filter(self): sys.stderr.write('\n'.join( '--- {:<10} = {.__doc__}'.format(k, v) for k, v in sorted(TRANSFORMATIONS.items()))) - sys.stderr.write('\n--- Enter new filter name(s) [{}]: '.format(' '.join(self.filters))) + sys.stderr.write( + f"\n--- Enter new filter name(s) [{' '.join(self.filters)}]: " + ) with self.console: new_filters = sys.stdin.readline().lower().split() if new_filters: @@ -987,23 +973,23 @@ def change_filter(self): else: self.filters = new_filters self.update_transformations() - sys.stderr.write('--- filters: {}\n'.format(' '.join(self.filters))) + sys.stderr.write(f"--- filters: {' '.join(self.filters)}\n") def change_encoding(self): """change encoding on the serial port""" - sys.stderr.write('\n--- Enter new encoding name [{}]: '.format(self.input_encoding)) + sys.stderr.write(f'\n--- Enter new encoding name [{self.input_encoding}]: ') with self.console: new_encoding = sys.stdin.readline().strip() if new_encoding: try: codecs.lookup(new_encoding) except LookupError: - sys.stderr.write('--- invalid encoding name: {}\n'.format(new_encoding)) + sys.stderr.write(f'--- invalid encoding name: {new_encoding}\n') else: self.set_rx_encoding(new_encoding) self.set_tx_encoding(new_encoding) - sys.stderr.write('--- serial input encoding: {}\n'.format(self.input_encoding)) - sys.stderr.write('--- serial output encoding: {}\n'.format(self.output_encoding)) + sys.stderr.write(f'--- serial input encoding: {self.input_encoding}\n') + sys.stderr.write(f'--- serial output encoding: {self.output_encoding}\n') def change_baudrate(self): """change the baudrate""" @@ -1014,7 +1000,7 @@ def change_baudrate(self): try: self.serial.baudrate = int(sys.stdin.readline().strip()) except ValueError as e: - sys.stderr.write('--- ERROR setting baudrate: {} ---\n'.format(e)) + sys.stderr.write(f'--- ERROR setting baudrate: {e} ---\n') self.serial.baudrate = backup else: self.dump_port_settings() @@ -1345,10 +1331,8 @@ def main(default_port=None, default_baudrate=115200, default_rts=None, default_d key_description('\x12'))) miniterm.start() - try: + with contextlib.suppress(KeyboardInterrupt): miniterm.join(True) - except KeyboardInterrupt: - pass if not args.quiet: sys.stderr.write('\n--- exit ---\n') miniterm.join() From 5ff7be83fd8d785db84e5740b411fcf4ec785fe6 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 6 Jun 2023 08:36:52 -1000 Subject: [PATCH 024/212] Startup messages says FluidTerm not FluidNC --- fluidterm/fluidterm.exe | Bin 2363478 -> 2367080 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/fluidterm/fluidterm.exe b/fluidterm/fluidterm.exe index c05935ade1deb067503fce5efe0086308674cc4a..ceb4e5fa0009b01b223b5779def3233655ca6522 100644 GIT binary patch delta 373910 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

    Cz3uaF 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 From 4dcb8fb133dd44637eecc6e0a99671432ea1a30b Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 24 Jun 2023 10:01:13 -0500 Subject: [PATCH 045/212] Fixed undefined functions --- FluidNC/src/Motors/TMC2209Driver.h | 2 +- FluidNC/src/Motors/TrinamicUartDriver.h | 13 +++---------- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/FluidNC/src/Motors/TMC2209Driver.h b/FluidNC/src/Motors/TMC2209Driver.h index 0a7277c97..518cbbab6 100644 --- a/FluidNC/src/Motors/TMC2209Driver.h +++ b/FluidNC/src/Motors/TMC2209Driver.h @@ -39,7 +39,7 @@ namespace MotorDrivers { private: TMC2209Stepper* tmc2209 = nullptr; - Pin _cs_pin; + Pin _cs_pin; bool test(); void set_registers(bool isHoming); diff --git a/FluidNC/src/Motors/TrinamicUartDriver.h b/FluidNC/src/Motors/TrinamicUartDriver.h index d5b69d5ea..0e8b4d647 100644 --- a/FluidNC/src/Motors/TrinamicUartDriver.h +++ b/FluidNC/src/Motors/TrinamicUartDriver.h @@ -17,13 +17,6 @@ namespace MotorDrivers { TrinamicUartDriver() = default; void init() override; - //void read_settings() override; - //bool set_homing_mode(bool is_homing) override; - void set_disable(bool disable) override; - - void debug_message(); - - bool hw_serial_init(); uint8_t _addr; @@ -38,12 +31,13 @@ namespace MotorDrivers { void group(Configuration::HandlerBase& handler) override { handler.item("addr", _addr); handler.item("uart_num", _uart_num); + TrinamicBase::group(handler); } protected: Uart* _uart = nullptr; - + int _uart_num = -1; static bool _uart_started; @@ -52,8 +46,7 @@ namespace MotorDrivers { uint8_t toffValue(); // TO DO move to Base? private: - bool test(); - void set_mode(bool isHoming); + }; } From 98ecfbb08bf08dd53f53f30f55d19a627ee9e32c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 24 Jun 2023 14:13:54 -1000 Subject: [PATCH 046/212] Allow WebUI auto-reports to be dropped if wifi is jammed up --- FluidNC/src/WebUI/WSChannel.cpp | 75 +++++++++++++++++---------------- FluidNC/src/WebUI/WSChannel.h | 12 ++---- platformio.ini | 3 +- 3 files changed, 43 insertions(+), 47 deletions(-) diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index 1f70becd5..159210bc4 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -14,7 +14,7 @@ namespace WebUI { class WSChannels; WSChannel::WSChannel(WebSocketsServer* server, uint8_t clientNum) : - Channel("websocket"), _server(server), _clientNum(clientNum), _TXbufferSize(0), _RXbufferSize(0), _RXbufferpos(0) {} + Channel("websocket"), _server(server), _clientNum(clientNum), _RXbufferSize(0), _RXbufferpos(0) {} int WSChannel::read() { if (_dead) { @@ -34,22 +34,49 @@ namespace WebUI { size_t WSChannel::write(uint8_t c) { return write(&c, 1); } size_t WSChannel::write(const uint8_t* buffer, size_t size) { - if (buffer == NULL || _dead) { + if (buffer == NULL || _dead || !size) { return 0; } - if (_TXbufferSize == 0) { - _lastflush = millis(); - } + bool complete_line = buffer[size - 1] == '\n'; + + const uint8_t* out; + size_t outlen; + if (_output_line.length() == 0 && complete_line) { + // Avoid the overhead of std::string if we the + // input is a complete line and nothing is pending. + out = buffer; + outlen = size; + } else { + // Otherwise collect input until we have line. + _output_line.append((char*)buffer, size); + if (!complete_line) { + return size; + } - for (int i = 0; i < size; i++) { - if (_TXbufferSize >= TXBUFFERSIZE) { - flush(); + out = (uint8_t*)_output_line.c_str(); + outlen = _output_line.length(); + } + int stat = _server->canSend(_clientNum); + if (stat < 0) { + _dead = true; + log_debug("WebSocket is dead; closing"); + return 0; + } + if (stat == 0) { + if (_output_line.length()) { + _output_line = ""; } - _TXbuffer[_TXbufferSize] = buffer[i]; - _TXbufferSize++; + return size; + } + if (!_server->sendBIN(_clientNum, out, outlen)) { + _dead = true; + log_debug("WebSocket is unresponsive; closing"); + } + if (_output_line.length()) { + _output_line = ""; } - handle(); + return size; } @@ -68,14 +95,6 @@ namespace WebUI { bool WSChannel::push(std::string& s) { return push((uint8_t*)s.c_str(), s.length()); } - void WSChannel::handle() { - if (_dead) { - return; - } - if (_TXbufferSize > 0 && ((_TXbufferSize >= TXBUFFERSIZE) || ((millis() - _lastflush) > FLUSHTIMEOUT))) { - flush(); - } - } bool WSChannel::sendTXT(std::string& s) { if (_dead) { return false; @@ -88,24 +107,6 @@ namespace WebUI { } return true; } - void WSChannel::flush(void) { - if (_TXbufferSize > 0) { - if (_dead) { - return; - } - if (!_server->sendBIN(_clientNum, _TXbuffer, _TXbufferSize)) { - _dead = true; - log_debug("WebSocket is unresponsive; closing"); - WSChannels::removeChannel(this); - } - - //refresh timout - _lastflush = millis(); - - //reset buffer - _TXbufferSize = 0; - } - } WSChannel::~WSChannel() {} diff --git a/FluidNC/src/WebUI/WSChannel.h b/FluidNC/src/WebUI/WSChannel.h index cb5a1635e..69bd3bdab 100644 --- a/FluidNC/src/WebUI/WSChannel.h +++ b/FluidNC/src/WebUI/WSChannel.h @@ -29,9 +29,7 @@ namespace WebUI { namespace WebUI { class WSChannel : public Channel { - static const int TXBUFFERSIZE = 1200; static const int RXBUFFERSIZE = 256; - static const int FLUSHTIMEOUT = 500; public: WSChannel(WebSocketsServer* server, uint8_t clientNum); @@ -47,13 +45,11 @@ namespace WebUI { inline size_t write(unsigned int n) { return write((uint8_t)n); } inline size_t write(int n) { return write((uint8_t)n); } - void handle(); - bool push(const uint8_t* data, size_t length); bool push(std::string& s); void pushRT(char ch); - void flush(void); + void flush(void) override {} int id() { return _clientNum; } @@ -69,17 +65,15 @@ namespace WebUI { private: bool _dead = false; - uint32_t _lastflush; WebSocketsServer* _server; uint8_t _clientNum; - uint8_t _TXbuffer[TXBUFFERSIZE]; - uint16_t _TXbufferSize; - uint8_t _RXbuffer[RXBUFFERSIZE]; uint16_t _RXbufferSize; uint16_t _RXbufferpos; + std::string _output_line; + // Instead of queueing realtime characters, we put them here // so they can be processed immediately during operations like // homing where GCode handling is blocked. diff --git a/platformio.ini b/platformio.ini index f2e0961e5..623751877 100644 --- a/platformio.ini +++ b/platformio.ini @@ -33,7 +33,8 @@ lib_deps = bt_deps = BluetoothSerial wifi_deps = - arduinoWebSockets=https://github.com/Links2004/arduinoWebSockets + arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#canSend + WiFi=https://github.com/MitchBradley/WiFi#canWrite ; If we include the following explicit dependencies when we get the ; Arduino framework code from github, platformio picks up different ; and incompatible versions of these libraries from who knows where, From 8fc1d12a0a30ce572eb7b6cef3b6097e28e28bd3 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 24 Jun 2023 18:33:34 -1000 Subject: [PATCH 047/212] Added static_cast to suppress compiler warning. --- FluidNC/src/Configuration/Tokenizer.cpp | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/FluidNC/src/Configuration/Tokenizer.cpp b/FluidNC/src/Configuration/Tokenizer.cpp index 5bf3b6fa7..0203b5888 100644 --- a/FluidNC/src/Configuration/Tokenizer.cpp +++ b/FluidNC/src/Configuration/Tokenizer.cpp @@ -23,8 +23,6 @@ namespace Configuration { void Tokenizer::ParseError(const char* description) const { throw ParseException(line_, description); } void Tokenizer::Tokenize() { - const char* tok_start = nullptr; - // Release a held token if (token_.state == TokenState::Held) { token_.state = TokenState::Matching; @@ -82,12 +80,12 @@ namespace Configuration { ParseError("Invalid character"); } - tok_start = current_.cbegin(); + const auto tok_start = current_.cbegin(); Inc(); while (!Eof() && IsIdentifierChar()) { Inc(); } - token_.key_ = { tok_start, current_.cbegin() - tok_start }; + token_.key_ = { tok_start, static_cast(current_.cbegin() - tok_start) }; // Skip whitespaces: while (IsWhiteSpace()) { @@ -119,23 +117,23 @@ namespace Configuration { auto delimiter = Current(); Inc(); - tok_start = current_.cbegin(); + const auto tok_start = current_.cbegin(); while (!Eof() && Current() != delimiter && !IsEndLine()) { Inc(); } - token_.value_ = { tok_start, current_.cbegin() - tok_start }; + token_.value_ = { tok_start, static_cast(current_.cbegin() - tok_start) }; if (Current() != delimiter) { ParseError("Did not find matching delimiter"); } Inc(); log_parser_verbose("StringQ " << token_.key_ << " " << token_.value_); } else { - tok_start = current_.cbegin(); + const auto tok_start = current_.cbegin(); while (!IsEndLine()) { Inc(); } auto& value_tok = token_.value_; - value_tok = { tok_start, current_.cbegin() - tok_start }; + value_tok = { tok_start, static_cast(current_.cbegin() - tok_start) }; if (!value_tok.empty() && value_tok[value_tok.size() - 1] == '\r') { value_tok.remove_suffix(1); } From 77bb09c9ef7ee9cd856b1d234d840efab3aa399a Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 26 Jun 2023 10:47:20 -1000 Subject: [PATCH 048/212] Use string_view methods for tokenizing ... also rename member variables to _foo instead of foo_, for consistency with other parts of the FluidNC code. --- FluidNC/src/Configuration/ParseException.h | 10 +- FluidNC/src/Configuration/Parser.cpp | 38 ++-- FluidNC/src/Configuration/ParserHandler.h | 22 +- FluidNC/src/Configuration/Tokenizer.cpp | 234 +++++++++++---------- FluidNC/src/Configuration/Tokenizer.h | 58 ++--- 5 files changed, 166 insertions(+), 196 deletions(-) diff --git a/FluidNC/src/Configuration/ParseException.h b/FluidNC/src/Configuration/ParseException.h index 173e01355..625a542e1 100644 --- a/FluidNC/src/Configuration/ParseException.h +++ b/FluidNC/src/Configuration/ParseException.h @@ -5,16 +5,16 @@ namespace Configuration { class ParseException { - int line_; - std::string description_; + int _linenum; + std::string _description; public: ParseException() = default; ParseException(const ParseException&) = default; - ParseException(int line, const char* description) : line_(line), description_(description) {} + ParseException(int linenum, const char* description) : _linenum(linenum), _description(description) {} - inline int LineNumber() const { return line_; } - inline const std::string& What() const { return description_; } + inline int LineNumber() const { return _linenum; } + inline const std::string& What() const { return _description; } }; } diff --git a/FluidNC/src/Configuration/Parser.cpp b/FluidNC/src/Configuration/Parser.cpp index a0c6b25f1..c2c0bbdbf 100644 --- a/FluidNC/src/Configuration/Parser.cpp +++ b/FluidNC/src/Configuration/Parser.cpp @@ -19,39 +19,35 @@ namespace Configuration { void Parser::parseError(const char* description) const { // Attempt to use the correct position in the parser: - if (!token_.key_.empty()) { - throw ParseException(line_, description); + if (!_token._key.empty()) { + throw ParseException(_linenum, description); } else { Tokenizer::ParseError(description); } } bool Parser::is(const char* expected) { - if (token_.state != TokenState::Matching || token_.key_.empty()) { + if (_token._state != TokenState::Matching || _token._key.empty()) { return false; } auto len = strlen(expected); - if (len != token_.key_.size()) { + if (len != _token._key.size()) { return false; } - bool result = !strncasecmp(expected, token_.key_.cbegin(), len); + bool result = !strncasecmp(expected, _token._key.cbegin(), len); if (result) { - token_.state = TokenState::Matched; + _token._state = TokenState::Matched; } return result; } // String values might have meaningful leading and trailing spaces so we avoid trimming the string (false) - std::string_view Parser::stringValue() const { - return token_.value_; - } + std::string_view Parser::stringValue() const { return _token._value; } - bool Parser::boolValue() const { - return string_util::equal_ignore_case(string_util::trim(token_.value_), "true"); - } + bool Parser::boolValue() const { return string_util::equal_ignore_case(string_util::trim(_token._value), "true"); } int Parser::intValue() const { - auto value_token = string_util::trim(token_.value_); + auto value_token = string_util::trim(_token._value); int32_t int_value; if (string_util::is_int(value_token, int_value)) { return int_value; @@ -69,7 +65,7 @@ namespace Configuration { } uint32_t Parser::uintValue() const { - auto token = string_util::trim(token_.value_); + auto token = string_util::trim(_token._value); uint32_t uint_value; if (string_util::is_uint(token, uint_value)) { return uint_value; @@ -85,7 +81,7 @@ namespace Configuration { } float Parser::floatValue() const { - auto token = string_util::trim(token_.value_); + auto token = string_util::trim(_token._value); float float_value; if (string_util::is_float(token, float_value)) { return float_value; @@ -95,7 +91,7 @@ namespace Configuration { } std::vector Parser::speedEntryValue() const { - auto str = string_util::trim(token_.value_); + auto str = string_util::trim(_token._value); std::vector speed_entries; @@ -134,20 +130,18 @@ namespace Configuration { return speed_entries; } - Pin Parser::pinValue() const { - return Pin::create(string_util::trim(token_.value_)); - } + Pin Parser::pinValue() const { return Pin::create(string_util::trim(_token._value)); } IPAddress Parser::ipValue() const { IPAddress ip; - if (!ip.fromString(std::string(string_util::trim(token_.value_)).c_str())) { + if (!ip.fromString(std::string(string_util::trim(_token._value)).c_str())) { parseError("Expected an IP address like 192.168.0.100"); } return ip; } int Parser::enumValue(EnumItem* e) const { - auto token = string_util::trim(token_.value_); + auto token = string_util::trim(_token._value); for (; e->name; ++e) { if (string_util::equal_ignore_case(token, e->name)) { break; @@ -157,7 +151,7 @@ namespace Configuration { } void Parser::uartMode(UartData& wordLength, UartParity& parity, UartStop& stopBits) const { - auto str = string_util::trim(token_.value_); + auto str = string_util::trim(_token._value); if (str.length() == 5 || str.length() == 3) { int32_t wordLenInt; if (!string_util::is_int(str.substr(0, 1), wordLenInt)) { diff --git a/FluidNC/src/Configuration/ParserHandler.h b/FluidNC/src/Configuration/ParserHandler.h index 73c4e2c93..86470b3df 100644 --- a/FluidNC/src/Configuration/ParserHandler.h +++ b/FluidNC/src/Configuration/ParserHandler.h @@ -23,13 +23,13 @@ namespace Configuration { // On entry, the token is for the section that invoked us. // We will handle following nodes with indents greater than entryIndent - int entryIndent = _parser.token_.indent_; + int entryIndent = _parser._token._indent; log_parser_verbose("Entered section " << name << " at indent " << entryIndent); // The next token controls what we do next. If thisIndent is greater // than entryIndent, there are some subordinate tokens. _parser.Tokenize(); - int thisIndent = _parser.token_.indent_; + int thisIndent = _parser._token._indent; log_parser_verbose("thisIndent " << _parser.key() << " " << thisIndent); // If thisIndent <= entryIndent, the section is empty - there are @@ -38,11 +38,11 @@ namespace Configuration { if (thisIndent > entryIndent) { // If thisIndent > entryIndent, the new token is the first token within // this section so we process tokens at the same level as thisIndent. - for (; _parser.token_.indent_ >= thisIndent; _parser.Tokenize()) { - log_parser_verbose(" KEY " << _parser.key() << " state " << int(_parser.token_.state) << " indent " - << _parser.token_.indent_); - if (_parser.token_.indent_ > thisIndent) { - log_error("Skipping key " << _parser.key() << " indent " << _parser.token_.indent_ << " this indent " << thisIndent); + for (; _parser._token._indent >= thisIndent; _parser.Tokenize()) { + log_parser_verbose(" KEY " << _parser.key() << " state " << int(_parser._token._state) << " indent " + << _parser._token._indent); + if (_parser._token._indent > thisIndent) { + log_error("Skipping key " << _parser.key() << " indent " << _parser._token._indent << " this indent " << thisIndent); } else { log_parser_verbose("Parsing key " << _parser.key()); try { @@ -55,10 +55,10 @@ namespace Configuration { sys.state = State::ConfigAlarm; } - if (_parser.token_.state == TokenState::Matching) { + if (_parser._token._state == TokenState::Matching) { log_warn("Ignored key " << _parser.key()); } - if (_parser.token_.state == Configuration::TokenState::Matched) { + if (_parser._token._state == Configuration::TokenState::Matched) { log_parser_verbose("Handled key " << _parser.key()); } } @@ -70,9 +70,9 @@ namespace Configuration { // the caller will call Tokenize() to get a token, so we // "hold" the current token so that Tokenize() will // release that token instead of parsing ahead. - // _parser.token_.held = true; + // _parser._token.held = true; - _parser.token_.state = TokenState::Held; + _parser._token._state = TokenState::Held; log_parser_verbose("Left section at indent " << entryIndent << " holding " << _parser.key()); _path.erase(_path.begin() + (_path.size() - 1)); diff --git a/FluidNC/src/Configuration/Tokenizer.cpp b/FluidNC/src/Configuration/Tokenizer.cpp index 0203b5888..fc635db28 100644 --- a/FluidNC/src/Configuration/Tokenizer.cpp +++ b/FluidNC/src/Configuration/Tokenizer.cpp @@ -11,137 +11,141 @@ namespace Configuration { - void Tokenizer::skipToEol() { - while (!IsEndLine()) { - Inc(); + Tokenizer::Tokenizer(std::string_view yaml_string) : _remainder(yaml_string), _linenum(0), _token() {} + + void Tokenizer::ParseError(const char* description) const { throw ParseException(_linenum, description); } + + void Tokenizer::parseKey() { + // entry: first character is not space + // The first character in the line is neither # nor whitespace + if (!isIdentifierChar(_line.front())) { + ParseError("Invalid character"); + } + auto pos = _line.find_first_of(':'); + _token._key = _line.substr(0, pos); + while (isWhiteSpace(_token._key.back())) { + _token._key.remove_suffix(1); } - Inc(); + if (pos == std::string_view::npos) { + std::string err = "Key "; + err += _token._key; + err += " must be followed by ':'"; + ParseError(err.c_str()); + } + _line.remove_prefix(pos + 1); } - Tokenizer::Tokenizer(std::string_view yaml_string) : current_(yaml_string), line_(0), token_() {} + // Sets _line to the next non-empty, non-comment line. + // Removes leading spaces setting _token._indent to their number + // Returns false at end of file + bool Tokenizer::nextLine() { + do { + _linenum++; + + // End of input + if (_remainder.empty()) { + _line = _remainder; + return false; + } + + // Get next line. The final line need not have a newline + auto pos = _remainder.find_first_of('\n'); + if (pos == std::string_view::npos) { + _line = _remainder; + _remainder.remove_prefix(_remainder.size()); + } else { + _line = _remainder.substr(0, pos); + _remainder.remove_prefix(pos + 1); + } + if (_line.empty()) { + continue; + } + + // Remove carriage return if present + if (_line.back() == '\r') { + _line.remove_suffix(1); + } + if (_line.empty()) { + continue; + } + + // Remove indentation and record the level + _token._indent = _line.find_first_not_of(' '); + _line.remove_prefix(_token._indent); + if (_line.empty()) { + continue; + } + + // Disallow inital tabs + if (_line.front() == '\t') { + ParseError("Use spaces, not tabs, for indentation"); + } + + // Discard comment lines + if (_line.front() == '#') { // Comment till end of line + _line.remove_prefix(_line.size()); + } + } while (_line.empty()); + + return true; + } + + void Tokenizer::parseValue() { + // Remove initial whitespace + while (!_line.empty() && isWhiteSpace(_line.front())) { + _line.remove_prefix(1); + } + + // Lines with no value are sections + if (_line.empty()) { + log_parser_verbose("Section " << _token._key); + // A key with nothing else is not necessarily a section - it could + // be an item whose value is the empty string + _token._value = {}; + return; + } - void Tokenizer::ParseError(const char* description) const { throw ParseException(line_, description); } + auto delimiter = _line.front(); + if (delimiter == '"' || delimiter == '\'') { + // Value is quoted + _line.remove_prefix(1); + auto pos = _line.find_first_of(delimiter); + if (pos == std::string_view::npos) { + ParseError("Did not find matching delimiter"); + } + _token._value = _line.substr(0, pos); + _line.remove_prefix(pos + 1); + log_parser_verbose("StringQ " << _token._key << " " << _token._value); + } else { + // Value is not quoted + _token._value = _line; + log_parser_verbose("String " << _token._key << " " << _token._value); + } + } void Tokenizer::Tokenize() { // Release a held token - if (token_.state == TokenState::Held) { - token_.state = TokenState::Matching; + if (_token._state == TokenState::Held) { + _token._state = TokenState::Matching; log_parser_verbose("Releasing " << key()); return; } // Otherwise find the next token - token_.state = TokenState::Matching; + _token._state = TokenState::Matching; + // We parse 1 line at a time. Each time we get here, we can assume that the cursor // is at the start of the line. - parseAgain: - ++line_; - - int indent = 0; - - while (!Eof() && IsSpace()) { - Inc(); - ++indent; - } - token_.indent_ = indent; - - if (Eof()) { - token_.state = TokenState::Eof; - token_.indent_ = -1; - token_.key_ = {}; + if (nextLine()) { + parseKey(); + parseValue(); return; } - switch (Current()) { - case '\t': - ParseError("Use spaces, not tabs, for indentation"); - break; - - case '#': // Comment till end of line - Inc(); - while (!Eof() && !IsEndLine()) { - Inc(); - } - goto parseAgain; - - case '\r': - Inc(); - if (!Eof() && Current() == '\n') { - Inc(); - } // \r\n - goto parseAgain; - case '\n': - // \n without a preceding \r - Inc(); - goto parseAgain; - - default: - if (!IsIdentifierChar()) { - ParseError("Invalid character"); - } - - const auto tok_start = current_.cbegin(); - Inc(); - while (!Eof() && IsIdentifierChar()) { - Inc(); - } - token_.key_ = { tok_start, static_cast(current_.cbegin() - tok_start) }; - - // Skip whitespaces: - while (IsWhiteSpace()) { - Inc(); - } - - if (Current() != ':') { - std::string err = "Key "; - err += token_.key_; - err += " must be followed by ':'"; - ParseError(err.c_str()); - } - Inc(); - - // Skip whitespaces after the colon: - while (IsWhiteSpace()) { - Inc(); - } - - // token_.indent_ = indent; - if (IsEndLine()) { - log_parser_verbose("Section " << token_.key_); - // A key with nothing else is not necessarily a section - it could - // be an item whose value is the empty string - token_.value_ = {}; - Inc(); - } else { - if (Current() == '"' || Current() == '\'') { - auto delimiter = Current(); - - Inc(); - const auto tok_start = current_.cbegin(); - while (!Eof() && Current() != delimiter && !IsEndLine()) { - Inc(); - } - token_.value_ = { tok_start, static_cast(current_.cbegin() - tok_start) }; - if (Current() != delimiter) { - ParseError("Did not find matching delimiter"); - } - Inc(); - log_parser_verbose("StringQ " << token_.key_ << " " << token_.value_); - } else { - const auto tok_start = current_.cbegin(); - while (!IsEndLine()) { - Inc(); - } - auto& value_tok = token_.value_; - value_tok = { tok_start, static_cast(current_.cbegin() - tok_start) }; - if (!value_tok.empty() && value_tok[value_tok.size() - 1] == '\r') { - value_tok.remove_suffix(1); - } - log_parser_verbose("String " << token_.key_ << " " << token_.value_); - } - skipToEol(); - } - break; - } // switch + + // End of file + _token._state = TokenState::Eof; + _token._indent = -1; + _token._key = {}; } } diff --git a/FluidNC/src/Configuration/Tokenizer.h b/FluidNC/src/Configuration/Tokenizer.h index 2fa85f9db..ccf2e0930 100644 --- a/FluidNC/src/Configuration/Tokenizer.h +++ b/FluidNC/src/Configuration/Tokenizer.h @@ -11,64 +11,36 @@ namespace Configuration { class Tokenizer { - std::string_view current_; + std::string_view _remainder; - void skipToEol(); - - void Inc() { - if (current_.size() > 0) { - current_ = current_.substr(1); - } - } - char Current() const { return Eof() ? '\0' : current_[0]; } - - bool IsAlpha() { - char c = Current(); - return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); - } - - bool IsSpace() { return Current() == ' '; } - - bool IsWhiteSpace() { - if (Eof()) { - return false; - } - char c = Current(); - return c == ' ' || c == '\t' || c == '\f' || c == '\r'; - } - - bool IsIdentifierChar() { return IsAlpha() || IsDigit() || Current() == '_'; } - - bool IsEndLine() { return Eof() || Current() == '\n'; } - - bool IsDigit() { - char c = Current(); - return (c >= '0' && c <= '9'); - } + bool isWhiteSpace(char c) { return c == ' ' || c == '\t' || c == '\f' || c == '\r'; } + bool isIdentifierChar(char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_'; } + bool nextLine(); + void parseKey(); + void parseValue(); public: - int line_; + int _linenum; + std::string_view _line; // Results: struct TokenData { // The initial value for indent is -1, so when ParserHandler::enterSection() // is called to handle the top level of the YAML config file, tokens at // indent 0 will be processed. - TokenData() : key_({}), value_({}), indent_(-1), state(TokenState::Bof) {} - std::string_view key_; - std::string_view value_; - int indent_; + TokenData() : _key({}), _value({}), _indent(-1), _state(TokenState::Bof) {} + std::string_view _key; + std::string_view _value; + int _indent; - TokenState state = TokenState::Bof; - } token_; + TokenState _state = TokenState::Bof; + } _token; void ParseError(const char* description) const; - inline bool Eof() const { return current_.size() == 0; } - public: Tokenizer(std::string_view yaml_string); void Tokenize(); - inline std::string_view key() const { return token_.key_; } + inline std::string_view key() const { return _token._key; } }; } From f77a39db59964c9fb9903c45c1a068377f4daa6a Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Thu, 22 Jun 2023 19:04:51 -0700 Subject: [PATCH 049/212] Minimal test harness --- .github/workflows/ci.yml | 49 ++++++- .gitignore | 1 + FluidNC/tests/PinOptionsParserTest.cpp | 193 +++++++++++++++++++++++++ FluidNC/tests/test_main.cpp | 12 ++ platformio.ini | 41 ++++-- 5 files changed, 283 insertions(+), 13 deletions(-) create mode 100644 FluidNC/tests/PinOptionsParserTest.cpp create mode 100644 FluidNC/tests/test_main.cpp diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ebc536525..6ae7991f1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,4 +1,4 @@ -name: FluidNC Continuous Integration (Build Only) +name: FluidNC Continuous Integration on: [push, pull_request] jobs: build: @@ -37,3 +37,50 @@ jobs: key: platformio-${{ runner.os }} - name: Build target ${{ matrix.pio_env }}${{ matrix.pio_env_variant }} run: pio run -e ${{ matrix.pio_env }}${{ matrix.pio_env_variant }} + + tests: + strategy: + matrix: + include: + - os: ubuntu-latest + pio_env: tests + - os: macos-latest + pio_env: tests + - os: windows-latest + pio_env: tests_nosan + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + # Windows has issues running gtest code with the included gcc, so install + # MSYS2 and use that instead (remember to add it to the path) + - if: matrix.os == 'windows-latest' + name: Install MSYS2 (Windows) + uses: msys2/setup-msys2@v2 + with: + msystem: UCRT64 + location: D:\ + install: mingw-w64-ucrt-x86_64-gcc + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.9" + cache: "pip" + - name: Install PlatformIO + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Cache PlatformIO + uses: actions/cache@v3 + with: + path: ~/.platformio + key: platformio-${{ runner.os }} + + # Separate run task for Windows, since it has issues with the included gcc + - if: matrix.os == 'windows-latest' + name: Run tests (Windows) + run: | + $env:PATH = "D:\msys64\mingw64\bin;D:\msys64\usr\bin;D:\msys64\ucrt64\bin;" + $env:PATH + pio test -e ${{ matrix.pio_env }} -vv + - if: matrix.os != 'windows-latest' + name: Run tests + run: pio test -e ${{ matrix.pio_env }} -vv diff --git a/.gitignore b/.gitignore index 3f8496990..e68197e31 100644 --- a/.gitignore +++ b/.gitignore @@ -30,3 +30,4 @@ build/ dist/ *.cppx *.hx +/compile_commands.json diff --git a/FluidNC/tests/PinOptionsParserTest.cpp b/FluidNC/tests/PinOptionsParserTest.cpp new file mode 100644 index 000000000..696c864b5 --- /dev/null +++ b/FluidNC/tests/PinOptionsParserTest.cpp @@ -0,0 +1,193 @@ +// Copyright (c) 2023 - Dylan Knutson +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#include "gtest/gtest.h" +#include "src/Pins/PinOptionsParser.h" + +using PinOptionsParser = Pins::PinOptionsParser; +static void test_for_loop(PinOptionsParser& parser); +static void test_for_loop_only_first(PinOptionsParser& parser); + +TEST(PinOptionsParser, WithEmptyString) { + char nullDescr[1] = { '\0' }; + PinOptionsParser parser(nullDescr, nullDescr); + + { + auto opt = parser.begin(); + auto endopt = parser.end(); + ASSERT_EQ(opt, endopt) << "Expected empty enumerator"; + } + + // Typical use is a for loop. Let's test the two ways to use it: + for (auto it : parser) { + FAIL() << "Didn't expect to get here"; + } + + for (auto it = parser.begin(); it != parser.end(); ++it) { + FAIL() << "Didn't expect to get here"; + } +} + +TEST(PinOptionsParser, SingleArg) { + const char* input = "first"; + char tmp[20]; + int n = snprintf(tmp, 20, "%s", input); + + PinOptionsParser parser(tmp, tmp + n); + + { + auto opt = parser.begin(); + auto endopt = parser.end(); + ASSERT_NE(opt, endopt) << "Expected an argument"; + ASSERT_TRUE(opt->is("first")) << "Expected 'first'"; + ++opt; + ASSERT_EQ(opt, endopt) << "Expected one argument"; + } + + test_for_loop_only_first(parser); +} + +TEST(PinOptionsParser, SingleArgWithWS) { + const char* input = " first"; + char tmp[20]; + int n = snprintf(tmp, 20, "%s", input); + + PinOptionsParser parser(tmp, tmp + n); + + { + auto opt = parser.begin(); + auto endopt = parser.end(); + ASSERT_NE(opt, endopt) << "Expected an argument"; + ASSERT_TRUE(opt->is("first")) << "Expected 'first'"; + ++opt; + ASSERT_EQ(opt, endopt) << "Expected one argument"; + } + + test_for_loop_only_first(parser); +} + +TEST(PinOptionsParser, SingleArgWithWS2) { + const char* input = " first "; + char tmp[20]; + int n = snprintf(tmp, 20, "%s", input); + + PinOptionsParser parser(tmp, tmp + n); + + { + auto opt = parser.begin(); + auto endopt = parser.end(); + ASSERT_NE(opt, endopt) << "Expected an argument"; + ASSERT_TRUE(opt->is("first")) << "Expected 'first'"; + + ++opt; + ASSERT_EQ(opt, endopt) << "Expected one argument"; + } + + test_for_loop_only_first(parser); +} + +TEST(PinOptionsParser, TwoArg1) { + const char* input = "first;second"; + char tmp[20]; + int n = snprintf(tmp, 20, "%s", input); + + PinOptionsParser parser(tmp, tmp + n); + + { + auto opt = parser.begin(); + auto endopt = parser.end(); + ASSERT_NE(opt, endopt) << "Expected an argument"; + ASSERT_TRUE(opt->is("first")) << "Expected 'first'"; + + ++opt; + ASSERT_NE(opt, endopt) << "Expected second argument"; + ASSERT_TRUE(opt->is("second")) << "Expected 'second'"; + + ++opt; + ASSERT_EQ(opt, endopt) << "Expected one argument"; + } + + test_for_loop(parser); +} + +TEST(PinOptionsParser, TwoArg2) { + const char* input = "first:second"; + char tmp[20]; + int n = snprintf(tmp, 20, "%s", input); + + PinOptionsParser parser(tmp, tmp + n); + + { + auto opt = parser.begin(); + auto endopt = parser.end(); + ASSERT_NE(opt, endopt) << "Expected an argument"; + ASSERT_TRUE(opt->is("first")) << "Expected 'first'"; + + ++opt; + ASSERT_NE(opt, endopt) << "Expected second argument"; + ASSERT_TRUE(opt->is("second")) << "Expected 'second'"; + + ++opt; + ASSERT_EQ(opt, endopt) << "Expected one argument"; + } + + test_for_loop(parser); +} + +TEST(PinOptionsParser, TwoArgWithValues) { + const char* input = "first=12;second=13"; + char tmp[20]; + int n = snprintf(tmp, 20, "%s", input); + + PinOptionsParser parser(tmp, tmp + n); + + { + auto opt = parser.begin(); + auto endopt = parser.end(); + ASSERT_NE(opt, endopt) << "Expected an argument"; + ASSERT_TRUE(opt->is("first")) << "Expected 'first'"; + ASSERT_EQ(strcmp("12", opt->value()), 0); + ASSERT_EQ(12, opt->iValue()); + ASSERT_EQ(12, opt->dValue()); + + ++opt; + ASSERT_NE(opt, endopt) << "Expected second argument"; + ASSERT_TRUE(opt->is("second")) << "Expected 'second'"; + ASSERT_EQ(strcmp("13", opt->value()), 0); + ASSERT_EQ(13, opt->iValue()); + ASSERT_EQ(13, opt->dValue()); + + ++opt; + ASSERT_EQ(opt, endopt) << "Expected one argument"; + } + + test_for_loop(parser); +} + +static void test_for_loop(PinOptionsParser& parser) { + // Typical use is a for loop. Let's test the two ways to use it: + int ctr = 0; + for (auto it : parser) { + if (ctr == 0) { + ASSERT_TRUE(it.is("first")) << "Expected 'first'"; + } else if (ctr == 1) { + ASSERT_TRUE(it.is("second")) << "Expected 'second'"; + } else { + FAIL() << "Didn't expect to get here"; + } + ++ctr; + } +} + +static void test_for_loop_only_first(PinOptionsParser& parser) { + // Typical use is a for loop. Let's test the two ways to use it: + int ctr = 0; + for (auto it : parser) { + if (ctr == 0) { + ASSERT_TRUE(it.is("first")) << "Expected 'first'"; + } else { + FAIL() << "Didn't expect to get here"; + } + ++ctr; + } +} diff --git a/FluidNC/tests/test_main.cpp b/FluidNC/tests/test_main.cpp new file mode 100644 index 000000000..924185ef7 --- /dev/null +++ b/FluidNC/tests/test_main.cpp @@ -0,0 +1,12 @@ +#include "gtest/gtest.h" + +int main(int argc, char** argv) { + ::testing::InitGoogleTest(&argc, argv); + // if you plan to use GMock, replace the line above with + // ::testing::InitGoogleMock(&argc, argv); + + if (RUN_ALL_TESTS()) {} + + // Always return zero-code and allow PlatformIO to parse results + return 0; +} diff --git a/platformio.ini b/platformio.ini index f2e0961e5..2efe22c0d 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,7 +12,7 @@ src_dir = FluidNC include_dir = FluidNC/include ; lib_dir = libraries -test_dir = FluidNC/test +test_dir = FluidNC/tests data_dir = FluidNC/data default_envs = wifi ;extra_configs=debug.ini @@ -157,16 +157,33 @@ extends = common_esp32_s3 lib_deps = ${common.lib_deps} ${common.bt_deps} ${common.wifi_deps} build_flags = ${common_esp32.build_flags} ${common_wifi.build_flags} ${common_bt.build_flags} -[env:native] +; This environment has bit-rot, and does not build. +; Files relevant to it reside in ./X86TestSupport and ./FluidNC/test +; TODO - Migrate tests over to [env:tests] environment +; [env:native] +; platform = native +; test_build_src = true +; build_src_filter = +; +<*.h> +<*.s> +<*.S> +<*.cpp> +<*.c> + +; + +; - - +; build_flags = -IX86TestSupport -std=c++17 -limagehlp +; lib_compat_mode = off +; lib_deps = +; google/googletest @ ^1.10.0 +; lib_extra_dirs = +; X86TestSupport + +[tests_common] platform = native +test_framework = googletest test_build_src = true -build_src_filter = - +<*.h> +<*.s> +<*.S> +<*.cpp> +<*.c> + - + - - - -build_flags = -IX86TestSupport -std=c++17 -limagehlp -lib_compat_mode = off -lib_deps = - google/googletest @ ^1.10.0 -lib_extra_dirs = - X86TestSupport +build_src_filter = + +build_flags = -std=c++17 -g + +[env:tests] +extends = tests_common +build_flags = ${tests_common.build_flags} -fsanitize=address,undefined + +[env:tests_nosan] +extends = tests_common From b6d7b3e00ad07a8319b107a7c81ac870f6f9f7b7 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 26 Jun 2023 14:26:59 -1000 Subject: [PATCH 050/212] Moved tokenizer implementations from .h to .cpp --- FluidNC/src/Configuration/Tokenizer.cpp | 6 ++++++ FluidNC/src/Configuration/Tokenizer.h | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Configuration/Tokenizer.cpp b/FluidNC/src/Configuration/Tokenizer.cpp index fc635db28..beabdd251 100644 --- a/FluidNC/src/Configuration/Tokenizer.cpp +++ b/FluidNC/src/Configuration/Tokenizer.cpp @@ -13,6 +13,12 @@ namespace Configuration { Tokenizer::Tokenizer(std::string_view yaml_string) : _remainder(yaml_string), _linenum(0), _token() {} + bool Tokenizer::isWhiteSpace(char c) { return c == ' ' || c == '\t' || c == '\f' || c == '\r'; } + + bool Tokenizer::isIdentifierChar(char c) { + return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_'; + } + void Tokenizer::ParseError(const char* description) const { throw ParseException(_linenum, description); } void Tokenizer::parseKey() { diff --git a/FluidNC/src/Configuration/Tokenizer.h b/FluidNC/src/Configuration/Tokenizer.h index ccf2e0930..aefe91d08 100644 --- a/FluidNC/src/Configuration/Tokenizer.h +++ b/FluidNC/src/Configuration/Tokenizer.h @@ -13,8 +13,8 @@ namespace Configuration { class Tokenizer { std::string_view _remainder; - bool isWhiteSpace(char c) { return c == ' ' || c == '\t' || c == '\f' || c == '\r'; } - bool isIdentifierChar(char c) { return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9') || c == '_'; } + bool isWhiteSpace(char c); + bool isIdentifierChar(char c); bool nextLine(); void parseKey(); void parseValue(); From da9e712c3746f5284a314d443026b98279a287dd Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Mon, 26 Jun 2023 22:37:57 -0700 Subject: [PATCH 051/212] GRBL proxy settings for improved sender compatibility --- FluidNC/src/Error.h | 1 + FluidNC/src/NutsBolts.h | 7 ---- FluidNC/src/Settings.cpp | 16 +++++++++ FluidNC/src/Settings.h | 21 ++++++++++++ FluidNC/src/SettingsDefinitions.cpp | 51 +++++++++++++++++++++++++++++ 5 files changed, 89 insertions(+), 7 deletions(-) diff --git a/FluidNC/src/Error.h b/FluidNC/src/Error.h index afa12da81..2e987dec7 100644 --- a/FluidNC/src/Error.h +++ b/FluidNC/src/Error.h @@ -78,6 +78,7 @@ enum class Error : uint8_t { ConfigurationInvalid = 152, UploadFailed = 160, DownloadFailed = 161, + ReadOnlySetting = 162, }; const char* errorString(Error errorNumber); diff --git a/FluidNC/src/NutsBolts.h b/FluidNC/src/NutsBolts.h index 248649d65..cd218c9da 100644 --- a/FluidNC/src/NutsBolts.h +++ b/FluidNC/src/NutsBolts.h @@ -85,13 +85,6 @@ const char* to_hex(uint32_t n); bool char_is_numeric(char value); char* trim(char* value); -template -void swap(T& a, T& b) { - T c(a); - a = b; - b = c; -} - template T myMap(T x, T in_min, T in_max, T out_min, T out_max) { // DrawBot_Badge return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; diff --git a/FluidNC/src/Settings.cpp b/FluidNC/src/Settings.cpp index ded02e2a3..56ffc5d54 100644 --- a/FluidNC/src/Settings.cpp +++ b/FluidNC/src/Settings.cpp @@ -5,6 +5,7 @@ #include "WebUI/Commands.h" // WebUI::COMMANDS #include "System.h" // sys #include "Protocol.h" // protocol_buffer_synchronize +#include "Machine/MachineConfig.h" #include #include @@ -521,3 +522,18 @@ void IPaddrSetting::addWebui(WebUI::JSONencoder* j) { j->end_object(); } } + +template <> +const char* MachineConfigProxySetting::getStringValue() { + auto got = _getter(*MachineConfig::instance()); + _cachedValue.reserve(16); + std::snprintf(_cachedValue.data(), _cachedValue.capacity(), "%.3f", got); + return _cachedValue.c_str(); +} + +template <> +const char* MachineConfigProxySetting::getStringValue() { + auto got = _getter(*MachineConfig::instance()); + _cachedValue = std::to_string(got); + return _cachedValue.c_str(); +} diff --git a/FluidNC/src/Settings.h b/FluidNC/src/Settings.h index 19577f3cb..0273a1c74 100644 --- a/FluidNC/src/Settings.h +++ b/FluidNC/src/Settings.h @@ -5,9 +5,15 @@ #include "Report.h" // info_channel #include "GCode.h" // CoordIndex +#include #include #include +// forward declarations +namespace Machine { + class MachineConfig; +} + // Initialize the configuration subsystem void settings_init(); @@ -201,6 +207,21 @@ class IntSetting : public Setting { int32_t get() { return _currentValue; } }; +// See Settings.cpp for the int32_t and float specialization implementations +template +class MachineConfigProxySetting : public Setting { + std::function _getter; + std::string _cachedValue; + +public: + MachineConfigProxySetting(const char* grblName, const char* fullName, std::function getter) : + Setting(fullName, type_t::GRBL, permissions_t::WU, grblName, fullName, nullptr), _getter(getter), _cachedValue("") {} + + const char* getStringValue() override; + Error setStringValue(char* value) override { return Error::ReadOnlySetting; } + const char* getDefaultString() override { return ""; } +}; + class Coordinates { private: float _currentValue[MAX_N_AXIS]; diff --git a/FluidNC/src/SettingsDefinitions.cpp b/FluidNC/src/SettingsDefinitions.cpp index e0ccc7c98..e6250bdc1 100644 --- a/FluidNC/src/SettingsDefinitions.cpp +++ b/FluidNC/src/SettingsDefinitions.cpp @@ -1,6 +1,11 @@ +#include "Machine/MachineConfig.h" #include "SettingsDefinitions.h" #include "Config.h" +#include +#include +#include + StringSetting* config_filename; StringSetting* build_info; @@ -13,6 +18,9 @@ IntSetting* sd_fallback_cs; EnumSetting* message_level; +std::vector>> float_proxies; +std::vector>> int_proxies; + enum_opt_t messageLevels = { // clang-format off { "None", MsgLevelNone }, @@ -64,4 +72,47 @@ void make_settings() { start_message = new StringSetting("Message issued at startup", EXTENDED, WG, NULL, "Start/Message", "Grbl \\V [FluidNC \\B (\\R) \\H]", 0, 40, NULL); + + // Some gcode senders expect Grbl to report certain numbered settings to improve + // their reporting. The following macros set up various legacy numbered Grbl settings, + // which are derived from MachineConfig settings. + + // 130-132: Max travel (mm) + float_proxies.emplace_back(std::make_unique>( + "130", "Grbl/MaxTravel/X", [](MachineConfig const& config) { return config._axes->_axis[0]->_maxTravel; })); + float_proxies.emplace_back(std::make_unique>( + "131", "Grbl/MaxTravel/Y", [](MachineConfig const& config) { return config._axes->_axis[1]->_maxTravel; })); + float_proxies.emplace_back(std::make_unique>( + "132", "Grbl/MaxTravel/Z", [](MachineConfig const& config) { return config._axes->_axis[2]->_maxTravel; })); + + // 120-122: Acceleration (mm/sec^2) + float_proxies.emplace_back(std::make_unique>( + "120", "Grbl/Acceleration/X", [](MachineConfig const& config) { return config._axes->_axis[0]->_acceleration; })); + float_proxies.emplace_back(std::make_unique>( + "121", "Grbl/Acceleration/Y", [](MachineConfig const& config) { return config._axes->_axis[1]->_acceleration; })); + float_proxies.emplace_back(std::make_unique>( + "122", "Grbl/Acceleration/Z", [](MachineConfig const& config) { return config._axes->_axis[2]->_acceleration; })); + + // 110-112: Max rate (mm/min) + float_proxies.emplace_back(std::make_unique>( + "110", "Grbl/MaxRate/X", [](MachineConfig const& config) { return config._axes->_axis[0]->_maxRate; })); + float_proxies.emplace_back(std::make_unique>( + "111", "Grbl/MaxRate/Y", [](MachineConfig const& config) { return config._axes->_axis[1]->_maxRate; })); + float_proxies.emplace_back(std::make_unique>( + "112", "Grbl/MaxRate/Z", [](MachineConfig const& config) { return config._axes->_axis[2]->_maxRate; })); + + // 100-102: Resolution (steps/mm) + float_proxies.emplace_back(std::make_unique>( + "100", "Grbl/Resolution/X", [](MachineConfig const& config) { return config._axes->_axis[0]->_stepsPerMm; })); + float_proxies.emplace_back(std::make_unique>( + "101", "Grbl/Resolution/Y", [](MachineConfig const& config) { return config._axes->_axis[1]->_stepsPerMm; })); + float_proxies.emplace_back(std::make_unique>( + "102", "Grbl/Resolution/Z", [](MachineConfig const& config) { return config._axes->_axis[2]->_stepsPerMm; })); + + int_proxies.emplace_back(std::make_unique>( + "20", "Grbl/SoftLimitsEnable", [](MachineConfig const& config) { return config._axes->_axis[0]->_softLimits ? 1 : 0; })); + int_proxies.emplace_back(std::make_unique>( + "21", "Grbl/HardLimitsEnable", [](MachineConfig const& config) { return config._axes->hasHardLimits() ? 1 : 0; })); + int_proxies.emplace_back(std::make_unique>( + "22", "Grbl/HomingCycleEnable", [](MachineConfig const& config) { return Axes::homingMask ? 1 : 0; })); } From f9adaf02bf8336a0a501798e2434dc315c62966b Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 28 Jun 2023 09:05:14 -1000 Subject: [PATCH 052/212] Removed broken debug statements --- FluidNC/src/WebUI/WebServer.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 5acd7a346..40e4b2756 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -265,15 +265,12 @@ namespace WebUI { return false; } } - log_debug(spath << " found"); if (download) { _webserver->sendHeader("Content-Disposition", "attachment"); } if (hash.length()) { _webserver->sendHeader("ETag", hash.c_str()); } - - log_debug("path " << path << " CT " << getContentType(path) << " hash " << hash); _webserver->setContentLength(file->size()); if (isGzip) { _webserver->sendHeader("Content-Encoding", "gzip"); From c78e63fc369e2fc782893c7d048e101f1ee0d99c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 28 Jun 2023 10:43:48 -1000 Subject: [PATCH 053/212] Fixed minor problems with JSONEncoder 1. Newline was not being added correctly on channel output 2. linebuf was being cleared unnecessarily on pretty string output --- FluidNC/src/WebUI/JSONEncoder.cpp | 16 +++++++++------- FluidNC/src/WebUI/JSONEncoder.h | 1 + 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/FluidNC/src/WebUI/JSONEncoder.cpp b/FluidNC/src/WebUI/JSONEncoder.cpp index c2998c5fa..65d03e390 100644 --- a/FluidNC/src/WebUI/JSONEncoder.cpp +++ b/FluidNC/src/WebUI/JSONEncoder.cpp @@ -100,24 +100,26 @@ namespace WebUI { // Private function to increment the nesting level. void JSONencoder::dec_level() { --level; } + void JSONencoder::indent() { + for (int i = 0; i < 2 * level; i++) { + add(' '); + } + } + // Private function to implement pretty-printing void JSONencoder::line() { if (_str) { if (pretty) { add('\n'); - linebuf = ""; - for (int i = 0; i < 2 * level; i++) { - add(' '); - } + indent(); } } else { // Always pretty print to a channel, because channels // cannot necessary handle really long lines. + add('\n'); log_to(*_channel, linebuf); linebuf = ""; - for (int i = 0; i < 2 * level; i++) { - add(' '); - } + indent(); } } diff --git a/FluidNC/src/WebUI/JSONEncoder.h b/FluidNC/src/WebUI/JSONEncoder.h index 8d80a8330..7d8298fc7 100644 --- a/FluidNC/src/WebUI/JSONEncoder.h +++ b/FluidNC/src/WebUI/JSONEncoder.h @@ -19,6 +19,7 @@ namespace WebUI { void quoted(const char* s); void inc_level(); void dec_level(); + void indent(); void line(); std::string linebuf; From 4c1adcc1f2f9ebb90e1dbb6167c358cd29399d4a Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 28 Jun 2023 14:55:08 -1000 Subject: [PATCH 054/212] Minor simplification of JSONEncoder code --- FluidNC/src/WebUI/JSONEncoder.cpp | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/FluidNC/src/WebUI/JSONEncoder.cpp b/FluidNC/src/WebUI/JSONEncoder.cpp index 65d03e390..4c6cc6fa9 100644 --- a/FluidNC/src/WebUI/JSONEncoder.cpp +++ b/FluidNC/src/WebUI/JSONEncoder.cpp @@ -7,19 +7,13 @@ namespace WebUI { // Constructor. If _pretty is true, newlines are // inserted into the JSON string for easy reading. - JSONencoder::JSONencoder(bool pretty, Channel* channel) : pretty(pretty), level(0), _channel(channel), category("nvs") { + JSONencoder::JSONencoder(bool pretty, Channel* channel) : pretty(pretty), level(0), _str(&linebuf), _channel(channel), category("nvs") { count[level] = 0; } JSONencoder::JSONencoder(bool pretty, std::string* str) : pretty(pretty), level(0), _str(str), category("nvs") { count[level] = 0; } - void JSONencoder::add(char c) { - if (_str) { - (*_str) += c; - } else { - linebuf += c; - } - } + void JSONencoder::add(char c) { (*_str) += c; } // Private function to add commas between // elements as needed, omitting the comma @@ -108,18 +102,18 @@ namespace WebUI { // Private function to implement pretty-printing void JSONencoder::line() { - if (_str) { - if (pretty) { - add('\n'); - indent(); - } - } else { + if (_channel) { // Always pretty print to a channel, because channels // cannot necessary handle really long lines. add('\n'); - log_to(*_channel, linebuf); - linebuf = ""; + log_to(*_channel, *_str); + *_str = ""; indent(); + } else { + if (pretty) { + add('\n'); + indent(); + } } } From b2e559326d1ee64c0c78f4055f0cc2ddaf9093f0 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 28 Jun 2023 14:55:34 -1000 Subject: [PATCH 055/212] Point to specific commit of WiFi library --- platformio.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platformio.ini b/platformio.ini index 623751877..8b1b15bbb 100644 --- a/platformio.ini +++ b/platformio.ini @@ -34,7 +34,7 @@ bt_deps = BluetoothSerial wifi_deps = arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#canSend - WiFi=https://github.com/MitchBradley/WiFi#canWrite + WiFi=https://github.com/MitchBradley/WiFi#d412cd7 ; If we include the following explicit dependencies when we get the ; Arduino framework code from github, platformio picks up different ; and incompatible versions of these libraries from who knows where, From ba8ef45cff3043b9a1ea004bf0794a61ee767edb Mon Sep 17 00:00:00 2001 From: bdring Date: Thu, 29 Jun 2023 09:14:32 -0500 Subject: [PATCH 056/212] Updates for UART TMC Need to update other UART drivers. --- FluidNC/src/Motors/TMC2209Driver.cpp | 2 -- FluidNC/src/Motors/TMC2209Driver.h | 3 --- FluidNC/src/Motors/TrinamicUartDriver.cpp | 8 +++++--- FluidNC/src/Motors/TrinamicUartDriver.h | 3 +++ 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/FluidNC/src/Motors/TMC2209Driver.cpp b/FluidNC/src/Motors/TMC2209Driver.cpp index 365e2bf12..fee4d5114 100644 --- a/FluidNC/src/Motors/TMC2209Driver.cpp +++ b/FluidNC/src/Motors/TMC2209Driver.cpp @@ -25,8 +25,6 @@ namespace MotorDrivers { _cs_pin.setAttr(Pin::Attr::Output); - log_info(" UART CS:" << _cs_pin.name()); - registration(); } diff --git a/FluidNC/src/Motors/TMC2209Driver.h b/FluidNC/src/Motors/TMC2209Driver.h index 518cbbab6..c6c38e4a4 100644 --- a/FluidNC/src/Motors/TMC2209Driver.h +++ b/FluidNC/src/Motors/TMC2209Driver.h @@ -30,7 +30,6 @@ namespace MotorDrivers { handler.item("stallguard", _stallguard, 0, 255); handler.item("stallguard_debug", _stallguardDebugMode); handler.item("toff_coolstep", _toff_coolstep, 2, 15); - handler.item("cs_pin", _cs_pin); } // Name of the configurable. Must match the name registered in the cpp file. @@ -39,8 +38,6 @@ namespace MotorDrivers { private: TMC2209Stepper* tmc2209 = nullptr; - Pin _cs_pin; - bool test(); void set_registers(bool isHoming); }; diff --git a/FluidNC/src/Motors/TrinamicUartDriver.cpp b/FluidNC/src/Motors/TrinamicUartDriver.cpp index 3533f9e39..0067eced4 100644 --- a/FluidNC/src/Motors/TrinamicUartDriver.cpp +++ b/FluidNC/src/Motors/TrinamicUartDriver.cpp @@ -22,17 +22,19 @@ namespace MotorDrivers { void TrinamicUartDriver::init() { _uart = config->_uarts[_uart_num]; if (!_uart) { - log_error("TMC2208: Missing uart" << _uart_num << "section"); + log_error("TMC Driver missing uart" << _uart_num << " section"); return; } } /* This is the startup message showing the basic definition. + + log_info(" UART CS:" << ); */ void TrinamicUartDriver::config_message() { //TODO: The RX/TX pin could be added to the msg. - log_info(" " << name() << " UART" << _uart_num << " Addr:" << _addr << " Step:" << _step_pin.name() << " Dir:" << _dir_pin.name() - << " Disable:" << _disable_pin.name() << " R:" << _r_sense); + log_info(" " << name() << " UART" << _uart_num << " Addr:" << _addr << " CS:" << _cs_pin.name() << " Step:" << _step_pin.name() + << " Dir:" << _dir_pin.name() << " Disable:" << _disable_pin.name() << " R:" << _r_sense); } uint8_t TrinamicUartDriver::toffValue() { diff --git a/FluidNC/src/Motors/TrinamicUartDriver.h b/FluidNC/src/Motors/TrinamicUartDriver.h index 0e8b4d647..5d12568d1 100644 --- a/FluidNC/src/Motors/TrinamicUartDriver.h +++ b/FluidNC/src/Motors/TrinamicUartDriver.h @@ -30,6 +30,7 @@ namespace MotorDrivers { void group(Configuration::HandlerBase& handler) override { handler.item("addr", _addr); + handler.item("cs_pin", _cs_pin); handler.item("uart_num", _uart_num); TrinamicBase::group(handler); @@ -38,6 +39,8 @@ namespace MotorDrivers { protected: Uart* _uart = nullptr; + Pin _cs_pin; + int _uart_num = -1; static bool _uart_started; From 54f73473aaa9c008040d0a8024cc8eae3ecd0a55 Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Thu, 29 Jun 2023 14:24:14 -0700 Subject: [PATCH 057/212] Use vector for tracking all Setting / Command objects --- FluidNC/src/Configuration/Completer.cpp | 2 +- FluidNC/src/ProcessSettings.cpp | 26 ++++++++++++------------- FluidNC/src/Settings.cpp | 13 +++++-------- FluidNC/src/Settings.h | 20 ++++++++----------- FluidNC/src/WebUI/WebSettings.cpp | 6 +++--- FluidNC/src/WebUI/WifiConfig.cpp | 2 +- 6 files changed, 31 insertions(+), 38 deletions(-) diff --git a/FluidNC/src/Configuration/Completer.cpp b/FluidNC/src/Configuration/Completer.cpp index 2c0bae939..570f0439a 100644 --- a/FluidNC/src/Configuration/Completer.cpp +++ b/FluidNC/src/Configuration/Completer.cpp @@ -81,7 +81,7 @@ int num_initial_matches(char* key, int keylen, int matchnum, char* matchname) { nfound = completer._numMatches; } else { // Match NVS settings - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { if (isInitialSubstringCI(key, s->getName())) { if (matchname && nfound == matchnum) { strcpy(matchname, s->getName()); diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index bdd5e448d..bec35c012 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -47,7 +47,7 @@ static bool auth_failed(Word* w, const char* value, WebUI::AuthenticationLevel a if (!value) { // User can read anything return false; // No read is a User auth fail } - return permissions == WA; // User cannot write WA + return permissions == WA; // User cannot write WA default: return true; } @@ -133,10 +133,10 @@ void settings_restore(uint8_t restore_flag) { if (restore_flag & SettingsRestore::Defaults) { bool restore_startup = restore_flag & SettingsRestore::StartupLines; - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { if (!s->getDescription()) { const char* name = s->getName(); - if (restore_startup) { // all settings get restored + if (restore_startup) { // all settings get restored s->setDefault(); } else if ((strcmp(name, "Line0") != 0) && (strcmp(name, "Line1") != 0)) { // non startup settings get restored s->setDefault(); @@ -157,7 +157,7 @@ void settings_restore(uint8_t restore_flag) { // Get settings values from non volatile storage into memory static void load_settings() { - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { s->load(); } } @@ -186,7 +186,7 @@ static Error report_gcode(const char* value, WebUI::AuthenticationLevel auth_lev } static void show_settings(Channel& out, type_t type) { - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { if (s->getType() == type && s->getGrblName()) { // The following test could be expressed more succinctly with XOR, // but is arguably clearer when written out @@ -199,7 +199,7 @@ static Error report_normal_settings(const char* value, WebUI::AuthenticationLeve return Error::Ok; } static Error list_grbl_names(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { - for (Setting* setting = Setting::List; setting; setting = setting->next()) { + for (Setting* setting : Setting::List) { const char* gn = setting->getGrblName(); if (gn) { log_to(out, "$", gn << " => $" << setting->getName()); @@ -208,7 +208,7 @@ static Error list_grbl_names(const char* value, WebUI::AuthenticationLevel auth_ return Error::Ok; } static Error list_settings(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { const char* displayValue = auth_failed(s, value, auth_level) ? "" : s->getStringValue(); if (s->getType() != PIN) { show_setting(s->getName(), displayValue, NULL, out); @@ -217,7 +217,7 @@ static Error list_settings(const char* value, WebUI::AuthenticationLevel auth_le return Error::Ok; } static Error list_changed_settings(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { const char* value = s->getStringValue(); if (!auth_failed(s, value, auth_level) && strcmp(value, s->getDefaultString())) { if (s->getType() != PIN) { @@ -229,7 +229,7 @@ static Error list_changed_settings(const char* value, WebUI::AuthenticationLevel return Error::Ok; } static Error list_commands(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { - for (Command* cp = Command::List; cp; cp = cp->next()) { + for (Command* cp : Command::List) { const char* name = cp->getName(); const char* oldName = cp->getGrblName(); LogStream s(out, "$"); @@ -890,7 +890,7 @@ Error do_command_or_setting(const char* key, char* value, WebUI::AuthenticationL // Next search the settings list by text name. If found, set a new // value if one is given, otherwise display the current value - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { if (strcasecmp(s->getName(), key) == 0) { if (auth_failed(s, value, auth_level)) { return Error::AuthenticationFailed; @@ -906,7 +906,7 @@ Error do_command_or_setting(const char* key, char* value, WebUI::AuthenticationL // Then search the setting list by compatible name. If found, set a new // value if one is given, otherwise display the current value in compatible mode - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { if (s->getGrblName() && strcasecmp(s->getGrblName(), key) == 0) { if (auth_failed(s, value, auth_level)) { return Error::AuthenticationFailed; @@ -922,7 +922,7 @@ Error do_command_or_setting(const char* key, char* value, WebUI::AuthenticationL // If we did not find a setting, look for a command. Commands // handle values internally; you cannot determine whether to set // or display solely based on the presence of a value. - for (Command* cp = Command::List; cp; cp = cp->next()) { + for (Command* cp : Command::List) { if ((strcasecmp(cp->getName(), key) == 0) || (cp->getGrblName() && strcasecmp(cp->getGrblName(), key) == 0)) { if (auth_failed(cp, value, auth_level)) { return Error::AuthenticationFailed; @@ -938,7 +938,7 @@ Error do_command_or_setting(const char* key, char* value, WebUI::AuthenticationL Error retval = Error::InvalidStatement; if (!value) { bool found = false; - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { auto test = s->getName(); // The C++ standard regular expression library supports many more // regular expression forms than the simple one in Regex.cpp, but diff --git a/FluidNC/src/Settings.cpp b/FluidNC/src/Settings.cpp index ded02e2a3..90ab44e1f 100644 --- a/FluidNC/src/Settings.cpp +++ b/FluidNC/src/Settings.cpp @@ -12,6 +12,9 @@ #include #include +std::vector Setting::List = {}; +std::vector Command::List = {}; + bool anyState() { return false; } @@ -28,24 +31,18 @@ bool cycleOrHold() { Word::Word(type_t type, permissions_t permissions, const char* description, const char* grblName, const char* fullName) : _description(description), _grblName(grblName), _fullName(fullName), _type(type), _permissions(permissions) {} -Command* Command::List = NULL; - Command::Command( const char* description, type_t type, permissions_t permissions, const char* grblName, const char* fullName, bool (*cmdChecker)()) : Word(type, permissions, description, grblName, fullName), _cmdChecker(cmdChecker) { - link = List; - List = this; + List.push_back(this); } -Setting* Setting::List = NULL; - Setting::Setting( const char* description, type_t type, permissions_t permissions, const char* grblName, const char* fullName, bool (*checker)(char*)) : Word(type, permissions, description, grblName, fullName), _checker(checker) { - link = List; - List = this; + List.push_back(this); // NVS keys are limited to 15 characters, so if the setting name is longer // than that, we derive a 15-character name from a hash function diff --git a/FluidNC/src/Settings.h b/FluidNC/src/Settings.h index 19577f3cb..323b1314e 100644 --- a/FluidNC/src/Settings.h +++ b/FluidNC/src/Settings.h @@ -24,11 +24,6 @@ enum SettingsRestore { // Restore subsets of settings to default values void settings_restore(uint8_t restore_flag); -// Command::List is a linked list of all settings, -// so common code can enumerate them. -class Command; -// extern Command *CommandsList; - // This abstract class defines the generic interface that // is used to set and get values for all settings independent // of their underlying data type. The values are always @@ -78,12 +73,12 @@ class Word { class Command : public Word { protected: - Command* link; // linked list of setting objects bool (*_cmdChecker)(); public: - static Command* List; - Command* next() { return link; } + // Command::List is a vector of all commands, + // so common code can enumerate them. + static std::vector List; ~Command() {} Command(const char* description, type_t type, permissions_t permissions, const char* grblName, const char* fullName, bool (*cmdChecker)()); @@ -99,8 +94,7 @@ class Setting : public Word { private: protected: // group_t _group; - axis_t _axis = NO_AXIS; - Setting* link; // linked list of setting objects + axis_t _axis = NO_AXIS; bool (*_checker)(char*); const char* _keyName; @@ -108,8 +102,10 @@ class Setting : public Word { public: static nvs_handle _handle; static void init(); - static Setting* List; - Setting* next() { return link; } + + // Setting::List is a vector of all settings, + // so common code can enumerate them. + static std::vector List; Error check(char* s); diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index 504b8b917..d6d912d92 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -255,7 +255,7 @@ namespace WebUI { // NVS settings j.setCategory("nvs"); - for (Setting* js = Setting::List; js; js = js->next()) { + for (Setting* js : Setting::List) { js->addWebui(&j); } @@ -584,7 +584,7 @@ namespace WebUI { log_to(out, "ESPname FullName Description"); log_to(out, "------- -------- -----------"); ; - for (Setting* setting = Setting::List; setting; setting = setting->next()) { + for (Setting* setting : Setting::List) { if (setting->getType() == WEBSET) { log_to(out, "", @@ -597,7 +597,7 @@ namespace WebUI { log_to(out, "ESPname FullName Values"); log_to(out, "------- -------- ------"); - for (Command* cp = Command::List; cp; cp = cp->next()) { + for (Command* cp : Command::List) { if (cp->getType() == WEBCMD) { LogStream s(out, ""); s << LeftJustify(cp->getGrblName() ? cp->getGrblName() : "", 8) << LeftJustify(cp->getName(), 25 - 8); diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index e4992bbf1..7d533a73b 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -772,7 +772,7 @@ namespace WebUI { bool error = false; // XXX this is probably wrong for YAML land. // We might want this function to go away. - for (Setting* s = Setting::List; s; s = s->next()) { + for (Setting* s : Setting::List) { if (s->getDescription()) { s->setDefault(); } From 6121cc72e7ac75f40d0e36efba23324bb38b019f Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 30 Jun 2023 08:31:59 -1000 Subject: [PATCH 058/212] Update problem.yml Added link to requesting help page --- ISSUE_TEMPLATE/problem.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ISSUE_TEMPLATE/problem.yml b/ISSUE_TEMPLATE/problem.yml index 528b90ef5..a1cbb3517 100644 --- a/ISSUE_TEMPLATE/problem.yml +++ b/ISSUE_TEMPLATE/problem.yml @@ -7,7 +7,7 @@ body: - type: markdown attributes: value: | - Please fill in the forms below. The better the information you provide, the better we can help you. + Please read http://wiki.fluidnc.com/en/support/requesting_help, then fill in the forms below. The better the information you provide, the better we can help you. Information that you might think is irrelevant is often the key to solving the problem. - type: textarea id: controller-board From 49e030f8efb1100eccff2d7e0d8e16c273eda92f Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 30 Jun 2023 08:34:10 -1000 Subject: [PATCH 059/212] Update problem.yml --- .github/ISSUE_TEMPLATE/problem.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/problem.yml b/.github/ISSUE_TEMPLATE/problem.yml index b19bab2d5..69c3fc295 100644 --- a/.github/ISSUE_TEMPLATE/problem.yml +++ b/.github/ISSUE_TEMPLATE/problem.yml @@ -5,7 +5,7 @@ labels: ["triage"] body: - type: markdown attributes: - value: Please fill in the forms below. The better the information you provide, the better we can help you. Information that you might think is irrelevant is often the key to solving the problem. **If we have to keep asking for information that you should have provided at the outset, we will become annoyed fairly quickly.** The amount of information that we ask for might seem excessive; it is not. We handle several issues a day. We cannot solve problems efficiently if we have to keep going back and forth for the basic information that we need. + value: Please read http://wiki.fluidnc.com/en/support/requesting_help then fill in the forms below. The better the information you provide, the better we can help you. Information that you might think is irrelevant is often the key to solving the problem. **If we have to keep asking for information that you should have provided at the outset, we will become annoyed fairly quickly.** The amount of information that we ask for might seem excessive; it is not. We handle several issues a day. We cannot solve problems efficiently if we have to keep going back and forth for the basic information that we need. - type: textarea id: controller-board attributes: From ceb77ddeca24d6d35da72642b272f4e304ad5d14 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 30 Jun 2023 09:39:00 -1000 Subject: [PATCH 060/212] Update problem.yml Added stuff about the wiki --- .github/ISSUE_TEMPLATE/problem.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/problem.yml b/.github/ISSUE_TEMPLATE/problem.yml index 69c3fc295..358d38e46 100644 --- a/.github/ISSUE_TEMPLATE/problem.yml +++ b/.github/ISSUE_TEMPLATE/problem.yml @@ -5,7 +5,19 @@ labels: ["triage"] body: - type: markdown attributes: - value: Please read http://wiki.fluidnc.com/en/support/requesting_help then fill in the forms below. The better the information you provide, the better we can help you. Information that you might think is irrelevant is often the key to solving the problem. **If we have to keep asking for information that you should have provided at the outset, we will become annoyed fairly quickly.** The amount of information that we ask for might seem excessive; it is not. We handle several issues a day. We cannot solve problems efficiently if we have to keep going back and forth for the basic information that we need. + value: | + Please search for answers on the [wiki](http://wiki.fluidnc.com) first. + If you don't find an answer, read [this](http://wiki.fluidnc.com/en/support/requesting_help) to help you fill in the forms below. The better the information you provide, the better we can help you. Information that you might think is irrelevant is often the key to solving the problem. **If we have to keep asking for information that you should have provided at the outset, we will become annoyed fairly quickly.** The amount of information that we ask for might seem excessive; it is not. We handle several issues a day. We cannot solve problems efficiently if we have to keep going back and forth for the basic information that we need. +- type: textarea + id: wiki-search + attributes: + label: Wiki Search Terms + description: | + Tell us some of the wiki search terms that you tried. This could help us improve the wiki. + placeholder: motor limit direction install configuration + validations: + required: true + - type: textarea id: controller-board attributes: From 520d902f8d5b277c4e1389c6987fc43136893b68 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 30 Jun 2023 09:40:32 -1000 Subject: [PATCH 061/212] Update problem.yml Syntax error --- .github/ISSUE_TEMPLATE/problem.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/problem.yml b/.github/ISSUE_TEMPLATE/problem.yml index 358d38e46..b2f1c68af 100644 --- a/.github/ISSUE_TEMPLATE/problem.yml +++ b/.github/ISSUE_TEMPLATE/problem.yml @@ -11,10 +11,10 @@ body: - type: textarea id: wiki-search attributes: - label: Wiki Search Terms - description: | - Tell us some of the wiki search terms that you tried. This could help us improve the wiki. - placeholder: motor limit direction install configuration + label: Wiki Search Terms + description: | + Tell us some of the wiki search terms that you tried. This could help us improve the wiki. + placeholder: motor limit direction install configuration validations: required: true From 2e02bc2916f513372545028814c8c5bf1b32b3e1 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 30 Jun 2023 09:42:34 -1000 Subject: [PATCH 062/212] Update problem.yml Syntax again --- .github/ISSUE_TEMPLATE/problem.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/problem.yml b/.github/ISSUE_TEMPLATE/problem.yml index b2f1c68af..fe85828fd 100644 --- a/.github/ISSUE_TEMPLATE/problem.yml +++ b/.github/ISSUE_TEMPLATE/problem.yml @@ -10,10 +10,10 @@ body: If you don't find an answer, read [this](http://wiki.fluidnc.com/en/support/requesting_help) to help you fill in the forms below. The better the information you provide, the better we can help you. Information that you might think is irrelevant is often the key to solving the problem. **If we have to keep asking for information that you should have provided at the outset, we will become annoyed fairly quickly.** The amount of information that we ask for might seem excessive; it is not. We handle several issues a day. We cannot solve problems efficiently if we have to keep going back and forth for the basic information that we need. - type: textarea id: wiki-search - attributes: - label: Wiki Search Terms - description: | - Tell us some of the wiki search terms that you tried. This could help us improve the wiki. + attributes: + label: Wiki Search Terms + description: | + Tell us some of the wiki search terms that you tried. This could help us improve the wiki. placeholder: motor limit direction install configuration validations: required: true From d85d5d1a7882a94b5cf5df6d425d9f4a051e72dc Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 30 Jun 2023 09:44:33 -1000 Subject: [PATCH 063/212] Update problem.yml Yet again syntax --- .github/ISSUE_TEMPLATE/problem.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/problem.yml b/.github/ISSUE_TEMPLATE/problem.yml index fe85828fd..d9b1fa604 100644 --- a/.github/ISSUE_TEMPLATE/problem.yml +++ b/.github/ISSUE_TEMPLATE/problem.yml @@ -12,9 +12,8 @@ body: id: wiki-search attributes: label: Wiki Search Terms - description: | - Tell us some of the wiki search terms that you tried. This could help us improve the wiki. - placeholder: motor limit direction install configuration + description: Tell us some of the wiki search terms that you tried. This could help us improve the wiki. + placeholder: motor limit direction install configuration validations: required: true From cadf98d4f97b5261c743bdb53ce0b750819ace69 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 29 Jun 2023 13:14:26 -1000 Subject: [PATCH 064/212] Malformed PING message confused multiple WebUIs --- FluidNC/src/WebUI/WSChannel.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index 159210bc4..48bb5db3d 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -198,7 +198,7 @@ namespace WebUI { void WSChannels::sendPing() { for (WSChannel* wsChannel : _webWsChannels) { std::string s("PING:"); - s += wsChannel->id(); + s += std::to_string(wsChannel->id()); // sendBIN would be okay too because the string contains only // ASCII characters, no UTF-8 extended characters. wsChannel->sendTXT(s); From 26f4bb18433257bfac2de6c64dbc1d6eae2d99c1 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 29 Jun 2023 13:15:44 -1000 Subject: [PATCH 065/212] Cleaned up some unused cruft in WSChannel and fixed available() --- FluidNC/src/Channel.h | 6 ++++-- FluidNC/src/WebUI/WSChannel.cpp | 3 +-- FluidNC/src/WebUI/WSChannel.h | 10 ++-------- 3 files changed, 7 insertions(+), 12 deletions(-) diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index 116377ef6..47b53cc6d 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -63,7 +63,9 @@ class Channel : public Stream { // a reception buffer, even if the system is busy. Channels that can handle external // input via an interrupt or other background mechanism should override it to return // the remaining space that mechanism has available. - virtual int rx_buffer_available() { return 0; }; + // The queue can handle more than 256 characters but we don't want it to get too + // large, so we report a limited size. + virtual int rx_buffer_available() { return std::max(0, 256 - int(_queue.size())); } // flushRx() discards any characters that have already been received. It is used // after a reset, so that anything already sent will not be processed. @@ -100,7 +102,7 @@ class Channel : public Stream { int peek() override { return -1; } int read() override { return -1; } - int available() override { return 0; } + int available() override { return _queue.size(); } uint32_t setReportInterval(uint32_t ms); uint32_t getReportInterval() { return _reportInterval; } diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index 48bb5db3d..09419698c 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -13,8 +13,7 @@ namespace WebUI { class WSChannels; - WSChannel::WSChannel(WebSocketsServer* server, uint8_t clientNum) : - Channel("websocket"), _server(server), _clientNum(clientNum), _RXbufferSize(0), _RXbufferpos(0) {} + WSChannel::WSChannel(WebSocketsServer* server, uint8_t clientNum) : Channel("websocket"), _server(server), _clientNum(clientNum) {} int WSChannel::read() { if (_dead) { diff --git a/FluidNC/src/WebUI/WSChannel.h b/FluidNC/src/WebUI/WSChannel.h index 69bd3bdab..3b163f348 100644 --- a/FluidNC/src/WebUI/WSChannel.h +++ b/FluidNC/src/WebUI/WSChannel.h @@ -29,8 +29,6 @@ namespace WebUI { namespace WebUI { class WSChannel : public Channel { - static const int RXBUFFERSIZE = 256; - public: WSChannel(WebSocketsServer* server, uint8_t clientNum); @@ -53,14 +51,14 @@ namespace WebUI { int id() { return _clientNum; } - int rx_buffer_available() override { return RXBUFFERSIZE - available(); } + int rx_buffer_available() override { return std::max(0, 256 - int(_queue.size())); } operator bool() const; ~WSChannel(); int read() override; - int available() override { return _rtchar == -1 ? 0 : 1; } + int available() override { return _queue.size() + (_rtchar > -1); } private: bool _dead = false; @@ -68,10 +66,6 @@ namespace WebUI { WebSocketsServer* _server; uint8_t _clientNum; - uint8_t _RXbuffer[RXBUFFERSIZE]; - uint16_t _RXbufferSize; - uint16_t _RXbufferpos; - std::string _output_line; // Instead of queueing realtime characters, we put them here From d095a95e1f4d2a8626b79dbbe70d68d6ac4276d8 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 30 Jun 2023 08:12:10 -1000 Subject: [PATCH 066/212] WiFi buffer counts are no longer hardcoded in the WiFi library --- FluidNC/src/WebUI/WifiConfig.cpp | 11 +++++++++++ platformio.ini | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index e4992bbf1..cd64e171e 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -589,7 +589,18 @@ namespace WebUI { if ((WiFi.getMode() == WIFI_AP) || (WiFi.getMode() == WIFI_AP_STA)) { WiFi.softAPdisconnect(); } + WiFi.enableAP(false); + + // Set the number of receive and transmit buffers that the + // WiFi stack can use. Making these numbers too large + // can eat up a lot of memory at 1.6K per buffer. It + // can be especially bad when there are many dynamic buffers, + // allowing external network traffic to use a lot of the heap. + // The bawin parameters are for AMPDU aggregation. + // rx: static dynamic bawin tx: static dynamic bawin cache + WiFi.setBuffers(4, 2, 0, 4, 0, 0, 4); + //SSID const char* SSID = wifi_sta_ssid->get(); if (strlen(SSID) == 0) { diff --git a/platformio.ini b/platformio.ini index 5e1518bc6..ddd269efe 100644 --- a/platformio.ini +++ b/platformio.ini @@ -34,7 +34,7 @@ bt_deps = BluetoothSerial wifi_deps = arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#canSend - WiFi=https://github.com/MitchBradley/WiFi#d412cd7 + WiFi=https://github.com/MitchBradley/WiFi#52da841 ; If we include the following explicit dependencies when we get the ; Arduino framework code from github, platformio picks up different ; and incompatible versions of these libraries from who knows where, From 7e306cb5f2d02db7340db0444dd069b0cc04541c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 2 Jul 2023 14:51:11 -1000 Subject: [PATCH 067/212] Fix tokenizer bug with space-only lines --- FluidNC/src/Configuration/Tokenizer.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Configuration/Tokenizer.cpp b/FluidNC/src/Configuration/Tokenizer.cpp index beabdd251..5a07efe22 100644 --- a/FluidNC/src/Configuration/Tokenizer.cpp +++ b/FluidNC/src/Configuration/Tokenizer.cpp @@ -77,10 +77,11 @@ namespace Configuration { // Remove indentation and record the level _token._indent = _line.find_first_not_of(' '); - _line.remove_prefix(_token._indent); - if (_line.empty()) { + if (_token._indent == std::string_view::npos) { + // Line containing only spaces continue; } + _line.remove_prefix(_token._indent); // Disallow inital tabs if (_line.front() == '\t') { From fbdadece361d1452ee7b9b1d28aa7cd229fa0347 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 3 Jul 2023 18:29:04 -1000 Subject: [PATCH 068/212] Update problem.yml --- .github/ISSUE_TEMPLATE/problem.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/ISSUE_TEMPLATE/problem.yml b/.github/ISSUE_TEMPLATE/problem.yml index d9b1fa604..40763448d 100644 --- a/.github/ISSUE_TEMPLATE/problem.yml +++ b/.github/ISSUE_TEMPLATE/problem.yml @@ -91,6 +91,12 @@ body: placeholder: I did something, expected this, and that happened validations: required: true +- type: textarea + id: gcode-file + attributes: + label: GCode File + description: If the problem occurs when running a GCode file, attach it here (with a .txt extension), or paste it if it is short. If you can find a short file that exhibits the problem, it will be easier for us to debug. + placeholder: Paste or attach GCode here - type: textarea id: other-info attributes: From 5b93469f1cc69616939e0d100b33216421d02a1a Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 3 Jul 2023 18:56:10 -1000 Subject: [PATCH 069/212] Fixed tokenizer bug --- FluidNC/src/Configuration/Tokenizer.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/FluidNC/src/Configuration/Tokenizer.cpp b/FluidNC/src/Configuration/Tokenizer.cpp index 5a07efe22..e4fc658df 100644 --- a/FluidNC/src/Configuration/Tokenizer.cpp +++ b/FluidNC/src/Configuration/Tokenizer.cpp @@ -79,6 +79,7 @@ namespace Configuration { _token._indent = _line.find_first_not_of(' '); if (_token._indent == std::string_view::npos) { // Line containing only spaces + _line.remove_prefix(_line.size()); continue; } _line.remove_prefix(_token._indent); From 9da58e983ee575069795025b2d95dcc4f46a6e56 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 3 Jul 2023 15:01:13 -1000 Subject: [PATCH 070/212] Release bluetooth memory when BT is disabled --- FluidNC/src/Main.cpp | 6 ++++-- FluidNC/src/WebUI/BTConfig.cpp | 24 ++++++++++++++++-------- FluidNC/src/WebUI/BTConfig.h | 2 ++ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index 1462e3c95..0b7600c52 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -146,9 +146,11 @@ void setup() { sys.state = State::ConfigAlarm; } - if (!WebUI::wifi_config.begin()) { - WebUI::bt_config.begin(); + // Try Bluetooth first so its memory can be released if it is disabled + if (!WebUI::bt_config.begin()) { + WebUI::wifi_config.begin(); } + allChannels.deregistration(&startupLog); } diff --git a/FluidNC/src/WebUI/BTConfig.cpp b/FluidNC/src/WebUI/BTConfig.cpp index 25a7a6737..9443c8ada 100644 --- a/FluidNC/src/WebUI/BTConfig.cpp +++ b/FluidNC/src/WebUI/BTConfig.cpp @@ -10,6 +10,9 @@ # include "Commands.h" // COMMANDS # include "WebSettings.h" +# include "esp_bt.h" +# include "esp_bt_main.h" + # include // SerialBT sends the data over Bluetooth @@ -148,6 +151,13 @@ namespace WebUI { return Channel::pollLine(line); } + void BTConfig::releaseMem() { + log_debug("Releasing Bluetooth memory"); + esp_bt_mem_release(ESP_BT_MODE_CLASSIC_BT); + esp_bt_mem_release(ESP_BT_MODE_BLE); + log_debug("Heap: " << xPortGetFreeHeapSize()); + } + /** * begin WiFi setup */ @@ -158,25 +168,23 @@ namespace WebUI { //stop active services end(); - if (!bt_enable->get()) { - log_info("Bluetooth not enabled"); - return false; - } - + log_debug("Heap: " << xPortGetFreeHeapSize()); _btname = bt_name->getStringValue(); - - if (_btname.length()) { + if (bt_enable->get() && _btname.length()) { + esp_bt_mem_release(ESP_BT_MODE_BLE); + log_debug("Heap: " << xPortGetFreeHeapSize()); if (!SerialBT.begin(_btname.c_str())) { log_error("Bluetooth failed to start"); return false; } + SerialBT.register_callback(&my_spp_cb); log_info("BT Started with " << _btname); allChannels.registration(&btChannel); return true; } + releaseMem(); log_info("BT is not enabled"); - end(); return false; } diff --git a/FluidNC/src/WebUI/BTConfig.h b/FluidNC/src/WebUI/BTConfig.h index 3e030472e..125231c83 100644 --- a/FluidNC/src/WebUI/BTConfig.h +++ b/FluidNC/src/WebUI/BTConfig.h @@ -13,6 +13,7 @@ namespace WebUI { static bool begin() { return false; }; static void end() {}; static void handle() {} + static void releaseMem() {} static bool isOn() { return false; } }; extern BTConfig bt_config; @@ -85,6 +86,7 @@ namespace WebUI { void handle(); void reset_settings(); bool isOn() const; + void releaseMem(); ~BTConfig(); }; From 98c776c8925018386bf100be7de553cfb41378f0 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 4 Jul 2023 10:50:54 -1000 Subject: [PATCH 071/212] Update problem.yml --- .github/ISSUE_TEMPLATE/problem.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/ISSUE_TEMPLATE/problem.yml b/.github/ISSUE_TEMPLATE/problem.yml index 40763448d..aaa8c0081 100644 --- a/.github/ISSUE_TEMPLATE/problem.yml +++ b/.github/ISSUE_TEMPLATE/problem.yml @@ -72,7 +72,7 @@ body: Paste the startup messages here. You can see them by sending "$ss" from FluidTerm, WebUI Console, or any sender's console. Look through the messages for any MSG:ERR or MSG:WARN lines. They indicate problems in your config file. You might be able to solve the problem yourself. **Do not excerpt just the messages you think are revelant. - We need to see everything.** + We need to see everything.** [More info about startup messages](http://wiki.fluidnc.com/en/support/requesting_help#fluidnc-startup-messages) placeholder: render: text validations: From 6f6a62d7d1ce15adda9efe869103f7d02b1b3d8e Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 5 Jul 2023 10:51:12 -1000 Subject: [PATCH 072/212] Fix #955 - safety door open at startup problem --- FluidNC/src/Protocol.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 96431ef49..aaf38bb15 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -243,19 +243,12 @@ static void check_startup_state() { } if (config->_control->startup_check()) { rtAlarm = ExecAlarm::ControlPin; - } - - if (sys.state == State::Alarm || sys.state == State::Sleep) { + } else if (sys.state == State::Alarm || sys.state == State::Sleep) { report_feedback_message(Message::AlarmLock); sys.state = State::Alarm; // Ensure alarm state is set. } else { - // Check if the safety door is open. - sys.state = State::Idle; - while (config->_control->safety_door_ajar()) { - request_safety_door(); - protocol_execute_realtime(); // Enter safety door mode. Should return as IDLE state. - } // All systems go! + sys.state = State::Idle; settings_execute_startup(); // Execute startup script. } } From 19ed9a2380879cca6d411e2da727ae68205b87d7 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 5 Jul 2023 10:52:25 -1000 Subject: [PATCH 073/212] Fix #953 - inappropriate planner syncs in laser mode --- FluidNC/src/GCode.cpp | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/FluidNC/src/GCode.cpp b/FluidNC/src/GCode.cpp index 942947104..9e35618f2 100644 --- a/FluidNC/src/GCode.cpp +++ b/FluidNC/src/GCode.cpp @@ -1366,16 +1366,11 @@ Error gc_execute_line(char* line) { if (!blockIsFeedrateMotion) { // If the new mode is not a feedrate move (G1/2/3) we want the laser off disableLaser = true; - // If we are changing from a feedrate move to a non-feedrate move, - // we must sync the planner and then update the laser state - if (stateIsFeedrateMotion) { - syncLaser = true; - } } // Any motion mode with axis words is allowed to be passed from a spindle speed update. // NOTE: G1 and G0 without axis words sets axis_command to none. G28/30 are intentionally omitted. // TODO: Check sync conditions for M3 enabled motions that don't enter the planner. (zero length). - if (blockIsFeedrateMotion && axis_words && (axis_command == AxisCommand::MotionMode)) { + if (axis_words && (axis_command == AxisCommand::MotionMode)) { laserIsMotion = true; } else { // M3 constant power laser requires planner syncs to update the laser when changing between @@ -1410,14 +1405,10 @@ Error gc_execute_line(char* line) { pl_data->feed_rate = gc_state.feed_rate; // Record data for planner use. // [4. Set spindle speed ]: if ((gc_state.spindle_speed != gc_block.values.s) || syncLaser) { - if (gc_state.modal.spindle != SpindleState::Disable) { - if (!laserIsMotion) { - if (sys.state != State::CheckMode) { - protocol_buffer_synchronize(); - spindle->setState(gc_state.modal.spindle, disableLaser ? 0 : (uint32_t)gc_block.values.s); - report_ovr_counter = 0; // Set to report change immediately - } - } + if (gc_state.modal.spindle != SpindleState::Disable && !laserIsMotion && sys.state != State::CheckMode) { + protocol_buffer_synchronize(); + spindle->setState(gc_state.modal.spindle, disableLaser ? 0 : (uint32_t)gc_block.values.s); + report_ovr_counter = 0; // Set to report change immediately } gc_state.spindle_speed = gc_block.values.s; // Update spindle speed state. } From a61b244eccde61d04b4a353118d918fc9d88bdc9 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 7 Jul 2023 19:37:38 -1000 Subject: [PATCH 074/212] Fixed upload file due to too few rx buffers --- FluidNC/src/WebUI/WifiConfig.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index cd64e171e..1c54e28f0 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -596,10 +596,13 @@ namespace WebUI { // WiFi stack can use. Making these numbers too large // can eat up a lot of memory at 1.6K per buffer. It // can be especially bad when there are many dynamic buffers, + // If there are too few Rx buffers, file upload can fail, + // possibly due to IP packet fragments getting lost. The limit + // for what works seems to be 4 static, 4 dynamic. // allowing external network traffic to use a lot of the heap. // The bawin parameters are for AMPDU aggregation. // rx: static dynamic bawin tx: static dynamic bawin cache - WiFi.setBuffers(4, 2, 0, 4, 0, 0, 4); + WiFi.setBuffers(4, 5, 0, 4, 0, 0, 4); //SSID const char* SSID = wifi_sta_ssid->get(); From 0ede37e9577bf7e4b2cc64591310bfd81b24601a Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 9 Jul 2023 18:13:10 -1000 Subject: [PATCH 075/212] Fixed crash after upload due to use of deleted object --- FluidNC/src/WebUI/WebServer.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index e19b21961..10c28df30 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -1051,9 +1051,13 @@ namespace WebUI { // delete _uploadFile; // _uploadFile = nullptr; - std::filesystem::path filepath = _uploadFile->fpath(); + std::string pathname = _uploadFile->fpath(); delete _uploadFile; _uploadFile = nullptr; + log_debug("pathname " << pathname); + + FluidPath filepath { pathname, "" }; + HashFS::rehash_file(filepath); // Check size From 5ec965984903cb94ea29b9da2a92aa05be84c517 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 9 Jul 2023 18:14:06 -1000 Subject: [PATCH 076/212] Added $localfs/rename and $sd/rename=oldname>newname --- FluidNC/src/Error.cpp | 1 + FluidNC/src/Error.h | 1 + FluidNC/src/WebUI/WebSettings.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/FluidNC/src/Error.cpp b/FluidNC/src/Error.cpp index ed590ab0e..7722f3d2c 100644 --- a/FluidNC/src/Error.cpp +++ b/FluidNC/src/Error.cpp @@ -57,6 +57,7 @@ std::map ErrorNames = { { Error::FsFailedBusy, "Device is busy" }, { Error::FsFailedDelDir, "Failed to delete directory" }, { Error::FsFailedDelFile, "Failed to delete file" }, + { Error::FsFailedRenameFile, "Failed to rename file" }, { Error::FsFailedCreateFile, "Failed to create file" }, { Error::FsFailedFormat, "Failed to format filesystem" }, { Error::NumberRange, "Number out of range for setting" }, diff --git a/FluidNC/src/Error.h b/FluidNC/src/Error.h index afa12da81..a8387b25e 100644 --- a/FluidNC/src/Error.h +++ b/FluidNC/src/Error.h @@ -61,6 +61,7 @@ enum class Error : uint8_t { FsFailedBusy = 67, // Filesystem is busy FsFailedDelDir = 68, FsFailedDelFile = 69, + FsFailedRenameFile = 70, NumberRange = 80, // Setting number range problem InvalidValue = 81, // Setting string problem FsFailedCreateFile = 82, diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index 504b8b917..6cdcc194d 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -434,6 +434,30 @@ namespace WebUI { return listFilesystem(localfsName, parameter, auth_level, out); } + static Error renameObject(const char* fs, char* parameter, AuthenticationLevel auth_level, Channel& out) { + auto opath = strchr(parameter, '>'); + if (*opath == '\0') { + return Error::InvalidValue; + } + const char* ipath = parameter; + *opath++ = '\0'; + try { + FluidPath inPath { ipath, fs }; + FluidPath outPath { opath, fs }; + std::filesystem::rename(inPath, outPath); + } catch (const Error err) { + log_error_to(out, "Cannot rename " << ipath << " to " << opath); + return Error::FsFailedRenameFile; + } + return Error::Ok; + } + static Error renameSDObject(char* parameter, AuthenticationLevel auth_level, Channel& out) { + return renameObject(sdName, parameter, auth_level, out); + } + static Error renameLocalObject(char* parameter, AuthenticationLevel auth_level, Channel& out) { + return renameObject(localfsName, parameter, auth_level, out); + } + static Error copyFile(const char* ipath, const char* opath, Channel& out) { // No ESP command std::filesystem::path filepath; try { @@ -653,6 +677,7 @@ namespace WebUI { new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/ListJSON", listLocalFilesJSON); #endif new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Delete", deleteLocalFile); + new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Rename", renameLocalObject); new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Backup", backupLocalFS); new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Restore", restoreLocalFS); new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Migrate", migrateLocalFS); @@ -661,6 +686,7 @@ namespace WebUI { new WebCommand("path", WEBCMD, WU, "ESP221", "SD/Show", showSDFile); new WebCommand("path", WEBCMD, WU, "ESP220", "SD/Run", runSDFile); new WebCommand("file_or_directory_path", WEBCMD, WU, "ESP215", "SD/Delete", deleteSDObject); + new WebCommand("path", WEBCMD, WU, NULL, "SD/Rename", renameSDObject); new WebCommand(NULL, WEBCMD, WU, "ESP210", "SD/List", listSDFiles); new WebCommand(NULL, WEBCMD, WU, "ESP200", "SD/Status", showSDStatus); From b18fab16550a45a8646ab2653c2752eace20edb0 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 9 Jul 2023 18:16:48 -1000 Subject: [PATCH 077/212] Do not auto-report G0/G1 changes in motion mode ... because it can happen too frequently with, for example, lasers --- FluidNC/src/Channel.cpp | 20 +++++++++++++++----- FluidNC/src/Channel.h | 8 ++++---- 2 files changed, 19 insertions(+), 9 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index fe48040d0..28d033d72 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -75,9 +75,23 @@ uint32_t Channel::setReportInterval(uint32_t ms) { _lastTool = 255; // Force GCodeState report return actual; } +static bool motionState() { + return sys.state == State::Cycle || sys.state == State::Homing || sys.state == State::Jog; +} + void Channel::autoReportGCodeState() { + // When moving, we suppress $G reports in which the only change is the motion mode + // (e.g. G0/G1/G2/G3 changes) because rapid-fire motion mode changes are fairly common. + // We would rather not issue a $G report after every GCode line. + // Similarly, F and S values can change rapidly, especially in laser programs. + // F and S values are also reported in ? status reports, so they will show up + // at the chosen periodic rate there. + if (motionState()) { + // Force the compare to succeed if the only change is the motion mode + _lastModal.motion = gc_state.modal.motion; + } if (memcmp(&_lastModal, &gc_state.modal, sizeof(_lastModal)) || _lastTool != gc_state.tool || - _lastSpindleSpeed != gc_state.spindle_speed || _lastFeedRate != gc_state.feed_rate) { + (!motionState() && (_lastSpindleSpeed != gc_state.spindle_speed || _lastFeedRate != gc_state.feed_rate))) { report_gcode_modes(*this); memcpy(&_lastModal, &gc_state.modal, sizeof(_lastModal)); _lastTool = gc_state.tool; @@ -85,10 +99,6 @@ void Channel::autoReportGCodeState() { _lastFeedRate = gc_state.feed_rate; } } -static bool motionState() { - return sys.state == State::Cycle || sys.state == State::Homing || sys.state == State::Jog; -} - void Channel::autoReport() { if (_reportInterval) { auto limitState = limits_get_state(); diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index 47b53cc6d..9ba892d38 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -104,8 +104,8 @@ class Channel : public Stream { int read() override { return -1; } int available() override { return _queue.size(); } - uint32_t setReportInterval(uint32_t ms); - uint32_t getReportInterval() { return _reportInterval; } - void autoReport(); - void autoReportGCodeState(); + uint32_t setReportInterval(uint32_t ms); + uint32_t getReportInterval() { return _reportInterval; } + virtual void autoReport(); + void autoReportGCodeState(); }; From 53e3dff9d2c12f04aa91d398d878bd86ba58c16c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 9 Jul 2023 18:18:15 -1000 Subject: [PATCH 078/212] Suppress autoreports to jammed websocket at a higher level Doing so leaves the last report info set at the last report that was actually sent, so when the websocket is clear, the next report will be sent more reliably. --- FluidNC/src/WebUI/WSChannel.cpp | 7 +++++++ FluidNC/src/WebUI/WSChannel.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index 09419698c..ec7aee8c7 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -107,6 +107,13 @@ namespace WebUI { return true; } + void WSChannel::autoReport() { + int stat = _server->canSend(_clientNum); + if (stat > 0) { + Channel::autoReport(); + } + } + WSChannel::~WSChannel() {} std::map WSChannels::_wsChannels; diff --git a/FluidNC/src/WebUI/WSChannel.h b/FluidNC/src/WebUI/WSChannel.h index 3b163f348..01ee9ece7 100644 --- a/FluidNC/src/WebUI/WSChannel.h +++ b/FluidNC/src/WebUI/WSChannel.h @@ -60,6 +60,8 @@ namespace WebUI { int read() override; int available() override { return _queue.size() + (_rtchar > -1); } + void autoReport() override; + private: bool _dead = false; From 78d3ab43a6f788670ec93c66c1ebdcfb2e27e116 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 9 Jul 2023 18:21:07 -1000 Subject: [PATCH 079/212] Expose ticks_per_us to outside code. --- FluidNC/include/Driver/delay_usecs.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FluidNC/include/Driver/delay_usecs.h b/FluidNC/include/Driver/delay_usecs.h index 072713ae6..b5d24dd76 100644 --- a/FluidNC/include/Driver/delay_usecs.h +++ b/FluidNC/include/Driver/delay_usecs.h @@ -1,5 +1,7 @@ #include +extern uint32_t ticks_per_us; + void timing_init(); void spinUntil(int32_t endTicks); void delay_us(int32_t us); From 328bf390b3c94531f0ff2c7b418301f050f7e971 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 10 Jul 2023 11:59:08 -1000 Subject: [PATCH 080/212] File rename function in HTTP --- FluidNC/src/WebUI/WebServer.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 10c28df30..966a017b6 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -943,6 +943,19 @@ namespace WebUI { sstatus = "Cannot create "; sstatus += filename + " " + ec.message(); } + } else if (action == "rename") { + if (!_webserver->hasArg("newname")) { + sstatus = "Missing new filename"; + } else { + std::string newname = std::string(_webserver->arg("newname").c_str()); + std::filesystem::rename(fpath / filename, fpath / newname, ec); + if (ec) { + sstatus = "Cannot rename "; + sstatus += filename + " " + ec.message(); + } else { + sstatus = filename + " renamed to " + newname; + } + } } } From 6fb359a0869ea91a386767545e1d3f45399f0761 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 10 Jul 2023 12:00:19 -1000 Subject: [PATCH 081/212] WebUI with file rename --- FluidNC/data/index.html.gz | Bin 116243 -> 116668 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index 9e405e166bc63417c0c24574f4c402626a49d4c4..38e0e29e02005c6a135aaa658ba05a22475d7f5f 100644 GIT binary patch delta 111019 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�FXOdtexNexy+2)(#SjWfZrOJ-W$`* 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 J3cNu@2mmf-nxOyy delta 110559 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 TB>yg_Nj?2~b!Pctl!}8s3vz%g&kJ?2Z*t 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

    &^emo@5ITg$nb6dh8qRW1YH>_xjpZtX5Su`u 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 ICmKHp08v(#djJ3c From a3c91b0a09b1fd9af7269093a0eb1d2a6cf7b35b Mon Sep 17 00:00:00 2001 From: Joacim Breiler Date: Thu, 13 Jul 2023 18:58:27 +0200 Subject: [PATCH 082/212] Add webapp to release files --- build-release.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/build-release.py b/build-release.py index 6d2a18391..1bf211723 100644 --- a/build-release.py +++ b/build-release.py @@ -78,6 +78,11 @@ def copyToZip(zipObj, platform, fileName, destPath, mode=0o100755): os.makedirs(manifestRelPath) +# Copy the web application to the release directory +dataRelPath = os.path.join(manifestRelPath, 'data') +os.makedirs(dataRelPath) +shutil.copy(os.path.join("FluidNC", "data", "index.html.gz"), dataRelPath) + manifest = { "name": "FluidNC", "version": tag, From e0a0a4b3128d2d46f20b5fa0f9d4db9b2040367c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 13 Jul 2023 07:50:23 -1000 Subject: [PATCH 083/212] Fix the problems caused by #950 This is probably not the best way to fix it, since it uses a GCC-specific feature, vut it works for now. --- FluidNC/src/Settings.cpp | 8 ++++---- FluidNC/src/WebUI/BTConfig.cpp | 2 +- FluidNC/src/WebUI/NotificationsService.cpp | 2 +- FluidNC/src/WebUI/TelnetServer.cpp | 2 +- FluidNC/src/WebUI/WebServer.cpp | 2 +- FluidNC/src/WebUI/WifiConfig.cpp | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/FluidNC/src/Settings.cpp b/FluidNC/src/Settings.cpp index 90ab44e1f..d5ff38135 100644 --- a/FluidNC/src/Settings.cpp +++ b/FluidNC/src/Settings.cpp @@ -12,8 +12,8 @@ #include #include -std::vector Setting::List = {}; -std::vector Command::List = {}; +std::vector Setting::List __attribute__((init_priority(101))) = {}; +std::vector Command::List __attribute__((init_priority(102))) = {}; bool anyState() { return false; @@ -35,14 +35,14 @@ Command::Command( const char* description, type_t type, permissions_t permissions, const char* grblName, const char* fullName, bool (*cmdChecker)()) : Word(type, permissions, description, grblName, fullName), _cmdChecker(cmdChecker) { - List.push_back(this); + List.insert(List.begin(), this); } Setting::Setting( const char* description, type_t type, permissions_t permissions, const char* grblName, const char* fullName, bool (*checker)(char*)) : Word(type, permissions, description, grblName, fullName), _checker(checker) { - List.push_back(this); + List.insert(List.begin(), this); // NVS keys are limited to 15 characters, so if the setting name is longer // than that, we derive a 15-character name from a hash function diff --git a/FluidNC/src/WebUI/BTConfig.cpp b/FluidNC/src/WebUI/BTConfig.cpp index 9443c8ada..fdcecb12d 100644 --- a/FluidNC/src/WebUI/BTConfig.cpp +++ b/FluidNC/src/WebUI/BTConfig.cpp @@ -17,7 +17,7 @@ // SerialBT sends the data over Bluetooth namespace WebUI { - BTConfig bt_config; + BTConfig bt_config __attribute__((init_priority(105))) ; BluetoothSerial SerialBT; BTChannel btChannel; } diff --git a/FluidNC/src/WebUI/NotificationsService.cpp b/FluidNC/src/WebUI/NotificationsService.cpp index cdf2dfddd..f03281553 100644 --- a/FluidNC/src/WebUI/NotificationsService.cpp +++ b/FluidNC/src/WebUI/NotificationsService.cpp @@ -15,7 +15,7 @@ #include "NotificationsService.h" namespace WebUI { - NotificationsService notificationsService; + NotificationsService notificationsService __attribute__((init_priority(106))) ; } #ifdef ENABLE_WIFI diff --git a/FluidNC/src/WebUI/TelnetServer.cpp b/FluidNC/src/WebUI/TelnetServer.cpp index 213f3b33e..f8329f9a2 100644 --- a/FluidNC/src/WebUI/TelnetServer.cpp +++ b/FluidNC/src/WebUI/TelnetServer.cpp @@ -9,7 +9,7 @@ #ifdef ENABLE_WIFI namespace WebUI { - TelnetServer telnetServer; + TelnetServer telnetServer __attribute__((init_priority(107))) ; } # include "WifiServices.h" diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 966a017b6..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; + Web_Server webServer __attribute__((init_priority(108))) ; bool Web_Server::_setupdone = false; uint16_t Web_Server::_port = 0; diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index de9454f4c..6798fc4f2 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -8,7 +8,7 @@ #include #include -WebUI::WiFiConfig wifi_config; +WebUI::WiFiConfig wifi_config __attribute__((init_priority(109))) ; #ifdef ENABLE_WIFI # include "../Config.h" From b2899c4aa15cb53823dc96ae58876c981e8c24c7 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 16 Jul 2023 14:00:22 -1000 Subject: [PATCH 084/212] Fixed speed_map parsing and display Parsing problem reported on Discord by @kalevik Display problems can be seen with e.g. $/pwm and $/pwm/speed_map --- FluidNC/src/Configuration/Generator.h | 14 ++++++-------- FluidNC/src/Configuration/Parser.cpp | 2 ++ FluidNC/src/Configuration/RuntimeSetting.cpp | 7 ++++++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/FluidNC/src/Configuration/Generator.h b/FluidNC/src/Configuration/Generator.h index f59c39c62..0cbb9c09f 100644 --- a/FluidNC/src/Configuration/Generator.h +++ b/FluidNC/src/Configuration/Generator.h @@ -4,6 +4,7 @@ #pragma once #include +#include #include "../Pin.h" #include "../Report.h" // report_gcode_modes() @@ -53,21 +54,18 @@ namespace Configuration { void item(const char* name, float& value, float minValue, float maxValue) override { send_item(name, std::to_string(value)); } void item(const char* name, std::vector& value) { - std::string s; if (value.size() == 0) { - s += "None"; + send_item(name, "None"); } else { + std::ostringstream s; + s.precision(2); const char* separator = ""; for (speedEntry n : value) { - s += separator; + s << separator << n.speed << "=" << std::fixed << n.percent << "%"; separator = " "; - s += std::to_string(n.speed); - s += '='; - s += std::to_string(n.percent); - s += '%'; } + send_item(name, s.str()); } - send_item(name, s); } void item(const char* name, UartData& wordLength, UartParity& parity, UartStop& stopBits) override { diff --git a/FluidNC/src/Configuration/Parser.cpp b/FluidNC/src/Configuration/Parser.cpp index c2c0bbdbf..635d726e0 100644 --- a/FluidNC/src/Configuration/Parser.cpp +++ b/FluidNC/src/Configuration/Parser.cpp @@ -121,6 +121,8 @@ namespace Configuration { return {}; } entry_str.remove_prefix(next_pct_delim + 1); + + speed_entries.push_back(entry); } if (!speed_entries.size()) { diff --git a/FluidNC/src/Configuration/RuntimeSetting.cpp b/FluidNC/src/Configuration/RuntimeSetting.cpp index bfd80c17d..53cd96f6b 100644 --- a/FluidNC/src/Configuration/RuntimeSetting.cpp +++ b/FluidNC/src/Configuration/RuntimeSetting.cpp @@ -167,9 +167,14 @@ namespace Configuration { if (value.size() == 0) { log_to(out_, "None"); } else { + LogStream msg(out_, ""); + msg << setting_prefix(); + const char* separator = ""; for (speedEntry n : value) { - log_to(out_, "", n.speed << "=" << n.percent << "%") + msg << separator << n.speed << "=" << setprecision(2) << n.percent << "%"; + separator = " "; } + // The destructor sends the line when msg goes out of scope } } else { // It is distasteful to have this code that essentially duplicates From f8a6bd447d327b305ddb8650b20e69590956d43f Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 16 Jul 2023 14:01:22 -1000 Subject: [PATCH 085/212] Added shared_fault_pin for stopping on driver faults/stalls --- FluidNC/src/Machine/Axes.cpp | 7 +++++++ FluidNC/src/Machine/Axes.h | 9 +++++++-- FluidNC/src/Machine/FaultPin.cpp | 9 +++++++++ FluidNC/src/Machine/FaultPin.h | 10 ++++++++++ FluidNC/src/ProcessSettings.cpp | 10 +++------- FluidNC/src/Protocol.cpp | 22 ++++++++++++++++++++-- FluidNC/src/Protocol.h | 4 ++++ FluidNC/src/Report.cpp | 3 +-- 8 files changed, 61 insertions(+), 13 deletions(-) create mode 100644 FluidNC/src/Machine/FaultPin.cpp create mode 100644 FluidNC/src/Machine/FaultPin.h diff --git a/FluidNC/src/Machine/Axes.cpp b/FluidNC/src/Machine/Axes.cpp index 4e94efd7b..274122f90 100644 --- a/FluidNC/src/Machine/Axes.cpp +++ b/FluidNC/src/Machine/Axes.cpp @@ -37,6 +37,12 @@ namespace Machine { _sharedStepperReset.report("Shared stepper reset"); } + if (_sharedFaultPin.defined()) { + _faultPin = new FaultPin(_sharedFaultPin); + _faultPin->init(); + } + + // certain motors need features to be turned on. Check them here for (size_t axis = X_AXIS; axis < _numberAxis; axis++) { auto a = _axis[axis]; @@ -189,6 +195,7 @@ namespace Machine { void Axes::group(Configuration::HandlerBase& handler) { handler.item("shared_stepper_disable_pin", _sharedStepperDisable); handler.item("shared_stepper_reset_pin", _sharedStepperReset); + handler.item("shared_fault_pin", _sharedFaultPin); // Handle axis names xyzabc. handler.section is inferred // from a template. diff --git a/FluidNC/src/Machine/Axes.h b/FluidNC/src/Machine/Axes.h index dfbd7005f..fa723a516 100644 --- a/FluidNC/src/Machine/Axes.h +++ b/FluidNC/src/Machine/Axes.h @@ -7,6 +7,7 @@ #include "../Configuration/Configurable.h" #include "Axis.h" #include "../EnumItem.h" +#include "src/Machine/FaultPin.h" namespace MotorDrivers { class MotorDriver; @@ -16,6 +17,8 @@ namespace Machine { class Axes : public Configuration::Configurable { bool _switchedStepper = false; + Pin _sharedFaultPin; + public: static constexpr const char* _names = "XYZABC"; @@ -28,14 +31,16 @@ namespace Machine { static MotorMask limitMask; static MotorMask motorMask; + Pin _sharedStepperDisable; + Pin _sharedStepperReset; + inline char axisName(int index) { return index < MAX_N_AXIS ? _names[index] : '?'; } // returns axis letter static inline size_t motor_bit(size_t axis, size_t motor) { return motor ? axis + 16 : axis; } static inline AxisMask motors_to_axes(MotorMask motors) { return (motors & 0xffff) | (motors >> 16); } static inline MotorMask axes_to_motors(AxisMask axes) { return axes | (axes << 16); } - Pin _sharedStepperDisable; - Pin _sharedStepperReset; + FaultPin* _faultPin = nullptr; int _numberAxis = 0; Axis* _axis[MAX_N_AXIS]; diff --git a/FluidNC/src/Machine/FaultPin.cpp b/FluidNC/src/Machine/FaultPin.cpp new file mode 100644 index 000000000..e49f3d6aa --- /dev/null +++ b/FluidNC/src/Machine/FaultPin.cpp @@ -0,0 +1,9 @@ +#include "src/Machine/FaultPin.h" +#include "src/Machine/MachineConfig.h" // config + +#include "src/MotionControl.h" // mc_reset +#include "src/Protocol.h" // protocol_send_event_from_ISR() + +namespace Machine { + FaultPin::FaultPin(Pin& pin) : EventPin(&faultPinEvent, "Fault", &pin) {} +} diff --git a/FluidNC/src/Machine/FaultPin.h b/FluidNC/src/Machine/FaultPin.h new file mode 100644 index 000000000..cad5ab239 --- /dev/null +++ b/FluidNC/src/Machine/FaultPin.h @@ -0,0 +1,10 @@ +#pragma once + +#include "EventPin.h" + +namespace Machine { + class FaultPin : public EventPin { + public: + FaultPin(Pin& pin); + }; +} diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index bec35c012..d189e38ee 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -409,7 +409,7 @@ static Error show_limits(const char* value, WebUI::AuthenticationLevel auth_leve log_to(out, "Send ! to exit"); log_to(out, "Homing Axes : ", limit_set(Machine::Axes::homingMask)); log_to(out, "Limit Axes : ", limit_set(Machine::Axes::limitMask)); - log_to(out, " PosLimitPins NegLimitPins Probe"); + log_to(out, " PosLimitPins NegLimitPins Probe Fault"); const TickType_t interval = 500; TickType_t limit = xTaskGetTickCount(); @@ -420,7 +420,8 @@ static Error show_limits(const char* value, WebUI::AuthenticationLevel auth_leve log_to(out, ": ", limit_set(Machine::Axes::posLimitMask) - << " " << limit_set(Machine::Axes::negLimitMask) << (config->_probe->get_state() ? " P" : "")); + << " " << limit_set(Machine::Axes::negLimitMask) << (config->_probe->get_state() ? " P " : " ") + << ((config->_axes->_faultPin && config->_axes->_faultPin->get()) ? " F" : "")); limit = thisTime + interval; } vTaskDelay(1); @@ -493,11 +494,6 @@ static Error doJog(const char* value, WebUI::AuthenticationLevel auth_level, Cha return gc_execute_line(jogLine); } -static const char* alarmString(ExecAlarm alarmNumber) { - auto it = AlarmNames.find(alarmNumber); - return it == AlarmNames.end() ? NULL : it->second; -} - static Error listAlarms(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { if (sys.state == State::ConfigAlarm) { log_to(out, "Configuration alarm is active. Check the boot messages for 'ERR'."); diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index aaf38bb15..799bbf497 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -18,6 +18,7 @@ #include "MotionControl.h" // PARKING_MOTION_LINE_NUMBER #include "Settings.h" // settings_execute_startup #include "Machine/LimitPin.h" +#include "Machine/FaultPin.h" volatile ExecAlarm rtAlarm; // Global realtime executor bitflag variable for setting various alarms. @@ -35,8 +36,14 @@ std::map AlarmNames = { { ExecAlarm::SpindleControl, "Spindle Control" }, { ExecAlarm::ControlPin, "Control Pin Initially On" }, { ExecAlarm::HomingAmbiguousSwitch, "Ambiguous Switch" }, + { ExecAlarm::FaultPin, "Fault Pin" }, }; +const char* alarmString(ExecAlarm alarmNumber) { + auto it = AlarmNames.find(alarmNumber); + return it == AlarmNames.end() ? NULL : it->second; +} + volatile bool rtReset; static volatile bool rtSafetyDoor; @@ -361,6 +368,7 @@ void protocol_execute_realtime() { } static void alarm_msg(ExecAlarm alarm_code) { + log_info_to(allChannels, "ALARM: " << alarmString(alarm_code)); log_to(allChannels, "ALARM:", static_cast(alarm_code)); delay_ms(500); // Force delay to ensure message clears serial write buffer. } @@ -377,7 +385,7 @@ static void protocol_do_alarm() { } sys.state = State::Alarm; // Set system alarm state alarm_msg(rtAlarm); - if (rtAlarm == ExecAlarm::HardLimit || rtAlarm == ExecAlarm::SoftLimit) { + if (rtAlarm == ExecAlarm::HardLimit || rtAlarm == ExecAlarm::SoftLimit || rtAlarm == ExecAlarm::FaultPin) { report_error_message(Message::CriticalEvent); protocol_disable_steppers(); rtReset = false; // Disable any existing reset @@ -705,6 +713,7 @@ void protocol_do_cycle_stop() { // Fall through case State::ConfigAlarm: case State::Alarm: + break; case State::CheckMode: case State::Idle: case State::Cycle: @@ -1012,7 +1021,15 @@ static void protocol_do_limit(void* arg) { mc_reset(); // Initiate system kill. rtAlarm = ExecAlarm::HardLimit; // Indicate hard limit critical event } - return; + } +} +static void protocol_do_fault_pin(void* arg) { + Machine::FaultPin* faultPin = (Machine::FaultPin*)arg; + if (sys.state == State::Cycle || sys.state == State::Jog) { + if (rtAlarm == ExecAlarm::None) { + mc_reset(); // Initiate system kill. + rtAlarm = ExecAlarm::FaultPin; // Indicate fault pin critical event + } } } ArgEvent feedOverrideEvent { protocol_do_feed_override }; @@ -1020,6 +1037,7 @@ ArgEvent rapidOverrideEvent { protocol_do_rapid_override }; ArgEvent spindleOverrideEvent { protocol_do_spindle_override }; ArgEvent accessoryOverrideEvent { protocol_do_accessory_override }; ArgEvent limitEvent { protocol_do_limit }; +ArgEvent faultPinEvent { protocol_do_fault_pin }; ArgEvent reportStatusEvent { (void (*)(void*))report_realtime_status }; diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index d28e16b37..e8343f56f 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -64,6 +64,7 @@ enum class ExecAlarm : uint8_t { SpindleControl = 10, ControlPin = 11, HomingAmbiguousSwitch = 12, + FaultPin = 13, }; extern volatile ExecAlarm rtAlarm; // Global realtime executor variable for setting various alarms. @@ -71,6 +72,8 @@ extern volatile ExecAlarm rtAlarm; // Global realtime executor variable for set #include extern std::map AlarmNames; +const char* alarmString(ExecAlarm alarmNumber); + #include "Event.h" enum AccessoryOverride { SpindleStopOvr = 1, @@ -83,6 +86,7 @@ extern ArgEvent rapidOverrideEvent; extern ArgEvent spindleOverrideEvent; extern ArgEvent accessoryOverrideEvent; extern ArgEvent limitEvent; +extern ArgEvent faultPinEvent; extern ArgEvent reportStatusEvent; diff --git a/FluidNC/src/Report.cpp b/FluidNC/src/Report.cpp index dc43c3dec..790cbe173 100644 --- a/FluidNC/src/Report.cpp +++ b/FluidNC/src/Report.cpp @@ -646,8 +646,7 @@ void report_realtime_status(Channel& channel) { msg << "|Heap:" << esp.getHeapSize(); #endif msg << ">"; - // The DebugStream destructor sends the line - // when msg goes out of scope + // The destructor sends the line when msg goes out of scope } void hex_msg(uint8_t* buf, const char* prefix, int len) { From 70e19233664172f6e1055c9bd285d3a3d7abd2e8 Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 18 Jul 2023 12:43:32 -0500 Subject: [PATCH 086/212] Add cs_pin to TMC2208 --- FluidNC/src/Motors/TMC2208Driver.cpp | 13 +++++++++++++ FluidNC/src/Motors/TMC2209Driver.cpp | 2 -- FluidNC/src/Motors/TrinamicUartDriver.cpp | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Motors/TMC2208Driver.cpp b/FluidNC/src/Motors/TMC2208Driver.cpp index 7434b8a84..b43457fe4 100644 --- a/FluidNC/src/Motors/TMC2208Driver.cpp +++ b/FluidNC/src/Motors/TMC2208Driver.cpp @@ -26,8 +26,10 @@ namespace MotorDrivers { } void TMC2208Driver::config_motor() { + _cs_pin.synchronousWrite(true); tmc2208->begin(); TrinamicBase::config_motor(); + _cs_pin.synchronousWrite(false); } void TMC2208Driver::set_registers(bool isHoming) { @@ -41,6 +43,9 @@ namespace MotorDrivers { // but the TMCStepper library expresses run current as (uint16_t) mA // and hold current as (float) fraction of run current. uint16_t run_i = (uint16_t)(_run_current * 1000.0); + + _cs_pin.synchronousWrite(true); + tmc2208->I_scale_analog(false); // do not scale via pot tmc2208->rms_current(run_i, TrinamicBase::holdPercent()); @@ -51,20 +56,26 @@ namespace MotorDrivers { // This driver does not support multiple modes tmc2208->en_spreadCycle(false); tmc2208->pwm_autoscale(true); + + _cs_pin.synchronousWrite(false); } void TMC2208Driver::debug_message() {} void TMC2208Driver::set_disable(bool disable) { + _cs_pin.synchronousWrite(true); if (TrinamicUartDriver::startDisable(disable)) { if (_use_enable) { tmc2208->toff(TrinamicUartDriver::toffValue()); } } + _cs_pin.synchronousWrite(false); } bool TMC2208Driver::test() { + _cs_pin.synchronousWrite(true); if (!checkVersion(0x20, tmc2208->version())) { + _cs_pin.synchronousWrite(false); return false; } uint8_t ifcnt_before = tmc2208->IFCNT(); @@ -73,8 +84,10 @@ namespace MotorDrivers { bool okay = ((ifcnt_before + 1) & 0xff) == ifcnt_after; if (!okay) { TrinamicBase::reportCommsFailure(); + _cs_pin.synchronousWrite(false); return false; } + _cs_pin.synchronousWrite(false); return true; } diff --git a/FluidNC/src/Motors/TMC2209Driver.cpp b/FluidNC/src/Motors/TMC2209Driver.cpp index fee4d5114..d493b6599 100644 --- a/FluidNC/src/Motors/TMC2209Driver.cpp +++ b/FluidNC/src/Motors/TMC2209Driver.cpp @@ -23,8 +23,6 @@ namespace MotorDrivers { tmc2209 = new TMC2209Stepper(_uart, _r_sense, _addr); - _cs_pin.setAttr(Pin::Attr::Output); - registration(); } diff --git a/FluidNC/src/Motors/TrinamicUartDriver.cpp b/FluidNC/src/Motors/TrinamicUartDriver.cpp index 0067eced4..369bb126d 100644 --- a/FluidNC/src/Motors/TrinamicUartDriver.cpp +++ b/FluidNC/src/Motors/TrinamicUartDriver.cpp @@ -25,6 +25,8 @@ namespace MotorDrivers { log_error("TMC Driver missing uart" << _uart_num << " section"); return; } + + _cs_pin.setAttr(Pin::Attr::Output); } /* From 9dc6fdaaa355ff1766b11653f008a46109b06748 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 18 Jul 2023 12:40:44 -1000 Subject: [PATCH 087/212] Check fault pin at startup if check_limits is true --- FluidNC/src/Machine/Axes.h | 3 +-- FluidNC/src/Protocol.cpp | 22 ++++++++++++++-------- FluidNC/src/Report.cpp | 1 + FluidNC/src/Report.h | 1 + 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/FluidNC/src/Machine/Axes.h b/FluidNC/src/Machine/Axes.h index fa723a516..0837b329d 100644 --- a/FluidNC/src/Machine/Axes.h +++ b/FluidNC/src/Machine/Axes.h @@ -17,8 +17,6 @@ namespace Machine { class Axes : public Configuration::Configurable { bool _switchedStepper = false; - Pin _sharedFaultPin; - public: static constexpr const char* _names = "XYZABC"; @@ -33,6 +31,7 @@ namespace Machine { Pin _sharedStepperDisable; Pin _sharedStepperReset; + Pin _sharedFaultPin; inline char axisName(int index) { return index < MAX_N_AXIS ? _names[index] : '?'; } // returns axis letter diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 799bbf497..771e36e81 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -234,6 +234,12 @@ void start_polling() { } } +static void alarm_msg(ExecAlarm alarm_code) { + log_info_to(allChannels, "ALARM: " << alarmString(alarm_code)); + log_to(allChannels, "ALARM:", static_cast(alarm_code)); + delay_ms(500); // Force delay to ensure message clears serial write buffer. +} + static void check_startup_state() { // Check for and report alarm state after a reset, error, or an initial power up. // NOTE: Sleep mode disables the stepper drivers and position can't be guaranteed. @@ -242,11 +248,17 @@ static void check_startup_state() { report_error_message(Message::ConfigAlarmLock); } else { // Perform some machine checks to make sure everything is good to go. - if (config->_start->_checkLimits && config->_axes->hasHardLimits()) { - if (limits_get_state()) { + if (config->_start->_checkLimits) { + if (config->_axes->hasHardLimits() && limits_get_state()) { sys.state = State::Alarm; // Ensure alarm state is active. + alarm_msg(ExecAlarm::HardLimit); report_error_message(Message::CheckLimits); } + if (config->_axes->_sharedFaultPin.defined() && config->_axes->_sharedFaultPin.read()) { + sys.state = State::Alarm; // Ensure alarm state is active. + alarm_msg(ExecAlarm::FaultPin); + report_error_message(Message::DriverFault); + } } if (config->_control->startup_check()) { rtAlarm = ExecAlarm::ControlPin; @@ -367,12 +379,6 @@ void protocol_execute_realtime() { } } -static void alarm_msg(ExecAlarm alarm_code) { - log_info_to(allChannels, "ALARM: " << alarmString(alarm_code)); - log_to(allChannels, "ALARM:", static_cast(alarm_code)); - delay_ms(500); // Force delay to ensure message clears serial write buffer. -} - // Executes run-time commands, when required. This function is the primary state // machine that controls the various real-time features. // NOTE: Do not alter this unless you know exactly what you are doing! diff --git a/FluidNC/src/Report.cpp b/FluidNC/src/Report.cpp index 790cbe173..c2637795d 100644 --- a/FluidNC/src/Report.cpp +++ b/FluidNC/src/Report.cpp @@ -121,6 +121,7 @@ std::map MessageText = { { Message::RestoreDefaults, "Restoring defaults" }, { Message::SpindleRestore, "Restoring spindle" }, { Message::SleepMode, "Sleeping" }, + { Message::DriverFault, "Driver fault" }, { Message::ConfigAlarmLock, "Configuration is invalid. Check boot messages for ERR's." }, // Handled separately due to numeric argument // { Message::FileQuit, "Reset during file job at line: %d" }, diff --git a/FluidNC/src/Report.h b/FluidNC/src/Report.h index 1c1885a80..4945830dc 100644 --- a/FluidNC/src/Report.h +++ b/FluidNC/src/Report.h @@ -37,6 +37,7 @@ enum class Message : uint8_t { SpindleRestore = 10, SleepMode = 11, ConfigAlarmLock = 12, + DriverFault = 13, FileQuit = 60, // mc_reset was called during a file job }; From 6e16cb238ba46b501761cce311af95590ed9ab1c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 19 Jul 2023 16:18:09 -1000 Subject: [PATCH 088/212] /control/fault_pin not /axes/shared_fault_pin Added /control/estop_pin Faults now trigger in idle state and persist until the fault is cleared --- FluidNC/src/Control.cpp | 2 ++ FluidNC/src/Machine/Axes.cpp | 7 ------- FluidNC/src/Machine/Axes.h | 4 ---- FluidNC/src/Machine/FaultPin.cpp | 9 --------- FluidNC/src/Machine/FaultPin.h | 10 ---------- FluidNC/src/ProcessSettings.cpp | 7 +++---- FluidNC/src/Protocol.cpp | 18 +++++------------- FluidNC/src/Report.cpp | 2 +- 8 files changed, 11 insertions(+), 48 deletions(-) delete mode 100644 FluidNC/src/Machine/FaultPin.cpp delete mode 100644 FluidNC/src/Machine/FaultPin.h diff --git a/FluidNC/src/Control.cpp b/FluidNC/src/Control.cpp index b993c573f..96fcd879b 100644 --- a/FluidNC/src/Control.cpp +++ b/FluidNC/src/Control.cpp @@ -16,6 +16,8 @@ Control::Control() { _pins.push_back(new ControlPin(¯o1Event, "macro1_pin", '1')); _pins.push_back(new ControlPin(¯o2Event, "macro2_pin", '2')); _pins.push_back(new ControlPin(¯o3Event, "macro3_pin", '3')); + _pins.push_back(new ControlPin(&faultPinEvent, "fault_pin", 'F')); + _pins.push_back(new ControlPin(&faultPinEvent, "estop_pin", 'E')); } void Control::init() { diff --git a/FluidNC/src/Machine/Axes.cpp b/FluidNC/src/Machine/Axes.cpp index 274122f90..4e94efd7b 100644 --- a/FluidNC/src/Machine/Axes.cpp +++ b/FluidNC/src/Machine/Axes.cpp @@ -37,12 +37,6 @@ namespace Machine { _sharedStepperReset.report("Shared stepper reset"); } - if (_sharedFaultPin.defined()) { - _faultPin = new FaultPin(_sharedFaultPin); - _faultPin->init(); - } - - // certain motors need features to be turned on. Check them here for (size_t axis = X_AXIS; axis < _numberAxis; axis++) { auto a = _axis[axis]; @@ -195,7 +189,6 @@ namespace Machine { void Axes::group(Configuration::HandlerBase& handler) { handler.item("shared_stepper_disable_pin", _sharedStepperDisable); handler.item("shared_stepper_reset_pin", _sharedStepperReset); - handler.item("shared_fault_pin", _sharedFaultPin); // Handle axis names xyzabc. handler.section is inferred // from a template. diff --git a/FluidNC/src/Machine/Axes.h b/FluidNC/src/Machine/Axes.h index 0837b329d..bb2e65588 100644 --- a/FluidNC/src/Machine/Axes.h +++ b/FluidNC/src/Machine/Axes.h @@ -7,7 +7,6 @@ #include "../Configuration/Configurable.h" #include "Axis.h" #include "../EnumItem.h" -#include "src/Machine/FaultPin.h" namespace MotorDrivers { class MotorDriver; @@ -31,7 +30,6 @@ namespace Machine { Pin _sharedStepperDisable; Pin _sharedStepperReset; - Pin _sharedFaultPin; inline char axisName(int index) { return index < MAX_N_AXIS ? _names[index] : '?'; } // returns axis letter @@ -39,8 +37,6 @@ namespace Machine { static inline AxisMask motors_to_axes(MotorMask motors) { return (motors & 0xffff) | (motors >> 16); } static inline MotorMask axes_to_motors(AxisMask axes) { return axes | (axes << 16); } - FaultPin* _faultPin = nullptr; - int _numberAxis = 0; Axis* _axis[MAX_N_AXIS]; diff --git a/FluidNC/src/Machine/FaultPin.cpp b/FluidNC/src/Machine/FaultPin.cpp deleted file mode 100644 index e49f3d6aa..000000000 --- a/FluidNC/src/Machine/FaultPin.cpp +++ /dev/null @@ -1,9 +0,0 @@ -#include "src/Machine/FaultPin.h" -#include "src/Machine/MachineConfig.h" // config - -#include "src/MotionControl.h" // mc_reset -#include "src/Protocol.h" // protocol_send_event_from_ISR() - -namespace Machine { - FaultPin::FaultPin(Pin& pin) : EventPin(&faultPinEvent, "Fault", &pin) {} -} diff --git a/FluidNC/src/Machine/FaultPin.h b/FluidNC/src/Machine/FaultPin.h deleted file mode 100644 index cad5ab239..000000000 --- a/FluidNC/src/Machine/FaultPin.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include "EventPin.h" - -namespace Machine { - class FaultPin : public EventPin { - public: - FaultPin(Pin& pin); - }; -} diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index d189e38ee..c98520a86 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -47,7 +47,7 @@ static bool auth_failed(Word* w, const char* value, WebUI::AuthenticationLevel a if (!value) { // User can read anything return false; // No read is a User auth fail } - return permissions == WA; // User cannot write WA + return permissions == WA; // User cannot write WA default: return true; } @@ -136,7 +136,7 @@ void settings_restore(uint8_t restore_flag) { for (Setting* s : Setting::List) { if (!s->getDescription()) { const char* name = s->getName(); - if (restore_startup) { // all settings get restored + if (restore_startup) { // all settings get restored s->setDefault(); } else if ((strcmp(name, "Line0") != 0) && (strcmp(name, "Line1") != 0)) { // non startup settings get restored s->setDefault(); @@ -420,8 +420,7 @@ static Error show_limits(const char* value, WebUI::AuthenticationLevel auth_leve log_to(out, ": ", limit_set(Machine::Axes::posLimitMask) - << " " << limit_set(Machine::Axes::negLimitMask) << (config->_probe->get_state() ? " P " : " ") - << ((config->_axes->_faultPin && config->_axes->_faultPin->get()) ? " F" : "")); + << " " << limit_set(Machine::Axes::negLimitMask) << (config->_probe->get_state() ? " P" : "")); limit = thisTime + interval; } vTaskDelay(1); diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 771e36e81..fff0694aa 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -18,7 +18,6 @@ #include "MotionControl.h" // PARKING_MOTION_LINE_NUMBER #include "Settings.h" // settings_execute_startup #include "Machine/LimitPin.h" -#include "Machine/FaultPin.h" volatile ExecAlarm rtAlarm; // Global realtime executor bitflag variable for setting various alarms. @@ -254,11 +253,6 @@ static void check_startup_state() { alarm_msg(ExecAlarm::HardLimit); report_error_message(Message::CheckLimits); } - if (config->_axes->_sharedFaultPin.defined() && config->_axes->_sharedFaultPin.read()) { - sys.state = State::Alarm; // Ensure alarm state is active. - alarm_msg(ExecAlarm::FaultPin); - report_error_message(Message::DriverFault); - } } if (config->_control->startup_check()) { rtAlarm = ExecAlarm::ControlPin; @@ -607,8 +601,7 @@ static void protocol_do_initiate_cycle() { sys.state = pb->is_jog ? State::Jog : State::Cycle; Stepper::prep_buffer(); // Initialize step segment buffer before beginning cycle. Stepper::wake_up(); - } else { // Otherwise, do nothing. Set and resume IDLE state. - + } else { // Otherwise, do nothing. Set and resume IDLE state. sys.suspend.value = 0; // Break suspend state. sys.state = State::Idle; } @@ -1030,12 +1023,11 @@ static void protocol_do_limit(void* arg) { } } static void protocol_do_fault_pin(void* arg) { - Machine::FaultPin* faultPin = (Machine::FaultPin*)arg; - if (sys.state == State::Cycle || sys.state == State::Jog) { - if (rtAlarm == ExecAlarm::None) { - mc_reset(); // Initiate system kill. - rtAlarm = ExecAlarm::FaultPin; // Indicate fault pin critical event + if (rtAlarm == ExecAlarm::None) { + if (sys.state == State::Cycle || sys.state == State::Jog) { + mc_reset(); // Initiate system kill. } + rtAlarm = ExecAlarm::FaultPin; // Indicate fault pin critical event } } ArgEvent feedOverrideEvent { protocol_do_feed_override }; diff --git a/FluidNC/src/Report.cpp b/FluidNC/src/Report.cpp index c2637795d..00e96c8c6 100644 --- a/FluidNC/src/Report.cpp +++ b/FluidNC/src/Report.cpp @@ -644,7 +644,7 @@ void report_realtime_status(Channel& channel) { msg << "|ISRs:" << Stepper::isr_count; #endif #ifdef DEBUG_REPORT_HEAP - msg << "|Heap:" << esp.getHeapSize(); + msg << "|Heap:" << xPortGetFreeHeapSize(); #endif msg << ">"; // The destructor sends the line when msg goes out of scope From cd7ec064254d9e71ba79b5a1473eae837254215f Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 20 Jul 2023 08:59:00 -1000 Subject: [PATCH 089/212] Remove Fault from limits/show report --- FluidNC/src/ProcessSettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index c98520a86..349ad9290 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -409,7 +409,7 @@ static Error show_limits(const char* value, WebUI::AuthenticationLevel auth_leve log_to(out, "Send ! to exit"); log_to(out, "Homing Axes : ", limit_set(Machine::Axes::homingMask)); log_to(out, "Limit Axes : ", limit_set(Machine::Axes::limitMask)); - log_to(out, " PosLimitPins NegLimitPins Probe Fault"); + log_to(out, " PosLimitPins NegLimitPins Probe"); const TickType_t interval = 500; TickType_t limit = xTaskGetTickCount(); From 0bf6d72ef017ae1f623d5e9abccbfb5176ec740d Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 20 Jul 2023 11:26:05 -1000 Subject: [PATCH 090/212] Event name is now HardStop and message shows which pin triggered it --- FluidNC/src/Protocol.cpp | 12 +++++++----- FluidNC/src/Protocol.h | 2 +- FluidNC/src/Report.cpp | 2 +- FluidNC/src/Report.h | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index fff0694aa..ab7ce0f68 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -35,7 +35,7 @@ std::map AlarmNames = { { ExecAlarm::SpindleControl, "Spindle Control" }, { ExecAlarm::ControlPin, "Control Pin Initially On" }, { ExecAlarm::HomingAmbiguousSwitch, "Ambiguous Switch" }, - { ExecAlarm::FaultPin, "Fault Pin" }, + { ExecAlarm::HardStop, "Hard Stop" }, }; const char* alarmString(ExecAlarm alarmNumber) { @@ -385,7 +385,7 @@ static void protocol_do_alarm() { } sys.state = State::Alarm; // Set system alarm state alarm_msg(rtAlarm); - if (rtAlarm == ExecAlarm::HardLimit || rtAlarm == ExecAlarm::SoftLimit || rtAlarm == ExecAlarm::FaultPin) { + if (rtAlarm == ExecAlarm::HardLimit || rtAlarm == ExecAlarm::SoftLimit || rtAlarm == ExecAlarm::HardStop) { report_error_message(Message::CriticalEvent); protocol_disable_steppers(); rtReset = false; // Disable any existing reset @@ -1017,8 +1017,8 @@ static void protocol_do_limit(void* arg) { if (sys.state == State::Cycle || sys.state == State::Jog) { if (limit->isHard() && rtAlarm == ExecAlarm::None) { log_debug("Hard limits"); - mc_reset(); // Initiate system kill. - rtAlarm = ExecAlarm::HardLimit; // Indicate hard limit critical event + mc_reset(); // Initiate system kill. + rtAlarm = ExecAlarm::HardLimit; } } } @@ -1027,7 +1027,9 @@ static void protocol_do_fault_pin(void* arg) { if (sys.state == State::Cycle || sys.state == State::Jog) { mc_reset(); // Initiate system kill. } - rtAlarm = ExecAlarm::FaultPin; // Indicate fault pin critical event + ControlPin* pin = (ControlPin*)arg; + log_info("Stopped by " << pin->_legend); + rtAlarm = ExecAlarm::HardStop; } } ArgEvent feedOverrideEvent { protocol_do_feed_override }; diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index e8343f56f..0076e2c46 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -64,7 +64,7 @@ enum class ExecAlarm : uint8_t { SpindleControl = 10, ControlPin = 11, HomingAmbiguousSwitch = 12, - FaultPin = 13, + HardStop = 13, }; extern volatile ExecAlarm rtAlarm; // Global realtime executor variable for setting various alarms. diff --git a/FluidNC/src/Report.cpp b/FluidNC/src/Report.cpp index 00e96c8c6..023c0e3d5 100644 --- a/FluidNC/src/Report.cpp +++ b/FluidNC/src/Report.cpp @@ -121,7 +121,7 @@ std::map MessageText = { { Message::RestoreDefaults, "Restoring defaults" }, { Message::SpindleRestore, "Restoring spindle" }, { Message::SleepMode, "Sleeping" }, - { Message::DriverFault, "Driver fault" }, + { Message::HardStop, "Hard stop" }, { Message::ConfigAlarmLock, "Configuration is invalid. Check boot messages for ERR's." }, // Handled separately due to numeric argument // { Message::FileQuit, "Reset during file job at line: %d" }, diff --git a/FluidNC/src/Report.h b/FluidNC/src/Report.h index 4945830dc..ba4df81f3 100644 --- a/FluidNC/src/Report.h +++ b/FluidNC/src/Report.h @@ -37,7 +37,7 @@ enum class Message : uint8_t { SpindleRestore = 10, SleepMode = 11, ConfigAlarmLock = 12, - DriverFault = 13, + HardStop = 13, FileQuit = 60, // mc_reset was called during a file job }; From cf5fed9d00b9c587e901199528c7a870b0711cf0 Mon Sep 17 00:00:00 2001 From: alex <1678423+alex-codelab@users.noreply.github.com> Date: Fri, 21 Jul 2023 15:08:30 +0200 Subject: [PATCH 091/212] delay startup #973 --- fluidterm/fluidterm.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/fluidterm/fluidterm.py b/fluidterm/fluidterm.py index e0613db7c..a6b7ac65f 100644 --- a/fluidterm/fluidterm.py +++ b/fluidterm/fluidterm.py @@ -627,6 +627,10 @@ def dump_port_settings(self): def reader(self): """loop and copy serial->console""" + for _ in range(5): + time.sleep(.1) + self.console.write('.') + self.console.write('\n') try: while self.alive and self._reader_alive: # read all that is there or wait for one byte @@ -677,7 +681,7 @@ def writer(self): # If you restart FluidNC with $bye or the reset switch, you # will have to trigger interactive mode manually time.sleep(2) # Time for FluidNC to be ready for input - self.enable_fluid_echo(); + self.enable_fluid_echo() try: while self.alive: From 0c9c237e5c8dc89c62cff3f2d52ced7eea2e6bad Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 24 Jul 2023 10:11:55 -1000 Subject: [PATCH 092/212] First cut --- FluidNC/src/Control.cpp | 2 +- FluidNC/src/CoolantControl.cpp | 2 +- FluidNC/src/Limits.cpp | 36 +++-------------- FluidNC/src/Machine/Homing.cpp | 9 ++--- FluidNC/src/Machine/LimitPin.cpp | 1 - FluidNC/src/MotionControl.cpp | 32 ++------------- FluidNC/src/MotionControl.h | 2 +- FluidNC/src/ProcessSettings.cpp | 3 +- FluidNC/src/Protocol.cpp | 62 ++++++++++++----------------- FluidNC/src/Protocol.h | 3 +- FluidNC/src/Report.cpp | 1 + FluidNC/src/Report.h | 2 +- FluidNC/src/Serial.cpp | 2 +- FluidNC/src/Spindles/VFDSpindle.cpp | 8 ++-- FluidNC/src/Types.h | 1 + 15 files changed, 52 insertions(+), 114 deletions(-) diff --git a/FluidNC/src/Control.cpp b/FluidNC/src/Control.cpp index 96fcd879b..2e8848405 100644 --- a/FluidNC/src/Control.cpp +++ b/FluidNC/src/Control.cpp @@ -9,7 +9,7 @@ Control::Control() { // The SafetyDoor pin must be defined first because it is checked explicity in safety_door_ajar() _pins.push_back(new ControlPin(&safetyDoorEvent, "safety_door_pin", 'D')); - _pins.push_back(new ControlPin(&resetEvent, "reset_pin", 'R')); + _pins.push_back(new ControlPin(&rtResetEvent, "reset_pin", 'R')); _pins.push_back(new ControlPin(&feedHoldEvent, "feed_hold_pin", 'H')); _pins.push_back(new ControlPin(&cycleStartEvent, "cycle_start_pin", 'S')); _pins.push_back(new ControlPin(¯o0Event, "macro0_pin", '0')); diff --git a/FluidNC/src/CoolantControl.cpp b/FluidNC/src/CoolantControl.cpp index eb96ec1d3..7daa6d1a1 100644 --- a/FluidNC/src/CoolantControl.cpp +++ b/FluidNC/src/CoolantControl.cpp @@ -55,7 +55,7 @@ void CoolantControl::write(CoolantState state) { } } -// Directly called by coolant_init(), coolant_set_state(), and mc_reset(), which can be at +// Directly called by coolant_init(), coolant_set_state(), which can be at // an interrupt-level. No report flag set, but only called by routines that don't need it. void CoolantControl::stop() { CoolantState disable = {}; diff --git a/FluidNC/src/Limits.cpp b/FluidNC/src/Limits.cpp index 526429bc4..1750e8a4d 100644 --- a/FluidNC/src/Limits.cpp +++ b/FluidNC/src/Limits.cpp @@ -5,14 +5,14 @@ #include "Limits.h" #include "Machine/MachineConfig.h" -#include "MotionControl.h" // mc_reset +#include "MotionControl.h" // mc_critical #include "System.h" // sys.* #include "Protocol.h" // protocol_execute_realtime #include "Platform.h" // WEAK_LINK #include #include -#include // fence +#include // fence xQueueHandle limit_sw_queue; // used by limit switch debouncing @@ -43,10 +43,10 @@ MotorMask limits_get_state() { return Machine::Axes::posLimitMask | Machine::Axes::negLimitMask; } +// Called only from Kinematics canHome() methods, hence from states allowing homing bool ambiguousLimit() { if (Machine::Axes::posLimitMask & Machine::Axes::negLimitMask) { - mc_reset(); // Issue system reset and ensure spindle and coolant are shutdown. - rtAlarm = ExecAlarm::HardLimit; + mc_critical(ExecAlarm::HardLimit); return true; } return false; @@ -85,7 +85,7 @@ void constrainToSoftLimits(float* cartesian) { // if jog is positive and only the positive switch is active, then kill the move // if jog is negative and only the negative switch is active, then kill the move - if (posLimited != negLimited) { // XOR, because ambiguous (both) is OK + if (posLimited != negLimited) { // XOR, because ambiguous (both) is OK if ((negLimited && (jog_dist < 0)) || (posLimited && (jog_dist > 0))) { cartesian[axis] = current_position[axis]; // cancel the move on this axis log_debug("Jog into active switch blocked on " << Machine::Axes::_names[axis]); @@ -144,34 +144,10 @@ void limits_soft_check(float* cartesian) { } while (sys.state != State::Idle); } log_debug("Soft limits"); - mc_reset(); // Issue system reset and ensure spindle and coolant are shutdown. - rtAlarm = ExecAlarm::SoftLimit; // Indicate soft limit critical event - protocol_execute_realtime(); // Execute to enter critical event loop and system abort + mc_critical(ExecAlarm::SoftLimit); } } -#ifdef LATER // We need to rethink debouncing -void limitCheckTask(void* pvParameters) { - while (true) { - std::atomic_thread_fence(std::memory_order::memory_order_seq_cst); // read fence for settings - - int evt; - xQueueReceive(limit_sw_queue, &evt, portMAX_DELAY); // block until receive queue - vTaskDelay(config->_softwareDebounceMs / portTICK_PERIOD_MS); // delay a while - auto switch_state = limits_get_state(); - if (switch_state) { - log_debug("Limit Switch State " << to_hex(switch_state)); - mc_reset(); // Initiate system kill. - rtAlarm = ExecAlarm::HardLimit; // Indicate hard limit critical event - } - static UBaseType_t uxHighWaterMark = 0; -# ifdef DEBUG_TASK_STACK - reportTaskStackSize(uxHighWaterMark); -# endif - } -} -#endif - float limitsMaxPosition(size_t axis) { auto axisConfig = config->_axes->_axis[axis]; auto homing = axisConfig->_homing; diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index d4e00ec4e..bfbad79de 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -1,10 +1,9 @@ #include "Homing.h" -#include "../MotionControl.h" // mc_reset -#include "../System.h" // sys.* -#include "../Stepper.h" // st_wake -#include "../Protocol.h" // protocol_handle_events -#include "../Limits.h" // ambiguousLimit +#include "../System.h" // sys.* +#include "../Stepper.h" // st_wake +#include "../Protocol.h" // protocol_handle_events +#include "../Limits.h" // ambiguousLimit #include "../Machine/Axes.h" #include "../Machine/MachineConfig.h" // config diff --git a/FluidNC/src/Machine/LimitPin.cpp b/FluidNC/src/Machine/LimitPin.cpp index c4a10008b..35c6dfecd 100644 --- a/FluidNC/src/Machine/LimitPin.cpp +++ b/FluidNC/src/Machine/LimitPin.cpp @@ -2,7 +2,6 @@ #include "src/Machine/Axes.h" #include "src/Machine/MachineConfig.h" // config -#include "src/MotionControl.h" // mc_reset #include "src/Limits.h" #include "src/Protocol.h" // protocol_send_event_from_ISR() diff --git a/FluidNC/src/MotionControl.cpp b/FluidNC/src/MotionControl.cpp index 9c986f8dd..95aede1a1 100644 --- a/FluidNC/src/MotionControl.cpp +++ b/FluidNC/src/MotionControl.cpp @@ -102,9 +102,9 @@ void mc_cancel_jog() { // unless invert_feed_rate is true. Then the feed_rate means that the motion should be completed in // (1 minute)/feed_rate time. bool mc_linear(float* target, plan_line_data_t* pl_data, float* position) { - if (!pl_data->is_jog) { // soft limits for jogs have already been dealt with + if (!pl_data->is_jog) { // soft limits for jogs have already been dealt with limits_soft_check(target); - } + } return config->_kinematics->cartesian_to_motors(target, pl_data, position); } @@ -368,30 +368,6 @@ void mc_override_ctrl_update(Override override_state) { sys.override_ctrl = override_state; } -// Method to ready the system to reset by setting the realtime reset command and killing any -// active processes in the system. This also checks if a system reset is issued while in -// motion state. If so, kills the steppers and sets the system alarm to flag position -// lost, since there was an abrupt uncontrolled deceleration. Called at an interrupt level by -// realtime abort command and hard limits. So, keep to a minimum. Stuff that cannot be -// done quickly is handled later when Protocol.cpp responds to rtReset. -void mc_reset() { - // Only this function can set the system reset. Helps prevent multiple kill calls. - if (!rtReset) { - rtReset = true; - - // Kill steppers only if in any motion state, i.e. cycle, actively holding, or homing. - // NOTE: If steppers are kept enabled via the step idle delay setting, this also keeps - // the steppers enabled by avoiding the go_idle call altogether, unless the motion state is - // violated, by which, all bets are off. - if (inMotionState() || sys.step_control.executeHold || sys.step_control.executeSysMotion) { - if (sys.state == State::Homing) { - if (rtAlarm == ExecAlarm::None) { - rtAlarm = ExecAlarm::HomingFailReset; - } - } else { - rtAlarm = ExecAlarm::AbortCycle; - } - Stepper::stop_stepping(); // Stop stepping immediately, possibly losing position - } - } +void mc_critical(ExecAlarm alarm) { + rtAlarm = alarm; } diff --git a/FluidNC/src/MotionControl.h b/FluidNC/src/MotionControl.h index df51a154c..21a2539c9 100644 --- a/FluidNC/src/MotionControl.h +++ b/FluidNC/src/MotionControl.h @@ -56,7 +56,7 @@ GCUpdatePos mc_probe_cycle(float* target, plan_line_data_t* pl_data, bool away, void mc_override_ctrl_update(Override override_state); // Performs system reset. If in motion state, kills all motion and sets system alarm. -void mc_reset(); +void mc_critical(ExecAlarm alarm); void mc_cancel_jog(); diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 349ad9290..34de06103 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -253,9 +253,8 @@ static Error toggle_check_mode(const char* value, WebUI::AuthenticationLevel aut // idle and ready, regardless of alarm locks. This is mainly to keep things // simple and consistent. if (sys.state == State::CheckMode) { - log_debug("Check mode"); - mc_reset(); report_feedback_message(Message::Disabled); + sys.abort = true; } else { if (sys.state != State::Idle) { return Error::IdleError; // Requires no alarm mode. diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index ab7ce0f68..fabe57ed0 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -43,8 +43,6 @@ const char* alarmString(ExecAlarm alarmNumber) { return it == AlarmNames.end() ? NULL : it->second; } -volatile bool rtReset; - static volatile bool rtSafetyDoor; volatile bool runLimitLoop; // Interface to show_limits() @@ -74,12 +72,8 @@ static SpindleStop spindle_stop_ovr; void protocol_reset() { probeState = ProbeState::Off; soft_limit = false; - rtReset = false; rtSafetyDoor = false; spindle_stop_ovr.value = 0; - - // Do not clear rtAlarm because it might have been set during configuration - // rtAlarm = ExecAlarm::None; } static int32_t idleEndTime = 0; @@ -380,25 +374,22 @@ static void protocol_do_alarm() { if (rtAlarm == ExecAlarm::None) { return; } + if (inMotionState() || sys.step_control.executeHold || sys.step_control.executeSysMotion) { + Stepper::stop_stepping(); // Stop stepping immediately, possibly losing position + } if (spindle->_off_on_alarm) { spindle->stop(); } - sys.state = State::Alarm; // Set system alarm state alarm_msg(rtAlarm); if (rtAlarm == ExecAlarm::HardLimit || rtAlarm == ExecAlarm::SoftLimit || rtAlarm == ExecAlarm::HardStop) { + rtAlarm = ExecAlarm::None; + sys.state = State::Critical; // Set system alarm state report_error_message(Message::CriticalEvent); protocol_disable_steppers(); - rtReset = false; // Disable any existing reset - do { - protocol_handle_events(); - // Block everything except reset and status reports until user issues reset or power - // cycles. Hard limits typically occur while unattended or not paying attention. Gives - // the user and a GUI time to do what is needed before resetting, like killing the - // incoming stream. The same could be said about soft limits. While the position is not - // lost, continued streaming could cause a serious crash if by chance it gets executed. - } while (!rtReset); + return; } - rtAlarm = ExecAlarm::None; + rtAlarm = ExecAlarm::None; + sys.state = State::Alarm; } static void protocol_start_holding() { @@ -747,7 +738,7 @@ static void update_velocities() { plan_cycle_reinitialize(); } -// This is the final phase of the shutdown activity that is initiated by mc_reset(). +// This is the final phase of the shutdown activity that is initiated by mc_critical(). // The stuff herein is not necessarily safe to do in an ISR. static void protocol_do_late_reset() { // Kill spindle and coolant. @@ -766,18 +757,7 @@ static void protocol_do_late_reset() { } void protocol_exec_rt_system() { - protocol_do_alarm(); // If there is a hard or soft limit, this will block until rtReset is set - - if (rtReset) { - rtReset = false; - if (sys.state == State::Homing) { - Machine::Homing::fail(ExecAlarm::HomingFailReset); - } - protocol_do_late_reset(); - // Trigger system abort. - sys.abort = true; // Only place this is set true. - return; // Nothing else to do but exit. - } + protocol_do_alarm(); if (rtSafetyDoor) { protocol_do_safety_door(); @@ -1017,21 +997,32 @@ static void protocol_do_limit(void* arg) { if (sys.state == State::Cycle || sys.state == State::Jog) { if (limit->isHard() && rtAlarm == ExecAlarm::None) { log_debug("Hard limits"); - mc_reset(); // Initiate system kill. - rtAlarm = ExecAlarm::HardLimit; + mc_critical(ExecAlarm::HardLimit); } } } static void protocol_do_fault_pin(void* arg) { if (rtAlarm == ExecAlarm::None) { if (sys.state == State::Cycle || sys.state == State::Jog) { - mc_reset(); // Initiate system kill. + mc_critical(ExecAlarm::HardStop); // Initiate system kill. } ControlPin* pin = (ControlPin*)arg; log_info("Stopped by " << pin->_legend); - rtAlarm = ExecAlarm::HardStop; } } +void protocol_do_rt_reset() { + if (sys.state == State::Homing) { + Machine::Homing::fail(ExecAlarm::HomingFailReset); + } else if (sys.state == State::Cycle || sys.state == State::Jog || sys.step_control.executeHold || sys.step_control.executeSysMotion) { + Stepper::stop_stepping(); // Stop stepping immediately, possibly losing position + rtAlarm = ExecAlarm::AbortCycle; + } else if (sys.state == State::Critical) { + sys.state == State::Alarm; + } + protocol_do_late_reset(); + sys.abort = true; // Trigger system abort. +} + ArgEvent feedOverrideEvent { protocol_do_feed_override }; ArgEvent rapidOverrideEvent { protocol_do_rapid_override }; ArgEvent spindleOverrideEvent { protocol_do_spindle_override }; @@ -1049,8 +1040,7 @@ NoArgEvent motionCancelEvent { protocol_do_motion_cancel }; NoArgEvent sleepEvent { protocol_do_sleep }; NoArgEvent debugEvent { report_realtime_debug }; -// Only mc_reset() is permitted to set rtReset. -NoArgEvent resetEvent { mc_reset }; +NoArgEvent rtResetEvent { protocol_do_rt_reset }; // The problem is that report_realtime_status needs a channel argument // Event statusReportEvent { protocol_do_status_report(XXX) }; diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index 0076e2c46..acb37b506 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -44,7 +44,6 @@ void protocol_buffer_synchronize(); void protocol_disable_steppers(); void protocol_cancel_disable_steppers(); -extern volatile bool rtReset; extern volatile bool rtCycleStop; extern volatile bool runLimitLoop; @@ -96,7 +95,7 @@ extern NoArgEvent cycleStartEvent; extern NoArgEvent cycleStopEvent; extern NoArgEvent motionCancelEvent; extern NoArgEvent sleepEvent; -extern NoArgEvent resetEvent; +extern NoArgEvent rtResetEvent; extern NoArgEvent debugEvent; // extern NoArgEvent statusReportEvent; diff --git a/FluidNC/src/Report.cpp b/FluidNC/src/Report.cpp index 023c0e3d5..9ade3d5ed 100644 --- a/FluidNC/src/Report.cpp +++ b/FluidNC/src/Report.cpp @@ -470,6 +470,7 @@ const char* state_name() { return "Jog"; case State::Homing: return "Home"; + case State::Critical: case State::ConfigAlarm: case State::Alarm: return "Alarm"; diff --git a/FluidNC/src/Report.h b/FluidNC/src/Report.h index ba4df81f3..48d03da6e 100644 --- a/FluidNC/src/Report.h +++ b/FluidNC/src/Report.h @@ -38,7 +38,7 @@ enum class Message : uint8_t { SleepMode = 11, ConfigAlarmLock = 12, HardStop = 13, - FileQuit = 60, // mc_reset was called during a file job + FileQuit = 60, // mc_critical was called during a file job }; typedef uint8_t Counter; // Report interval diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 58c1eb353..9b9348e14 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -87,7 +87,7 @@ void execute_realtime_command(Cmd command, Channel& channel) { switch (command) { case Cmd::Reset: log_debug("Cmd::Reset"); - protocol_send_event(&resetEvent); + protocol_send_event(&rtResetEvent); break; case Cmd::StatusReport: report_realtime_status(channel); // direct call instead of setting flag diff --git a/FluidNC/src/Spindles/VFDSpindle.cpp b/FluidNC/src/Spindles/VFDSpindle.cpp index e198d3488..a52032f93 100644 --- a/FluidNC/src/Spindles/VFDSpindle.cpp +++ b/FluidNC/src/Spindles/VFDSpindle.cpp @@ -21,7 +21,7 @@ #include "VFDSpindle.h" #include "../Machine/MachineConfig.h" -#include "../MotionControl.h" // mc_reset +#include "../MotionControl.h" // mc_critical #include "../Protocol.h" // rtAlarm #include "../Report.h" // hex message @@ -245,8 +245,7 @@ namespace Spindles { } if (next_cmd.critical) { log_error("Critical VFD RS485 Unresponsive"); - mc_reset(); - rtAlarm = ExecAlarm::SpindleControl; + mc_critical(ExecAlarm::SpindleControl); } } } @@ -366,8 +365,7 @@ namespace Spindles { if (unchanged == limit) { log_error(name() << " spindle did not reach device units " << dev_speed << ". Reported value is " << _sync_dev_speed); - mc_reset(); - rtAlarm = ExecAlarm::SpindleControl; + mc_critical(ExecAlarm::SpindleControl); } _syncing = false; diff --git a/FluidNC/src/Types.h b/FluidNC/src/Types.h index 54cb3907b..b0b9ef9b1 100644 --- a/FluidNC/src/Types.h +++ b/FluidNC/src/Types.h @@ -20,4 +20,5 @@ enum class State : uint8_t { SafetyDoor, // Safety door is ajar. Feed holds and de-energizes system. Sleep, // Sleep state. ConfigAlarm, // You can't do anything but fix your config file. + Critical, // You can't do anything but reset with CTRL-x or the reset button }; From e9800bda730f1abac27c9b2687915b0d2928c9fa Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 25 Jul 2023 19:29:20 -1000 Subject: [PATCH 093/212] Queue alarms instead of using a global variable --- FluidNC/src/Machine/Homing.cpp | 2 +- FluidNC/src/MotionControl.cpp | 15 ++++++-- FluidNC/src/ProcessSettings.cpp | 8 ++--- FluidNC/src/Protocol.cpp | 54 +++++++++++++---------------- FluidNC/src/Protocol.h | 5 ++- FluidNC/src/Spindles/VFDSpindle.cpp | 10 +++--- 6 files changed, 50 insertions(+), 44 deletions(-) diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index bfbad79de..ef780b54b 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -351,7 +351,7 @@ namespace Machine { void Homing::fail(ExecAlarm alarm) { Stepper::reset(); // Stop moving - rtAlarm = alarm; + send_alarm(alarm); config->_axes->set_homing_mode(_cycleAxes, false); // tell motors homing is done...failed config->_axes->set_disable(config->_stepping->_idleMsecs != 255); } diff --git a/FluidNC/src/MotionControl.cpp b/FluidNC/src/MotionControl.cpp index 95aede1a1..3dbad10b2 100644 --- a/FluidNC/src/MotionControl.cpp +++ b/FluidNC/src/MotionControl.cpp @@ -291,7 +291,7 @@ GCUpdatePos mc_probe_cycle(float* target, plan_line_data_t* pl_data, bool away, // After syncing, check if probe is already triggered. If so, halt and issue alarm. // NOTE: This probe initialization error applies to all probing cycles. if (config->_probe->tripped()) { - rtAlarm = ExecAlarm::ProbeFailInitial; + send_alarm(ExecAlarm::ProbeFailInitial); protocol_execute_realtime(); config->_stepping->endLowLatency(); return GCUpdatePos::None; // Nothing else to do but bail. @@ -318,7 +318,7 @@ GCUpdatePos mc_probe_cycle(float* target, plan_line_data_t* pl_data, bool away, if (no_error) { copyAxes(probe_steps, get_motor_steps()); } else { - rtAlarm = ExecAlarm::ProbeFailContact; + send_alarm(ExecAlarm::ProbeFailContact); } } else { probe_succeeded = true; // Indicate to system the probing cycle completed successfully. @@ -368,6 +368,15 @@ void mc_override_ctrl_update(Override override_state) { sys.override_ctrl = override_state; } +// Method to ready the system to reset by setting the realtime reset command and killing any +// active processes in the system. This also checks if a system reset is issued while in +// motion state. If so, kills the steppers and sets the system alarm to flag position +// lost, since there was an abrupt uncontrolled deceleration. Called at an interrupt level by +// realtime abort command and hard limits. So, keep to a minimum. void mc_critical(ExecAlarm alarm) { - rtAlarm = alarm; + if (inMotionState() || sys.step_control.executeHold || sys.step_control.executeSysMotion) { + Stepper::reset(); // Stop stepping immediately, possibly losing position + // Stepper::stop_stepping(); // Stop stepping immediately, possibly losing position + } + send_alarm(alarm); } diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 34de06103..d73155f64 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -267,12 +267,12 @@ static Error toggle_check_mode(const char* value, WebUI::AuthenticationLevel aut static Error isStuck() { // Block if a control pin is stuck on if (config->_control->safety_door_ajar()) { - rtAlarm = ExecAlarm::ControlPin; + send_alarm(ExecAlarm::ControlPin); return Error::CheckDoor; } if (config->_control->stuck()) { log_info("Control pins:" << config->_control->report_status()); - rtAlarm = ExecAlarm::ControlPin; + send_alarm(ExecAlarm::ControlPin); return Error::CheckControlPins; } return Error::Ok; @@ -495,8 +495,8 @@ static Error doJog(const char* value, WebUI::AuthenticationLevel auth_level, Cha static Error listAlarms(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { if (sys.state == State::ConfigAlarm) { log_to(out, "Configuration alarm is active. Check the boot messages for 'ERR'."); - } else if (rtAlarm != ExecAlarm::None) { - log_to(out, "Active alarm: ", int(rtAlarm) << " (" << alarmString(rtAlarm)); + } else if (sys.state == State::Alarm) { + log_to(out, "Active alarm: ", int(lastAlarm) << " (" << alarmString(lastAlarm)); } if (value) { char* endptr = NULL; diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index fabe57ed0..587c818a5 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -19,7 +19,7 @@ #include "Settings.h" // settings_execute_startup #include "Machine/LimitPin.h" -volatile ExecAlarm rtAlarm; // Global realtime executor bitflag variable for setting various alarms. +volatile ExecAlarm lastAlarm; // The most recent alarm code std::map AlarmNames = { { ExecAlarm::None, "None" }, @@ -249,7 +249,7 @@ static void check_startup_state() { } } if (config->_control->startup_check()) { - rtAlarm = ExecAlarm::ControlPin; + send_alarm(ExecAlarm::ControlPin); } else if (sys.state == State::Alarm || sys.state == State::Sleep) { report_feedback_message(Message::AlarmLock); sys.state = State::Alarm; // Ensure alarm state is set. @@ -370,25 +370,18 @@ void protocol_execute_realtime() { // Executes run-time commands, when required. This function is the primary state // machine that controls the various real-time features. // NOTE: Do not alter this unless you know exactly what you are doing! -static void protocol_do_alarm() { - if (rtAlarm == ExecAlarm::None) { - return; - } - if (inMotionState() || sys.step_control.executeHold || sys.step_control.executeSysMotion) { - Stepper::stop_stepping(); // Stop stepping immediately, possibly losing position - } +static void protocol_do_alarm(void* alarmVoid) { + lastAlarm = (ExecAlarm)((int)alarmVoid); if (spindle->_off_on_alarm) { spindle->stop(); } - alarm_msg(rtAlarm); - if (rtAlarm == ExecAlarm::HardLimit || rtAlarm == ExecAlarm::SoftLimit || rtAlarm == ExecAlarm::HardStop) { - rtAlarm = ExecAlarm::None; + alarm_msg(lastAlarm); + if (lastAlarm == ExecAlarm::HardLimit || lastAlarm == ExecAlarm::SoftLimit || lastAlarm == ExecAlarm::HardStop) { sys.state = State::Critical; // Set system alarm state report_error_message(Message::CriticalEvent); protocol_disable_steppers(); return; } - rtAlarm = ExecAlarm::None; sys.state = State::Alarm; } @@ -654,7 +647,7 @@ void protocol_disable_steppers() { config->_axes->set_disable(false); return; } - if (sys.state == State::Sleep || rtAlarm != ExecAlarm::None) { + if (sys.state == State::Sleep || sys.state == State::Alarm) { // Disable steppers immediately in sleep or alarm state config->_axes->set_disable(true); return; @@ -738,7 +731,7 @@ static void update_velocities() { plan_cycle_reinitialize(); } -// This is the final phase of the shutdown activity that is initiated by mc_critical(). +// This is the final phase of the shutdown activity for a reset // The stuff herein is not necessarily safe to do in an ISR. static void protocol_do_late_reset() { // Kill spindle and coolant. @@ -757,8 +750,6 @@ static void protocol_do_late_reset() { } void protocol_exec_rt_system() { - protocol_do_alarm(); - if (rtSafetyDoor) { protocol_do_safety_door(); } @@ -993,29 +984,25 @@ static void protocol_do_limit(void* arg) { Machine::Homing::limitReached(); return; } - log_debug("Limit switch tripped for " << config->_axes->axisName(limit->_axis) << " motor " << limit->_motorNum); - if (sys.state == State::Cycle || sys.state == State::Jog) { - if (limit->isHard() && rtAlarm == ExecAlarm::None) { - log_debug("Hard limits"); - mc_critical(ExecAlarm::HardLimit); - } + if ((sys.state == State::Cycle || sys.state == State::Jog) && limit->isHard()) { + mc_critical(ExecAlarm::HardLimit); } + log_debug("Limit switch tripped for " << config->_axes->axisName(limit->_axis) << " motor " << limit->_motorNum); } static void protocol_do_fault_pin(void* arg) { - if (rtAlarm == ExecAlarm::None) { - if (sys.state == State::Cycle || sys.state == State::Jog) { - mc_critical(ExecAlarm::HardStop); // Initiate system kill. - } - ControlPin* pin = (ControlPin*)arg; - log_info("Stopped by " << pin->_legend); + if (sys.state == State::Cycle || sys.state == State::Jog) { + mc_critical(ExecAlarm::HardStop); // Initiate system kill. } + ControlPin* pin = (ControlPin*)arg; + log_info("Stopped by " << pin->_legend); } void protocol_do_rt_reset() { if (sys.state == State::Homing) { Machine::Homing::fail(ExecAlarm::HomingFailReset); } else if (sys.state == State::Cycle || sys.state == State::Jog || sys.step_control.executeHold || sys.step_control.executeSysMotion) { Stepper::stop_stepping(); // Stop stepping immediately, possibly losing position - rtAlarm = ExecAlarm::AbortCycle; + // Probably unnecessary because system will restart soon + // send_alarm(ExecAlarm::AbortCycle); } else if (sys.state == State::Critical) { sys.state == State::Alarm; } @@ -1044,6 +1031,7 @@ NoArgEvent rtResetEvent { protocol_do_rt_reset }; // The problem is that report_realtime_status needs a channel argument // Event statusReportEvent { protocol_do_status_report(XXX) }; +ArgEvent alarmEvent { (void (*)(void*))protocol_do_alarm }; xQueueHandle event_queue; @@ -1067,3 +1055,9 @@ void protocol_handle_events() { item.event->run(item.arg); } } +void send_alarm(ExecAlarm alarm) { + protocol_send_event(&alarmEvent, (void*)alarm); +} +void IRAM_ATTR send_alarm_from_ISR(ExecAlarm alarm) { + protocol_send_event_from_ISR(&alarmEvent, (void*)alarm); +} diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index acb37b506..2b44361dd 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -66,7 +66,7 @@ enum class ExecAlarm : uint8_t { HardStop = 13, }; -extern volatile ExecAlarm rtAlarm; // Global realtime executor variable for setting various alarms. +extern volatile ExecAlarm lastAlarm; #include extern std::map AlarmNames; @@ -112,6 +112,9 @@ struct EventItem { void protocol_send_event(Event*, void* arg = 0); void protocol_handle_events(); +void send_alarm(ExecAlarm alarm); +void send_alarm_from_ISR(ExecAlarm alarm); + inline void protocol_send_event(Event* evt, int arg) { protocol_send_event(evt, (void*)arg); } diff --git a/FluidNC/src/Spindles/VFDSpindle.cpp b/FluidNC/src/Spindles/VFDSpindle.cpp index a52032f93..b6055ecb6 100644 --- a/FluidNC/src/Spindles/VFDSpindle.cpp +++ b/FluidNC/src/Spindles/VFDSpindle.cpp @@ -244,8 +244,8 @@ namespace Spindles { pollidx = -1; } if (next_cmd.critical) { - log_error("Critical VFD RS485 Unresponsive"); mc_critical(ExecAlarm::SpindleControl); + log_error("Critical VFD RS485 Unresponsive"); } } } @@ -364,8 +364,8 @@ namespace Spindles { #endif if (unchanged == limit) { - log_error(name() << " spindle did not reach device units " << dev_speed << ". Reported value is " << _sync_dev_speed); mc_critical(ExecAlarm::SpindleControl); + log_error(name() << " spindle did not reach device units " << dev_speed << ". Reported value is " << _sync_dev_speed); } _syncing = false; @@ -415,9 +415,9 @@ namespace Spindles { action.action = actionSetSpeed; action.arg = dev_speed; action.critical = (dev_speed == 0); - if (xQueueSendFromISR(vfd_cmd_queue, &action, 0) != pdTRUE) { - log_info("VFD Queue Full"); - } + // Ignore errors because reporting is not safe from an ISR. + // Perhaps set a flag instead? + xQueueSendFromISR(vfd_cmd_queue, &action, 0); } } From 0636c0a1c44cbcc874ad3b6d52efd2b707487f0a Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 25 Jul 2023 19:29:56 -1000 Subject: [PATCH 094/212] Check soft limits on arcs directly, instead of on their segments --- FluidNC/src/Limits.cpp | 48 ++++---- FluidNC/src/Limits.h | 2 + FluidNC/src/MotionControl.cpp | 206 ++++++++++++++++++++++++++++++---- 3 files changed, 212 insertions(+), 44 deletions(-) diff --git a/FluidNC/src/Limits.cpp b/FluidNC/src/Limits.cpp index 1750e8a4d..9d3200411 100644 --- a/FluidNC/src/Limits.cpp +++ b/FluidNC/src/Limits.cpp @@ -116,35 +116,37 @@ void constrainToSoftLimits(float* cartesian) { // Performs a soft limit check. Called from mcline() only. Assumes the machine has been homed, // the workspace volume is in all negative space, and the system is in normal operation. // NOTE: Used by jogging to limit travel within soft-limit volume. -void limits_soft_check(float* cartesian) { - bool limit_error = false; +void limit_error(size_t axis, float coordinate) { + log_info("Soft limit on " << Machine::Axes::_names[axis] << " target:" << coordinate); + + soft_limit = true; + // Force feed hold if cycle is active. All buffered blocks are guaranteed to be within + // workspace volume so just come to a controlled stop so position is not lost. When complete + // enter alarm mode. + protocol_buffer_synchronize(); + if (sys.state == State::Cycle) { + protocol_send_event(&feedHoldEvent); + do { + protocol_execute_realtime(); + if (sys.abort) { + return; + } + } while (sys.state != State::Idle); + } + mc_critical(ExecAlarm::SoftLimit); + log_debug("Soft limits"); +} +void limits_soft_check(float* cartesian) { auto axes = config->_axes; auto n_axis = config->_axes->_numberAxis; for (int axis = 0; axis < n_axis; axis++) { - if (axes->_axis[axis]->_softLimits && (cartesian[axis] < limitsMinPosition(axis) || cartesian[axis] > limitsMaxPosition(axis))) { - log_info("Soft limit on " << Machine::Axes::_names[axis] << " target:" << cartesian[axis]); - limit_error = true; - } - } - - if (limit_error) { - soft_limit = true; - // Force feed hold if cycle is active. All buffered blocks are guaranteed to be within - // workspace volume so just come to a controlled stop so position is not lost. When complete - // enter alarm mode. - if (sys.state == State::Cycle) { - protocol_send_event(&feedHoldEvent); - do { - protocol_execute_realtime(); - if (sys.abort) { - return; - } - } while (sys.state != State::Idle); + float coordinate = cartesian[axis]; + if (axes->_axis[axis]->_softLimits && (coordinate < limitsMinPosition(axis) || coordinate > limitsMaxPosition(axis))) { + limit_error(axis, coordinate); + return; } - log_debug("Soft limits"); - mc_critical(ExecAlarm::SoftLimit); } } diff --git a/FluidNC/src/Limits.h b/FluidNC/src/Limits.h index e24e85bf2..107a875c3 100644 --- a/FluidNC/src/Limits.h +++ b/FluidNC/src/Limits.h @@ -16,6 +16,8 @@ void limits_init(); // Returns limit state MotorMask limits_get_state(); +void limit_error(size_t axis, float cordinate); + // Check for soft limit violations void limits_soft_check(float* cartesian); diff --git a/FluidNC/src/MotionControl.cpp b/FluidNC/src/MotionControl.cpp index 3dbad10b2..fcb054391 100644 --- a/FluidNC/src/MotionControl.cpp +++ b/FluidNC/src/MotionControl.cpp @@ -101,11 +101,173 @@ void mc_cancel_jog() { // Execute linear motion in absolute millimeter coordinates. Feed rate given in millimeters/second // unless invert_feed_rate is true. Then the feed_rate means that the motion should be completed in // (1 minute)/feed_rate time. + +// mc_linear_no_check() is used by mc_arc() which pre-checks the arc limits using +// a fast algorithm, so checking each segment is unnecessary. +static bool mc_linear_no_check(float* target, plan_line_data_t* pl_data, float* position) { + return config->_kinematics->cartesian_to_motors(target, pl_data, position); +} bool mc_linear(float* target, plan_line_data_t* pl_data, float* position) { if (!pl_data->is_jog) { // soft limits for jogs have already been dealt with limits_soft_check(target); } - return config->_kinematics->cartesian_to_motors(target, pl_data, position); + return mc_linear_no_check(target, pl_data, position); +} + +// Check that the arc does not exceed the soft limits using a fast +// algorithm that requires no transcendental functions. +// caxes[] depends on the plane selection via G17, G18, and G19. caxes[0] is the first +// circle plane axis, caxes[1] is the second circle plane axis, and caxes[2] is the +// orthogonal plane. So for G17 mode, caxes[] is { 0, 1, 2} for { X, Y, Z}. G18 is {2, 0, 1} i.e. {Z, X, Y}, and G19 is {1, 2, 0} i.e. {Y, Z, X} +void check_arc_limits(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { + auto axes = config->_axes; + + // Handle the orthognal axis first to get it out of the way. + size_t the_axis = caxes[2]; + if (axes->_axis[the_axis]->_softLimits) { + float amin = std::min(position[the_axis], target[the_axis]); + if (amin < limitsMinPosition(the_axis)) { + limit_error(the_axis, amin); + return; + } + float amax = std::max(position[the_axis], target[the_axis]); + if (amax > limitsMaxPosition(the_axis)) { + limit_error(the_axis, amax); + return; + } + } + + bool limited[2] = { axes->_axis[caxes[0]]->_softLimits, axes->_axis[caxes[1]]->_softLimits }; + + // If neither axis of the circular plane has limits enabled, skip the computation + if (!(limited[0] || limited[1])) { + return; + } + + // The origin for this calculation's coordinate system is at the center of the arc. + // The 0 and 1 entries are for the circle plane + // and the 2 entry is the orthogonal (linear) direction + + float s[2], e[2]; // Start and end of arc in the circle plane, relative to center + + // Depending on the arc direction, set the arc start and end points relative + // to the arc center. Afterwards, end is always counterclockwise relative to + // start, thus simplifying the following decision tree. + if (is_clockwise_arc) { + s[0] = target[caxes[0]] - center[0]; + s[1] = target[caxes[1]] - center[1]; + e[0] = position[caxes[0]] - center[0]; + e[1] = position[caxes[1]] - center[1]; + } else { + s[0] = position[caxes[0]] - center[0]; + s[1] = position[caxes[1]] - center[1]; + e[0] = target[caxes[0]] - center[0]; + e[1] = target[caxes[1]] - center[1]; + } + + // Axis crossings - plus and minus caxes[0] and caxes[1] + bool p[2] = { false, false }; + bool m[2] = { false, false }; + + // The following decision tree determines whether the arc crosses + // the horizontal and vertical axes of the circular plane in the + // positive and negative half planes. There are ways to express + // it in fewer lines of code by converting to alternate + // representations like angles, but this way is computationally + // efficient since it avoids any use of transcendental functions. + // Every path through this decision tree is either 4 or 5 simple + // comparisons. + if (e[1] >= 0) { // End in upper half plane + if (e[0] > 0) { // End in quadrant 0 - X+ Y+ + if (s[1] >= 0) { // Start in upper half plane + if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ + if (s[0] <= e[0]) { // wraparound + p[0] = p[1] = m[0] = m[1] = true; + } + } else { // Start in quadrant 1 - X- Y+ + m[0] = m[1] = p[0] = true; + } + } else { // Start in lower half plane + if (s[0] > 0) { // Start in quadrant 3 - X+ Y- + p[0] = true; + } else { // Start in quadrant 2 - X- Y- + m[1] = p[0] = true; + } + } + } else { // End in quadrant 1 - X- Y+ + if (s[1] >= 0) { // Start in upper half plane + if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ + p[1] = true; + } else { // Start in quadrant 1 - X- Y+ + if (s[0] <= e[0]) { // wraparound + p[0] = p[1] = m[0] = m[1] = true; + } + } + } else { // Start in lower half plane + if (s[0] > 0) { // Start in quadrant 3 - X+ Y- + p[0] = p[1] = true; + } else { // Start in quadrant 2 - X- Y- + m[1] = p[0] = p[1] = true; + } + } + } + } else { // e[1] < 0 - end in lower half plane + if (e[0] > 0) { // End in quadrant 3 - X+ Y+ + if (s[1] >= 0) { // Start in upper half plane + if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ + p[1] = m[0] = m[1] = true; + } else { // Start in quadrant 1 - X- Y+ + m[0] = m[1] = true; + } + } else { // Start in lower half plane + if (s[0] > 0) { // Start in quadrant 3 - X+ Y- + if (s[0] >= e[0]) { // wraparound + p[0] = p[1] = m[0] = m[1] = true; + } + } else { // Start in quadrant 2 - X- Y- + m[1] = true; + } + } + } else { // End in quadrant 2 - X- Y+ + if (s[1] >= 0) { // Start in upper half plane + if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ + p[1] = m[0] = true; + } else { // Start in quadrant 1 - X- Y+ + m[0] = true; + } + } else { // Start in lower half plane + if (s[0] > 0) { // Start in quadrant 3 - X+ Y- + p[0] = p[1] = m[0] = true; + } else { // Start in quadrant 2 - X- Y- + if (s[0] >= e[0]) { // wraparound + p[0] = p[1] = m[0] = m[1] = true; + } + } + } + } + } + + // Now check limits based on arc endpoints and axis crossings + for (size_t a = 0; a < 2; ++a) { + the_axis = caxes[a]; + if (limited[a]) { + // If we crossed the axis in the positive half plane, the + // maximum extent along that axis is at center + radius. + // Otherwise it is the maximum coordinate of the start and + // end positions. Similarly for the negative half plane + // and the minimum extent. + float amin = m[a] ? center[a] - radius : std::min(target[the_axis], position[the_axis]); + if (amin < limitsMinPosition(the_axis)) { + limit_error(the_axis, amin); + return; + } + float amax = p[a] ? center[a] + radius : std::max(target[the_axis], position[the_axis]); + if (amax > limitsMaxPosition(the_axis)) { + limit_error(the_axis, amax); + return; + } + } + } } // Execute an arc in offset mode format. position == current xyz, target == target xyz, @@ -125,12 +287,15 @@ void mc_arc(float* target, size_t axis_linear, bool is_clockwise_arc, int pword_rotations) { - float center_axis0 = position[axis_0] + offset[axis_0]; - float center_axis1 = position[axis_1] + offset[axis_1]; - float r_axis0 = -offset[axis_0]; // Radius vector from center to current location - float r_axis1 = -offset[axis_1]; - float rt_axis0 = target[axis_0] - center_axis0; - float rt_axis1 = target[axis_1] - center_axis1; + float center[3] = { position[axis_0] + offset[axis_0], position[axis_1] + offset[axis_1], 0 }; + + // The first two axes are the circle plane and the third is the orthogonal plane + size_t caxes[3] = { axis_0, axis_1, axis_linear }; + check_arc_limits(target, position, center, radius, caxes, is_clockwise_arc); + + // Radius vector from center to current location + float radii[2] = { -offset[axis_0], -offset[axis_1] }; + float rt[2] = { target[axis_0] - center[0], target[axis_1] - center[1] }; auto n_axis = config->_axes->_numberAxis; @@ -140,7 +305,7 @@ void mc_arc(float* target, } // CCW angle between position and target from circle center. Only one atan2() trig computation required. - float angular_travel = atan2f(r_axis0 * rt_axis1 - r_axis1 * rt_axis0, r_axis0 * rt_axis0 + r_axis1 * rt_axis1); + float angular_travel = atan2f(radii[0] * rt[1] - radii[1] * rt[0], radii[0] * rt[0] + radii[1] * rt[1]); if (is_clockwise_arc) { // Correct atan2 output per direction if (angular_travel >= -ARC_ANGULAR_TRAVEL_EPSILON) { angular_travel -= 2 * float(M_PI); @@ -211,35 +376,34 @@ void mc_arc(float* target, cos_T *= 0.5; float sin_Ti; float cos_Ti; - float r_axisi; uint16_t i; size_t count = 0; float original_feedrate = pl_data->feed_rate; // Kinematics may alter the feedrate, so save an original copy for (i = 1; i < segments; i++) { // Increment (segments-1). if (count < N_ARC_CORRECTION) { // Apply vector rotation matrix. ~40 usec - r_axisi = r_axis0 * sin_T + r_axis1 * cos_T; - r_axis0 = r_axis0 * cos_T - r_axis1 * sin_T; - r_axis1 = r_axisi; + float ri = radii[0] * sin_T + radii[1] * cos_T; + radii[0] = radii[0] * cos_T - radii[1] * sin_T; + radii[1] = ri; count++; } else { // Arc correction to radius vector. Computed only every N_ARC_CORRECTION increments. ~375 usec // Compute exact location by applying transformation matrix from initial radius vector(=-offset). - cos_Ti = cosf(i * theta_per_segment); - sin_Ti = sinf(i * theta_per_segment); - r_axis0 = -offset[axis_0] * cos_Ti + offset[axis_1] * sin_Ti; - r_axis1 = -offset[axis_0] * sin_Ti - offset[axis_1] * cos_Ti; - count = 0; + cos_Ti = cosf(i * theta_per_segment); + sin_Ti = sinf(i * theta_per_segment); + radii[0] = -offset[axis_0] * cos_Ti + offset[axis_1] * sin_Ti; + radii[1] = -offset[axis_0] * sin_Ti - offset[axis_1] * cos_Ti; + count = 0; } // Update arc_target location - position[axis_0] = center_axis0 + r_axis0; - position[axis_1] = center_axis1 + r_axis1; + position[axis_0] = center[0] + radii[0]; + position[axis_1] = center[1] + radii[1]; position[axis_linear] += linear_per_segment[axis_linear]; for (size_t i = A_AXIS; i < n_axis; i++) { position[i] += linear_per_segment[i]; } pl_data->feed_rate = original_feedrate; // This restores the feedrate kinematics may have altered - mc_linear(position, pl_data, previous_position); + mc_linear_no_check(position, pl_data, previous_position); previous_position[axis_0] = position[axis_0]; previous_position[axis_1] = position[axis_1]; previous_position[axis_linear] = position[axis_linear]; @@ -250,7 +414,7 @@ void mc_arc(float* target, } } // Ensure last segment arrives at target location. - mc_linear(target, pl_data, previous_position); + mc_linear_no_check(target, pl_data, previous_position); } // Execute dwell in seconds. From 2e24fb32b2cd523ef42c89bce9b8da2d440e6fb8 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 28 Jul 2023 12:33:11 -1000 Subject: [PATCH 095/212] Lots of fixes --- FluidNC/src/Jog.cpp | 6 +- FluidNC/src/Kinematics/Cartesian.cpp | 228 +++++++++++++++++++++++++ FluidNC/src/Kinematics/Cartesian.h | 10 +- FluidNC/src/Kinematics/Kinematics.cpp | 15 ++ FluidNC/src/Kinematics/Kinematics.h | 19 ++- FluidNC/src/Limits.cpp | 73 -------- FluidNC/src/Limits.h | 8 +- FluidNC/src/Machine/Axes.cpp | 3 +- FluidNC/src/Machine/Axes.h | 6 +- FluidNC/src/Machine/Axis.cpp | 2 +- FluidNC/src/Machine/Homing.cpp | 17 +- FluidNC/src/Machine/Homing.h | 12 +- FluidNC/src/Main.cpp | 4 +- FluidNC/src/MotionControl.cpp | 164 +----------------- FluidNC/src/Motors/StandardStepper.cpp | 4 +- FluidNC/src/Planner.cpp | 12 +- FluidNC/src/Planner.h | 1 + FluidNC/src/ProcessSettings.cpp | 1 + FluidNC/src/Protocol.cpp | 1 + FluidNC/src/Protocol.h | 2 + 20 files changed, 329 insertions(+), 259 deletions(-) diff --git a/FluidNC/src/Jog.cpp b/FluidNC/src/Jog.cpp index f50844897..7dc23136c 100644 --- a/FluidNC/src/Jog.cpp +++ b/FluidNC/src/Jog.cpp @@ -12,6 +12,10 @@ // Sets up valid jog motion received from g-code parser, checks for soft-limits, and executes the jog. // cancelledInflight will be set to true if was not added to parser due to a cancelJog. Error jog_execute(plan_line_data_t* pl_data, parser_block_t* gc_block, bool* cancelledInflight) { + if (config->_kinematics->invalid_line(gc_block->values.xyz)) { + config->_kinematics->constrain_line(gc_block->values.xyz, gc_state.position); + } + // Initialize planner data struct for jogging motions. // NOTE: Spindle and coolant are allowed to fully function with overrides during a jog. pl_data->feed_rate = gc_block->values.f; @@ -19,8 +23,6 @@ Error jog_execute(plan_line_data_t* pl_data, parser_block_t* gc_block, bool* can pl_data->is_jog = true; pl_data->line_number = gc_block->values.n; - constrainToSoftLimits(gc_block->values.xyz); - if (!mc_linear(gc_block->values.xyz, pl_data, gc_state.position)) { return Error::JogCancelled; } diff --git a/FluidNC/src/Kinematics/Cartesian.cpp b/FluidNC/src/Kinematics/Cartesian.cpp index 359c1baf6..8735988e9 100644 --- a/FluidNC/src/Kinematics/Cartesian.cpp +++ b/FluidNC/src/Kinematics/Cartesian.cpp @@ -18,6 +18,234 @@ namespace Kinematics { } } + // Check that the arc does not exceed the soft limits using a fast + // algorithm that requires no transcendental functions. + // caxes[] depends on the plane selection via G17, G18, and G19. caxes[0] is the first + // circle plane axis, caxes[1] is the second circle plane axis, and caxes[2] is the + // orthogonal plane. So for G17 mode, caxes[] is { 0, 1, 2} for { X, Y, Z}. G18 is {2, 0, 1} i.e. {Z, X, Y}, and G19 is {1, 2, 0} i.e. {Y, Z, X} + bool Cartesian::invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { + auto axes = config->_axes; + + // Handle the orthognal axis first to get it out of the way. + size_t the_axis = caxes[2]; + if (axes->_axis[the_axis]->_softLimits) { + float amin = std::min(position[the_axis], target[the_axis]); + if (amin < limitsMinPosition(the_axis)) { + limit_error(the_axis, amin); + return true; + } + float amax = std::max(position[the_axis], target[the_axis]); + if (amax > limitsMaxPosition(the_axis)) { + limit_error(the_axis, amax); + return true; + } + } + + bool limited[2] = { axes->_axis[caxes[0]]->_softLimits, axes->_axis[caxes[1]]->_softLimits }; + + // If neither axis of the circular plane has limits enabled, skip the computation + if (!(limited[0] || limited[1])) { + return false; + } + + // The origin for this calculation's coordinate system is at the center of the arc. + // The 0 and 1 entries are for the circle plane + // and the 2 entry is the orthogonal (linear) direction + + float s[2], e[2]; // Start and end of arc in the circle plane, relative to center + + // Depending on the arc direction, set the arc start and end points relative + // to the arc center. Afterwards, end is always counterclockwise relative to + // start, thus simplifying the following decision tree. + if (is_clockwise_arc) { + s[0] = target[caxes[0]] - center[0]; + s[1] = target[caxes[1]] - center[1]; + e[0] = position[caxes[0]] - center[0]; + e[1] = position[caxes[1]] - center[1]; + } else { + s[0] = position[caxes[0]] - center[0]; + s[1] = position[caxes[1]] - center[1]; + e[0] = target[caxes[0]] - center[0]; + e[1] = target[caxes[1]] - center[1]; + } + + // Axis crossings - plus and minus caxes[0] and caxes[1] + bool p[2] = { false, false }; + bool m[2] = { false, false }; + + // The following decision tree determines whether the arc crosses + // the horizontal and vertical axes of the circular plane in the + // positive and negative half planes. There are ways to express + // it in fewer lines of code by converting to alternate + // representations like angles, but this way is computationally + // efficient since it avoids any use of transcendental functions. + // Every path through this decision tree is either 4 or 5 simple + // comparisons. + if (e[1] >= 0) { // End in upper half plane + if (e[0] > 0) { // End in quadrant 0 - X+ Y+ + if (s[1] >= 0) { // Start in upper half plane + if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ + if (s[0] <= e[0]) { // wraparound + p[0] = p[1] = m[0] = m[1] = true; + } + } else { // Start in quadrant 1 - X- Y+ + m[0] = m[1] = p[0] = true; + } + } else { // Start in lower half plane + if (s[0] > 0) { // Start in quadrant 3 - X+ Y- + p[0] = true; + } else { // Start in quadrant 2 - X- Y- + m[1] = p[0] = true; + } + } + } else { // End in quadrant 1 - X- Y+ + if (s[1] >= 0) { // Start in upper half plane + if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ + p[1] = true; + } else { // Start in quadrant 1 - X- Y+ + if (s[0] <= e[0]) { // wraparound + p[0] = p[1] = m[0] = m[1] = true; + } + } + } else { // Start in lower half plane + if (s[0] > 0) { // Start in quadrant 3 - X+ Y- + p[0] = p[1] = true; + } else { // Start in quadrant 2 - X- Y- + m[1] = p[0] = p[1] = true; + } + } + } + } else { // e[1] < 0 - end in lower half plane + if (e[0] > 0) { // End in quadrant 3 - X+ Y+ + if (s[1] >= 0) { // Start in upper half plane + if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ + p[1] = m[0] = m[1] = true; + } else { // Start in quadrant 1 - X- Y+ + m[0] = m[1] = true; + } + } else { // Start in lower half plane + if (s[0] > 0) { // Start in quadrant 3 - X+ Y- + if (s[0] >= e[0]) { // wraparound + p[0] = p[1] = m[0] = m[1] = true; + } + } else { // Start in quadrant 2 - X- Y- + m[1] = true; + } + } + } else { // End in quadrant 2 - X- Y+ + if (s[1] >= 0) { // Start in upper half plane + if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ + p[1] = m[0] = true; + } else { // Start in quadrant 1 - X- Y+ + m[0] = true; + } + } else { // Start in lower half plane + if (s[0] > 0) { // Start in quadrant 3 - X+ Y- + p[0] = p[1] = m[0] = true; + } else { // Start in quadrant 2 - X- Y- + if (s[0] >= e[0]) { // wraparound + p[0] = p[1] = m[0] = m[1] = true; + } + } + } + } + } + // Now check limits based on arc endpoints and axis crossings + for (size_t a = 0; a < 2; ++a) { + the_axis = caxes[a]; + if (limited[a]) { + // If we crossed the axis in the positive half plane, the + // maximum extent along that axis is at center + radius. + // Otherwise it is the maximum coordinate of the start and + // end positions. Similarly for the negative half plane + // and the minimum extent. + float amin = m[a] ? center[a] - radius : std::min(target[the_axis], position[the_axis]); + if (amin < limitsMinPosition(the_axis)) { + limit_error(the_axis, amin); + return true; + } + float amax = p[a] ? center[a] + radius : std::max(target[the_axis], position[the_axis]); + if (amax > limitsMaxPosition(the_axis)) { + limit_error(the_axis, amax); + return true; + } + } + } + return false; + } + + void Cartesian::constrain_line(float* target, float* position) { + auto axes = config->_axes; + auto n_axis = config->_axes->_numberAxis; + + float* current_position = get_mpos(); + MotorMask lim_pin_state = limits_get_state(); + + for (int axis = 0; axis < n_axis; axis++) { + auto axisSetting = axes->_axis[axis]; + // If the axis is moving from the current location and soft limits are on. + if (axisSetting->_softLimits && target[axis] != current_position[axis]) { + // When outside the axis range, only small nudges to clear switches are allowed + bool move_positive = target[axis] > current_position[axis]; + if ((!move_positive && (current_position[axis] < limitsMinPosition(axis))) || + (move_positive && (current_position[axis] > limitsMaxPosition(axis)))) { + // only allow a nudge if a switch is active + if (bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 0)) && + bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 1))) { + target[axis] = current_position[axis]; // cancel the move on this axis + log_debug("Soft limit violation on " << Machine::Axes::_names[axis]); + continue; + } + float jog_dist = target[axis] - current_position[axis]; + + MotorMask axisMotors = Machine::Axes::axes_to_motors(1 << axis); + bool posLimited = bits_are_true(Machine::Axes::posLimitMask, axisMotors); + bool negLimited = bits_are_true(Machine::Axes::negLimitMask, axisMotors); + + // if jog is positive and only the positive switch is active, then kill the move + // if jog is negative and only the negative switch is active, then kill the move + if (posLimited != negLimited) { // XOR, because ambiguous (both) is OK + if ((negLimited && (jog_dist < 0)) || (posLimited && (jog_dist > 0))) { + target[axis] = current_position[axis]; // cancel the move on this axis + log_debug("Jog into active switch blocked on " << Machine::Axes::_names[axis]); + continue; + } + } + + auto nudge_max = axisSetting->_motors[0]->_pulloff; + if (abs(jog_dist) > nudge_max) { + target[axis] = (jog_dist >= 0) ? current_position[axis] + nudge_max : current_position[axis] + nudge_max; + log_debug("Jog amount limited when outside soft limits") + } + continue; + } + + if (target[axis] < limitsMinPosition(axis)) { + target[axis] = limitsMinPosition(axis); + } else if (target[axis] > limitsMaxPosition(axis)) { + target[axis] = limitsMaxPosition(axis); + } else { + continue; + } + log_debug("Jog constrained to axis range"); + } + } + } + + bool Cartesian::invalid_line(float* cartesian) { + auto axes = config->_axes; + auto n_axis = config->_axes->_numberAxis; + + for (int axis = 0; axis < n_axis; axis++) { + float coordinate = cartesian[axis]; + if (axes->_axis[axis]->_softLimits && (coordinate < limitsMinPosition(axis) || coordinate > limitsMaxPosition(axis))) { + limit_error(axis, coordinate); + return true; + } + } + return false; + } + bool Cartesian::cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) { // Motor space is cartesian space, so we do no transform. return mc_move_motors(target, pl_data); diff --git a/FluidNC/src/Kinematics/Cartesian.h b/FluidNC/src/Kinematics/Cartesian.h index 50476241a..2b026cd54 100644 --- a/FluidNC/src/Kinematics/Cartesian.h +++ b/FluidNC/src/Kinematics/Cartesian.h @@ -16,13 +16,17 @@ namespace Kinematics { public: Cartesian() = default; - Cartesian(const Cartesian&) = delete; - Cartesian(Cartesian&&) = delete; + Cartesian(const Cartesian&) = delete; + Cartesian(Cartesian&&) = delete; Cartesian& operator=(const Cartesian&) = delete; - Cartesian& operator=(Cartesian&&) = delete; + Cartesian& operator=(Cartesian&&) = delete; // Kinematic Interface + virtual void constrain_line(float* cartesian, float* position) override; + virtual bool invalid_line(float* cartesian) override; + virtual bool invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) override; + virtual bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) override; virtual void init() override; virtual void init_position() override; diff --git a/FluidNC/src/Kinematics/Kinematics.cpp b/FluidNC/src/Kinematics/Kinematics.cpp index 1a186f7d0..cb30a5ae9 100644 --- a/FluidNC/src/Kinematics/Kinematics.cpp +++ b/FluidNC/src/Kinematics/Kinematics.cpp @@ -8,6 +8,21 @@ #include "Cartesian.h" namespace Kinematics { + void Kinematics::constrain_line(float* target, float* position) { + Assert(_system != nullptr, "No kinematic system"); + return _system->constrain_line(target, position); + } + + bool Kinematics::invalid_line(float* target) { + Assert(_system != nullptr, "No kinematic system"); + return _system->invalid_line(target); + } + + bool Kinematics::invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { + Assert(_system != nullptr, "No kinematic system"); + return _system->invalid_arc(target, position, center, radius, caxes, is_clockwise_arc); + } + bool Kinematics::cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) { Assert(_system != nullptr, "No kinematic system"); return _system->cartesian_to_motors(target, pl_data, position); diff --git a/FluidNC/src/Kinematics/Kinematics.h b/FluidNC/src/Kinematics/Kinematics.h index e8ea30352..9add47c4c 100644 --- a/FluidNC/src/Kinematics/Kinematics.h +++ b/FluidNC/src/Kinematics/Kinematics.h @@ -48,6 +48,10 @@ namespace Kinematics { void motors_to_cartesian(float* cartesian, float* motors, int n_axis); void transform_cartesian_to_motors(float* motors, float* cartesian); + void constrain_line(float* target, float* position); + bool invalid_line(float* target); + bool invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc); + bool canHome(AxisMask axisMask); void releaseMotors(AxisMask axisMask, MotorMask motors); bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited); @@ -60,15 +64,22 @@ namespace Kinematics { public: KinematicSystem() = default; - KinematicSystem(const KinematicSystem&) = delete; - KinematicSystem(KinematicSystem&&) = delete; + KinematicSystem(const KinematicSystem&) = delete; + KinematicSystem(KinematicSystem&&) = delete; KinematicSystem& operator=(const KinematicSystem&) = delete; - KinematicSystem& operator=(KinematicSystem&&) = delete; + KinematicSystem& operator=(KinematicSystem&&) = delete; // Kinematic system interface. virtual bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) = 0; virtual void init() = 0; - virtual void init_position() = 0; // used to set the machine position at init + virtual void init_position() = 0; // used to set the machine position at init + + virtual void constrain_line(float* cartesian, float* position) {} + virtual bool invalid_line(float* cartesian) { return false; } + virtual bool invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { + return false; + } + virtual void motors_to_cartesian(float* cartesian, float* motors, int n_axis) = 0; virtual void transform_cartesian_to_motors(float* motors, float* cartesian) = 0; diff --git a/FluidNC/src/Limits.cpp b/FluidNC/src/Limits.cpp index 9d3200411..c8fc0d74e 100644 --- a/FluidNC/src/Limits.cpp +++ b/FluidNC/src/Limits.cpp @@ -54,65 +54,6 @@ bool ambiguousLimit() { bool soft_limit = false; -// Constrain the coordinates to stay within the soft limit envelope -void constrainToSoftLimits(float* cartesian) { - auto axes = config->_axes; - auto n_axis = config->_axes->_numberAxis; - - float* current_position = get_mpos(); - MotorMask lim_pin_state = limits_get_state(); - - for (int axis = 0; axis < n_axis; axis++) { - auto axisSetting = axes->_axis[axis]; - // If the axis is moving from the current location and soft limits are on. - if (axisSetting->_softLimits && cartesian[axis] != current_position[axis]) { - // When outside the axis range, only small nudges to clear switches are allowed - bool move_positive = cartesian[axis] > current_position[axis]; - if ((!move_positive && (current_position[axis] < limitsMinPosition(axis))) || - (move_positive && (current_position[axis] > limitsMaxPosition(axis)))) { - // only allow a nudge if a switch is active - if (bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 0)) && - bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 1))) { - cartesian[axis] = current_position[axis]; // cancel the move on this axis - log_debug("Soft limit violation on " << Machine::Axes::_names[axis]); - continue; - } - float jog_dist = cartesian[axis] - current_position[axis]; - - MotorMask axisMotors = Machine::Axes::axes_to_motors(1 << axis); - bool posLimited = bits_are_true(Machine::Axes::posLimitMask, axisMotors); - bool negLimited = bits_are_true(Machine::Axes::negLimitMask, axisMotors); - - // if jog is positive and only the positive switch is active, then kill the move - // if jog is negative and only the negative switch is active, then kill the move - if (posLimited != negLimited) { // XOR, because ambiguous (both) is OK - if ((negLimited && (jog_dist < 0)) || (posLimited && (jog_dist > 0))) { - cartesian[axis] = current_position[axis]; // cancel the move on this axis - log_debug("Jog into active switch blocked on " << Machine::Axes::_names[axis]); - continue; - } - } - - auto nudge_max = axisSetting->_motors[0]->_pulloff; - if (abs(jog_dist) > nudge_max) { - cartesian[axis] = (jog_dist >= 0) ? current_position[axis] + nudge_max : current_position[axis] + nudge_max; - log_debug("Jog amount limited when outside soft limits") - } - continue; - } - - if (cartesian[axis] < limitsMinPosition(axis)) { - cartesian[axis] = limitsMinPosition(axis); - } else if (cartesian[axis] > limitsMaxPosition(axis)) { - cartesian[axis] = limitsMaxPosition(axis); - } else { - continue; - } - log_debug("Jog constrained to axis range"); - } - } -} - // Performs a soft limit check. Called from mcline() only. Assumes the machine has been homed, // the workspace volume is in all negative space, and the system is in normal operation. // NOTE: Used by jogging to limit travel within soft-limit volume. @@ -134,20 +75,6 @@ void limit_error(size_t axis, float coordinate) { } while (sys.state != State::Idle); } mc_critical(ExecAlarm::SoftLimit); - log_debug("Soft limits"); -} - -void limits_soft_check(float* cartesian) { - auto axes = config->_axes; - auto n_axis = config->_axes->_numberAxis; - - for (int axis = 0; axis < n_axis; axis++) { - float coordinate = cartesian[axis]; - if (axes->_axis[axis]->_softLimits && (coordinate < limitsMinPosition(axis) || coordinate > limitsMaxPosition(axis))) { - limit_error(axis, coordinate); - return; - } - } } float limitsMaxPosition(size_t axis) { diff --git a/FluidNC/src/Limits.h b/FluidNC/src/Limits.h index 107a875c3..0c2ef2d11 100644 --- a/FluidNC/src/Limits.h +++ b/FluidNC/src/Limits.h @@ -4,7 +4,7 @@ #pragma once -#include "System.h" // AxisMask +#include "System.h" #include @@ -18,12 +18,6 @@ MotorMask limits_get_state(); void limit_error(size_t axis, float cordinate); -// Check for soft limit violations -void limits_soft_check(float* cartesian); - -// Constrain the coordinates to stay within the soft limit envelope -void constrainToSoftLimits(float* cartesian); - float limitsMaxPosition(size_t axis); float limitsMinPosition(size_t axis); diff --git a/FluidNC/src/Machine/Axes.cpp b/FluidNC/src/Machine/Axes.cpp index 4e94efd7b..06f349f9a 100644 --- a/FluidNC/src/Machine/Axes.cpp +++ b/FluidNC/src/Machine/Axes.cpp @@ -13,10 +13,11 @@ EnumItem axisType[] = { { 0, "X" }, { 1, "Y" }, { 2, "Z" }, { 3, "A" }, { 4, "B" namespace Machine { MotorMask Axes::posLimitMask = 0; MotorMask Axes::negLimitMask = 0; - MotorMask Axes::homingMask = 0; MotorMask Axes::limitMask = 0; MotorMask Axes::motorMask = 0; + AxisMask Axes::homingMask = 0; + Axes::Axes() : _axis() { for (int i = 0; i < MAX_N_AXIS; ++i) { _axis[i] = nullptr; diff --git a/FluidNC/src/Machine/Axes.h b/FluidNC/src/Machine/Axes.h index bb2e65588..90bff23de 100644 --- a/FluidNC/src/Machine/Axes.h +++ b/FluidNC/src/Machine/Axes.h @@ -24,10 +24,11 @@ namespace Machine { // Bitmasks to collect information about axes that have limits and homing static MotorMask posLimitMask; static MotorMask negLimitMask; - static MotorMask homingMask; static MotorMask limitMask; static MotorMask motorMask; + static AxisMask homingMask; + Pin _sharedStepperDisable; Pin _sharedStepperReset; @@ -72,7 +73,8 @@ namespace Machine { void config_motors(); std::string maskToNames(AxisMask mask); - bool namesToMask(const char* names, AxisMask& mask); + + bool namesToMask(const char* names, AxisMask& mask); std::string motorMaskToNames(MotorMask mask); diff --git a/FluidNC/src/Machine/Axis.cpp b/FluidNC/src/Machine/Axis.cpp index 3d0be46ce..8c78cd6bb 100644 --- a/FluidNC/src/Machine/Axis.cpp +++ b/FluidNC/src/Machine/Axis.cpp @@ -45,7 +45,7 @@ namespace Machine { m->init(); } } - if (_homing) { + if (_homing->_cycle) { _homing->init(); set_bitnum(Axes::homingMask, _axis); } diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index ef780b54b..644b19371 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -40,6 +40,16 @@ namespace Machine { std::queue Homing::_remainingCycles; uint32_t Homing::_settling_ms; + AxisMask Homing::_unhomed_axes; // Bitmap of axes whose position is unknown + + bool Homing::axis_is_homed(size_t axis) { return bitnum_is_false(_unhomed_axes, axis); } + void Homing::set_axis_homed(size_t axis) { clear_bitnum(_unhomed_axes, axis); } + void Homing::set_axis_unhomed(size_t axis) { set_bitnum(_unhomed_axes, axis); } + void Homing::set_all_axes_unhomed() { _unhomed_axes = Machine::Axes::homingMask; } + void Homing::set_all_axes_homed() { _unhomed_axes = 0; } + + AxisMask Homing::unhomed_axes() { return _unhomed_axes; } + const char* Homing::_phaseNames[] = { "None", "PrePulloff", "FastApproach", "Pulloff0", "SlowApproach", "Pulloff1", "Pulloff2", "CycleDone", }; @@ -319,9 +329,9 @@ namespace Machine { config->_stepping->endLowLatency(); - if (!sys.abort) { // Execute startup scripts after successful homing. - sys.state = State::Idle; // Set to IDLE when complete. - Stepper::go_idle(); // Set steppers to the settings idle state before returning. + if (!sys.abort) { + sys.state = unhomed_axes() ? State::Alarm : State::Idle; + Stepper::go_idle(); // Set steppers to the settings idle state before returning. } } @@ -389,6 +399,7 @@ namespace Machine { // Replace coordinates homed axes with the homing values. for (size_t axis = 0; axis < n_axis; axis++) { if (bitnum_is_true(_cycleAxes, axis)) { + set_axis_homed(axis); mpos[axis] = axes->_axis[axis]->_homing->_mpos; } } diff --git a/FluidNC/src/Machine/Homing.h b/FluidNC/src/Machine/Homing.h index d1a780c22..682e9678a 100644 --- a/FluidNC/src/Machine/Homing.h +++ b/FluidNC/src/Machine/Homing.h @@ -11,6 +11,8 @@ namespace Machine { class Homing : public Configuration::Configurable { + static AxisMask _unhomed_axes; + public: static enum Phase { None = 0, @@ -23,6 +25,14 @@ namespace Machine { CycleDone = 7, } _phase; + static AxisMask unhomed_axes(); + + static void set_axis_homed(size_t axis); + static void set_axis_unhomed(size_t axis); + static bool axis_is_homed(size_t axis); + static void set_all_axes_homed(); + static void set_all_axes_unhomed(); + Homing() = default; static const int AllCycles = 0; // Must be zero. @@ -44,7 +54,7 @@ namespace Machine { // The homing cycles are 1,2,3 etc. 0 means not homed as part of home-all, // but you can still home it manually with e.g. $HA - int _cycle = -1; // what auto-homing cycle does this axis home on? + int _cycle = 0; // what auto-homing cycle does this axis home on? bool _allow_single_axis = true; // Allow use of $H command on this axis bool _positiveDirection = true; float _mpos = 0.0f; // After homing this will be the mpos of the switch location diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index 0b7600c52..a00a18cc0 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -127,9 +127,11 @@ void setup() { // NOTE: The startup script will run after successful completion of the homing cycle, but // not after disabling the alarm locks. Prevents motion startup blocks from crashing into // things uncontrollably. Very bad. + Homing::set_all_axes_homed(); if (config->_start->_mustHome && Machine::Axes::homingMask) { + Homing::set_all_axes_unhomed(); // If there is an axis with homing configured, enter Alarm state on startup - sys.state = State::Alarm; + send_alarm(ExecAlarm::Unhomed); } for (auto s : config->_spindles) { s->init(); diff --git a/FluidNC/src/MotionControl.cpp b/FluidNC/src/MotionControl.cpp index fcb054391..b78999df2 100644 --- a/FluidNC/src/MotionControl.cpp +++ b/FluidNC/src/MotionControl.cpp @@ -109,165 +109,11 @@ static bool mc_linear_no_check(float* target, plan_line_data_t* pl_data, float* } bool mc_linear(float* target, plan_line_data_t* pl_data, float* position) { if (!pl_data->is_jog) { // soft limits for jogs have already been dealt with - limits_soft_check(target); - } - return mc_linear_no_check(target, pl_data, position); -} - -// Check that the arc does not exceed the soft limits using a fast -// algorithm that requires no transcendental functions. -// caxes[] depends on the plane selection via G17, G18, and G19. caxes[0] is the first -// circle plane axis, caxes[1] is the second circle plane axis, and caxes[2] is the -// orthogonal plane. So for G17 mode, caxes[] is { 0, 1, 2} for { X, Y, Z}. G18 is {2, 0, 1} i.e. {Z, X, Y}, and G19 is {1, 2, 0} i.e. {Y, Z, X} -void check_arc_limits(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { - auto axes = config->_axes; - - // Handle the orthognal axis first to get it out of the way. - size_t the_axis = caxes[2]; - if (axes->_axis[the_axis]->_softLimits) { - float amin = std::min(position[the_axis], target[the_axis]); - if (amin < limitsMinPosition(the_axis)) { - limit_error(the_axis, amin); - return; - } - float amax = std::max(position[the_axis], target[the_axis]); - if (amax > limitsMaxPosition(the_axis)) { - limit_error(the_axis, amax); - return; - } - } - - bool limited[2] = { axes->_axis[caxes[0]]->_softLimits, axes->_axis[caxes[1]]->_softLimits }; - - // If neither axis of the circular plane has limits enabled, skip the computation - if (!(limited[0] || limited[1])) { - return; - } - - // The origin for this calculation's coordinate system is at the center of the arc. - // The 0 and 1 entries are for the circle plane - // and the 2 entry is the orthogonal (linear) direction - - float s[2], e[2]; // Start and end of arc in the circle plane, relative to center - - // Depending on the arc direction, set the arc start and end points relative - // to the arc center. Afterwards, end is always counterclockwise relative to - // start, thus simplifying the following decision tree. - if (is_clockwise_arc) { - s[0] = target[caxes[0]] - center[0]; - s[1] = target[caxes[1]] - center[1]; - e[0] = position[caxes[0]] - center[0]; - e[1] = position[caxes[1]] - center[1]; - } else { - s[0] = position[caxes[0]] - center[0]; - s[1] = position[caxes[1]] - center[1]; - e[0] = target[caxes[0]] - center[0]; - e[1] = target[caxes[1]] - center[1]; - } - - // Axis crossings - plus and minus caxes[0] and caxes[1] - bool p[2] = { false, false }; - bool m[2] = { false, false }; - - // The following decision tree determines whether the arc crosses - // the horizontal and vertical axes of the circular plane in the - // positive and negative half planes. There are ways to express - // it in fewer lines of code by converting to alternate - // representations like angles, but this way is computationally - // efficient since it avoids any use of transcendental functions. - // Every path through this decision tree is either 4 or 5 simple - // comparisons. - if (e[1] >= 0) { // End in upper half plane - if (e[0] > 0) { // End in quadrant 0 - X+ Y+ - if (s[1] >= 0) { // Start in upper half plane - if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ - if (s[0] <= e[0]) { // wraparound - p[0] = p[1] = m[0] = m[1] = true; - } - } else { // Start in quadrant 1 - X- Y+ - m[0] = m[1] = p[0] = true; - } - } else { // Start in lower half plane - if (s[0] > 0) { // Start in quadrant 3 - X+ Y- - p[0] = true; - } else { // Start in quadrant 2 - X- Y- - m[1] = p[0] = true; - } - } - } else { // End in quadrant 1 - X- Y+ - if (s[1] >= 0) { // Start in upper half plane - if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ - p[1] = true; - } else { // Start in quadrant 1 - X- Y+ - if (s[0] <= e[0]) { // wraparound - p[0] = p[1] = m[0] = m[1] = true; - } - } - } else { // Start in lower half plane - if (s[0] > 0) { // Start in quadrant 3 - X+ Y- - p[0] = p[1] = true; - } else { // Start in quadrant 2 - X- Y- - m[1] = p[0] = p[1] = true; - } - } - } - } else { // e[1] < 0 - end in lower half plane - if (e[0] > 0) { // End in quadrant 3 - X+ Y+ - if (s[1] >= 0) { // Start in upper half plane - if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ - p[1] = m[0] = m[1] = true; - } else { // Start in quadrant 1 - X- Y+ - m[0] = m[1] = true; - } - } else { // Start in lower half plane - if (s[0] > 0) { // Start in quadrant 3 - X+ Y- - if (s[0] >= e[0]) { // wraparound - p[0] = p[1] = m[0] = m[1] = true; - } - } else { // Start in quadrant 2 - X- Y- - m[1] = true; - } - } - } else { // End in quadrant 2 - X- Y+ - if (s[1] >= 0) { // Start in upper half plane - if (s[0] > 0) { // Start in quadrant 0 - X+ Y+ - p[1] = m[0] = true; - } else { // Start in quadrant 1 - X- Y+ - m[0] = true; - } - } else { // Start in lower half plane - if (s[0] > 0) { // Start in quadrant 3 - X+ Y- - p[0] = p[1] = m[0] = true; - } else { // Start in quadrant 2 - X- Y- - if (s[0] >= e[0]) { // wraparound - p[0] = p[1] = m[0] = m[1] = true; - } - } - } - } - } - - // Now check limits based on arc endpoints and axis crossings - for (size_t a = 0; a < 2; ++a) { - the_axis = caxes[a]; - if (limited[a]) { - // If we crossed the axis in the positive half plane, the - // maximum extent along that axis is at center + radius. - // Otherwise it is the maximum coordinate of the start and - // end positions. Similarly for the negative half plane - // and the minimum extent. - float amin = m[a] ? center[a] - radius : std::min(target[the_axis], position[the_axis]); - if (amin < limitsMinPosition(the_axis)) { - limit_error(the_axis, amin); - return; - } - float amax = p[a] ? center[a] + radius : std::max(target[the_axis], position[the_axis]); - if (amax > limitsMaxPosition(the_axis)) { - limit_error(the_axis, amax); - return; - } + if (config->_kinematics->invalid_line(target)) { + return false; } } + return mc_linear_no_check(target, pl_data, position); } // Execute an arc in offset mode format. position == current xyz, target == target xyz, @@ -291,7 +137,9 @@ void mc_arc(float* target, // The first two axes are the circle plane and the third is the orthogonal plane size_t caxes[3] = { axis_0, axis_1, axis_linear }; - check_arc_limits(target, position, center, radius, caxes, is_clockwise_arc); + if (config->_kinematics->invalid_arc(target, position, center, radius, caxes, is_clockwise_arc)) { + return; + } // Radius vector from center to current location float radii[2] = { -offset[axis_0], -offset[axis_1] }; diff --git a/FluidNC/src/Motors/StandardStepper.cpp b/FluidNC/src/Motors/StandardStepper.cpp index fa519ffcc..20b3aec2b 100644 --- a/FluidNC/src/Motors/StandardStepper.cpp +++ b/FluidNC/src/Motors/StandardStepper.cpp @@ -84,7 +84,9 @@ namespace MotorDrivers { _step_pin.setAttr(Pin::Attr::Output); } - _disable_pin.setAttr(Pin::Attr::Output); + if (_disable_pin.defined()) { + _disable_pin.setAttr(Pin::Attr::Output); + } } void StandardStepper::config_message() { diff --git a/FluidNC/src/Planner.cpp b/FluidNC/src/Planner.cpp index e42e2834f..c0b717448 100644 --- a/FluidNC/src/Planner.cpp +++ b/FluidNC/src/Planner.cpp @@ -306,8 +306,16 @@ bool plan_buffer_line(float* target, plan_line_data_t* pl_data) { int32_t target_steps[MAX_N_AXIS], position_steps[MAX_N_AXIS]; float unit_vec[MAX_N_AXIS], delta_mm; // Copy position data based on type of motion being planned. - copyAxes(position_steps, block->motion.systemMotion ? get_motor_steps() : pl.position); - + if (block->motion.systemMotion) { + copyAxes(position_steps, get_motor_steps()); + } else { + if (!block->is_jog && Homing::unhomed_axes()) { + log_info("Unhomed axes: " << config->_axes->maskToNames(Homing::unhomed_axes())); + send_alarm(ExecAlarm::Unhomed); + return false; + } + copyAxes(position_steps, pl.position); + } auto n_axis = config->_axes->_numberAxis; for (size_t idx = 0; idx < n_axis; idx++) { // Calculate target position in absolute steps, number of steps for each axis, and determine max step events. diff --git a/FluidNC/src/Planner.h b/FluidNC/src/Planner.h index 684c3104f..fe4d21e1f 100644 --- a/FluidNC/src/Planner.h +++ b/FluidNC/src/Planner.h @@ -12,6 +12,7 @@ #include "Config.h" // MAX_N_AXIS #include "SpindleDatatypes.h" // SpindleState #include "GCode.h" // CoolantState +#include "Types.h" // AxisMask #include diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index d73155f64..5e2991af1 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -286,6 +286,7 @@ static Error disable_alarm_lock(const char* value, WebUI::AuthenticationLevel au if (err != Error::Ok) { return err; } + Homing::set_all_axes_homed(); report_feedback_message(Message::AlarmUnlock); sys.state = State::Idle; diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 587c818a5..18c87ef03 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -36,6 +36,7 @@ std::map AlarmNames = { { ExecAlarm::ControlPin, "Control Pin Initially On" }, { ExecAlarm::HomingAmbiguousSwitch, "Ambiguous Switch" }, { ExecAlarm::HardStop, "Hard Stop" }, + { ExecAlarm::Unhomed, "Unhomed" }, }; const char* alarmString(ExecAlarm alarmNumber) { diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index 2b44361dd..da11aa898 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -64,6 +64,7 @@ enum class ExecAlarm : uint8_t { ControlPin = 11, HomingAmbiguousSwitch = 12, HardStop = 13, + Unhomed = 14, }; extern volatile ExecAlarm lastAlarm; @@ -97,6 +98,7 @@ extern NoArgEvent motionCancelEvent; extern NoArgEvent sleepEvent; extern NoArgEvent rtResetEvent; extern NoArgEvent debugEvent; +extern NoArgEvent unhomedEvent; // extern NoArgEvent statusReportEvent; From f08f7c3ca13cb14499cf23f7d2d86808a68fd5a8 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 1 Aug 2023 10:56:09 -1000 Subject: [PATCH 096/212] Constraints to kinematics, post_homing macro, etc --- FluidNC/src/Jog.cpp | 4 +- FluidNC/src/Kinematics/Cartesian.cpp | 9 ++- FluidNC/src/Kinematics/Cartesian.h | 10 ++- FluidNC/src/Kinematics/Kinematics.cpp | 9 ++- FluidNC/src/Kinematics/Kinematics.h | 10 ++- FluidNC/src/Machine/Homing.cpp | 2 +- FluidNC/src/Machine/Macros.cpp | 31 ++++---- FluidNC/src/Machine/Macros.h | 8 +- FluidNC/src/Main.cpp | 54 +------------- FluidNC/src/MotionControl.cpp | 8 +- FluidNC/src/Parking.cpp | 1 + FluidNC/src/Planner.h | 15 ++-- FluidNC/src/ProcessSettings.cpp | 7 +- FluidNC/src/Protocol.cpp | 103 ++++++++++++++++++-------- FluidNC/src/Protocol.h | 5 ++ 15 files changed, 148 insertions(+), 128 deletions(-) diff --git a/FluidNC/src/Jog.cpp b/FluidNC/src/Jog.cpp index 7dc23136c..1768a8bdf 100644 --- a/FluidNC/src/Jog.cpp +++ b/FluidNC/src/Jog.cpp @@ -12,9 +12,7 @@ // Sets up valid jog motion received from g-code parser, checks for soft-limits, and executes the jog. // cancelledInflight will be set to true if was not added to parser due to a cancelJog. Error jog_execute(plan_line_data_t* pl_data, parser_block_t* gc_block, bool* cancelledInflight) { - if (config->_kinematics->invalid_line(gc_block->values.xyz)) { - config->_kinematics->constrain_line(gc_block->values.xyz, gc_state.position); - } + config->_kinematics->constrain_jog(gc_block->values.xyz, pl_data, gc_state.position); // Initialize planner data struct for jogging motions. // NOTE: Spindle and coolant are allowed to fully function with overrides during a jog. diff --git a/FluidNC/src/Kinematics/Cartesian.cpp b/FluidNC/src/Kinematics/Cartesian.cpp index 8735988e9..ff0ad1c8f 100644 --- a/FluidNC/src/Kinematics/Cartesian.cpp +++ b/FluidNC/src/Kinematics/Cartesian.cpp @@ -23,9 +23,11 @@ namespace Kinematics { // caxes[] depends on the plane selection via G17, G18, and G19. caxes[0] is the first // circle plane axis, caxes[1] is the second circle plane axis, and caxes[2] is the // orthogonal plane. So for G17 mode, caxes[] is { 0, 1, 2} for { X, Y, Z}. G18 is {2, 0, 1} i.e. {Z, X, Y}, and G19 is {1, 2, 0} i.e. {Y, Z, X} - bool Cartesian::invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { - auto axes = config->_axes; + bool Cartesian::invalid_arc( + float* target, plan_line_data_t* pl_data, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { + pl_data->limits_checked = true; + auto axes = config->_axes; // Handle the orthognal axis first to get it out of the way. size_t the_axis = caxes[2]; if (axes->_axis[the_axis]->_softLimits) { @@ -174,7 +176,7 @@ namespace Kinematics { return false; } - void Cartesian::constrain_line(float* target, float* position) { + void Cartesian::constrain_jog(float* target, plan_line_data_t* pl_data, float* position) { auto axes = config->_axes; auto n_axis = config->_axes->_numberAxis; @@ -230,6 +232,7 @@ namespace Kinematics { log_debug("Jog constrained to axis range"); } } + pl_data->limits_checked = true; } bool Cartesian::invalid_line(float* cartesian) { diff --git a/FluidNC/src/Kinematics/Cartesian.h b/FluidNC/src/Kinematics/Cartesian.h index 2b026cd54..8ff0d660c 100644 --- a/FluidNC/src/Kinematics/Cartesian.h +++ b/FluidNC/src/Kinematics/Cartesian.h @@ -23,9 +23,15 @@ namespace Kinematics { // Kinematic Interface - virtual void constrain_line(float* cartesian, float* position) override; + virtual void constrain_jog(float* cartesian, plan_line_data_t* pl_data, float* position) override; virtual bool invalid_line(float* cartesian) override; - virtual bool invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) override; + virtual bool invalid_arc(float* target, + plan_line_data_t* pl_data, + float* position, + float center[3], + float radius, + size_t caxes[3], + bool is_clockwise_arc) override; virtual bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) override; virtual void init() override; diff --git a/FluidNC/src/Kinematics/Kinematics.cpp b/FluidNC/src/Kinematics/Kinematics.cpp index cb30a5ae9..d0180d466 100644 --- a/FluidNC/src/Kinematics/Kinematics.cpp +++ b/FluidNC/src/Kinematics/Kinematics.cpp @@ -8,9 +8,9 @@ #include "Cartesian.h" namespace Kinematics { - void Kinematics::constrain_line(float* target, float* position) { + void Kinematics::constrain_jog(float* target, plan_line_data_t* pl_data, float* position) { Assert(_system != nullptr, "No kinematic system"); - return _system->constrain_line(target, position); + return _system->constrain_jog(target, pl_data, position); } bool Kinematics::invalid_line(float* target) { @@ -18,9 +18,10 @@ namespace Kinematics { return _system->invalid_line(target); } - bool Kinematics::invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { + bool Kinematics::invalid_arc( + float* target, plan_line_data_t* pl_data, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { Assert(_system != nullptr, "No kinematic system"); - return _system->invalid_arc(target, position, center, radius, caxes, is_clockwise_arc); + return _system->invalid_arc(target, pl_data, position, center, radius, caxes, is_clockwise_arc); } bool Kinematics::cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) { diff --git a/FluidNC/src/Kinematics/Kinematics.h b/FluidNC/src/Kinematics/Kinematics.h index 9add47c4c..87a7ad6a2 100644 --- a/FluidNC/src/Kinematics/Kinematics.h +++ b/FluidNC/src/Kinematics/Kinematics.h @@ -48,9 +48,10 @@ namespace Kinematics { void motors_to_cartesian(float* cartesian, float* motors, int n_axis); void transform_cartesian_to_motors(float* motors, float* cartesian); - void constrain_line(float* target, float* position); + void constrain_jog(float* target, plan_line_data_t* pl_data, float* position); bool invalid_line(float* target); - bool invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc); + bool invalid_arc( + float* target, plan_line_data_t* pl_data, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc); bool canHome(AxisMask axisMask); void releaseMotors(AxisMask axisMask, MotorMask motors); @@ -74,9 +75,10 @@ namespace Kinematics { virtual void init() = 0; virtual void init_position() = 0; // used to set the machine position at init - virtual void constrain_line(float* cartesian, float* position) {} + virtual void constrain_jog(float* cartesian, plan_line_data_t* pl_data, float* position) {} virtual bool invalid_line(float* cartesian) { return false; } - virtual bool invalid_arc(float* target, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { + virtual bool invalid_arc( + float* target, plan_line_data_t* pl_data, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { return false; } diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index 644b19371..cc6e2aaa5 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -59,7 +59,7 @@ namespace Machine { float target[config->_axes->_numberAxis]; axisVector(_phaseAxes, _phaseMotors, _phase, target, rate, _settling_ms); - plan_line_data_t plan_data; + plan_line_data_t plan_data = {}; plan_data.spindle_speed = 0; plan_data.motion = {}; plan_data.motion.systemMotion = 1; diff --git a/FluidNC/src/Machine/Macros.cpp b/FluidNC/src/Machine/Macros.cpp index a493af8ea..3d1042a09 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -7,14 +7,19 @@ #include "src/Machine/MachineConfig.h" // config void MacroEvent::run(void* arg) { + int n = int(arg); if (sys.state != State::Idle) { log_error("Macro can only be used in idle state"); return; } - log_debug("Macro " << _num); - config->_macros->run_macro(_num); + log_debug("Macro " << n); + config->_macros->run_macro(n); } +std::string Macros::_startup_line[n_startup_lines]; +std::string Macros::_macro[n_macros]; +std::string Macros::_post_homing_line; + MacroEvent macro0Event { 0 }; MacroEvent macro1Event { 1 }; MacroEvent macro2Event { 2 }; @@ -47,18 +52,18 @@ Cmd findOverride(std::string name) { return it == overrideCodes.end() ? Cmd::None : it->second; } -bool Macros::run_macro(size_t index) { - if (index >= n_macros) { - return false; - } - auto macro = _macro[index]; - if (macro == "") { +bool Macros::run_macro(size_t n) { + return run_macro(_macro[n]); +} + +bool Macros::run_macro(const std::string& s) { + if (s == "") { return true; } char c; - for (int i = 0; i < macro.length(); i++) { - c = macro[i]; + for (int i = 0; i < s.length(); i++) { + c = s[i]; switch (c) { case '&': // & is a proxy for newlines in macros, because you cannot @@ -66,13 +71,13 @@ bool Macros::run_macro(size_t index) { WebUI::inputBuffer.push('\n'); break; case '#': - if ((i + 3) > macro.length()) { + if ((i + 3) > s.length()) { log_error("Missing characters after # realtime escape in macro"); return false; } { - std::string s(macro.c_str() + i + 1, 2); - Cmd cmd = findOverride(s); + std::string s1(s.c_str() + i + 1, 2); + Cmd cmd = findOverride(s1); if (cmd == Cmd::None) { log_error("Bad #xx realtime escape in macro"); return false; diff --git a/FluidNC/src/Machine/Macros.h b/FluidNC/src/Machine/Macros.h index ac785b10f..825ba6acc 100644 --- a/FluidNC/src/Machine/Macros.h +++ b/FluidNC/src/Machine/Macros.h @@ -30,13 +30,16 @@ namespace Machine { static const int n_macros = 4; private: - std::string _startup_line[n_startup_lines]; - std::string _macro[n_macros]; + static std::string _startup_line[n_startup_lines]; + static std::string _macro[n_macros]; public: + static std::string _post_homing_line; + Macros() = default; bool run_macro(size_t index); + bool run_macro(const std::string& s); std::string startup_line(size_t index) { if (index >= n_startup_lines) { @@ -63,6 +66,7 @@ namespace Machine { handler.item("macro1", _macro[1]); handler.item("macro2", _macro[2]); handler.item("macro3", _macro[3]); + handler.item("post_homing", _post_homing_line); } ~Macros() {} diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index a00a18cc0..0035bf71b 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -107,32 +107,12 @@ void setup() { config->_control->init(); config->_kinematics->init(); + + limits_init(); } // Initialize system state. if (sys.state != State::ConfigAlarm) { - if (FORCE_INITIALIZATION_ALARM) { - // Force ALARM state upon a power-cycle or hard reset. - sys.state = State::Alarm; - } else { - sys.state = State::Idle; - } - - limits_init(); - - // Check for power-up and set system alarm if homing is enabled to force homing cycle - // by setting alarm state. Alarm locks out all g-code commands, including the - // startup scripts, but allows access to settings and internal commands. Only a homing - // cycle '$H' or kill alarm locks '$X' will disable the alarm. - // NOTE: The startup script will run after successful completion of the homing cycle, but - // not after disabling the alarm locks. Prevents motion startup blocks from crashing into - // things uncontrollably. Very bad. - Homing::set_all_axes_homed(); - if (config->_start->_mustHome && Machine::Axes::homingMask) { - Homing::set_all_axes_unhomed(); - // If there is an axis with homing configured, enter Alarm state on startup - send_alarm(ExecAlarm::Unhomed); - } for (auto s : config->_spindles) { s->init(); } @@ -154,40 +134,12 @@ void setup() { } allChannels.deregistration(&startupLog); -} - -static void reset_variables() { - // Reset primary systems. - system_reset(); - protocol_reset(); - gc_init(); // Set g-code parser to default state - // Spindle should be set either by the configuration - // or by the post-configuration fixup, but we test - // it anyway just for safety. We want to avoid any - // possibility of crashing at this point. - - plan_reset(); // Clear block buffer and planner variables - - if (sys.state != State::ConfigAlarm) { - if (spindle) { - spindle->stop(); - report_ovr_counter = 0; // Set to report change immediately - } - Stepper::reset(); // Clear stepper subsystem variables - } - - // Sync cleared gcode and planner positions to current system position. - plan_sync_position(); - gc_sync_position(); - allChannels.flushRx(); - report_init_message(allChannels); - mc_init(); + protocol_send_event(&startEvent); } void loop() { static int tries = 0; try { - reset_variables(); // Start the main loop. Processes program inputs and executes them. // This can exit on a system abort condition, in which case run_once() // is re-executed by an enclosing loop. It can also exit via a diff --git a/FluidNC/src/MotionControl.cpp b/FluidNC/src/MotionControl.cpp index b78999df2..86d69bb39 100644 --- a/FluidNC/src/MotionControl.cpp +++ b/FluidNC/src/MotionControl.cpp @@ -108,7 +108,7 @@ static bool mc_linear_no_check(float* target, plan_line_data_t* pl_data, float* return config->_kinematics->cartesian_to_motors(target, pl_data, position); } bool mc_linear(float* target, plan_line_data_t* pl_data, float* position) { - if (!pl_data->is_jog) { // soft limits for jogs have already been dealt with + if (!pl_data->is_jog && !pl_data->limits_checked) { // soft limits for jogs have already been dealt with if (config->_kinematics->invalid_line(target)) { return false; } @@ -137,7 +137,7 @@ void mc_arc(float* target, // The first two axes are the circle plane and the third is the orthogonal plane size_t caxes[3] = { axis_0, axis_1, axis_linear }; - if (config->_kinematics->invalid_arc(target, position, center, radius, caxes, is_clockwise_arc)) { + if (config->_kinematics->invalid_arc(target, pl_data, position, center, radius, caxes, is_clockwise_arc)) { return; } @@ -251,7 +251,7 @@ void mc_arc(float* target, position[i] += linear_per_segment[i]; } pl_data->feed_rate = original_feedrate; // This restores the feedrate kinematics may have altered - mc_linear_no_check(position, pl_data, previous_position); + mc_linear(position, pl_data, previous_position); previous_position[axis_0] = position[axis_0]; previous_position[axis_1] = position[axis_1]; previous_position[axis_linear] = position[axis_linear]; @@ -262,7 +262,7 @@ void mc_arc(float* target, } } // Ensure last segment arrives at target location. - mc_linear_no_check(target, pl_data, previous_position); + mc_linear(target, pl_data, previous_position); } // Execute dwell in seconds. diff --git a/FluidNC/src/Parking.cpp b/FluidNC/src/Parking.cpp index 2eaf390a6..a5f7584fb 100644 --- a/FluidNC/src/Parking.cpp +++ b/FluidNC/src/Parking.cpp @@ -64,6 +64,7 @@ void Parking::setup() { plan_data.motion.systemMotion = 1; plan_data.motion.noFeedOverride = 1; plan_data.line_number = PARKING_MOTION_LINE_NUMBER; + plan_data.is_jog = false; block = plan_get_current_block(); if (block) { diff --git a/FluidNC/src/Planner.h b/FluidNC/src/Planner.h index fe4d21e1f..888999734 100644 --- a/FluidNC/src/Planner.h +++ b/FluidNC/src/Planner.h @@ -62,13 +62,14 @@ struct plan_block_t { // Planner data prototype. Must be used when passing new motions to the planner. struct plan_line_data_t { - float feed_rate; // Desired feed rate for line motion. Value is ignored, if rapid motion. - SpindleSpeed spindle_speed; // Desired spindle speed through line motion. - PlMotion motion; // Bitflag variable to indicate motion conditions. See defines above. - SpindleState spindle; // Spindle enable state - CoolantState coolant; // Coolant state - int32_t line_number; // Desired line number to report when executing. - bool is_jog; // true if this was generated due to a jog command + float feed_rate; // Desired feed rate for line motion. Value is ignored, if rapid motion. + SpindleSpeed spindle_speed; // Desired spindle speed through line motion. + PlMotion motion; // Bitflag variable to indicate motion conditions. See defines above. + SpindleState spindle; // Spindle enable state + CoolantState coolant; // Coolant state + int32_t line_number; // Desired line number to report when executing. + bool is_jog; // true if this was generated due to a jog command + bool limits_checked; // true if soft limits already checked }; void plan_init(); diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 5e2991af1..4f9b5fc48 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -329,7 +329,7 @@ static Error home(AxisMask axisMask) { protocol_execute_realtime(); } while (sys.state == State::Homing); - settings_execute_startup(); + config->_macros->run_macro(Macros::_post_homing_line); return Error::Ok; } @@ -988,6 +988,9 @@ Error settings_execute_line(char* line, Channel& out, WebUI::AuthenticationLevel } void settings_execute_startup() { + if (sys.state != State::Idle) { + return; + } Error status_code; for (int i = 0; i < config->_macros->n_startup_lines; i++) { auto str = config->_macros->startup_line(i); @@ -997,7 +1000,7 @@ void settings_execute_startup() { char gcline[256]; strncpy(gcline, str.c_str(), 255); status_code = gc_execute_line(gcline); - // Uart0 << ">" << gcline << ":"; + // Uart0 << ">" << gcline << "\n"; if (status_code != Error::Ok) { log_error("Startup line: " << errorString(status_code)); } diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 18c87ef03..008136320 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -37,6 +37,7 @@ std::map AlarmNames = { { ExecAlarm::HomingAmbiguousSwitch, "Ambiguous Switch" }, { ExecAlarm::HardStop, "Hard Stop" }, { ExecAlarm::Unhomed, "Unhomed" }, + { ExecAlarm::Init, "Init" }, }; const char* alarmString(ExecAlarm alarmNumber) { @@ -234,39 +235,12 @@ static void alarm_msg(ExecAlarm alarm_code) { delay_ms(500); // Force delay to ensure message clears serial write buffer. } -static void check_startup_state() { - // Check for and report alarm state after a reset, error, or an initial power up. - // 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. - if (sys.state == State::ConfigAlarm) { - report_error_message(Message::ConfigAlarmLock); - } else { - // Perform some machine checks to make sure everything is good to go. - if (config->_start->_checkLimits) { - if (config->_axes->hasHardLimits() && limits_get_state()) { - sys.state = State::Alarm; // Ensure alarm state is active. - alarm_msg(ExecAlarm::HardLimit); - report_error_message(Message::CheckLimits); - } - } - if (config->_control->startup_check()) { - send_alarm(ExecAlarm::ControlPin); - } else if (sys.state == State::Alarm || sys.state == State::Sleep) { - report_feedback_message(Message::AlarmLock); - sys.state = State::Alarm; // Ensure alarm state is set. - } else { - // All systems go! - sys.state = State::Idle; - settings_execute_startup(); // Execute startup script. - } - } -} +static void check_startup_state() {} const uint32_t heapWarnThreshold = 15000; uint32_t heapLowWater = UINT_MAX; void protocol_main_loop() { - check_startup_state(); start_polling(); // --------------------------------------------------------------------------------- @@ -368,9 +342,71 @@ void protocol_execute_realtime() { } } -// Executes run-time commands, when required. This function is the primary state -// machine that controls the various real-time features. -// NOTE: Do not alter this unless you know exactly what you are doing! +static void protocol_run_startup_lines() { + settings_execute_startup(); // Execute startup script. +} + +static void protocol_do_restart() { + // Reset primary systems. + system_reset(); + protocol_reset(); + gc_init(); // Set g-code parser to default state + // Spindle should be set either by the configuration + // or by the post-configuration fixup, but we test + // it anyway just for safety. We want to avoid any + // possibility of crashing at this point. + + plan_reset(); // Clear block buffer and planner variables + + if (sys.state != State::ConfigAlarm) { + if (spindle) { + spindle->stop(); + report_ovr_counter = 0; // Set to report change immediately + } + Stepper::reset(); // Clear stepper subsystem variables + } + + // Sync cleared gcode and planner positions to current system position. + plan_sync_position(); + gc_sync_position(); + allChannels.flushRx(); + report_init_message(allChannels); + mc_init(); + sys.state = State::Idle; + + // Check for and report alarm state after a reset, error, or an initial power up. + // 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. + if (sys.state == State::ConfigAlarm) { + report_error_message(Message::ConfigAlarmLock); + return; + } + + // Perform some machine checks to make sure everything is good to go. + if (config->_start->_checkLimits && config->_axes->hasHardLimits() && limits_get_state()) { + mc_critical(ExecAlarm::HardLimit); + } else if (config->_control->startup_check()) { + send_alarm(ExecAlarm::ControlPin); + } +} + +static void protocol_do_start() { + protocol_send_event(&restartEvent); + sys.state = State::Critical; + if (FORCE_INITIALIZATION_ALARM) { + // Force ALARM state upon a power-cycle or hard reset. + send_alarm(ExecAlarm::Init); + return; + } + Homing::set_all_axes_homed(); + if (config->_start->_mustHome && Machine::Axes::homingMask) { + Homing::set_all_axes_unhomed(); + // If there is an axis with homing configured, enter Alarm state on startup + send_alarm(ExecAlarm::Unhomed); + } + protocol_send_event(&runStartupLinesEvent); +} + static void protocol_do_alarm(void* alarmVoid) { lastAlarm = (ExecAlarm)((int)alarmVoid); if (spindle->_off_on_alarm) { @@ -1008,7 +1044,7 @@ void protocol_do_rt_reset() { sys.state == State::Alarm; } protocol_do_late_reset(); - sys.abort = true; // Trigger system abort. + protocol_send_event(&restartEvent); } ArgEvent feedOverrideEvent { protocol_do_feed_override }; @@ -1027,6 +1063,9 @@ NoArgEvent cycleStopEvent { protocol_do_cycle_stop }; NoArgEvent motionCancelEvent { protocol_do_motion_cancel }; NoArgEvent sleepEvent { protocol_do_sleep }; NoArgEvent debugEvent { report_realtime_debug }; +NoArgEvent startEvent { protocol_do_start }; +NoArgEvent restartEvent { protocol_do_restart }; +NoArgEvent runStartupLinesEvent { protocol_run_startup_lines }; NoArgEvent rtResetEvent { protocol_do_rt_reset }; diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index da11aa898..331e5d677 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -65,6 +65,7 @@ enum class ExecAlarm : uint8_t { HomingAmbiguousSwitch = 12, HardStop = 13, Unhomed = 14, + Init = 15, }; extern volatile ExecAlarm lastAlarm; @@ -99,6 +100,10 @@ extern NoArgEvent sleepEvent; extern NoArgEvent rtResetEvent; extern NoArgEvent debugEvent; extern NoArgEvent unhomedEvent; +extern NoArgEvent startEvent; +extern NoArgEvent restartEvent; + +extern NoArgEvent runStartupLinesEvent; // extern NoArgEvent statusReportEvent; From 0495d9ccaaa831b0c57d6d8fcad63b0f6c6d0986 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 3 Aug 2023 09:48:07 -1000 Subject: [PATCH 097/212] Propagate Alarm state across ctrl-x resets --- FluidNC/src/Protocol.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 008136320..4235f8200 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -372,7 +372,6 @@ static void protocol_do_restart() { allChannels.flushRx(); report_init_message(allChannels); mc_init(); - sys.state = State::Idle; // Check for and report alarm state after a reset, error, or an initial power up. // NOTE: Sleep mode disables the stepper drivers and position can't be guaranteed. @@ -403,6 +402,8 @@ static void protocol_do_start() { Homing::set_all_axes_unhomed(); // If there is an axis with homing configured, enter Alarm state on startup send_alarm(ExecAlarm::Unhomed); + } else { + sys.state = State::Idle; } protocol_send_event(&runStartupLinesEvent); } @@ -1038,10 +1039,11 @@ void protocol_do_rt_reset() { Machine::Homing::fail(ExecAlarm::HomingFailReset); } else if (sys.state == State::Cycle || sys.state == State::Jog || sys.step_control.executeHold || sys.step_control.executeSysMotion) { Stepper::stop_stepping(); // Stop stepping immediately, possibly losing position - // Probably unnecessary because system will restart soon - // send_alarm(ExecAlarm::AbortCycle); + protocol_do_alarm((void*)ExecAlarm::AbortCycle); } else if (sys.state == State::Critical) { - sys.state == State::Alarm; + sys.state = State::Alarm; + } else { + sys.state = State::Idle; } protocol_do_late_reset(); protocol_send_event(&restartEvent); @@ -1091,7 +1093,6 @@ void protocol_send_event(Event* evt, void* arg) { void protocol_handle_events() { EventItem item; while (xQueueReceive(event_queue, &item, 0)) { - // log_debug("event"); item.event->run(item.arg); } } From 2f02a9f6b8d1e8c0f2706f24f49988d106e803ee Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 3 Aug 2023 10:12:25 -1000 Subject: [PATCH 098/212] Startup lines behave like other macros, with a log_info message --- FluidNC/src/Machine/Macros.cpp | 1 + FluidNC/src/Machine/Macros.h | 16 +--------------- FluidNC/src/ProcessSettings.cpp | 11 +++++++---- 3 files changed, 9 insertions(+), 19 deletions(-) diff --git a/FluidNC/src/Machine/Macros.cpp b/FluidNC/src/Machine/Macros.cpp index 3d1042a09..2a058375e 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -61,6 +61,7 @@ bool Macros::run_macro(const std::string& s) { return true; } + log_info("Running macro: " << s); char c; for (int i = 0; i < s.length(); i++) { c = s[i]; diff --git a/FluidNC/src/Machine/Macros.h b/FluidNC/src/Machine/Macros.h index 825ba6acc..ec3081d3d 100644 --- a/FluidNC/src/Machine/Macros.h +++ b/FluidNC/src/Machine/Macros.h @@ -30,10 +30,10 @@ namespace Machine { static const int n_macros = 4; private: - static std::string _startup_line[n_startup_lines]; static std::string _macro[n_macros]; public: + static std::string _startup_line[n_startup_lines]; static std::string _post_homing_line; Macros() = default; @@ -41,20 +41,6 @@ namespace Machine { bool run_macro(size_t index); bool run_macro(const std::string& s); - std::string startup_line(size_t index) { - if (index >= n_startup_lines) { - return ""; - } - auto s = _startup_line[index]; - if (s == "") { - return s; - } - // & is a proxy for newlines in startup lines, because you cannot - // enter a newline directly in a config file string value. - std::replace(s.begin(), s.end(), '&', '\n'); - return s + "\n"; - } - // Configuration helpers: // TODO: We could validate the startup lines diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 4f9b5fc48..9aad47233 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -440,9 +440,9 @@ static Error get_report_build_info(const char* value, WebUI::AuthenticationLevel } return Error::InvalidStatement; } -static Error report_startup_lines(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { +static Error show_startup_lines(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { for (int i = 0; i < config->_macros->n_startup_lines; i++) { - log_to(out, "$N", i << "=" << config->_macros->startup_line(i)); + log_to(out, "$N", i << "=" << config->_macros->_startup_line[i]); } return Error::Ok; } @@ -798,7 +798,7 @@ void make_user_commands() { new UserCommand("SLP", "System/Sleep", go_to_sleep, notIdleOrAlarm); new UserCommand("I", "Build/Info", get_report_build_info, notIdleOrAlarm); - new UserCommand("N", "GCode/StartupLines", report_startup_lines, notIdleOrAlarm); + new UserCommand("N", "GCode/StartupLines", show_startup_lines, notIdleOrAlarm); new UserCommand("RST", "Settings/Restore", restore_settings, notIdleOrAlarm, WA); new UserCommand("Heap", "Heap/Show", showHeap, anyState); @@ -993,8 +993,10 @@ void settings_execute_startup() { } Error status_code; for (int i = 0; i < config->_macros->n_startup_lines; i++) { - auto str = config->_macros->startup_line(i); + auto str = config->_macros->_startup_line[i]; if (str.length()) { + config->_macros->run_macro(str); +#if 0 // We have to copy this to a mutable array because // gc_execute_line modifies the line while parsing. char gcline[256]; @@ -1004,6 +1006,7 @@ void settings_execute_startup() { if (status_code != Error::Ok) { log_error("Startup line: " << errorString(status_code)); } +#endif } } } From 50f06ab2b0a1070cf8162d76f3f7537b9a417de3 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 3 Aug 2023 10:42:07 -1000 Subject: [PATCH 099/212] after_homing, after_unlock, after_reset macros --- FluidNC/src/Machine/Macros.cpp | 4 +++- FluidNC/src/Machine/Macros.h | 8 ++++++-- FluidNC/src/ProcessSettings.cpp | 4 ++-- FluidNC/src/Protocol.cpp | 4 ++++ 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/FluidNC/src/Machine/Macros.cpp b/FluidNC/src/Machine/Macros.cpp index 2a058375e..588c9f858 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -18,7 +18,9 @@ void MacroEvent::run(void* arg) { std::string Macros::_startup_line[n_startup_lines]; std::string Macros::_macro[n_macros]; -std::string Macros::_post_homing_line; +std::string Macros::_after_homing_line; +std::string Macros::_after_reset_line; +std::string Macros::_after_unlock_line; MacroEvent macro0Event { 0 }; MacroEvent macro1Event { 1 }; diff --git a/FluidNC/src/Machine/Macros.h b/FluidNC/src/Machine/Macros.h index ec3081d3d..f22cde18c 100644 --- a/FluidNC/src/Machine/Macros.h +++ b/FluidNC/src/Machine/Macros.h @@ -34,7 +34,9 @@ namespace Machine { public: static std::string _startup_line[n_startup_lines]; - static std::string _post_homing_line; + static std::string _after_homing_line; + static std::string _after_reset_line; + static std::string _after_unlock_line; Macros() = default; @@ -52,7 +54,9 @@ namespace Machine { handler.item("macro1", _macro[1]); handler.item("macro2", _macro[2]); handler.item("macro3", _macro[3]); - handler.item("post_homing", _post_homing_line); + handler.item("after_homing", _after_homing_line); + handler.item("after_reset", _after_reset_line); + handler.item("after_unlock", _after_unlock_line); } ~Macros() {} diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 9aad47233..2d1f7014e 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -290,7 +290,7 @@ static Error disable_alarm_lock(const char* value, WebUI::AuthenticationLevel au report_feedback_message(Message::AlarmUnlock); sys.state = State::Idle; - // Don't run startup script. Prevents stored moves in startup from causing accidents. + config->_macros->run_macro(Macros::_after_unlock_line); } // Otherwise, no effect. return Error::Ok; } @@ -329,7 +329,7 @@ static Error home(AxisMask axisMask) { protocol_execute_realtime(); } while (sys.state == State::Homing); - config->_macros->run_macro(Macros::_post_homing_line); + config->_macros->run_macro(Macros::_after_homing_line); return Error::Ok; } diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 4235f8200..efea0c3f8 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -386,6 +386,10 @@ static void protocol_do_restart() { mc_critical(ExecAlarm::HardLimit); } else if (config->_control->startup_check()) { send_alarm(ExecAlarm::ControlPin); + } else { + if (sys.state == State::Idle) { + config->_macros->run_macro(Macros::_after_reset_line); + } } } From c0924f98f42c454667e3bd2492d282975e0a32dc Mon Sep 17 00:00:00 2001 From: AJ Quick Date: Fri, 4 Aug 2023 11:15:52 -0600 Subject: [PATCH 100/212] 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 3b4cc9f5d1f790f51ee450d14c5f8337893758b2 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 4 Aug 2023 08:47:10 -1000 Subject: [PATCH 101/212] SoftLimits do not require $x --- FluidNC/src/Protocol.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index efea0c3f8..cf1cc87ee 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -418,10 +418,16 @@ static void protocol_do_alarm(void* alarmVoid) { spindle->stop(); } alarm_msg(lastAlarm); - if (lastAlarm == ExecAlarm::HardLimit || lastAlarm == ExecAlarm::SoftLimit || lastAlarm == ExecAlarm::HardStop) { + if (lastAlarm == ExecAlarm::HardLimit || lastAlarm == ExecAlarm::HardStop) { sys.state = State::Critical; // Set system alarm state report_error_message(Message::CriticalEvent); protocol_disable_steppers(); + Homing::set_all_axes_unhomed(); + return; + } + if (lastAlarm == ExecAlarm::SoftLimit) { + sys.state = State::Critical; // Set system alarm state + report_error_message(Message::CriticalEvent); return; } sys.state = State::Alarm; @@ -1045,8 +1051,12 @@ void protocol_do_rt_reset() { Stepper::stop_stepping(); // Stop stepping immediately, possibly losing position protocol_do_alarm((void*)ExecAlarm::AbortCycle); } else if (sys.state == State::Critical) { - sys.state = State::Alarm; - } else { + if (Homing::unhomed_axes()) { + protocol_do_alarm((void*)ExecAlarm::Unhomed); + } else { + sys.state = State::Idle; + } + } else if (sys.state != State::Alarm) { sys.state = State::Idle; } protocol_do_late_reset(); From db1e68a696a8f3da7ef1bd1d94bb123380634242 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 5 Aug 2023 14:15:07 -1000 Subject: [PATCH 102/212] Created a Macro class for easier use of macros --- FluidNC/src/Machine/Macros.cpp | 32 +++++++++++-------------- FluidNC/src/Machine/Macros.h | 42 +++++++++++++++++---------------- FluidNC/src/ProcessSettings.cpp | 26 +++++--------------- FluidNC/src/Protocol.cpp | 2 +- 4 files changed, 43 insertions(+), 59 deletions(-) diff --git a/FluidNC/src/Machine/Macros.cpp b/FluidNC/src/Machine/Macros.cpp index 588c9f858..f58379e73 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -12,15 +12,14 @@ void MacroEvent::run(void* arg) { log_error("Macro can only be used in idle state"); return; } - log_debug("Macro " << n); - config->_macros->run_macro(n); + config->_macros->_macro[n].run(); } -std::string Macros::_startup_line[n_startup_lines]; -std::string Macros::_macro[n_macros]; -std::string Macros::_after_homing_line; -std::string Macros::_after_reset_line; -std::string Macros::_after_unlock_line; +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 }; @@ -54,19 +53,16 @@ Cmd findOverride(std::string name) { return it == overrideCodes.end() ? Cmd::None : it->second; } -bool Macros::run_macro(size_t n) { - return run_macro(_macro[n]); -} - -bool Macros::run_macro(const std::string& s) { - if (s == "") { +bool Macro::run() { + const std::string& s = _gcode; + if (_gcode == "") { return true; } - log_info("Running macro: " << s); + log_info("Running macro " << _name << ": " << _gcode); char c; - for (int i = 0; i < s.length(); i++) { - c = s[i]; + for (int i = 0; i < _gcode.length(); i++) { + c = _gcode[i]; switch (c) { case '&': // & is a proxy for newlines in macros, because you cannot @@ -74,12 +70,12 @@ bool Macros::run_macro(const std::string& s) { WebUI::inputBuffer.push('\n'); break; case '#': - if ((i + 3) > s.length()) { + if ((i + 3) > _gcode.length()) { log_error("Missing characters after # realtime escape in macro"); return false; } { - std::string s1(s.c_str() + i + 1, 2); + std::string s1(_gcode.c_str() + i + 1, 2); Cmd cmd = findOverride(s1); if (cmd == Cmd::None) { log_error("Bad #xx realtime escape in macro"); diff --git a/FluidNC/src/Machine/Macros.h b/FluidNC/src/Machine/Macros.h index f22cde18c..a462bc0c6 100644 --- a/FluidNC/src/Machine/Macros.h +++ b/FluidNC/src/Machine/Macros.h @@ -24,39 +24,41 @@ extern MacroEvent macro2Event; extern MacroEvent macro3Event; namespace Machine { + class Macro { + public: + std::string _gcode; + 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 = 4; - private: - static std::string _macro[n_macros]; - - public: - static std::string _startup_line[n_startup_lines]; - static std::string _after_homing_line; - static std::string _after_reset_line; - static std::string _after_unlock_line; + static Macro _macro[n_macros]; + static Macro _startup_line[n_startup_lines]; + static Macro _after_homing; + static Macro _after_reset; + static Macro _after_unlock; Macros() = default; - bool run_macro(size_t index); - bool run_macro(const std::string& s); - // Configuration helpers: // TODO: We could validate the startup lines void group(Configuration::HandlerBase& handler) override { - handler.item("startup_line0", _startup_line[0]); - handler.item("startup_line1", _startup_line[1]); - handler.item("macro0", _macro[0]); - handler.item("macro1", _macro[1]); - handler.item("macro2", _macro[2]); - handler.item("macro3", _macro[3]); - handler.item("after_homing", _after_homing_line); - handler.item("after_reset", _after_reset_line); - handler.item("after_unlock", _after_unlock_line); + 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/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 2d1f7014e..fccfd91ff 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -290,7 +290,7 @@ static Error disable_alarm_lock(const char* value, WebUI::AuthenticationLevel au report_feedback_message(Message::AlarmUnlock); sys.state = State::Idle; - config->_macros->run_macro(Macros::_after_unlock_line); + config->_macros->_after_unlock.run(); } // Otherwise, no effect. return Error::Ok; } @@ -329,7 +329,7 @@ static Error home(AxisMask axisMask) { protocol_execute_realtime(); } while (sys.state == State::Homing); - config->_macros->run_macro(Macros::_after_homing_line); + config->_macros->_after_homing.run(); return Error::Ok; } @@ -442,7 +442,7 @@ static Error get_report_build_info(const char* value, WebUI::AuthenticationLevel } static Error show_startup_lines(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { for (int i = 0; i < config->_macros->n_startup_lines; i++) { - log_to(out, "$N", i << "=" << config->_macros->_startup_line[i]); + log_to(out, "$N", i << "=" << config->_macros->_startup_line[i]._gcode); } return Error::Ok; } @@ -597,9 +597,9 @@ static Error motors_init(const char* value, WebUI::AuthenticationLevel auth_leve static Error macros_run(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { if (value) { - log_info("Running macro " << *value); + log_info("Running macro" << *value); size_t macro_num = (*value) - '0'; - config->_macros->run_macro(macro_num); + config->_macros->_macro[macro_num].run(); return Error::Ok; } log_error("$Macros/Run requires a macro number argument"); @@ -993,21 +993,7 @@ void settings_execute_startup() { } Error status_code; for (int i = 0; i < config->_macros->n_startup_lines; i++) { - auto str = config->_macros->_startup_line[i]; - if (str.length()) { - config->_macros->run_macro(str); -#if 0 - // We have to copy this to a mutable array because - // gc_execute_line modifies the line while parsing. - char gcline[256]; - strncpy(gcline, str.c_str(), 255); - status_code = gc_execute_line(gcline); - // Uart0 << ">" << gcline << "\n"; - if (status_code != Error::Ok) { - log_error("Startup line: " << errorString(status_code)); - } -#endif - } + config->_macros->_startup_line[i].run(); } } diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index cf1cc87ee..62af92dee 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -388,7 +388,7 @@ static void protocol_do_restart() { send_alarm(ExecAlarm::ControlPin); } else { if (sys.state == State::Idle) { - config->_macros->run_macro(Macros::_after_reset_line); + config->_macros->_after_reset.run(); } } } From 164a09ab76164c9419bd561c897989cb3f77bdd5 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 5 Aug 2023 14:22:19 -1000 Subject: [PATCH 103/212] Run the after_unlock macro even if no unlock was necessary --- FluidNC/src/ProcessSettings.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index fccfd91ff..467556244 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -289,9 +289,9 @@ static Error disable_alarm_lock(const char* value, WebUI::AuthenticationLevel au Homing::set_all_axes_homed(); report_feedback_message(Message::AlarmUnlock); sys.state = State::Idle; - - config->_macros->_after_unlock.run(); - } // Otherwise, no effect. + } + // Run the after_unlock macro even if no unlock was necessary + config->_macros->_after_unlock.run(); return Error::Ok; } static Error report_ngc(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { From 8d90bffd32fb58898008f25c79183235e2a930c3 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 6 Aug 2023 10:39:58 -1000 Subject: [PATCH 104/212] Change log level to verbose for TMC register dump This makes it easier to use debug level for homing. --- FluidNC/src/Motors/TMC2209Driver.cpp | 14 +++++++------- FluidNC/src/Motors/TMC5160Driver.cpp | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/FluidNC/src/Motors/TMC2209Driver.cpp b/FluidNC/src/Motors/TMC2209Driver.cpp index d493b6599..4cbe61070 100644 --- a/FluidNC/src/Motors/TMC2209Driver.cpp +++ b/FluidNC/src/Motors/TMC2209Driver.cpp @@ -80,13 +80,13 @@ namespace MotorDrivers { } // dump the registers. This is helpful for people migrating to the Pro version - log_debug("CHOPCONF: 0x" << to_hex(tmc2209->CHOPCONF())); - log_debug("COOLCONF: 0x" << to_hex(tmc2209->COOLCONF())); - log_debug("TPWMTHRS: 0x" << to_hex(tmc2209->TPWMTHRS())); - log_debug("TCOOLTHRS: 0x" << to_hex(tmc2209->TCOOLTHRS())); - log_debug("GCONF: 0x" << to_hex(tmc2209->GCONF())); - log_debug("PWMCONF: 0x" << to_hex(tmc2209->PWMCONF())); - log_debug("IHOLD_IRUN: 0x" << to_hex(tmc2209->IHOLD_IRUN())); + log_verbose("CHOPCONF: 0x" << to_hex(tmc2209->CHOPCONF())); + log_verbose("COOLCONF: 0x" << to_hex(tmc2209->COOLCONF())); + log_verbose("TPWMTHRS: 0x" << to_hex(tmc2209->TPWMTHRS())); + log_verbose("TCOOLTHRS: 0x" << to_hex(tmc2209->TCOOLTHRS())); + log_verbose("GCONF: 0x" << to_hex(tmc2209->GCONF())); + log_verbose("PWMCONF: 0x" << to_hex(tmc2209->PWMCONF())); + log_verbose("IHOLD_IRUN: 0x" << to_hex(tmc2209->IHOLD_IRUN())); _cs_pin.synchronousWrite(false); } diff --git a/FluidNC/src/Motors/TMC5160Driver.cpp b/FluidNC/src/Motors/TMC5160Driver.cpp index b47ce261c..c6daeade8 100644 --- a/FluidNC/src/Motors/TMC5160Driver.cpp +++ b/FluidNC/src/Motors/TMC5160Driver.cpp @@ -80,13 +80,13 @@ namespace MotorDrivers { } } // dump the registers. This is helpful for people migrating to the Pro version - log_debug("CHOPCONF: 0x" << to_hex(tmc5160->CHOPCONF())); - log_debug("COOLCONF: 0x" << to_hex(tmc5160->COOLCONF())); - log_debug("THIGH: 0x" << to_hex(tmc5160->THIGH())); - log_debug("TCOOLTHRS: 0x" << to_hex(tmc5160->TCOOLTHRS())); - log_debug("GCONF: 0x" << to_hex(tmc5160->GCONF())); - log_debug("PWMCONF: 0x" << to_hex(tmc5160->PWMCONF())); - log_debug("IHOLD_IRUN: 0x" << to_hex(tmc5160->IHOLD_IRUN())); + log_verbose("CHOPCONF: 0x" << to_hex(tmc5160->CHOPCONF())); + log_verbose("COOLCONF: 0x" << to_hex(tmc5160->COOLCONF())); + log_verbose("THIGH: 0x" << to_hex(tmc5160->THIGH())); + log_verbose("TCOOLTHRS: 0x" << to_hex(tmc5160->TCOOLTHRS())); + log_verbose("GCONF: 0x" << to_hex(tmc5160->GCONF())); + log_verbose("PWMCONF: 0x" << to_hex(tmc5160->PWMCONF())); + log_verbose("IHOLD_IRUN: 0x" << to_hex(tmc5160->IHOLD_IRUN())); } // Report diagnostic and tuning info From 0310f2ffe56ebdff2c739fea97df7bc05d7ece29 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 6 Aug 2023 13:39:28 -1000 Subject: [PATCH 105/212] Fix989 - treat empty pin specification like NO_PIN --- FluidNC/src/Pin.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index 2ce039798..01c606f6c 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -32,7 +32,7 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa if (pin_str.empty()) { // Re-use undefined pins happens in 'create': - pinImplementation = new Pins::VoidPinDetail(); + pinImplementation = undefinedPin; return nullptr; } From 684848e15384318522ef3909ab78e72fe77a0e6d Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 8 Aug 2023 13:24:07 -0500 Subject: [PATCH 106/212] Updates to latest devt. - Still needs a bunch of work, but compiles. --- FluidNC/src/Kinematics/Cartesian.cpp | 2 +- FluidNC/src/Kinematics/Cartesian.h | 2 +- FluidNC/src/Kinematics/CoreXY.cpp | 3 +- FluidNC/src/Kinematics/CoreXY.h | 2 +- FluidNC/src/Kinematics/Kinematics.cpp | 2 +- FluidNC/src/Kinematics/Kinematics.h | 6 +- FluidNC/src/Kinematics/ParallelDelta.cpp | 390 +++++++++++++++++++++++ FluidNC/src/Kinematics/ParallelDelta.h | 93 ++++++ FluidNC/src/Kinematics/WallPlotter.cpp | 3 +- FluidNC/src/Kinematics/WallPlotter.h | 2 +- 10 files changed, 496 insertions(+), 9 deletions(-) create mode 100644 FluidNC/src/Kinematics/ParallelDelta.cpp create mode 100644 FluidNC/src/Kinematics/ParallelDelta.h diff --git a/FluidNC/src/Kinematics/Cartesian.cpp b/FluidNC/src/Kinematics/Cartesian.cpp index ff0ad1c8f..800a35aba 100644 --- a/FluidNC/src/Kinematics/Cartesian.cpp +++ b/FluidNC/src/Kinematics/Cartesian.cpp @@ -259,7 +259,7 @@ namespace Kinematics { copyAxes(cartesian, motors); } - void Cartesian::transform_cartesian_to_motors(float* motors, float* cartesian) { + bool Cartesian::transform_cartesian_to_motors(float* motors, float* cartesian) { // Motor space is cartesian space, so we do no transform. copyAxes(motors, cartesian); } diff --git a/FluidNC/src/Kinematics/Cartesian.h b/FluidNC/src/Kinematics/Cartesian.h index 8ff0d660c..dc1ebeb4e 100644 --- a/FluidNC/src/Kinematics/Cartesian.h +++ b/FluidNC/src/Kinematics/Cartesian.h @@ -37,7 +37,7 @@ namespace Kinematics { virtual void init() override; virtual void init_position() override; void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; - void transform_cartesian_to_motors(float* cartesian, float* motors) override; + bool transform_cartesian_to_motors(float* cartesian, float* motors) override; bool canHome(AxisMask axisMask) override; void releaseMotors(AxisMask axisMask, MotorMask motors) override; diff --git a/FluidNC/src/Kinematics/CoreXY.cpp b/FluidNC/src/Kinematics/CoreXY.cpp index edcddc908..76815c75d 100644 --- a/FluidNC/src/Kinematics/CoreXY.cpp +++ b/FluidNC/src/Kinematics/CoreXY.cpp @@ -132,7 +132,7 @@ namespace Kinematics { /* Kinematic equations */ - void CoreXY::transform_cartesian_to_motors(float* motors, float* cartesian) { + bool CoreXY::transform_cartesian_to_motors(float* motors, float* cartesian) { motors[X_AXIS] = (_x_scaler * cartesian[X_AXIS]) + cartesian[Y_AXIS]; motors[Y_AXIS] = (_x_scaler * cartesian[X_AXIS]) - cartesian[Y_AXIS]; @@ -140,6 +140,7 @@ namespace Kinematics { for (size_t axis = Z_AXIS; axis < n_axis; axis++) { motors[axis] = cartesian[axis]; } + return true; } // Configuration registration diff --git a/FluidNC/src/Kinematics/CoreXY.h b/FluidNC/src/Kinematics/CoreXY.h index 9c5d6c63f..a24071a77 100644 --- a/FluidNC/src/Kinematics/CoreXY.h +++ b/FluidNC/src/Kinematics/CoreXY.h @@ -40,7 +40,7 @@ namespace Kinematics { virtual void group(Configuration::HandlerBase& handler) override; void afterParse() override {} - void transform_cartesian_to_motors(float* motors, float* cartesian) override; + bool transform_cartesian_to_motors(float* motors, float* cartesian) override; // Name of the configurable. Must match the name registered in the cpp file. virtual const char* name() const override { return "CoreXY"; } diff --git a/FluidNC/src/Kinematics/Kinematics.cpp b/FluidNC/src/Kinematics/Kinematics.cpp index d0180d466..0c3fadd98 100644 --- a/FluidNC/src/Kinematics/Kinematics.cpp +++ b/FluidNC/src/Kinematics/Kinematics.cpp @@ -49,7 +49,7 @@ namespace Kinematics { return _system->limitReached(axisMask, motors, limited); } - void Kinematics::transform_cartesian_to_motors(float* motors, float* cartesian) { + bool Kinematics::transform_cartesian_to_motors(float* motors, float* cartesian) { Assert(_system != nullptr, "No kinematics system."); return _system->transform_cartesian_to_motors(motors, cartesian); } diff --git a/FluidNC/src/Kinematics/Kinematics.h b/FluidNC/src/Kinematics/Kinematics.h index 87a7ad6a2..cf4333839 100644 --- a/FluidNC/src/Kinematics/Kinematics.h +++ b/FluidNC/src/Kinematics/Kinematics.h @@ -46,7 +46,7 @@ namespace Kinematics { bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position); void motors_to_cartesian(float* cartesian, float* motors, int n_axis); - void transform_cartesian_to_motors(float* motors, float* cartesian); + bool transform_cartesian_to_motors(float* motors, float* cartesian); void constrain_jog(float* target, plan_line_data_t* pl_data, float* position); bool invalid_line(float* target); @@ -84,12 +84,14 @@ namespace Kinematics { virtual void motors_to_cartesian(float* cartesian, float* motors, int n_axis) = 0; - virtual void transform_cartesian_to_motors(float* motors, float* cartesian) = 0; + virtual bool transform_cartesian_to_motors(float* motors, float* cartesian) = 0; virtual bool canHome(AxisMask axisMask) { return false; } virtual void releaseMotors(AxisMask axisMask, MotorMask motors) {} virtual bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited) { return false; } + bool kinematics_homing(AxisMask& axisMask); + // Configuration interface. void afterParse() override {} void group(Configuration::HandlerBase& handler) override {} diff --git a/FluidNC/src/Kinematics/ParallelDelta.cpp b/FluidNC/src/Kinematics/ParallelDelta.cpp new file mode 100644 index 000000000..b60ca22f9 --- /dev/null +++ b/FluidNC/src/Kinematics/ParallelDelta.cpp @@ -0,0 +1,390 @@ +#include "ParallelDelta.h" + +#include "../Machine/MachineConfig.h" +#include "../Limits.h" // ambiguousLimit() +#include "../Machine/Homing.h" + +#include "../Protocol.h" // protocol_execute_realtime + +#include + +/* + ==================== How it Works ==================================== + On a delta machine, Grbl axis units are in radians + The kinematics converts the cartesian moves in gcode into + the radians to move the arms. The Grbl motion planner never sees + the actual cartesian values. + + To make the moves straight and smooth on a delta, the cartesian moves + are broken into small segments where the non linearity will not be noticed. + This is similar to how Grgl draws arcs. + + If you request MPos status it will tell you the position in + arm angles. The MPos will report in cartesian values using forward kinematics. + The arm 0 values (angle) are the arms at horizontal. + + Positive angles are below horizontal. + + The machine's Z zero point in the kinematics is parallel to the arm axes. + The offset of the Z distance from the arm axes to the end effector joints + at arm angle zero will be printed at startup on the serial port. + + Feedrate in gcode is in the cartesian units. This must be converted to the + angles. This is done by calculating the segment move distance and the angle + move distance and applying that ration to the feedrate. + + FYI: http://forums.trossenrobotics.com/tutorials/introduction-129/delta-robot-kinematics-3276/ + Better: http://hypertriangle.com/~alex/delta-robot-tutorial/ + + +Default configuration + +kinematics: + ParallelDelta: + + TODO + - Constrain the geometry values to realistic values. + - Implement $MI for dynamixel motors. + +*/ + +namespace Kinematics { + + // trigonometric constants to speed up calculations + const float sqrt3 = 1.732050807; + const float dtr = M_PI / (float)180.0; // degrees to radians + const float sin120 = sqrt3 / 2.0; + const float cos120 = -0.5; + const float tan60 = sqrt3; + const float sin30 = 0.5; + const float tan30 = 1.0 / sqrt3; + + // the geometry of the delta + float rf; // radius of the fixed side (length of motor cranks) + float re; // radius of end effector side (length of linkages) + float f; // sized of fixed side triangel + float e; // size of end effector side triangle + + static float last_angle[MAX_N_AXIS] = { 0.0 }; // A place to save the previous motor angles for distance/feed rate calcs + static float last_cartesian[MAX_N_AXIS] = { 0.0 }; // A place to save the previous motor angles for distance/feed rate calcs + + void ParallelDelta::group(Configuration::HandlerBase& handler) { + handler.item("crank_mm", rf, 50.0, 500.0); + handler.item("base_triangle_mm", f, 20.0, 500.0); + handler.item("linkage_mm", re, 20.0, 500.0); + handler.item("end_effector_triangle_mm", e, 20.0, 500.0); + handler.item("kinematic_segment_len_mm", _kinematic_segment_len_mm, 0.05, 20.0); // + handler.item("homing_mpos_radians", _homing_mpos); + handler.item("soft_limits", _softLimits); + handler.item("max_z_mm", _max_z, -10000.0, 0.0); // + } + + void ParallelDelta::init() { + // print a startup message to show the kinematics are enabled. Print the offset for reference + log_info("Kinematic system: " << name()); + init_position(); + } + + void ParallelDelta::init_position() { + float angles[MAX_N_AXIS] = { 0.0, 0.0, 0.0 }; + float cartesian[MAX_N_AXIS] = { 0.0, 0.0, 0.0 }; + // Calculate the Z offset at the arm zero angles ... + // Z offset is the z distance from the motor axes to the end effector axes at zero angle + motors_to_cartesian(cartesian, angles, 3); // Sets the cartesian values + log_info(" Z Offset:" << cartesian[Z_AXIS]); + } + + + + + // copied from Cartensian. Needs to be optimized for parallel delta. + void ParallelDelta::constrain_jog(float* target, plan_line_data_t* pl_data, float* position) { + auto axes = config->_axes; + auto n_axis = config->_axes->_numberAxis; + + float* current_position = get_mpos(); + MotorMask lim_pin_state = limits_get_state(); + + for (int axis = 0; axis < n_axis; axis++) { + auto axisSetting = axes->_axis[axis]; + // If the axis is moving from the current location and soft limits are on. + if (axisSetting->_softLimits && target[axis] != current_position[axis]) { + // When outside the axis range, only small nudges to clear switches are allowed + bool move_positive = target[axis] > current_position[axis]; + if ((!move_positive && (current_position[axis] < limitsMinPosition(axis))) || + (move_positive && (current_position[axis] > limitsMaxPosition(axis)))) { + // only allow a nudge if a switch is active + if (bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 0)) && + bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 1))) { + target[axis] = current_position[axis]; // cancel the move on this axis + log_debug("Soft limit violation on " << Machine::Axes::_names[axis]); + continue; + } + float jog_dist = target[axis] - current_position[axis]; + + MotorMask axisMotors = Machine::Axes::axes_to_motors(1 << axis); + bool posLimited = bits_are_true(Machine::Axes::posLimitMask, axisMotors); + bool negLimited = bits_are_true(Machine::Axes::negLimitMask, axisMotors); + + // if jog is positive and only the positive switch is active, then kill the move + // if jog is negative and only the negative switch is active, then kill the move + if (posLimited != negLimited) { // XOR, because ambiguous (both) is OK + if ((negLimited && (jog_dist < 0)) || (posLimited && (jog_dist > 0))) { + target[axis] = current_position[axis]; // cancel the move on this axis + log_debug("Jog into active switch blocked on " << Machine::Axes::_names[axis]); + continue; + } + } + + auto nudge_max = axisSetting->_motors[0]->_pulloff; + if (abs(jog_dist) > nudge_max) { + target[axis] = (jog_dist >= 0) ? current_position[axis] + nudge_max : current_position[axis] + nudge_max; + log_debug("Jog amount limited when outside soft limits") + } + continue; + } + + if (target[axis] < limitsMinPosition(axis)) { + target[axis] = limitsMinPosition(axis); + } else if (target[axis] > limitsMaxPosition(axis)) { + target[axis] = limitsMaxPosition(axis); + } else { + continue; + } + log_debug("Jog constrained to axis range"); + } + } + pl_data->limits_checked = true; + } + + bool ParallelDelta::cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) { + float dx, dy, dz; // distances in each cartesian axis + float motor_angles[3]; + + float seg_target[3]; // The target of the current segment + float feed_rate = pl_data->feed_rate; // save original feed rate + bool show_error = true; // shows error once + + bool calc_ok = true; + + if (target[Z_AXIS] > _max_z) { + log_debug("Kinematics error. Target:" << target[Z_AXIS] << " exceeds max_z:" << _max_z); + return false; + } + + //log_debug("Target (" << target[0] << "," << target[1] << "," << target[2]); + + calc_ok = transform_cartesian_to_motors(last_angle, position); + if (!calc_ok) { + log_warn("Kinematics error. Start position error (" << position[0] << "," << position[1] << "," << position[2] << ")"); + return false; + } + + // Check the destination to see if it is in work area + calc_ok = transform_cartesian_to_motors(motor_angles, target); + if (!calc_ok) { + log_warn("Kinematics error. Target unreachable (" << target[0] << "," << target[1] << "," << target[2] << ")"); + return false; + } + + position[X_AXIS] += gc_state.coord_offset[X_AXIS]; + position[Y_AXIS] += gc_state.coord_offset[Y_AXIS]; + position[Z_AXIS] += gc_state.coord_offset[Z_AXIS]; + + // calculate cartesian move distance for each axis + dx = target[X_AXIS] - position[X_AXIS]; + dy = target[Y_AXIS] - position[Y_AXIS]; + dz = target[Z_AXIS] - position[Z_AXIS]; + float dist = sqrt((dx * dx) + (dy * dy) + (dz * dz)); + + // determine the number of segments we need ... round up so there is at least 1 (except when dist is 0) + uint32_t segment_count = ceil(dist / _kinematic_segment_len_mm); + + float segment_dist = dist / ((float)segment_count); // distance of each segment...will be used for feedrate conversion + + for (uint32_t segment = 1; segment <= segment_count; segment++) { + //log_debug("Segment:" << segment << " of " << segment_count); + // determine this segment's target + seg_target[X_AXIS] = position[X_AXIS] + (dx / float(segment_count) * segment); + seg_target[Y_AXIS] = position[Y_AXIS] + (dy / float(segment_count) * segment); + seg_target[Z_AXIS] = position[Z_AXIS] + (dz / float(segment_count) * segment); + + //log_debug("Segment target (" << seg_target[0] << "," << seg_target[1] << "," << seg_target[2] << ")"); + + // calculate the delta motor angles + bool calc_ok = transform_cartesian_to_motors(motor_angles, seg_target); + + if (!calc_ok) { + if (show_error) { + log_error("Kinematic error motors (" << motor_angles[0] << "," << motor_angles[1] << "," << motor_angles[2] << ")"); + show_error = false; + } + return false; + } + if (pl_data->motion.rapidMotion) { + pl_data->feed_rate = feed_rate; + } else { + float delta_distance = three_axis_dist(motor_angles, last_angle); + pl_data->feed_rate = (feed_rate * delta_distance / segment_dist); + } + + // mc_line() returns false if a jog is cancelled. + // In that case we stop sending segments to the planner. + if (!mc_move_motors(motor_angles, pl_data)) { + return false; + } + + // save angles for next distance calc + // This is after mc_line() so that we do not update + // last_angle if the segment was discarded. + memcpy(last_angle, motor_angles, sizeof(motor_angles)); + } + return true; + } + + void ParallelDelta::motors_to_cartesian(float* cartesian, float* motors, int n_axis) { + //log_debug("motors_to_cartesian motors: (" << motors[0] << "," << motors[1] << "," << motors[2] << ")"); + //log_info("motors_to_cartesian rf:" << rf << " re:" << re << " f:" << f << " e:" << e); + + float t = (f - e) * tan30 / 2; + + float y1 = -(t + rf * cos(motors[0])); + float z1 = -rf * sin(motors[0]); + + float y2 = (t + rf * cos(motors[1])) * sin30; + float x2 = y2 * tan60; + float z2 = -rf * sin(motors[1]); + + float y3 = (t + rf * cos(motors[2])) * sin30; + float x3 = -y3 * tan60; + float z3 = -rf * sin(motors[2]); + + float dnm = (y2 - y1) * x3 - (y3 - y1) * x2; + + float w1 = y1 * y1 + z1 * z1; + float w2 = x2 * x2 + y2 * y2 + z2 * z2; + float w3 = x3 * x3 + y3 * y3 + z3 * z3; + + // x = (a1*z + b1)/dnm + float a1 = (z2 - z1) * (y3 - y1) - (z3 - z1) * (y2 - y1); + float b1 = -((w2 - w1) * (y3 - y1) - (w3 - w1) * (y2 - y1)) / 2.0; + + // y = (a2*z + b2)/dnm; + float a2 = -(z2 - z1) * x3 + (z3 - z1) * x2; + float b2 = ((w2 - w1) * x3 - (w3 - w1) * x2) / 2.0; + + // a*z^2 + b*z + c = 0 + float a = a1 * a1 + a2 * a2 + dnm * dnm; + float b = 2 * (a1 * b1 + a2 * (b2 - y1 * dnm) - z1 * dnm * dnm); + float c = (b2 - y1 * dnm) * (b2 - y1 * dnm) + b1 * b1 + dnm * dnm * (z1 * z1 - re * re); + + // discriminant + float d = b * b - (float)4.0 * a * c; + if (d < 0) { + log_warn("Forward Kinematics Error"); + return; + } + cartesian[Z_AXIS] = -(float)0.5 * (b + sqrt(d)) / a; + cartesian[X_AXIS] = (a1 * cartesian[Z_AXIS] + b1) / dnm; + cartesian[Y_AXIS] = (a2 * cartesian[Z_AXIS] + b2) / dnm; + } +/* + bool ParallelDelta::canHome(AxisMask& axisMask) { + return true; // signal main code that this handled all homing + } +*/ + + + // bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { + // auto axes = config->_axes; + // auto n_axis = axes->_numberAxis; + + // log_debug("kinematics_homing"); + // config->_axes->set_disable(false); + + // // TODO deal with non kinematic axes above Z + // for (int axis = 0; axis < 3; axis++) { + // //set_motor_steps(axis, mpos_to_steps(axes->_axis[axis]->_homing->_mpos, axis)); + // int32_t steps = mpos_to_steps(_homing_mpos, axis); + // set_motor_steps(axis, steps); + // } + // protocol_disable_steppers(); + // return true; // signal main code that this handled all homing + // } + + // helper functions, calculates angle theta1 (for YZ-pane) + bool ParallelDelta::delta_calcAngleYZ(float x0, float y0, float z0, float& theta) { + float y1 = -0.5 * 0.57735 * f; // f/2 * tg 30 + y0 -= 0.5 * 0.57735 * e; // shift center to edge + // z = a + b*y + float a = (x0 * x0 + y0 * y0 + z0 * z0 + rf * rf - re * re - y1 * y1) / (2 * z0); + float b = (y1 - y0) / z0; + // discriminant + float d = -(a + b * y1) * (a + b * y1) + rf * (b * b * rf + rf); + if (d < 0) { + log_warn("Kinematics: Target unreachable"); + return false; + } // non-existing point + float yj = (y1 - a * b - sqrt(d)) / (b * b + 1); // choosing outer point + float zj = a + b * yj; + + theta = atan(-zj / (y1 - yj)) + ((yj > y1) ? M_PI : 0.0); + + return true; + } + + // checks to see if the target is reachable + // bool ParallelDelta::soft_limit_error_exists(float* cartesian) { + // float motors[MAX_N_AXIS]; + // bool calc_ok = true; + // bool limit_error = false; + + // if (!_softLimits) + // limit_error = false; + + // return !transform_cartesian_to_motors(motors, cartesian); + // } + + void ParallelDelta::releaseMotors(AxisMask axisMask, MotorMask motors) {} + + bool ParallelDelta::transform_cartesian_to_motors(float* motors, float* cartesian) { + motors[0] = motors[1] = motors[2] = 0; + bool calc_ok = false; + + if (cartesian[Z_AXIS] > _max_z) { + log_debug("Kinematics transform error. Target:" << cartesian[Z_AXIS] << " exceeds max_z:" << _max_z); + return false; + } + + calc_ok = delta_calcAngleYZ(cartesian[X_AXIS], cartesian[Y_AXIS], cartesian[Z_AXIS], motors[0]); + if (!calc_ok) { + return calc_ok; + } + + calc_ok = delta_calcAngleYZ(cartesian[X_AXIS] * cos120 + cartesian[Y_AXIS] * sin120, + cartesian[Y_AXIS] * cos120 - cartesian[X_AXIS] * sin120, + cartesian[Z_AXIS], + motors[1]); // rotate coords to +120 deg + if (!calc_ok) { + return calc_ok; + } + + calc_ok = delta_calcAngleYZ(cartesian[X_AXIS] * cos120 - cartesian[Y_AXIS] * sin120, + cartesian[Y_AXIS] * cos120 + cartesian[X_AXIS] * sin120, + cartesian[Z_AXIS], + motors[2]); // rotate coords to -120 deg + + return calc_ok; + } + + // Determine the unit distance between (2) 3D points + float ParallelDelta::three_axis_dist(float* point1, float* point2) { + return sqrt(((point1[0] - point2[0]) * (point1[0] - point2[0])) + ((point1[1] - point2[1]) * (point1[1] - point2[1])) + + ((point1[2] - point2[2]) * (point1[2] - point2[2]))); + } + + // Configuration registration + namespace { + KinematicsFactory::InstanceBuilder registration("parallel_delta"); + } +} diff --git a/FluidNC/src/Kinematics/ParallelDelta.h b/FluidNC/src/Kinematics/ParallelDelta.h new file mode 100644 index 000000000..9c8d89b27 --- /dev/null +++ b/FluidNC/src/Kinematics/ParallelDelta.h @@ -0,0 +1,93 @@ +// Copyright (c) 2021 - Bart Dring +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#pragma once + +/* + + This implements Parallel Delta Kinematics + +*/ + +#include "Kinematics.h" +#include "Cartesian.h" + +// M_PI is not defined in standard C/C++ but some compilers +// support it anyway. The following suppresses Intellisense +// problem reports. +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + +#define ARM_INTERNAL_ANGLE 0.05 // radians 2.866° // due to mounting angle +#define DXL_CENTER 2015 // (DXL_COUNTS / 2) - (ARM_INTERNAL_ANGLE * DXL_COUNT_PER_RADIAN) + +namespace Kinematics { + // enum class KinematicError : uint8_t { + // NONE = 0, + // OUT_OF_RANGE = 1, + // ANGLE_TOO_NEGATIVE = 2, + // ANGLE_TOO_POSITIVE = 3, + // }; + class ParallelDelta : public Cartesian { + public: + ParallelDelta() = default; + + ParallelDelta(const ParallelDelta&) = delete; + ParallelDelta(ParallelDelta&&) = delete; + ParallelDelta& operator=(const ParallelDelta&) = delete; + ParallelDelta& operator=(ParallelDelta&&) = delete; + + // Kinematic Interface + virtual void init() override; + virtual void init_position() override; + //bool canHome(AxisMask& axisMask) override; + bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) override; + void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; + bool transform_cartesian_to_motors(float* motors, float* cartesian) override; + //bool soft_limit_error_exists(float* cartesian) override; + //bool kinematics_homing(AxisMask& axisMask) override; + virtual void constrain_jog(float* cartesian, plan_line_data_t* pl_data, float* position) override; + void releaseMotors(AxisMask axisMask, MotorMask motors) override; + + /* + virtual bool invalid_line(float* cartesian) override; + virtual bool invalid_arc(float* target, + plan_line_data_t* pl_data, + float* position, + float center[3], + float radius, + size_t caxes[3], + bool is_clockwise_arc) override; + + */ + + // Configuration handlers: + //void validate() const override {} + virtual void group(Configuration::HandlerBase& handler) override; + void afterParse() override {} + + // Name of the configurable. Must match the name registered in the cpp file. + virtual const char* name() const override { return "parallel_delta"; } + + ~ParallelDelta() {} + + private: + // Config items Using geometry names from the published kinematics rather than typical Fluid Style + // To make the math easier to compare with the code + float rf = 70.0; // The length of the crank arm on the motor + float f = 179.437; + float re = 133.50; + float e = 86.603; + + float _kinematic_segment_len_mm = 1.0; // the maximun segment length the move is broken into + bool _softLimits = false; + float _homing_mpos = 0.0; + float _max_z = 0.0; + + bool delta_calcAngleYZ(float x0, float y0, float z0, float& theta); + float three_axis_dist(float* point1, float* point2); + + protected: + }; +} // namespace Kinematics diff --git a/FluidNC/src/Kinematics/WallPlotter.cpp b/FluidNC/src/Kinematics/WallPlotter.cpp index 88a72a7a9..53df4c133 100644 --- a/FluidNC/src/Kinematics/WallPlotter.cpp +++ b/FluidNC/src/Kinematics/WallPlotter.cpp @@ -47,8 +47,9 @@ namespace Kinematics { return false; } - void WallPlotter::transform_cartesian_to_motors(float* cartesian, float* motors) { + bool WallPlotter::transform_cartesian_to_motors(float* cartesian, float* motors) { log_error("WallPlotter::transform_cartesian_to_motors is broken"); + return true; } /* diff --git a/FluidNC/src/Kinematics/WallPlotter.h b/FluidNC/src/Kinematics/WallPlotter.h index ed558dfe0..f70e7978e 100644 --- a/FluidNC/src/Kinematics/WallPlotter.h +++ b/FluidNC/src/Kinematics/WallPlotter.h @@ -28,7 +28,7 @@ namespace Kinematics { void init_position() override; bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) override; void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; - void transform_cartesian_to_motors(float* cartesian, float* motors) override; + bool transform_cartesian_to_motors(float* cartesian, float* motors) override; // Configuration handlers: void validate() override {} From a9c819648bceba1378ea7df328286eca1dc258d9 Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 8 Aug 2023 15:54:25 -0500 Subject: [PATCH 107/212] updates --- FluidNC/src/Kinematics/Cartesian.cpp | 5 ++++ FluidNC/src/Kinematics/Cartesian.h | 1 + FluidNC/src/Kinematics/Kinematics.h | 8 +++--- FluidNC/src/Kinematics/ParallelDelta.cpp | 32 ++++++++++++------------ FluidNC/src/Kinematics/ParallelDelta.h | 2 +- FluidNC/src/Kinematics/WallPlotter.cpp | 4 +++ FluidNC/src/Kinematics/WallPlotter.h | 1 + FluidNC/src/Machine/Homing.cpp | 4 +++ 8 files changed, 36 insertions(+), 21 deletions(-) diff --git a/FluidNC/src/Kinematics/Cartesian.cpp b/FluidNC/src/Kinematics/Cartesian.cpp index 800a35aba..00b1318bd 100644 --- a/FluidNC/src/Kinematics/Cartesian.cpp +++ b/FluidNC/src/Kinematics/Cartesian.cpp @@ -262,6 +262,7 @@ namespace Kinematics { bool Cartesian::transform_cartesian_to_motors(float* motors, float* cartesian) { // Motor space is cartesian space, so we do no transform. copyAxes(motors, cartesian); + return true; } bool Cartesian::canHome(AxisMask axisMask) { @@ -304,6 +305,10 @@ namespace Kinematics { } } + bool Cartesian::kinematics_homing(AxisMask& axisMask) { + return false; // kinematics does not do the homing for catesian systems + } + // Configuration registration namespace { KinematicsFactory::InstanceBuilder registration("Cartesian"); diff --git a/FluidNC/src/Kinematics/Cartesian.h b/FluidNC/src/Kinematics/Cartesian.h index dc1ebeb4e..6c4b24c1b 100644 --- a/FluidNC/src/Kinematics/Cartesian.h +++ b/FluidNC/src/Kinematics/Cartesian.h @@ -42,6 +42,7 @@ namespace Kinematics { bool canHome(AxisMask axisMask) override; void releaseMotors(AxisMask axisMask, MotorMask motors) override; bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited) override; + virtual bool kinematics_homing(AxisMask& axisMask) override; // Configuration handlers: void afterParse() override {} diff --git a/FluidNC/src/Kinematics/Kinematics.h b/FluidNC/src/Kinematics/Kinematics.h index cf4333839..91d766b24 100644 --- a/FluidNC/src/Kinematics/Kinematics.h +++ b/FluidNC/src/Kinematics/Kinematics.h @@ -65,10 +65,10 @@ namespace Kinematics { public: KinematicSystem() = default; - KinematicSystem(const KinematicSystem&) = delete; - KinematicSystem(KinematicSystem&&) = delete; + KinematicSystem(const KinematicSystem&) = delete; + KinematicSystem(KinematicSystem&&) = delete; KinematicSystem& operator=(const KinematicSystem&) = delete; - KinematicSystem& operator=(KinematicSystem&&) = delete; + KinematicSystem& operator=(KinematicSystem&&) = delete; // Kinematic system interface. virtual bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) = 0; @@ -90,7 +90,7 @@ namespace Kinematics { virtual void releaseMotors(AxisMask axisMask, MotorMask motors) {} virtual bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited) { return false; } - bool kinematics_homing(AxisMask& axisMask); + virtual bool kinematics_homing(AxisMask& axisMask) { return false; } // Configuration interface. void afterParse() override {} diff --git a/FluidNC/src/Kinematics/ParallelDelta.cpp b/FluidNC/src/Kinematics/ParallelDelta.cpp index b60ca22f9..085e7f885 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.cpp +++ b/FluidNC/src/Kinematics/ParallelDelta.cpp @@ -295,22 +295,22 @@ namespace Kinematics { */ - // bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { - // auto axes = config->_axes; - // auto n_axis = axes->_numberAxis; - - // log_debug("kinematics_homing"); - // config->_axes->set_disable(false); - - // // TODO deal with non kinematic axes above Z - // for (int axis = 0; axis < 3; axis++) { - // //set_motor_steps(axis, mpos_to_steps(axes->_axis[axis]->_homing->_mpos, axis)); - // int32_t steps = mpos_to_steps(_homing_mpos, axis); - // set_motor_steps(axis, steps); - // } - // protocol_disable_steppers(); - // return true; // signal main code that this handled all homing - // } + bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { + auto axes = config->_axes; + auto n_axis = axes->_numberAxis; + + log_debug("kinematics_homing"); + config->_axes->set_disable(false); + + // TODO deal with non kinematic axes above Z + for (int axis = 0; axis < 3; axis++) { + //set_motor_steps(axis, mpos_to_steps(axes->_axis[axis]->_homing->_mpos, axis)); + int32_t steps = mpos_to_steps(_homing_mpos, axis); + set_motor_steps(axis, steps); + } + protocol_disable_steppers(); + return true; // signal main code that this handled all homing + } // helper functions, calculates angle theta1 (for YZ-pane) bool ParallelDelta::delta_calcAngleYZ(float x0, float y0, float z0, float& theta) { diff --git a/FluidNC/src/Kinematics/ParallelDelta.h b/FluidNC/src/Kinematics/ParallelDelta.h index 9c8d89b27..a2e14a36d 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.h +++ b/FluidNC/src/Kinematics/ParallelDelta.h @@ -46,7 +46,7 @@ namespace Kinematics { void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; bool transform_cartesian_to_motors(float* motors, float* cartesian) override; //bool soft_limit_error_exists(float* cartesian) override; - //bool kinematics_homing(AxisMask& axisMask) override; + bool kinematics_homing(AxisMask& axisMask) override; virtual void constrain_jog(float* cartesian, plan_line_data_t* pl_data, float* position) override; void releaseMotors(AxisMask axisMask, MotorMask motors) override; diff --git a/FluidNC/src/Kinematics/WallPlotter.cpp b/FluidNC/src/Kinematics/WallPlotter.cpp index 53df4c133..ac1bdbd16 100644 --- a/FluidNC/src/Kinematics/WallPlotter.cpp +++ b/FluidNC/src/Kinematics/WallPlotter.cpp @@ -230,6 +230,10 @@ namespace Kinematics { right_length = hypot_f(right_dx, right_dy); } + bool WallPlotter::kinematics_homing(AxisMask& axisMask) { + return false; // kinematics does not do the homing for catesian systems + } + // Configuration registration namespace { KinematicsFactory::InstanceBuilder registration("WallPlotter"); diff --git a/FluidNC/src/Kinematics/WallPlotter.h b/FluidNC/src/Kinematics/WallPlotter.h index f70e7978e..f3a4c7518 100644 --- a/FluidNC/src/Kinematics/WallPlotter.h +++ b/FluidNC/src/Kinematics/WallPlotter.h @@ -29,6 +29,7 @@ namespace Kinematics { bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) override; void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; bool transform_cartesian_to_motors(float* cartesian, float* motors) override; + bool kinematics_homing(AxisMask& axisMask) override; // Configuration handlers: void validate() override {} diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index cc6e2aaa5..433bf2750 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -432,6 +432,10 @@ namespace Machine { // cycle. The protocol loop will then respond to events and advance // the homing state machine through its phases. void Homing::run_cycles(AxisMask axisMask) { + if (config->_kinematics->kinematics_homing(axisMask)) { + return; + } + if (!config->_kinematics->canHome(axisMask)) { sys.state = State::Alarm; return; From e768419130f228f798086f0ad3e2e6d3bc98b480 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 8 Aug 2023 11:19:43 -1000 Subject: [PATCH 108/212] Use newer versions of arduinoWebSockets and WiFi libs with timeout --- platformio.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index ddd269efe..7787b9cc7 100644 --- a/platformio.ini +++ b/platformio.ini @@ -33,8 +33,8 @@ lib_deps = bt_deps = BluetoothSerial wifi_deps = - arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#canSend - WiFi=https://github.com/MitchBradley/WiFi#52da841 + arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#7793f9e + WiFi=https://github.com/MitchBradley/WiFi#e63583f ; If we include the following explicit dependencies when we get the ; Arduino framework code from github, platformio picks up different ; and incompatible versions of these libraries from who knows where, From 051b1dab735654ee426adb1e6b18e1c72a40eb6a Mon Sep 17 00:00:00 2001 From: bdring Date: Wed, 9 Aug 2023 09:07:46 -0500 Subject: [PATCH 109/212] Adding config --- FluidNC/src/Kinematics/Cartesian.cpp | 6 +- FluidNC/src/Kinematics/Cartesian.h | 2 +- FluidNC/src/Kinematics/Kinematics.h | 3 +- FluidNC/src/Kinematics/ParallelDelta.cpp | 32 +++---- FluidNC/src/Kinematics/ParallelDelta.h | 2 +- FluidNC/src/Kinematics/WallPlotter.cpp | 6 +- FluidNC/src/Kinematics/WallPlotter.h | 2 +- FluidNC/src/Machine/Homing.cpp | 6 +- example_configs/TapDelta_XYZ.yaml | 103 +++++++++++++++++++++++ 9 files changed, 132 insertions(+), 30 deletions(-) create mode 100644 example_configs/TapDelta_XYZ.yaml diff --git a/FluidNC/src/Kinematics/Cartesian.cpp b/FluidNC/src/Kinematics/Cartesian.cpp index 00b1318bd..92971c856 100644 --- a/FluidNC/src/Kinematics/Cartesian.cpp +++ b/FluidNC/src/Kinematics/Cartesian.cpp @@ -305,9 +305,9 @@ namespace Kinematics { } } - bool Cartesian::kinematics_homing(AxisMask& axisMask) { - return false; // kinematics does not do the homing for catesian systems - } + // bool Cartesian::kinematics_homing(AxisMask& axisMask) { + // return false; // kinematics does not do the homing for catesian systems + // } // Configuration registration namespace { diff --git a/FluidNC/src/Kinematics/Cartesian.h b/FluidNC/src/Kinematics/Cartesian.h index 6c4b24c1b..48f9fe62a 100644 --- a/FluidNC/src/Kinematics/Cartesian.h +++ b/FluidNC/src/Kinematics/Cartesian.h @@ -42,7 +42,7 @@ namespace Kinematics { bool canHome(AxisMask axisMask) override; void releaseMotors(AxisMask axisMask, MotorMask motors) override; bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited) override; - virtual bool kinematics_homing(AxisMask& axisMask) override; + //virtual bool kinematics_homing(AxisMask& axisMask) override; // Configuration handlers: void afterParse() override {} diff --git a/FluidNC/src/Kinematics/Kinematics.h b/FluidNC/src/Kinematics/Kinematics.h index 91d766b24..3b353e02a 100644 --- a/FluidNC/src/Kinematics/Kinematics.h +++ b/FluidNC/src/Kinematics/Kinematics.h @@ -89,8 +89,7 @@ namespace Kinematics { virtual bool canHome(AxisMask axisMask) { return false; } virtual void releaseMotors(AxisMask axisMask, MotorMask motors) {} virtual bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited) { return false; } - - virtual bool kinematics_homing(AxisMask& axisMask) { return false; } + //virtual bool kinematics_homing(AxisMask& axisMask) { return false; } // Configuration interface. void afterParse() override {} diff --git a/FluidNC/src/Kinematics/ParallelDelta.cpp b/FluidNC/src/Kinematics/ParallelDelta.cpp index 085e7f885..b60ca22f9 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.cpp +++ b/FluidNC/src/Kinematics/ParallelDelta.cpp @@ -295,22 +295,22 @@ namespace Kinematics { */ - bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { - auto axes = config->_axes; - auto n_axis = axes->_numberAxis; - - log_debug("kinematics_homing"); - config->_axes->set_disable(false); - - // TODO deal with non kinematic axes above Z - for (int axis = 0; axis < 3; axis++) { - //set_motor_steps(axis, mpos_to_steps(axes->_axis[axis]->_homing->_mpos, axis)); - int32_t steps = mpos_to_steps(_homing_mpos, axis); - set_motor_steps(axis, steps); - } - protocol_disable_steppers(); - return true; // signal main code that this handled all homing - } + // bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { + // auto axes = config->_axes; + // auto n_axis = axes->_numberAxis; + + // log_debug("kinematics_homing"); + // config->_axes->set_disable(false); + + // // TODO deal with non kinematic axes above Z + // for (int axis = 0; axis < 3; axis++) { + // //set_motor_steps(axis, mpos_to_steps(axes->_axis[axis]->_homing->_mpos, axis)); + // int32_t steps = mpos_to_steps(_homing_mpos, axis); + // set_motor_steps(axis, steps); + // } + // protocol_disable_steppers(); + // return true; // signal main code that this handled all homing + // } // helper functions, calculates angle theta1 (for YZ-pane) bool ParallelDelta::delta_calcAngleYZ(float x0, float y0, float z0, float& theta) { diff --git a/FluidNC/src/Kinematics/ParallelDelta.h b/FluidNC/src/Kinematics/ParallelDelta.h index a2e14a36d..9c8d89b27 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.h +++ b/FluidNC/src/Kinematics/ParallelDelta.h @@ -46,7 +46,7 @@ namespace Kinematics { void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; bool transform_cartesian_to_motors(float* motors, float* cartesian) override; //bool soft_limit_error_exists(float* cartesian) override; - bool kinematics_homing(AxisMask& axisMask) override; + //bool kinematics_homing(AxisMask& axisMask) override; virtual void constrain_jog(float* cartesian, plan_line_data_t* pl_data, float* position) override; void releaseMotors(AxisMask axisMask, MotorMask motors) override; diff --git a/FluidNC/src/Kinematics/WallPlotter.cpp b/FluidNC/src/Kinematics/WallPlotter.cpp index ac1bdbd16..d16b67cd3 100644 --- a/FluidNC/src/Kinematics/WallPlotter.cpp +++ b/FluidNC/src/Kinematics/WallPlotter.cpp @@ -230,9 +230,9 @@ namespace Kinematics { right_length = hypot_f(right_dx, right_dy); } - bool WallPlotter::kinematics_homing(AxisMask& axisMask) { - return false; // kinematics does not do the homing for catesian systems - } + // bool WallPlotter::kinematics_homing(AxisMask& axisMask) { + // return false; // kinematics does not do the homing for catesian systems + // } // Configuration registration namespace { diff --git a/FluidNC/src/Kinematics/WallPlotter.h b/FluidNC/src/Kinematics/WallPlotter.h index f3a4c7518..c5a86ac63 100644 --- a/FluidNC/src/Kinematics/WallPlotter.h +++ b/FluidNC/src/Kinematics/WallPlotter.h @@ -29,7 +29,7 @@ namespace Kinematics { bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) override; void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; bool transform_cartesian_to_motors(float* cartesian, float* motors) override; - bool kinematics_homing(AxisMask& axisMask) override; + //bool kinematics_homing(AxisMask& axisMask) override; // Configuration handlers: void validate() override {} diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index 433bf2750..4efb966eb 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -432,9 +432,9 @@ namespace Machine { // cycle. The protocol loop will then respond to events and advance // the homing state machine through its phases. void Homing::run_cycles(AxisMask axisMask) { - if (config->_kinematics->kinematics_homing(axisMask)) { - return; - } + // if (config->_kinematics->kinematics_homing(axisMask)) { + // return; + // } if (!config->_kinematics->canHome(axisMask)) { sys.state = State::Alarm; diff --git a/example_configs/TapDelta_XYZ.yaml b/example_configs/TapDelta_XYZ.yaml new file mode 100644 index 000000000..51d45c7f0 --- /dev/null +++ b/example_configs/TapDelta_XYZ.yaml @@ -0,0 +1,103 @@ +# This config defines an arm motion range from 30 deg up to 90 deg down +# 30 deg is pi/6 or 0.524 Radians +# 90 deg is pi/2 or 1.571 radians +# Max travel = 2.094 +# 2048 is the 0 point on the dynamixel in this design and the total is 4096 +# Up is 2048-341 = 1707 +# Down is 2048 + 1024 = 3072 + +board: Tap Delta +name: Tapster3 +30-90 +meta: B. Dring for Tapster +stepping: + engine: RMT + idle_ms: 2000 + pulse_us: 4 + dir_delay_us: 1 + disable_delay_us: 0 + +kinematics: + parallel_delta: + crank_mm: 70.000 + base_triangle_mm: 179.437 + linkage_mm: 133.50 + end_effector_triangle_mm: 86.603 + kinematic_segment_len_mm: 0.500 + homing_mpos_radians: 0.0 + soft_limits: true + max_z_mm: -90.0 + +start: + must_home: false + deactivate_parking: false + check_limits: false + +axes: + shared_stepper_disable_pin: NO_PIN + x: + steps_per_mm: 100.000 + max_rate_mm_per_min: 8000 + acceleration_mm_per_sec2: 300.000 + max_travel_mm: 2.094 + soft_limits: false + homing: + cycle: 1 + positive_direction: false + mpos_mm: -0.524 + + motor0: + dynamixel2: + id: 1 + uart: + txd_pin: gpio.4 + rxd_pin: gpio.13 + rts_pin: gpio.17 + baud: 1000000 + mode: 8N1 + count_min: 1707 + count_max: 3072 + timer_ms: 30 + + y: + steps_per_mm: 100.000 + max_rate_mm_per_min: 8000 + acceleration_mm_per_sec2: 300.000 + max_travel_mm: 2.094 + soft_limits: false + homing: + cycle: 1 + positive_direction: false + mpos_mm: -0.524 + + motor0: + dynamixel2: + id: 2 + count_min: 1707 + count_max: 3072 + timer_ms: 30 + z: + steps_per_mm: 100.000 + max_rate_mm_per_min: 8000 + acceleration_mm_per_sec2: 300.000 + max_travel_mm: 2.094 + soft_limits: false + homing: + cycle: 1 + positive_direction: false + mpos_mm: -0.524 + + motor0: + dynamixel2: + id: 3 + count_min: 1707 + count_max: 3072 + timer_ms: 30 + +spi: + miso_pin: gpio.19 + mosi_pin: gpio.23 + sck_pin: gpio.18 + +sdcard: + card_detect_pin: NO_PIN + cs_pin: gpio.5 \ No newline at end of file From 6af25051177bbfd008baddb58a7e652209336630 Mon Sep 17 00:00:00 2001 From: bdring Date: Wed, 9 Aug 2023 19:57:01 -0500 Subject: [PATCH 110/212] Added kinematics homing This allows the kinematics to do a special homing method, like wall plotter or delta. --- FluidNC/src/Kinematics/Cartesian.cpp | 6 ++--- FluidNC/src/Kinematics/Cartesian.h | 2 +- FluidNC/src/Kinematics/Kinematics.cpp | 5 ++++ FluidNC/src/Kinematics/Kinematics.h | 3 ++- FluidNC/src/Kinematics/ParallelDelta.cpp | 32 ++++++++++++------------ FluidNC/src/Kinematics/ParallelDelta.h | 2 +- FluidNC/src/Kinematics/WallPlotter.cpp | 6 ++--- FluidNC/src/Kinematics/WallPlotter.h | 2 +- FluidNC/src/Machine/Homing.cpp | 7 +++--- FluidNC/src/Motors/Dynamixel2.cpp | 15 +++++++---- example_configs/TapDelta_XYZ.yaml | 22 +++++++++------- 11 files changed, 59 insertions(+), 43 deletions(-) diff --git a/FluidNC/src/Kinematics/Cartesian.cpp b/FluidNC/src/Kinematics/Cartesian.cpp index 92971c856..00b1318bd 100644 --- a/FluidNC/src/Kinematics/Cartesian.cpp +++ b/FluidNC/src/Kinematics/Cartesian.cpp @@ -305,9 +305,9 @@ namespace Kinematics { } } - // bool Cartesian::kinematics_homing(AxisMask& axisMask) { - // return false; // kinematics does not do the homing for catesian systems - // } + bool Cartesian::kinematics_homing(AxisMask& axisMask) { + return false; // kinematics does not do the homing for catesian systems + } // Configuration registration namespace { diff --git a/FluidNC/src/Kinematics/Cartesian.h b/FluidNC/src/Kinematics/Cartesian.h index 48f9fe62a..6c4b24c1b 100644 --- a/FluidNC/src/Kinematics/Cartesian.h +++ b/FluidNC/src/Kinematics/Cartesian.h @@ -42,7 +42,7 @@ namespace Kinematics { bool canHome(AxisMask axisMask) override; void releaseMotors(AxisMask axisMask, MotorMask motors) override; bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited) override; - //virtual bool kinematics_homing(AxisMask& axisMask) override; + virtual bool kinematics_homing(AxisMask& axisMask) override; // Configuration handlers: void afterParse() override {} diff --git a/FluidNC/src/Kinematics/Kinematics.cpp b/FluidNC/src/Kinematics/Kinematics.cpp index 0c3fadd98..83249e4f3 100644 --- a/FluidNC/src/Kinematics/Kinematics.cpp +++ b/FluidNC/src/Kinematics/Kinematics.cpp @@ -39,6 +39,11 @@ namespace Kinematics { return _system->canHome(axisMask); } + bool Kinematics::kinematics_homing(AxisMask axisMask) { + Assert(_system != nullptr, "No kinematic system"); + return _system->kinematics_homing(axisMask); + } + void Kinematics::releaseMotors(AxisMask axisMask, MotorMask motors) { Assert(_system != nullptr, "No kinematic system"); _system->releaseMotors(axisMask, motors); diff --git a/FluidNC/src/Kinematics/Kinematics.h b/FluidNC/src/Kinematics/Kinematics.h index 3b353e02a..7f57b3f5b 100644 --- a/FluidNC/src/Kinematics/Kinematics.h +++ b/FluidNC/src/Kinematics/Kinematics.h @@ -54,6 +54,7 @@ namespace Kinematics { float* target, plan_line_data_t* pl_data, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc); bool canHome(AxisMask axisMask); + bool kinematics_homing(AxisMask axisMask); void releaseMotors(AxisMask axisMask, MotorMask motors); bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited); @@ -89,7 +90,7 @@ namespace Kinematics { virtual bool canHome(AxisMask axisMask) { return false; } virtual void releaseMotors(AxisMask axisMask, MotorMask motors) {} virtual bool limitReached(AxisMask& axisMask, MotorMask& motors, MotorMask limited) { return false; } - //virtual bool kinematics_homing(AxisMask& axisMask) { return false; } + virtual bool kinematics_homing(AxisMask& axisMask) { return false; } // Configuration interface. void afterParse() override {} diff --git a/FluidNC/src/Kinematics/ParallelDelta.cpp b/FluidNC/src/Kinematics/ParallelDelta.cpp index b60ca22f9..085e7f885 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.cpp +++ b/FluidNC/src/Kinematics/ParallelDelta.cpp @@ -295,22 +295,22 @@ namespace Kinematics { */ - // bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { - // auto axes = config->_axes; - // auto n_axis = axes->_numberAxis; - - // log_debug("kinematics_homing"); - // config->_axes->set_disable(false); - - // // TODO deal with non kinematic axes above Z - // for (int axis = 0; axis < 3; axis++) { - // //set_motor_steps(axis, mpos_to_steps(axes->_axis[axis]->_homing->_mpos, axis)); - // int32_t steps = mpos_to_steps(_homing_mpos, axis); - // set_motor_steps(axis, steps); - // } - // protocol_disable_steppers(); - // return true; // signal main code that this handled all homing - // } + bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { + auto axes = config->_axes; + auto n_axis = axes->_numberAxis; + + log_debug("kinematics_homing"); + config->_axes->set_disable(false); + + // TODO deal with non kinematic axes above Z + for (int axis = 0; axis < 3; axis++) { + //set_motor_steps(axis, mpos_to_steps(axes->_axis[axis]->_homing->_mpos, axis)); + int32_t steps = mpos_to_steps(_homing_mpos, axis); + set_motor_steps(axis, steps); + } + protocol_disable_steppers(); + return true; // signal main code that this handled all homing + } // helper functions, calculates angle theta1 (for YZ-pane) bool ParallelDelta::delta_calcAngleYZ(float x0, float y0, float z0, float& theta) { diff --git a/FluidNC/src/Kinematics/ParallelDelta.h b/FluidNC/src/Kinematics/ParallelDelta.h index 9c8d89b27..a2e14a36d 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.h +++ b/FluidNC/src/Kinematics/ParallelDelta.h @@ -46,7 +46,7 @@ namespace Kinematics { void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; bool transform_cartesian_to_motors(float* motors, float* cartesian) override; //bool soft_limit_error_exists(float* cartesian) override; - //bool kinematics_homing(AxisMask& axisMask) override; + bool kinematics_homing(AxisMask& axisMask) override; virtual void constrain_jog(float* cartesian, plan_line_data_t* pl_data, float* position) override; void releaseMotors(AxisMask axisMask, MotorMask motors) override; diff --git a/FluidNC/src/Kinematics/WallPlotter.cpp b/FluidNC/src/Kinematics/WallPlotter.cpp index d16b67cd3..ac1bdbd16 100644 --- a/FluidNC/src/Kinematics/WallPlotter.cpp +++ b/FluidNC/src/Kinematics/WallPlotter.cpp @@ -230,9 +230,9 @@ namespace Kinematics { right_length = hypot_f(right_dx, right_dy); } - // bool WallPlotter::kinematics_homing(AxisMask& axisMask) { - // return false; // kinematics does not do the homing for catesian systems - // } + bool WallPlotter::kinematics_homing(AxisMask& axisMask) { + return false; // kinematics does not do the homing for catesian systems + } // Configuration registration namespace { diff --git a/FluidNC/src/Kinematics/WallPlotter.h b/FluidNC/src/Kinematics/WallPlotter.h index c5a86ac63..f3a4c7518 100644 --- a/FluidNC/src/Kinematics/WallPlotter.h +++ b/FluidNC/src/Kinematics/WallPlotter.h @@ -29,7 +29,7 @@ namespace Kinematics { bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) override; void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; bool transform_cartesian_to_motors(float* cartesian, float* motors) override; - //bool kinematics_homing(AxisMask& axisMask) override; + bool kinematics_homing(AxisMask& axisMask) override; // Configuration handlers: void validate() override {} diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index 4efb966eb..3a40a1aa0 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -432,9 +432,9 @@ namespace Machine { // cycle. The protocol loop will then respond to events and advance // the homing state machine through its phases. void Homing::run_cycles(AxisMask axisMask) { - // if (config->_kinematics->kinematics_homing(axisMask)) { - // return; - // } + if (config->_kinematics->kinematics_homing(axisMask)) { + return; + } if (!config->_kinematics->canHome(axisMask)) { sys.state = State::Alarm; @@ -445,6 +445,7 @@ namespace Machine { auto n_axis = config->_axes->_numberAxis; for (int axis = X_AXIS; axis < n_axis; axis++) { if (config->_axes->_axis[axis]->_homing->_cycle == set_mpos_only) { + log_info("set_mpos_only"); if (axisMask == 0 || axisMask & 1 << axis) { float* mpos = get_mpos(); mpos[axis] = config->_axes->_axis[axis]->_homing->_mpos; diff --git a/FluidNC/src/Motors/Dynamixel2.cpp b/FluidNC/src/Motors/Dynamixel2.cpp index 0c01cc258..d4ccd3dc1 100644 --- a/FluidNC/src/Motors/Dynamixel2.cpp +++ b/FluidNC/src/Motors/Dynamixel2.cpp @@ -90,16 +90,16 @@ namespace MotorDrivers { if (len == PING_RSP_LEN) { uint16_t model_num = _rx_message[10] << 8 | _rx_message[9]; uint8_t fw_rev = _rx_message[11]; - std::string msg("Axis ping reply "); + std::string msg(" "); msg += axisName().c_str(); if (model_num == 1060) { - msg += " Model XL430-W250"; + msg += "reply: Model XL430-W250"; } else { msg += " M/N " + std::to_string(model_num); } log_info(msg << " F/W Rev " << to_hex(fw_rev)); } else { - log_warn(" Ping failed"); + log_warn(axisName() << " Ping failed"); return false; } @@ -110,6 +110,7 @@ namespace MotorDrivers { // sets the PWM to zero. This allows most servos to be manually moved void IRAM_ATTR Dynamixel2::set_disable(bool disable) { + log_info("dyn disable:"<> 8); diff --git a/example_configs/TapDelta_XYZ.yaml b/example_configs/TapDelta_XYZ.yaml index 51d45c7f0..e578c0f6b 100644 --- a/example_configs/TapDelta_XYZ.yaml +++ b/example_configs/TapDelta_XYZ.yaml @@ -32,6 +32,13 @@ start: deactivate_parking: false check_limits: false +uart1: + txd_pin: gpio.4 + rxd_pin: gpio.13 + rts_pin: gpio.17 + baud: 1000000 + mode: 8N1 + axes: shared_stepper_disable_pin: NO_PIN x: @@ -41,19 +48,14 @@ axes: max_travel_mm: 2.094 soft_limits: false homing: - cycle: 1 + cycle: -1 positive_direction: false mpos_mm: -0.524 motor0: dynamixel2: + uart_num: 1 id: 1 - uart: - txd_pin: gpio.4 - rxd_pin: gpio.13 - rts_pin: gpio.17 - baud: 1000000 - mode: 8N1 count_min: 1707 count_max: 3072 timer_ms: 30 @@ -65,12 +67,13 @@ axes: max_travel_mm: 2.094 soft_limits: false homing: - cycle: 1 + cycle: -1 positive_direction: false mpos_mm: -0.524 motor0: dynamixel2: + uart_num: 1 id: 2 count_min: 1707 count_max: 3072 @@ -82,12 +85,13 @@ axes: max_travel_mm: 2.094 soft_limits: false homing: - cycle: 1 + cycle: -1 positive_direction: false mpos_mm: -0.524 motor0: dynamixel2: + uart_num: 1 id: 3 count_min: 1707 count_max: 3072 From d9ab16b064fc4751a2e50abcdbbb0094eb159071 Mon Sep 17 00:00:00 2001 From: bdring Date: Thu, 10 Aug 2023 15:52:38 -0500 Subject: [PATCH 111/212] Updates after some testing --- FluidNC/src/Kinematics/ParallelDelta.cpp | 123 +++++++++-------------- FluidNC/src/Kinematics/ParallelDelta.h | 10 +- FluidNC/src/Limits.cpp | 6 ++ FluidNC/src/Limits.h | 1 + FluidNC/src/Motors/Dynamixel2.cpp | 1 - example_configs/TapDelta_XYZ.yaml | 2 +- 6 files changed, 58 insertions(+), 85 deletions(-) diff --git a/FluidNC/src/Kinematics/ParallelDelta.cpp b/FluidNC/src/Kinematics/ParallelDelta.cpp index 085e7f885..e43fa2131 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.cpp +++ b/FluidNC/src/Kinematics/ParallelDelta.cpp @@ -81,7 +81,19 @@ namespace Kinematics { void ParallelDelta::init() { // print a startup message to show the kinematics are enabled. Print the offset for reference - log_info("Kinematic system: " << name()); + log_info("Kinematic system:" << name() << " soft_limits:" << _softLimits); + + auto axes = config->_axes; + auto n_axis = config->_axes->_numberAxis; + + // warn about axissofy limits + for (int axis = 0; axis < n_axis; axis++) { + if (axes->_axis[axis]->_softLimits) { + log_warn(" All soft_limits configured in axes should be false"); + break; + } + } + init_position(); } @@ -94,67 +106,47 @@ namespace Kinematics { log_info(" Z Offset:" << cartesian[Z_AXIS]); } - + bool ParallelDelta::invalid_line(float* cartesian) { + if (!_softLimits) + return false; + + float motors[MAX_N_AXIS] = { 0.0, 0.0, 0.0 }; + + if (!transform_cartesian_to_motors(motors, cartesian)) { + limit_error(); + return true; + } + return false; + } + + // TO DO. This is not supported yet. Other levels of protection will prevent "damage" + bool ParallelDelta::invalid_arc( + float* target, plan_line_data_t* pl_data, float* position, float center[3], float radius, size_t caxes[3], bool is_clockwise_arc) { + return false; + } // copied from Cartensian. Needs to be optimized for parallel delta. void ParallelDelta::constrain_jog(float* target, plan_line_data_t* pl_data, float* position) { - auto axes = config->_axes; - auto n_axis = config->_axes->_numberAxis; - - float* current_position = get_mpos(); - MotorMask lim_pin_state = limits_get_state(); + // log_debug("Jog Test: from(" << position[X_AXIS] << ")" + // << " to(" << target[X_AXIS] << ")"); + if (!_softLimits) + return; - for (int axis = 0; axis < n_axis; axis++) { - auto axisSetting = axes->_axis[axis]; - // If the axis is moving from the current location and soft limits are on. - if (axisSetting->_softLimits && target[axis] != current_position[axis]) { - // When outside the axis range, only small nudges to clear switches are allowed - bool move_positive = target[axis] > current_position[axis]; - if ((!move_positive && (current_position[axis] < limitsMinPosition(axis))) || - (move_positive && (current_position[axis] > limitsMaxPosition(axis)))) { - // only allow a nudge if a switch is active - if (bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 0)) && - bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 1))) { - target[axis] = current_position[axis]; // cancel the move on this axis - log_debug("Soft limit violation on " << Machine::Axes::_names[axis]); - continue; - } - float jog_dist = target[axis] - current_position[axis]; - - MotorMask axisMotors = Machine::Axes::axes_to_motors(1 << axis); - bool posLimited = bits_are_true(Machine::Axes::posLimitMask, axisMotors); - bool negLimited = bits_are_true(Machine::Axes::negLimitMask, axisMotors); - - // if jog is positive and only the positive switch is active, then kill the move - // if jog is negative and only the negative switch is active, then kill the move - if (posLimited != negLimited) { // XOR, because ambiguous (both) is OK - if ((negLimited && (jog_dist < 0)) || (posLimited && (jog_dist > 0))) { - target[axis] = current_position[axis]; // cancel the move on this axis - log_debug("Jog into active switch blocked on " << Machine::Axes::_names[axis]); - continue; - } - } - - auto nudge_max = axisSetting->_motors[0]->_pulloff; - if (abs(jog_dist) > nudge_max) { - target[axis] = (jog_dist >= 0) ? current_position[axis] + nudge_max : current_position[axis] + nudge_max; - log_debug("Jog amount limited when outside soft limits") - } - continue; - } + float motors[MAX_N_AXIS] = { 0.0, 0.0, 0.0 }; - if (target[axis] < limitsMinPosition(axis)) { - target[axis] = limitsMinPosition(axis); - } else if (target[axis] > limitsMaxPosition(axis)) { - target[axis] = limitsMaxPosition(axis); - } else { - continue; - } - log_debug("Jog constrained to axis range"); - } + // Temp fix + // If the target is reachable do nothing + if (transform_cartesian_to_motors(motors, target)) { + return; + } else { + log_warn("Kinematics soft limit jog rejection"); + copyAxes(target, position); } - pl_data->limits_checked = true; + + // TO DO better idea + // loop back from the target in increments of kinematic_segment_len_mm unitl the position is valid. + // constrain to that target. } bool ParallelDelta::cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position) { @@ -288,18 +280,11 @@ namespace Kinematics { cartesian[X_AXIS] = (a1 * cartesian[Z_AXIS] + b1) / dnm; cartesian[Y_AXIS] = (a2 * cartesian[Z_AXIS] + b2) / dnm; } -/* - bool ParallelDelta::canHome(AxisMask& axisMask) { - return true; // signal main code that this handled all homing - } -*/ - bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { auto axes = config->_axes; auto n_axis = axes->_numberAxis; - log_debug("kinematics_homing"); config->_axes->set_disable(false); // TODO deal with non kinematic axes above Z @@ -322,7 +307,7 @@ namespace Kinematics { // discriminant float d = -(a + b * y1) * (a + b * y1) + rf * (b * b * rf + rf); if (d < 0) { - log_warn("Kinematics: Target unreachable"); + //log_warn("Kinematics: Target unreachable"); return false; } // non-existing point float yj = (y1 - a * b - sqrt(d)) / (b * b + 1); // choosing outer point @@ -333,18 +318,6 @@ namespace Kinematics { return true; } - // checks to see if the target is reachable - // bool ParallelDelta::soft_limit_error_exists(float* cartesian) { - // float motors[MAX_N_AXIS]; - // bool calc_ok = true; - // bool limit_error = false; - - // if (!_softLimits) - // limit_error = false; - - // return !transform_cartesian_to_motors(motors, cartesian); - // } - void ParallelDelta::releaseMotors(AxisMask axisMask, MotorMask motors) {} bool ParallelDelta::transform_cartesian_to_motors(float* motors, float* cartesian) { diff --git a/FluidNC/src/Kinematics/ParallelDelta.h b/FluidNC/src/Kinematics/ParallelDelta.h index a2e14a36d..fd6e166e9 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.h +++ b/FluidNC/src/Kinematics/ParallelDelta.h @@ -19,9 +19,6 @@ # define M_PI 3.14159265358979323846 #endif -#define ARM_INTERNAL_ANGLE 0.05 // radians 2.866° // due to mounting angle -#define DXL_CENTER 2015 // (DXL_COUNTS / 2) - (ARM_INTERNAL_ANGLE * DXL_COUNT_PER_RADIAN) - namespace Kinematics { // enum class KinematicError : uint8_t { // NONE = 0, @@ -46,11 +43,8 @@ namespace Kinematics { void motors_to_cartesian(float* cartesian, float* motors, int n_axis) override; bool transform_cartesian_to_motors(float* motors, float* cartesian) override; //bool soft_limit_error_exists(float* cartesian) override; - bool kinematics_homing(AxisMask& axisMask) override; + bool kinematics_homing(AxisMask& axisMask) override; virtual void constrain_jog(float* cartesian, plan_line_data_t* pl_data, float* position) override; - void releaseMotors(AxisMask axisMask, MotorMask motors) override; - - /* virtual bool invalid_line(float* cartesian) override; virtual bool invalid_arc(float* target, plan_line_data_t* pl_data, @@ -60,7 +54,7 @@ namespace Kinematics { size_t caxes[3], bool is_clockwise_arc) override; - */ + void releaseMotors(AxisMask axisMask, MotorMask motors) override; // Configuration handlers: //void validate() const override {} diff --git a/FluidNC/src/Limits.cpp b/FluidNC/src/Limits.cpp index c8fc0d74e..1623e30f6 100644 --- a/FluidNC/src/Limits.cpp +++ b/FluidNC/src/Limits.cpp @@ -60,6 +60,11 @@ bool soft_limit = false; void limit_error(size_t axis, float coordinate) { log_info("Soft limit on " << Machine::Axes::_names[axis] << " target:" << coordinate); + limit_error(); +} + +void limit_error() { + soft_limit = true; // Force feed hold if cycle is active. All buffered blocks are guaranteed to be within // workspace volume so just come to a controlled stop so position is not lost. When complete @@ -74,6 +79,7 @@ void limit_error(size_t axis, float coordinate) { } } while (sys.state != State::Idle); } + mc_critical(ExecAlarm::SoftLimit); } diff --git a/FluidNC/src/Limits.h b/FluidNC/src/Limits.h index 0c2ef2d11..03d81d066 100644 --- a/FluidNC/src/Limits.h +++ b/FluidNC/src/Limits.h @@ -16,6 +16,7 @@ void limits_init(); // Returns limit state MotorMask limits_get_state(); +void limit_error(); void limit_error(size_t axis, float cordinate); float limitsMaxPosition(size_t axis); diff --git a/FluidNC/src/Motors/Dynamixel2.cpp b/FluidNC/src/Motors/Dynamixel2.cpp index d4ccd3dc1..ac573b4b7 100644 --- a/FluidNC/src/Motors/Dynamixel2.cpp +++ b/FluidNC/src/Motors/Dynamixel2.cpp @@ -110,7 +110,6 @@ namespace MotorDrivers { // sets the PWM to zero. This allows most servos to be manually moved void IRAM_ATTR Dynamixel2::set_disable(bool disable) { - log_info("dyn disable:"< Date: Fri, 11 Aug 2023 10:32:12 -0500 Subject: [PATCH 112/212] Update Homing.cpp --- FluidNC/src/Machine/Homing.cpp | 39 +++++++++++++++++++++++----------- 1 file changed, 27 insertions(+), 12 deletions(-) diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index 3a40a1aa0..fda33ffe0 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -1,9 +1,9 @@ #include "Homing.h" -#include "../System.h" // sys.* -#include "../Stepper.h" // st_wake -#include "../Protocol.h" // protocol_handle_events -#include "../Limits.h" // ambiguousLimit +#include "../System.h" // sys.* +#include "../Stepper.h" // st_wake +#include "../Protocol.h" // protocol_handle_events +#include "../Limits.h" // ambiguousLimit #include "../Machine/Axes.h" #include "../Machine/MachineConfig.h" // config @@ -42,13 +42,25 @@ namespace Machine { AxisMask Homing::_unhomed_axes; // Bitmap of axes whose position is unknown - bool Homing::axis_is_homed(size_t axis) { return bitnum_is_false(_unhomed_axes, axis); } - void Homing::set_axis_homed(size_t axis) { clear_bitnum(_unhomed_axes, axis); } - void Homing::set_axis_unhomed(size_t axis) { set_bitnum(_unhomed_axes, axis); } - void Homing::set_all_axes_unhomed() { _unhomed_axes = Machine::Axes::homingMask; } - void Homing::set_all_axes_homed() { _unhomed_axes = 0; } + bool Homing::axis_is_homed(size_t axis) { + return bitnum_is_false(_unhomed_axes, axis); + } + void Homing::set_axis_homed(size_t axis) { + clear_bitnum(_unhomed_axes, axis); + } + void Homing::set_axis_unhomed(size_t axis) { + set_bitnum(_unhomed_axes, axis); + } + void Homing::set_all_axes_unhomed() { + _unhomed_axes = Machine::Axes::homingMask; + } + void Homing::set_all_axes_homed() { + _unhomed_axes = 0; + } - AxisMask Homing::unhomed_axes() { return _unhomed_axes; } + AxisMask Homing::unhomed_axes() { + return _unhomed_axes; + } const char* Homing::_phaseNames[] = { "None", "PrePulloff", "FastApproach", "Pulloff0", "SlowApproach", "Pulloff1", "Pulloff2", "CycleDone", @@ -76,7 +88,9 @@ namespace Machine { protocol_send_event(&cycleStartEvent); } - static MotorMask limited() { return Machine::Axes::posLimitMask | Machine::Axes::negLimitMask; } + static MotorMask limited() { + return Machine::Axes::posLimitMask | Machine::Axes::negLimitMask; + } void Homing::cycleStop() { log_debug("CycleStop " << phaseName(_phase)); @@ -360,7 +374,7 @@ namespace Machine { } void Homing::fail(ExecAlarm alarm) { - Stepper::reset(); // Stop moving + Stepper::reset(); // Stop moving send_alarm(alarm); config->_axes->set_homing_mode(_cycleAxes, false); // tell motors homing is done...failed config->_axes->set_disable(config->_stepping->_idleMsecs != 255); @@ -432,6 +446,7 @@ namespace Machine { // cycle. The protocol loop will then respond to events and advance // the homing state machine through its phases. void Homing::run_cycles(AxisMask axisMask) { + // Check to see if the Kinematics takes care of homing. if (config->_kinematics->kinematics_homing(axisMask)) { return; } From 7079eb48bff3f166815dff59e353847fe02d9c6e Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 11 Aug 2023 14:37:26 -0500 Subject: [PATCH 113/212] Added _use_servos config item This will allow servos and steppers to homing differently --- FluidNC/src/Kinematics/ParallelDelta.cpp | 6 ++++++ FluidNC/src/Kinematics/ParallelDelta.h | 8 ++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/FluidNC/src/Kinematics/ParallelDelta.cpp b/FluidNC/src/Kinematics/ParallelDelta.cpp index e43fa2131..f5b89fff2 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.cpp +++ b/FluidNC/src/Kinematics/ParallelDelta.cpp @@ -77,6 +77,7 @@ namespace Kinematics { handler.item("homing_mpos_radians", _homing_mpos); handler.item("soft_limits", _softLimits); handler.item("max_z_mm", _max_z, -10000.0, 0.0); // + handler.item("use_servos", _use_servos); } void ParallelDelta::init() { @@ -282,6 +283,11 @@ namespace Kinematics { } bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { + + // only servos use custom homing. Steppers use limit switches + if (!_use_servos) + false; + auto axes = config->_axes; auto n_axis = axes->_numberAxis; diff --git a/FluidNC/src/Kinematics/ParallelDelta.h b/FluidNC/src/Kinematics/ParallelDelta.h index fd6e166e9..fc990c2c4 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.h +++ b/FluidNC/src/Kinematics/ParallelDelta.h @@ -20,12 +20,7 @@ #endif namespace Kinematics { - // enum class KinematicError : uint8_t { - // NONE = 0, - // OUT_OF_RANGE = 1, - // ANGLE_TOO_NEGATIVE = 2, - // ANGLE_TOO_POSITIVE = 3, - // }; + class ParallelDelta : public Cartesian { public: ParallelDelta() = default; @@ -78,6 +73,7 @@ namespace Kinematics { bool _softLimits = false; float _homing_mpos = 0.0; float _max_z = 0.0; + bool _use_servos = true; // servo use a special homing bool delta_calcAngleYZ(float x0, float y0, float z0, float& theta); float three_axis_dist(float* point1, float* point2); From 528f58a86b440f64f66fda696ec6125ee8cc9e66 Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 11 Aug 2023 14:51:50 -0500 Subject: [PATCH 114/212] Update Homing.cpp --- FluidNC/src/Machine/Homing.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/FluidNC/src/Machine/Homing.cpp b/FluidNC/src/Machine/Homing.cpp index fda33ffe0..6f0fa302a 100644 --- a/FluidNC/src/Machine/Homing.cpp +++ b/FluidNC/src/Machine/Homing.cpp @@ -460,7 +460,6 @@ namespace Machine { auto n_axis = config->_axes->_numberAxis; for (int axis = X_AXIS; axis < n_axis; axis++) { if (config->_axes->_axis[axis]->_homing->_cycle == set_mpos_only) { - log_info("set_mpos_only"); if (axisMask == 0 || axisMask & 1 << axis) { float* mpos = get_mpos(); mpos[axis] = config->_axes->_axis[axis]->_homing->_mpos; From ff06f6f42865786761031780ea9a5e4e69de5f0f Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 13 Aug 2023 09:29:18 -0500 Subject: [PATCH 115/212] Typo fixes in comments --- FluidNC/src/Kinematics/ParallelDelta.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/FluidNC/src/Kinematics/ParallelDelta.cpp b/FluidNC/src/Kinematics/ParallelDelta.cpp index f5b89fff2..7d24d6f52 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.cpp +++ b/FluidNC/src/Kinematics/ParallelDelta.cpp @@ -17,11 +17,11 @@ To make the moves straight and smooth on a delta, the cartesian moves are broken into small segments where the non linearity will not be noticed. - This is similar to how Grgl draws arcs. + This is similar to how Grbl draws arcs. - If you request MPos status it will tell you the position in - arm angles. The MPos will report in cartesian values using forward kinematics. - The arm 0 values (angle) are the arms at horizontal. + For mpos reporting, the motor position in steps is proportional to arm angles + in radians, which is then converted to cartesian via the forward kinematics + transform. Arm angle 0 means horizontal. Positive angles are below horizontal. @@ -127,7 +127,7 @@ namespace Kinematics { return false; } - // copied from Cartensian. Needs to be optimized for parallel delta. + // copied from Cartesian . Needs to be optimized for parallel delta. void ParallelDelta::constrain_jog(float* target, plan_line_data_t* pl_data, float* position) { // log_debug("Jog Test: from(" << position[X_AXIS] << ")" // << " to(" << target[X_AXIS] << ")"); @@ -283,7 +283,6 @@ namespace Kinematics { } bool ParallelDelta::kinematics_homing(AxisMask& axisMask) { - // only servos use custom homing. Steppers use limit switches if (!_use_servos) false; From 2e7b1012262afa737c467a1f2dd3f85ad51d9f96 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 13 Aug 2023 12:01:06 -1000 Subject: [PATCH 116/212] Added G38.6-9 to force probe units in mm --- FluidNC/src/GCode.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/FluidNC/src/GCode.cpp b/FluidNC/src/GCode.cpp index 9e35618f2..812e43ec2 100644 --- a/FluidNC/src/GCode.cpp +++ b/FluidNC/src/GCode.cpp @@ -172,6 +172,7 @@ Error gc_execute_line(char* line) { bool syncLaser = false; bool disableLaser = false; bool laserIsMotion = false; + bool forceG21 = false; // Used for G38.6-9 auto n_axis = config->_axes->_numberAxis; float coord_data[MAX_N_AXIS]; // Used by WCO-related commands @@ -320,6 +321,10 @@ Error gc_execute_line(char* line) { probeExplicit = true; axis_command = AxisCommand::MotionMode; + if (mantissa >= 60) { + forceG21 = true; + mantissa -= 60; + } switch (mantissa) { case 20: gc_block.modal.motion = Motion::ProbeToward; @@ -794,7 +799,7 @@ Error gc_execute_line(char* line) { if (bitnum_is_false(value_words, GCodeWord::F)) { FAIL(Error::GcodeUndefinedFeedRate); } - if (gc_block.modal.units == Units::Inches) { + if (!forceG21 && gc_block.modal.units == Units::Inches) { gc_block.values.f *= MM_PER_INCH; } } else { @@ -822,7 +827,7 @@ Error gc_execute_line(char* line) { // - In units per mm mode: If F word passed, ensure value is in mm/min, otherwise push last state value. if (gc_state.modal.feed_rate == FeedRate::UnitsPerMin) { // Last state is also G94 if (bitnum_is_true(value_words, GCodeWord::F)) { - if (gc_block.modal.units == Units::Inches) { + if (!forceG21 && gc_block.modal.units == Units::Inches) { gc_block.values.f *= MM_PER_INCH; } } else { @@ -895,7 +900,7 @@ Error gc_execute_line(char* line) { // [12. Set length units ]: N/A // Pre-convert XYZ coordinate values to millimeters, if applicable. - if (gc_block.modal.units == Units::Inches) { + if (!forceG21 && gc_block.modal.units == Units::Inches) { for (size_t idx = 0; idx < n_axis; idx++) { // Axes indices are consistent, so loop may be used. if ((idx < A_AXIS || idx > C_AXIS) && bitnum_is_true(axis_words, idx)) { gc_block.values.xyz[idx] *= MM_PER_INCH; @@ -1152,7 +1157,7 @@ Error gc_execute_line(char* line) { FAIL(Error::GcodeInvalidTarget); // [Invalid target] } // Convert radius value to proper units. - if (gc_block.modal.units == Units::Inches) { + if (!forceG21 && gc_block.modal.units == Units::Inches) { gc_block.values.r *= MM_PER_INCH; } /* We need to calculate the center of the circle that has the designated radius and passes @@ -1246,7 +1251,7 @@ Error gc_execute_line(char* line) { } clear_bits(value_words, (bitnum_to_mask(GCodeWord::I) | bitnum_to_mask(GCodeWord::J) | bitnum_to_mask(GCodeWord::K))); // Convert IJK values to proper units. - if (gc_block.modal.units == Units::Inches) { + if (!forceG21 && gc_block.modal.units == Units::Inches) { for (size_t idx = 0; idx < n_axis; idx++) { // Axes indices are consistent, so loop may be used to save flash space. if (ijk_words & bitnum_to_mask(idx)) { gc_block.values.ijk[idx] *= MM_PER_INCH; From dff1df6bdd173ed90e405d85cdb7fab17602d07a Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 14 Aug 2023 07:07:34 -1000 Subject: [PATCH 117/212] Use newer versions of arduinoWebSockets and WiFi libs with timeout --- platformio.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index ddd269efe..7787b9cc7 100644 --- a/platformio.ini +++ b/platformio.ini @@ -33,8 +33,8 @@ lib_deps = bt_deps = BluetoothSerial wifi_deps = - arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#canSend - WiFi=https://github.com/MitchBradley/WiFi#52da841 + arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#7793f9e + WiFi=https://github.com/MitchBradley/WiFi#e63583f ; If we include the following explicit dependencies when we get the ; Arduino framework code from github, platformio picks up different ; and incompatible versions of these libraries from who knows where, From 4e31ec1850aa08d99c7552cab90c1f0cbacd4520 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 14 Aug 2023 09:15:47 -1000 Subject: [PATCH 118/212] Fixed parsing error, made G38.6-9 always incremental --- FluidNC/src/GCode.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/FluidNC/src/GCode.cpp b/FluidNC/src/GCode.cpp index 812e43ec2..3d74db282 100644 --- a/FluidNC/src/GCode.cpp +++ b/FluidNC/src/GCode.cpp @@ -172,7 +172,7 @@ Error gc_execute_line(char* line) { bool syncLaser = false; bool disableLaser = false; bool laserIsMotion = false; - bool forceG21 = false; // Used for G38.6-9 + bool nonmodalG38 = false; // Used for G38.6-9 auto n_axis = config->_axes->_numberAxis; float coord_data[MAX_N_AXIS]; // Used by WCO-related commands @@ -322,8 +322,8 @@ Error gc_execute_line(char* line) { axis_command = AxisCommand::MotionMode; if (mantissa >= 60) { - forceG21 = true; - mantissa -= 60; + nonmodalG38 = true; + mantissa -= 40; } switch (mantissa) { case 20: @@ -799,7 +799,7 @@ Error gc_execute_line(char* line) { if (bitnum_is_false(value_words, GCodeWord::F)) { FAIL(Error::GcodeUndefinedFeedRate); } - if (!forceG21 && gc_block.modal.units == Units::Inches) { + if (!nonmodalG38 && gc_block.modal.units == Units::Inches) { gc_block.values.f *= MM_PER_INCH; } } else { @@ -827,7 +827,7 @@ Error gc_execute_line(char* line) { // - In units per mm mode: If F word passed, ensure value is in mm/min, otherwise push last state value. if (gc_state.modal.feed_rate == FeedRate::UnitsPerMin) { // Last state is also G94 if (bitnum_is_true(value_words, GCodeWord::F)) { - if (!forceG21 && gc_block.modal.units == Units::Inches) { + if (!nonmodalG38 && gc_block.modal.units == Units::Inches) { gc_block.values.f *= MM_PER_INCH; } } else { @@ -900,7 +900,7 @@ Error gc_execute_line(char* line) { // [12. Set length units ]: N/A // Pre-convert XYZ coordinate values to millimeters, if applicable. - if (!forceG21 && gc_block.modal.units == Units::Inches) { + if (!nonmodalG38 && gc_block.modal.units == Units::Inches) { for (size_t idx = 0; idx < n_axis; idx++) { // Axes indices are consistent, so loop may be used. if ((idx < A_AXIS || idx > C_AXIS) && bitnum_is_true(axis_words, idx)) { gc_block.values.xyz[idx] *= MM_PER_INCH; @@ -1039,7 +1039,7 @@ Error gc_execute_line(char* line) { // NOTE: G53 is never active with G28/30 since they are in the same modal group. if (gc_block.non_modal_command != NonModal::AbsoluteOverride) { // Apply coordinate offsets based on distance mode. - if (gc_block.modal.distance == Distance::Absolute) { + if (!nonmodalG38 && gc_block.modal.distance == Distance::Absolute) { gc_block.values.xyz[idx] += block_coord_system[idx] + gc_state.coord_offset[idx]; if (idx == TOOL_LENGTH_OFFSET_AXIS) { gc_block.values.xyz[idx] += gc_state.tool_length_offset; @@ -1157,7 +1157,7 @@ Error gc_execute_line(char* line) { FAIL(Error::GcodeInvalidTarget); // [Invalid target] } // Convert radius value to proper units. - if (!forceG21 && gc_block.modal.units == Units::Inches) { + if (!nonmodalG38 && gc_block.modal.units == Units::Inches) { gc_block.values.r *= MM_PER_INCH; } /* We need to calculate the center of the circle that has the designated radius and passes @@ -1251,7 +1251,7 @@ Error gc_execute_line(char* line) { } clear_bits(value_words, (bitnum_to_mask(GCodeWord::I) | bitnum_to_mask(GCodeWord::J) | bitnum_to_mask(GCodeWord::K))); // Convert IJK values to proper units. - if (!forceG21 && gc_block.modal.units == Units::Inches) { + if (!nonmodalG38 && gc_block.modal.units == Units::Inches) { for (size_t idx = 0; idx < n_axis; idx++) { // Axes indices are consistent, so loop may be used to save flash space. if (ijk_words & bitnum_to_mask(idx)) { gc_block.values.ijk[idx] *= MM_PER_INCH; From b8fa5c2aaabd951c75bc9f63a812f17f43c38165 Mon Sep 17 00:00:00 2001 From: bdring Date: Mon, 14 Aug 2023 14:35:55 -0500 Subject: [PATCH 119/212] Update platformio.ini --- platformio.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/platformio.ini b/platformio.ini index ddd269efe..7787b9cc7 100644 --- a/platformio.ini +++ b/platformio.ini @@ -33,8 +33,8 @@ lib_deps = bt_deps = BluetoothSerial wifi_deps = - arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#canSend - WiFi=https://github.com/MitchBradley/WiFi#52da841 + arduinoWebSockets=https://github.com/MitchBradley/arduinoWebSockets#7793f9e + WiFi=https://github.com/MitchBradley/WiFi#e63583f ; If we include the following explicit dependencies when we get the ; Arduino framework code from github, platformio picks up different ; and incompatible versions of these libraries from who knows where, From c077a11e7d2251a9aac56e756f76b9968bb206bc Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 14 Aug 2023 10:07:27 -1000 Subject: [PATCH 120/212] New WebUI with support for G38.6 mm-only probing --- FluidNC/data/index.html.gz | Bin 116668 -> 116672 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index 38e0e29e02005c6a135aaa658ba05a22475d7f5f..a0df5fdf4ecd923cdb39f369c598ddc045b54075 100644 GIT binary patch delta 111719 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 TB>yg_Nj?2~b!Pctl!}8s3vz%g&kJ?2Z*t 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%0Ae%w@3 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 delta 111720 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�FXOdtexNexy+2)(#SjWfZrOJ-W$`*_-;f= zY3K)#rsK4?`yo(DgLBd+izzL}FyW(-ooB9;37Lb%$|^(h)`d2Ue?eOkCkuCg?!F#h zBTqxr4x#AR`a7u1A!hq=lyv;q5>Ah$dsIi#7o|OsWPTvC{n-ZI}T|= zjaVg4&c|VZN0F*0UOFCZ{P5}PJ}zpX+X?+S%LPyvhIVohURjW3h0_EYxa%T)mjR&d zZGQkqO5}Lv2UHe_@%0{{fhN?A6e^8W9;ruu%+MNeUvuiR5 z~xiH62uLN~W6ZhA`o$+{ej2 zq;mh;k?QojAl1X47O75ehg7GFAl2!AJ5mk43sN2Yv`96$9a0SzL8`%j15zz;>t$g# zqtlTpi280V**IG3rwNnUc(z_#%ci zKe~t-v#>=@*ngi4lg6Kf)4>G=Hcu{qQU+ceFN8a=gd^-7-4Wh;mS89Kle45BtCkvu zfxmwI+B!M32Cfn-Ss$~+i0=U1G(MdT-kXz$NLD`12VW7>1S?~CpA#>@02#4W!FV0p zsC^!L6Bk*E>USnt=q)lEz{h|Sa}g$9f3}1s2@Jara&$L&;dj)M8IRpy7%!wIqgE-? zlVRoVL<|Pwp@9_KVzgN?m{9jLs&cW+VkItY@Y0J;!`SPO!y&ux#zM?;N9fds4eFqMcUD9gWofx6wu~Qu{6_qHCrLe~YBN zS~|~}FSL(n=FV#8^QnrbUUe+)wCdJQswA>=uRwexw{{K0>yvMwh1>uw?(8Rr38qyr zWa}94=9w@>H6THnIUgP%1Ao-dtlsl5{1{s! z|05X%Qg^a1>nsY#mK%i0g%>eJe_O|jLliII`FZZ4$zlM9st(`}3K(|f2gC5Hj#1Na zVD-pD%BxeEV}_5BC#(&}a}b?^g*KPa5pLB=yfKr(U=p0z{v_GGbR!-IrO$1X(a^VN zuiB2DjF${xmK`mELq818L)cxtrRMh8G+-76GV)5rt9}h&`j&dJm%uI6f4}5ToU*}L zst+DiE<=B4HI{lk4?YYKc~!?BRx)8js&(R15w0{-@yu4O`!KiB)7MAOdvfL}ZY5k_ zy>Z2U5z_t38eG8171&jWb8aufz^mk=RhaYfM9$=7o%fq7YL4xy4l;{uf~ro&Wp(wN zoZh_CZJ1``s_ap?ZCnWBf7l;R<7*&<(6KR_M<;=8#GBJdDA~!P^x+yBsCE?(U7i9f z11oSZPu-|e{ffv2i=~_ewv+Voi(QAQ@{KBOXG(1F473_$FaO0d#P-n$=GaL!ij`2e$5 zSe3k6zf}gQi}D!2`qS2BNI( zc=ZI3OWV(UD~DGBoe|I+M#F?#Pfz-iWDRh4k`>#vtJ_JP0&RLuQXlfF@F8p9Ia_xp z69nVJ9}O!Bj9+-1%oK~fad_#8Vg&;}^w1S1LT6tCu_7{Ue;DeJikZ%is`)(0&4cX6 zP~3CK=|eQ0g#ibwSka>MY>S}fflRT3t_7RNa|{Eon&CV&;re$6RbqBAyobf8t3f`; zViMlodOcr}O*nQHj)v*U4D(aIm0x&FGP?NYWj#7tcSUoNLWf6Fvdy>^m<`*ee<}%_ zK6E_qxm3Lue^HGGj7eI7t6ezs-n@DSb2fpK9d>7)?g8*XJ0F~J`*?FT9b5<3;fa?# zO_E84Y6sp`ab>v}@swht@~<-&8XV?njk?G{K&oH8>?om^ZLbJuq$QM@odo096~2u7 z(y!LZd29XBkNs004*Kh!O~2uWfx9LSA(Qbn+B|q=e}l{&MywDnt=Ie4$;%h@i5tbZ z)Z6nxbm0$&z!3_*?IGF%SMotds+j_2&W`iDP|{5X7nI6eyypoE8xLET?+U4*Ksmqo zD2hUWz+pcuSojs&0urk++;-nEs&an7tA}rz|MKAHqxUGLIq9wbmw|>Awd1cUxtw0L~S= zvP@tvSBX73_t?u?KfXM#xYaDDlp}V=1!klL`B)qN7-#l%n7E@ZGHy6)^#nh+1KRef z@asnX0AP(gd+ZIE%?RmR5%m$ za4?uo=ne~$0;8tNy8;G1{~y4?z5IxTv(5$&^pko#jdsoOih@;*Oz_A@>fJ41(+Aw+ zlHs~QblPx>0K7<^1w-%i%d<-ULd%LUHoR43bCW~@WuQIX6#^TOf;h_Q<>RMz!h0CKO~mx_l8^?kw+GZzd?w5~3{Fq+XqnunvPrDgsRz zRpAW%0FDng@=g-;1ptUzr(-jzv-7e_*DXX{*YTauiF%FgXh*clrfoY~S*hB!CN2uK zQsMdUqYrhAPF58dKsPjTrhXp=0Zp0l;`Qu#000R^P7X zs;8AX3(l(IlOFJI=%p^cD67U;p^~(dgPH*AFJ7p z07K^#lzA7jjcWIP);Y`CF=^;Ae~>!l@B4VW;E>^MY)XnSF?-8lu#T=R)$K3_>2D3Sy%6Jh|!TAi}r7Vv+zLc9IBy ziz$E}I3?Rs%hRO=EKSG^%$r;h9sIx-CvEcQSa`#ulK~~>I2UJ11&Ut$98aOr%RCUG z-Nic~+-TBo{*W}p5IxH!vJg#5Q$T=K>BxOdoR0Fho4FY;e#H|ze?w^EG~g;7Px>C_ z^ijsPSD8yf11(gbA+73)UA3JwX$%PNo_n+I-Nn6FO!k~@(9wJCHLBgp?WIb$0FEOY z!xIi<2?}SJ%oOP~4UFQ4Y=fc(-foZwK;ZN04KoLzxaxzOOM*Jo);J_D*KT078ZZai zOR)m8oM@7(i32PPf3hgWpoMZ=>h0oXz30|F_RORNFpD2vAK=Xg#qAYMA*2fAAMW*Y zS3(t3suQTJ9-NuVr09dgF+4gsZXco!;svzJSqNM_m|DCi9X@^CdhA}niE-ii31(cy z{WzRP13*V~)G0n-pY_ADGc4i8*TDe&wrQLW)%8weWJi)de_H+a8cKpc!Cj9S4zxRA zVsV1a`pr9i^UQW09rvHUJbC?M|L76^K6$<0KRJ1JD1IOBpPc;m@|FC4cHBRDdH6{A z{LlXLH}d<*Z~FJqztivEo;`jhEAJo6Zs4cd3w)}rKHPtE*nhSE`cbdhY*GH3*H8Pe z-yLJZ7ACyje}DDl(d+)>-+G<(CMG;P=^s9O_2}Sr|KzZ@xz@n6<5$m)_FuhYDOBp@ z(ZS0Xhcb=Ymeu+PPahrp8wM{e=P8mKA{Vp{HQ|I_lI!84S|=` zNp-rVEq`eBfL8I+%3j>3E%)p&-{cZ+6SmtSqaA(eVziPu6rNe`I1PSK)zG<4k`0Xj zpr6jPzo)=LGq;%))}vDLGzza`FY5cLgu2H=q=gX*j-&l^XlFaV^5KxCM`_^9?Prhd zF5D4nf6XPh82UoA`a1H5Pih^mwH5MK&+;(|iMw9duxM3BSzTPRe=0wXgbqF_;o*&$lV?qd++ih2?l4D5 z3A+ZzEn_#V|v#b<>?n+LR|ml3`BahWJ&| z`<|Ju@8P`=Xf&^6U&YJ{8D-rF$qQ$Gmp55U7{>%*Es%_w_C ze?1*mfZ1Kq&yT8O?s`Twt@rA;fh#s42ZKl$J|4=EV|-ROx_(Wn@@^El*Qe97GZglv zMZy4srlbg|G^pYoQkrjCHKH`d^$rykOISmG%--Ap=Yh^1!f8@b*34;p?M(YLoZ|Mc zVv9-u`OZ`nlwGaLh#4RZY-UFHEI(l8e}UndwU1Ntkfx^kRo?!AhrxAv1B7^!N(hPx zH~+@AzvBwQfWNX*O;)&EyN)`j2N!O10B1?XeeZv$I?YC}hrfuKBHUd8aw26}e?)%- zwqyT+?0?b|xa}M!J`0BR#0crRDSc5i;BHtS8s0gf28oE z^}3r+errg3{K}B%!4Dk|`46AFCL>UL|Vmug1= zlD&EL>d}kW{bz@$cLKa1B+A3~ee=V-M{QL-?;kv{kAYz*Xfb6H4q;mBL3jm3wASqP zGI) z9@kIuVyJ+Hf@F56IvLMFEf~p=DOhNOntv(x;ih zWsz(5Dx5`&LZ&sw=SZ}cpQz_3tw1uW>SNTI_+9%AgS^pr-eWH!#cg`03(qU z!(=p?(z=?@w;D(`7WsC*NJ(_mO>HX8rT zH?x|BQN2Uw&S_F1RLP;YEhI^Wk7c+U7pBuhhtPg^L;-Rbabgh$&LZ}>5Jv;#7oi`- zUVd_LkM$MYMG-lxqdi_NkaFRHuF4UZ{x|IkjLhS~npbQgf4{Juj3k5h>g@V>g~Qs4 zSY^(d$P+oKBm-+z6{ep{JyIQZl0>fb>1(P@jyB^;d+qwpRGMwD3E<@R!oU zzuP29-TzFte>1FrkiqScn{L{SWnn(Z!Z`P!A?Y)P(99ekh<)63op3{tDWM;_ncAnJ zAlZ7xIHX(9*_qNRju@cm(>nJ>)JMW(eZW~GYx20MmFH$Zwrq0}(H>m1RjnQ7eS@^w z`%K@g?hXdt1n!_#{oH~71|j=9^x$7OUg2*r7{K2rfB4_QOZNBh5&Zl5?Q8gpi^Jyy z_m7Wa`!8M;_CH^L(WfnwU6y&xGg~{jRXYGVSbZ63ci3r0fc&E&H~_ za$k7K*o{Bh+DlW<{>^{vugc!|s}pR`;}m-3{fRO(*p=5P%0%dLFG4NDi%`>%>=#ko zs~5x#aq1yH)h9(}_|VHDKJ+rhhhCQP zf1#JP_|VIGeCXvF@u8P_d}tORdij?P`rooO>@EKtdOQ<)eA!x6LQvb?vgNZKPf;O3 zxjM?@h>6IFH?${RFUwo@)aglC4=cti zP}Q;F3gcm92D!N*m4J$UgNvN3Twvy?i0Js+y!MmJV*Fna987no*OKX3nnCCKL$- z<6oumtJXN46P%dKk`Epf<;XVJ+V@+k#z>m>wR}}Ie0ky}GWN8cn*H;X3W=~-f5UA< zXYIv1qd2K_>fy~yuyV{b6(5=6&%R=4LG>dj0izd49WKS6 z9_=1`Z*R};^)g#xPk*g@?g9iC7R52QXYDw}kAbR*!&L&$rpQlF%xijyt#&KJupdAR zj2RUR*;}fx;N8HRqS{*zm$AHKf7Sq^v1o-!0fg{EBr>i=wwA&xlgQ;5qCV_dRluvJ zr*F}3f?>$-UYIrYHU098iBM`iL>kUX_&mJwq63%I5Oyj|4yC5;)tcR8$J=Xm8@X1W zk(z>HkmT(o#_~8RkI2Rp3AcE&OXRDP6ZGDH*iLG-?Nnzs`A{G5hq-+~f5>fjXMOGF zrrFxqac^$68awWT2ky?+#$IK8ZLQtzk@Az<7P)tNC%iy^oZ*VDyv9>DP(crpkOgArH2niaHWLC z(6ME^vBS`cc}S3NhBY!nkQx~%bE8M}sxix)6P0Adv#J18vgs91lgs6Y z*YmP-M7Fymz=H{D^vY*P%#08+7s~+kn~_o^e<#w)3{fBOqR%XTf9M6kxRgcG$MUt! z+!{-vdW}-ILa=hP_%isncl~C9*vhv}vyGbQAH8eb=D=FzX4_e6mz@m zeej?h(xUFvcTechthQ1uoR0&1;mFm)6&evsdkZf+7)^@p)B z)lBF5XC0;=u4>REnH*WDUB-4KStqbA{Ilyy;-J>FL$88!wdk$T*_!Hd%?F3}nnw+k z*JC#4cy(s4aj4pawko~Zuh<+nNX3Hu%;-%s(iHXreng>u6}n03g*5$3K3fGe-hwp< zZ*IbjHWKO(f9YxOfBBG4{M^l_okfO3(of1KlgFI%e8w`Be-nHR!mB{|+U;7@jJ<3w z?FFBv-qa)Oq<=!8D(+4{n0h$)Ft31>86JmF*81kI^nzYR|NkIAC3``tF@_0_jcjN& zO?&`J58Uwt*i$8S2UAChp16yN=PXg}X#e^Ct0RNff7jD+G&Ce1h9R!Op1pGhgJHJU zz2z`Mi()j8-bK$FrUy5HF3fwz?#?RK-vvy@0cp#LI!yU4B5x?#hrRG-G7;?JqP>0l zmKcbvWW2X4C7C_9y3|Wjs+lLgs;ns(Y6pyds8bHT@-itoomks&ifX*C#svZgYCN&( zlWB~kf5d#A2~yB$R7(#$b7g+DDh9b&ZIM$t&3BKz$~W8||MxX4SI z-CqE8|IupW%S3KcPlQ=tHsf*5>5)FbnQWwC{hapZl3JwGP(E*ND(y|Jg~m?VoEGM@ z_1G)PtJS)lhSpU{;Zh)K&CjNndmF&Kg)SAFCL+`LO48ITA|);RFvv?Ur0Ex=tr$;5=3g7|rnD0`JW-4fBMhACk72R(fbr zm)DNq3`Iuac09B+OFTn8##yj8bN+OW>Kn+%@x%~V3p5JpXVOvQK(g69jjOaWMd)lf zf0Sj2#+b<$&0>PYjm*{ktzm8B|%1YFq4(h)%l)p_<(g|)dY z5jBfvV?ZJW@Ldui?gYTeu{ zks}}2h(~LUwq3YxDEl_E0x%{&Fncsi)TP{?Oh(uJO#8r9E!-+X+F)-Mk4}ymf4ybR z@>4?910>%$_tk4_&Rz@4Fn&d)SK5jy&j-qOORk(OB58-IWBX-1ifU&gU>&3IYBof2(qyC|Sx0rStw#C+axTl5 zJy>%?N%|dMo~N$#mgUKSGuThUJ}+7!H;xX>Mh=Ts?CP?``qSNg!L7k_e~}Qfb>d#O zIAB6wk3Q6BNy|Kx8M@Y@bXfyE>f7m}-+iK3NHo!(wQB+jF(Qi!6#ZtIe3@%#!Jlp= zE|989mo-PK?euHeO5HiSbw0n8f^CNZ+$5$G*(seCEDqGHHCWZgi-6NwWS}X0V{X|rkL7c%-(2Xif52{_xk0VCf<2zuCb{haXAP~_tOb!ws0Ab%sQ-mv4tmQc z9?n#O&rry;RoAA%S!jOaXp>v?yI|7iC!CV(UU;KPHCG$khHJ|=)#tj(OcCpZ$}4$= zFauAUVR$p_@Zub=-hjsP=2%lMQm3`mJa#NK_`|SWBX6oq7(}Lcf5g>mFQb`f`1Jkq z7Zl>bnY(1TX&Dh=;0ACtfrIAKvzBYij&}uwMNSoEodD9lS4Xpws z`ZN7fL$#uz8>icAI0hp=IQHq0T(kz$9$i<^w9j$nTX|#0-7DgDy5#*sc`Pxt$2=>e zz&g%!1XxlPFY?6Te{9#9J3%_5e*hM2S5ab{+Vi4UK8woE4JJ=HA&H|Ho*d!g^X1Mp2x84mLg~jTk4H~xIO&sEe z(A^jAPyAOsRPcK+9>PE0whb4wJre`i%`tmbCfRhW-=yC+f1i$fDINe2&<5I5Q`t@m z5WR{<(aem(XM<20!EbCs8?v*9g z^qM4x5=VYzDi2F)T2Fg-&rLY#iEznuY7{5EzH%*|Oo<*j{4uu5NuROR?Q}FsOQMtJ zj^cr?`JqdSe_+NwXgyO|uVFE4yUXZ~Uf(^w)Z zs`wAdFhxx3K6_WnRw}qHvC2AkN>x>DVbdaM@*CzIe{*f8>{gr_r?1h01{I9+=6?`Z zQGE@q7a?CdE4>Y;erKeEnany%4l!L_@#!oDf9h#9ZZTnMw=;K7P_}z` zBefXr=eBYC2Mcfi;GVaCaO>?KEWG_yefm7fL}rfOM#+Ez*~#A5UmIQfB=IKJWD0i~ z#~S-+e}TgNA<*hyn>^RYm{PnJV9EGRkF~*SHq~YPTTFmu;?70a; z`&X(Sf9cahC}fW@69%;(4Xgy(iBLaJq{Dz-d3+$S8Dq7t7WNgMCDsT5*0Z3qr*1Sf zWkFX@!!d4!!S!I|X?bm#H}s?I+_gF~e-}{!L0p9|%vqB;vFCkMbJo)qz0+{YhL%~- z4Oxbw%Z6uXeE4k`;gS2s-3`|9`zGhvKJun6W%80B*}#>hToXRfXgH2T(J zjxX3GH=w0=dJ0tkT~C3j+1FEGIv(mNFbxMf4w@e=rzx z2o_@w!DPy55p4UgQxWF`GOoh9{7;MW3Br2h8(>2g*x>2gjp>2gMu^lz$8bb5PM{qG4;nt=yOdh#I|eoJbJ>470c8f8(d|=CP+RR$YAS%$|wKO1AofN92qK?s{UHn!nWn zIuD$s=V|ukJ9nHG37BtgD(893=rq>NJoj%=h!mNg1^)b}fU0@eDtebA=q*Md!MlYj z6H{92a#b<_VDaY;76`S}F?m|X=vYUzf3{iNn()EHTmU`` zm;*r3WU*H_Zn{VA)K17*8Z@T4dLt*tN`A#&Wlq)*$=u=aHa^_))fR9am#=K}{-$~S zMukEH^;M$ws8liI4B+vVMZW6&Gd^uyvgkGKtG&uR&H$vVE#!gWF!6$ErXA)H8?S8V z73KqhM$oP3p3jUGe}#{cY6jIk=@DLGd~_x!H$larb9ez$kYHA+&r9^Rz&4Wkpot02 z`vzC`x%pjlAq^>gm4sUL&WxH1^^5vD*cuEhBsaAdR5_>el|7m=m3`DMECsb@#- z9*XO`lhY{jz%gRlu{q09-5tkQ01t%NQ{Zo{UCq)Ml2tuDtXKZ9P zmF}O}L}ps`l_J&2&K>Hln|ADop1NAU4(q6^bm~wq-LylYSRy<7*8M8t;<0Yvhio48 zv00m_FGEe?3kEe2eA~|9h|~m;-uq}-DZfAURl;D#e->OvrY)8#3E`b)*RJjv5T%<- z)0~|cQE%40m4);wZ`kbD*5r*mUo7L8JV$|N)!M6gDaXYfLJC*C>|H2z>agU)z#Oh zSZmF^e-HYFYOAY#oC0{jo;QWX!kjCyZCr_)o4KZ_GGmUaONegw_23Jo5TF`$VvVP9 zf=ZRAUUKDmfz^m9;_22_Y%S3vaDk8Kj4o1&9%Pqt%&dB3*x)@I7-;6Hfc`X_9Yo){gxzuS>ZQjDDInLLES)_(>3&KC=|oS$@yoNbf|>dChzhK7chI(@nbTkm zWFQnBFVYw_MLVc|%>>DM(%Q7UUeEsZsjbGCf@JG$gXg@>WxW$w?{ZncQ&#FVcMqFh ze^LFA@~D?|!Q|-Mg+jmEnOIc}s&9q~@n8ZR6{EE1s8IfQbTFGvhiOiqG#l3QR>L}O zAkEJ=DBA;;?Xl+#BeE7}`fsWp)bHp7An!mJZpzY2>vfvy=)}U4q(QnBYu?-lDsgjz z`vC3NX2sH+XJd;&FcS;8r`^QDK*ovHf8?)ExS?U+bv=DbVH)I&N~L5oils_jOI+NT2ER{>oK{>qy4VOhjI)QA}Av=Ves~y7)}{8P=?sswAr`de>+~f>D4}dU!;pK zB|VrsP&s4t{DtHV)%%EXoz1+PN-(n=^<@>7Aa_GRtuOK5YBt3?!}uUP*;!Z{)Q8Irqo^#)=e2~bVfi}ZN(*yb)dnpI!%^a+{n>WTw2bG`f9urp?vWd~ z=N|Xqs+(q+Eid`gg*e`R zyco?!vk9Fv8=qhi8dkdvb=#xn8vYAw(`?gl@t<}ZW}f~X)wW=5f3{kqS_`M5*%@uE zSzGH^7{1#r_={f2;S-m+w%)|4g;KIOd|2yPs0}l^g$qLcHd~`+6Jc1Jb3S!z$BYRv z89Ao@V0w-1WM^wTSy`!iE4>oJom5Fdgb6;7(&~nZDbdhKrGEb+rti_oF`gq;Jb<5v zur!ZPR$om~UY%?Uf8NJFp#X$c?kO3M-@YKP!l@m(X?yeP8QK(EG@Riy>cPE!TROWHKNLS{ zkkTG9Uulla)*Ot569nVb^ClH&(81OVic%RY?4cY(0;S9Vf5mDVM&YE7FE`?JX7*_4 z-5BFdUH6HERy-jzw6OxrbHI2liUDfZnl@Jz=&2G;ukH^?EQ>!>e+$&67gwk;?7Wuh zrMQ5VZfaEN3OTHAge!ROe#pZlfbrG92?PxOB{yhTkueKo{eu0weh@Qf{5Wly0!)WU zWPj5|7`fR}e_TQ{hTPl3f4iQk%cQ#Jbd9rMm2!6UzNManPvabaXS9b^_4Qi4nylgJCF{>MO9d-f_5Z;QAp{g}yj zQO+jQnPVGt3d54PI+>m*Jf2f|=`4!nF;fXvjhvdOe_h7#$rLrWJt<3C`>z zo*@&7Gpt%>%7ns;G^@tY_1=!T6tIyi;KNOVlYJN=d ztl&n6fBTA(*vN&yB~0VP&3dVklcR-dPPbF_tG=u`L(pwI=YK}4Am%}NhSCerI}Xzh zYRK5mXd$cW#UO9*So}Uyhifj3q|xiCC3^Nh9qXU(7 zj31R8IZ>vgq<4>bRMvo?>zrMv&g$*i2xHA1C3e?lb%14PdSm`K*E4T7y@fA09la&< zB+b|~DHP^bVn5Jh*2twO0v`C zdssV*c>fHk2Lozet7*vXY8WvVpnU zZWO!DECBl)>#miuAX76ES|Mz7heNb^M1KjR)!`z>9O9Cmk9Kl!92H^%_AR_ANwiu7 z+zhnH>7zQ41h@?16&+krR|k1TgO{Idz~&Fh`Jp`X=9^@)X2}ChP2C3MBy!`6GI(!4 zlMxe$+yba8d|N4jiX(x7;Dx_OJ`Ey!urZwUiaB^kFyRWrw30C9o%Td>Lf643=zk&_ zsX>Kh0w+tk&jAh6Jh*OiI$@L!HR$W>32f0My565A zAv5f(7@vmhUr!FXG%Mfb0l9I4?SuCtWTp$B-H!3u3_YMh(_H00jIJ%x<1Tosd_f9X zRiRJU&va>!Rb_#KDNwzU@x@`Tr++A4=x%4nrItY^KV_To_Boy4hTWUc_1dJ9nrE9= z><2D&z&&X}lMlp7ncMJk8o$(N;9jQoM5=b8=cKpQzR-YGlFoAO*EKRA`Deo|-`i#w zU*!85%|$F~ho17z()I0+QjSV(1j4ZyX6J8F*=m`L#k^#!K|zkTO>!6pv1J#IU&ZX?u9$5*MJtW3 zel~+zNBnM@p`_x)zOZkt^?1nW=R!Lrx#dnlY#?+%U-wfUQi0?`1>O7S%vCu%g3!cI z7iNEDGDrZ8Cwv3+Mg?FgO@G%kf71Y&s%RV*8Wzv&u|89dyOlR!N~Yit^K=k5`+ z9L1*$>}e_EyT3FjMYkXqUCC9%|0}Nwe+1!2dQwPz=B@q_te*SXv`D6L^QDZrMtVT( z879W-HhR5$dMau%ZaX|^1>IXvo|3u#a+$)?QZW&gdpO$^owec&n|}uwWV%)}3U~K@ zv__IU@eC}~wkFp_^|K+nWtK7*FT5*i{TA#514kDp7Y;v#ozYzOAcLWPZTiQE4X>yY z5Miwk=g#Do0mGCsX7CdF=va-wyShK-rk*I`qz8k_^@YV zSkJDPIVEA?_B^hkTxmGz5u@pG8VH{9axY#})R!_Z^X|0NQ-2y+-P<7n4r6h zU!BdhjrF~Xw||Nm)tq3Q%51bZI?YX}$BUWD9zj_(+f?RBUbybZ+67;6S#G{wc2M?B3|L2do{#}8i>}C=LH^3d;j3&wZ zMs4c@e2nQwwem;(=GW?~FX~8*#vW<-u?={0lks*;(SPbPY4tkn-lb+Y$&O52J>_L> zCQrT19~Us7GV;zDbGb!0S+t4&2E;EAkMy{)1WTMlsJVQakVUan?lJ7M)EbVoE#s;n z6Ze>!x0$Mo|zpLsBOk!w-c?Jz12^m?|wg9cM@B z>^V6Uhpaknf4SLsLt~K6wv5UJY@Dg}{k*u5PF&!5C=BV3yi2l+=kXDch0F07+37wH zS%0vgG^oTLv&nX6cVDj43yq-ZItiWn^>mEV=*-wa zTF%(a#DfcICd%@xc60|F1w^FUor~1iwn^f8bA#4e1&hLkvYO{E3dvJeT3lKxC4~%t zR0}j-7X;6YLUaVoaQau$1%-4pu75?2?3)*3&SKd$%O0xkDLp3}ZILO@Hs}$Oks~_| zE2{pWrld*Ky^@#PkuAP|HnTn@ZA%%$o(V#9DAYoSLTI8d-CR-+Fy;v`6lld+?aDce zQn(EPn6ec!FUmCxnIf;pp>=X-4crLmz%2eU!`~IM#JoXk=q1o6V+H4u?tkbQ{z3t* z>f8-^H8Q>k&X!NPDHqwe!sx;C*;PNB#@BU}TR5}B3C9-PNiBXHjjnlgVaJ-VH|Zcw{>(nSaR3Boee+347j(UuR~cCwAIU==fZpC2f0rjX=JKt>!zT zmXHYO=*O|$=7sWNPF5g?guZy_&a*UgaNfpyaYjOkcK}U92^SEDZX67x<0w3btsft< z=8J`u=G$kXzB)VMZT8-(V-NB0jNYMe)j1D1Y+dLmb^NhN~Xq zU;f!_G!(!l(Yb_3T^r6z^aT{EeVvqbHmVulY<$gYM14;^e0V1?MMlFR$JAPU^4|_# za`&vx%m2LUeMQUqE>DQui7!96lXm|3%{e-LdD45|aNz$wIKQbM(%oa5ettne8{=Wm ze%r9#HPH8mBh2@C6@Q0Uqz3`4373xq#?(U#ef-8J$hi03{tWB_>L`AJ|6KU*6#g67 z9~|;{+xv=+;>qt6EK1;Y?I+C*+X0G@K;n}YaI;qf{I%Ax5oZ(h(hr|o4b}H|>?H^6 z9odJwGY_r@iE^o(WY4Dc#Q?N+muZKwg^=EDdNxxQBY!tae1CShIPHrv6*bD%0dtE{ zkuB){!qZ9~0h254c)8HYG>?osVD5CJpa5k7J1oZ(e-(%=G`lQ9w`N@_&|Q&S4W!xZ z8*?ixm~GH&!xgJ1FoAAW?Ord~^KebO9sYCQ?ym8l5AE(c{A8M92i!}4Y&s5b9ok#axJ5TJ8xjGPGxF=`5zW9)#%w`n|tfgz=Z3#W3P}aP%RxFjv=R} z=Ukv`K|U~>yEj8GpPBv0-2uS@Qli+!?^_=XFsiO5RDb_J``OxUQ*F1P_QP!Lj;Z!( zLG6QV?KM;Ffl~V$pWGa2^3utO%f{|xrz$%caoO0N>{MkZBQ6`elbx#UWW;4-cd}EZ z%E-y4i%t{a*poich=`p%f@{{r#Z-uy8Vmi}vWh8&vO-*5fS%3sN13@a={jWqFm%S~ zDyyA@(|^H*=nUmtwv#ov3P08cegp%7tq#mb7?Bz}dMrr)g<^2}dI1!Hf3G#Ii7=r4 z$L?nqfx_gwqqn)>gggppV&X zjzSIha|4ldFf&Qtvh+Zk!MO&|z~L)CRJXPq#%dKzRa0|lpRS~E6PnH==ZX0;c5^GI zaG%t6*D!`}20)13@x^^M3xJs43*GuGfYY5}4aT^(}GgP=}0BvKRttA#FvgO&mOWPt+kx2`yAy3@_?fMo^Q2CuwDlWr>woG#+B$ei zO%1}kw)FVK?lQT%+R%1bmtsk!vXAbAVAWJaReWm#0%&c&ytKQyb^)QeU{$Gz%`yS2 z-kRJYN^%SC-Wjohgh)n9?b%0bwzD5a?sfev3dgXnMug5dcRnd-t8Hh51;$bxt<+;I zMLQJ3g{eqI7)8!Q8sGHQIDa`b%vd};W)g7YQVa>ZakkWkjtRk$4D?*+!wFRddTtr? z80O_f>f{Jp9Pw(eymh6fIn|ph(i=8Kkc9u+Qd{H2)nj!{(B-qM{&u6t;-o za%6*EQgzsRlgbkM9$NX%rz0tyLoIGU~uq4Zx|FHU=QaFTC`sFTR00 z^1l#-r|i;Z^nbpU<9`(!f>+eK<;_rsOO=Axr)qIUHp->u%w;JmqONgC8L?^_Pn)9Q z$zcY)d1{Jbd)~@2*J~5w!-o=XV}j3l;;~{SSy@I=SCq*)vlIIvjwLj1I`Ws;cvYUVnxggqbJT3LHb!PTFnl zVt@-!RJ7SzSI3%!6H$^zM=Mjwh-tGS5jZE7XHd5jB4R4V{Fi)6~@XR6ktifjp;p3FF({Z18Zj!|sD+--=-_bQ3@ z?x-&1*IUs*CyO_&PNw}QUP8g!Uje#}5;K3k-BP{Yc`VqbWc#^8)n-qzTM{<6d&N-W zv*eStw)Lc8{f@4Y)Tp42ZS(-*t*G1!LQ&O;=~^3!seh61VlOL2QeV9lqR4rIUhS40 zHk!UwQK_%_R-HR2)*mymIrYS(p5&Ewqv5pHx%iVF@{jNtzxSR;n;M6Viy*QZci-Dj zHsMf$8NxqJ{L{ieZThoWZ}NXz{9lpYu|Irsc#~IySZxpW0pRZ%{avTO8}xUR{%$EX zNwGk!+kd2zO)A+`OOo1wTCzm|x0*^Bp@g6o+oEDyYB4t&^vy-tXt$bmwK!fhv|=;` zTj~T5cDrMx)Dd=jgv}k{%pJ8GN^#EjtHrU+Bb+z5bEE~4!&ggfs9@o>K+W7#0dk{{ zfM04hti*?JN;pBj`HQ9+5ir5)L`9;gkrciH;+z zr6YDMa(fi+L<-$?i*zT2E9+il2S}5N0g>j2dU3)yVe6em)4ZCZM|R>$@0r$)PM&nF zM*&UH2b;pZ8YYm>7e4Q32^DREtLEvg=1-QP+SO84dY*K^ZUXP2ckTxqz^V#gCD*WQ zC%2@TfrlS)uxj*p5$P{qvj{&@oq)4|#~l`*75=Kl)r-%9o|;S5tI8~hc8h1?*G3P` zbd&qmFMsn}eemFpGwqn$%}(e3^Zi#xhIG7Y8h8I?SJy1~+-{;*H48-3l>+tSt-6Wmv>QU*B zu75Y;H>2~{Z2`64F=%anq6E128a29I^VdOtAz_?ekP6t)aIxWzhQ8fGJ~%x6xR2?1 zJ$T*^bwy)^*^fPI{k+jh0k@@oydKwK1I(cW<8|01OOYS0OO#Se>*0+M2WJrI42FWi zEE9MqD_JruK-r3`@D5g6Y$s{Jrv*>nH-A$N1l1|Mo>jQ>8Eyx*HbT1(H-0??;n4-X zyqdfLmamV$_P4q2_=K>!J<%z;SZmIFJ-Pod>Wf1IL2dqi5P7~*opr|fm3-`nDWG;Onnm->b#7g0LxOAQ{t_+I?elXWB0j)nomwJ*;hq`@4T^n*4gU ztRB?l##wpwR6B)>V(_(1MbuYBPOs*&BsBq847|9MCWPjQ?*){Vx z5QcV-8SNu+_P83F1wV%0@$qbRAzH-Z$}wToY5REcO%Gx(+`~`LxYa%B_rUA;+>PiM z_g`QB1%3HjF~2RA)ye2+HkG*r`%ry^OnBNm{9Sr#ntJiJrt=w;)DXD<(E zDGyLbqiKF49T!CBy)mlee1FP}d@;r~VF~@$)~vAxSl>o?IIvZRE06{4S9q6?Onx&^ z^$_{4B&C0e)W0tW$AhPucJ1p={`~nDpPhmnCZ%yGEig%$Vn9K{P+EtZ-^v!NkH314 z4QKbSd$UduCei8JVT&1g|s;4Y$zZecyH*?c7(Z3t-$gPd4tZm!tb{tK)-%NzcwX+`Vxo zJsW4TwsE?6KIz>!llyF(kp(CZqXS!YIO*9q_ud@>MK^~ox$cgM?v85p3aTlR)*ZC> z)_6I2$bIUq5U-7xz<;0;LksRY`&aSVv-sSQM}pBca*t}{o&cM@EjRNk=nTqNZBJjp zl@7~uWP%QK$!e|W{C&*}c9r^Do9n)9FnP!}*uvNeA=Vkg!}d#e8ajJtD^tmh)vdg` z$+~-DwW0M5*9UE{%{Q?P$;0HJ56o~&>)4dt&+EIb_u%MOvVVv)9)Er(-9==ZVp=Q? z1{Qze*^P~`(m%V48GsIc-Egrw{qbscySRj3>ha)9-!my*?_59j=APpQJ`%1X8Ewey zwfI-xT)8odc`TMou_))KgysB@DQ|sGUd}Tg)t&acs#TheT}gXPtJ}0tH4SSKH8_L?R;ynqg+lADo8LaF8*#Zxjj4wDJ?jjRDjA>g%~YBm1x8HWg*k8-O|y zQ9Ta{dKlP&R9cPAxzZl80}Ehj4(&)Y`Y&HOb7@Lis())#4IG^VY31Eucu~%7$ATMj zrpU)EpCc!(EP%(wjB`#e7s`(lX;*;zk(0}`L~}tU7L|_~k{M?hoQF~#=0eay-=s{8 zY>QpFDW*R~0$^Dt%zrE+0Cd5j6r;|ah@A}rH1B0dsho1q9CP5X7}5sIM<+;_9y!5M zNhujrF@J^QC2oT+0|A5K`j}7-&F6GWj}#NbQks?(i4$2KSwk!%ek%NA`q6xo*Tj~v zB8>Rmmnf12WdH#3&z$uMp;ADlTYs~_Lqd_}*^|4N3oSj`@MqO7c3+_lAeaEcH=%u!78fMedDg5*9%YRHDN7C&OT?=iu&2&_*nV>6|bLMi= z^rf`S@v~-V`y~HVoU+mfK;Ht?Y2+;8gTGc@R!UCDi%H3|={K1fdN91cT~02fgJB|F z_x!X>A{-^*Jj?|Hog{R;3OhQ=@7yf(u^iask&j8t^|bW)N5Xw8c<%;00#hl)O`SNY z;D0Zt79}gu^GME)%v^ucJy~s_V2FhFzMq*HlU@=pqbda*;PDt`iu#af zoMMx45q%!vId*rT6BOuD2mB!C1Xfy)p9q+T*_Xa$M06ru8fiIOi~vmiJmfPWvqd(D zn?Uv{?zyl^an^f^SMs{T(#rD7z<+pA>BtPqc|_J~w2%pjyp+4&4?!1%bD20h7IVdNB(%QFgc1Z=_R+~WGCdVf3kHyz}c zk!;))gh~*}$Z~*<4RoVRVN>Cz{j^;!%kDr17FL3gsVkl?5oG*dz%beXV3m`;d zXkejUB1{3A&*WyrG2{n#GDKdfz+#zAH3kdr2`q!jvpXFfhMr+wf(ql$a1#%zE4M`A@Bt5arJ7{1wvz3Ux08)Pk!`fLg6Jps z-+h_Z*k+!H)g}yZaODn3!Pe#D7G;Y)`h~O7@$X z6zNF%!TRAma&^+*!i;45cf|SG*Cza}Y#h@O=ht7GUu{a9&e_KM5GL5a$s;a(d{5HH z9dW;v?QGAL4>KdqztMJ1KfnQ(KBgyw;p{tbCrRuGF<-{QWy*goAy7)85g2s&2STHi z!n3p%o~2m`34t(^secO3NHS-Jc9sHR7716oD&tBC6fgl$nyCd;WOP$9H7NyDDZZrA z)kSeVyMx3q7Y5V!vQP@M#k?ieqb$YH{BDp?vH%I4KD0()3uY*20A-DQab*-z*AXE4 z0J!Vp&9o#y8AxWlkh_xfXE)Ft*F2yQ!LU18wzL3r5dhRMh<}+=+SW_$PbRaJDjSJe zBC~>n@!f28?M|k8Fj5ea&U5e@zDl)~7mp1u9+ELvF#_IIAtABsnh+?2d@IQNrd($d zA}(2+jq?KlsJ|xqnY+14V}$PsmFHy-rE3uP2rC(@_yK^VP-Pxc?Y@3?s=5+h8&KH! zDh3KdnRAF-Jb$D6fB*}!4hm4g;8IxUCrPEh)LxjcRZ~L>IQXG#1D_yuSIrBblFF^W zaVRV=J3ok>9K!Be)@@nLs^&Yv#$E|~xcR%^2$k!%PKRAh;}$c#iKX4j(WZp5rGRh6 z;`U8t3rXki*m&Q^8b4>Z)gK7@n?ul05Hu464Ywj_AAbUNa4THLEoU#>!Ikvp4e%mX zDbSVwcrMz16gw}|;pBqSGDUMA7fBL0K?(sHRenCyW?|?XT*Q@0d8!)(TsTOOGi@+a zgbqRo%p)zQkE~%!umCEWdi*G*Fl8C8KItRctI&(UXeFg{L_+E|WTmNvsL)qwKvxUO zN1(G#VSlU>6jSS$YX{S=UwTb>w%M$Y*)tb%2_VsOk}#})YQroRJHh6N&#}UYDOf$yxjtia1gyQ~kRNDlN zsvJSo5aYaRp6o~b%1?sZ5%1mRNk6?~G=G?7t51hgQ%~|k*mLONb zRst%eMBno^lPLgjrzR!R6rlrn#U}BmQ6mP%^aPz!tBnw5DF6;a?+zw2)K>V~QSD>p zHeEL?90%mq;48Oo)49W0mIEwk6WHLO$`$*M7JYn*H-Abuf66z08VnI89VfaPIe#Pp zj9tK%q{^10hAl};c@4XpY@?L|sL^;AIT~y|>q0CU=GYA%2PjUpN4;hfGHPU`Xeps; z`ody?+n|9iA3K%ow${pa5Fx(5g$lWnv;Li$hh@~b?XZuM@7Ot$>!LY=(>aI}&uK`H z7D3XYQ(Dx^!w8vObWBx0G#{H97JrJKC_+y_WhtbKXDAnvDQ<^+aT~IxesUf};SiL0 zYJYcaE!k*>h1-6y3YPg>kDy&Q?~d)T?cyCE?E!2K-BGDLmZhb4NxlTju3$ByW@B2$ zw+*`ig(@Ko5U3!d$q%%!&<`gtlM}{53)t`YjJmWUFt#l+I%&gDFPn&NAAbZ)v}>Bf z?X&3MD0|>MZf{uD7ANwZzm3ne%kak*{F%0(zk3gcsWGHTEGlOfkptQ>@h0d;WE8O9 z@i{YSoERhy)4O2v`a6T6v2g!m`9JLPC$c`dAC>h2n)Nd)Te)_zW&6t-xxwQkVL_^Z z?1gLAzfyE4EtV*f5OthNF@H(UfXVcH_5-Y3EnA${IIGlzTB^E`h-cF6M2PB?7Raeu zED9&7#=7z+##g!Em#`wF@P!k(ZtRZwo={M)-fP_P9>a@_RVySz4f7YK>sNpM{27kqsbq;^TQs_ zkRHg)#K{v$+_LRBs ztiG4PvaHJ`NRJU$kT;0H~7I2?y$5xQE{mn)xh*6rj9pK zi8Wn{@P?wwxtsB{r+PZhD>}x=AGGT+O39Yg*KLV?jUYSOA$rU^g78KT&f19;UN@5D zs*x`n`EO(f)Hrq4q8ODss>Pv4k&zV`b$voZ3X9*Aqkl_#P58Ue1jjf#aEGT|r#;jR z0tqftbC8M&neiY5Z$yFuToCR&>R33-34LF3nR8W$$C+_obk&6=4vgyqy_D!lqYe}1 zlTWwL1T(@lqF-7_kEcq@`muqHKjv_wq{5z{c$l58D(DT2Ew%;rJh z#BlL)a)0&v$sIUL!NCe%Lk^YL+J@Z_9-+kd>`u%fC4_MVqly?bG;E)`kQbh@%WvdRQZgzAfGmuK z(G}=rj)MJ~`#kv4+~Gr*Cpyis>XqqDUBNO)XnxZ8X=_kdP!rc9D&Y(o(iD;-_Y?3p znKXwJ252USM3BLI-ZQ7RpC*;7ya~>g#D7uurM!X^Bq;$eY=-neL~(xSnDPijaXOeH zm2y*i9a}11a8~JCCK=>!SKuwYYp(cU=m6j7 zh*N)sZ15XZI3DZowuX`dexqOZN!~D@hm0-@0_F1DD2i%UJU7f$ZtZGeYZrPxaev)N zD&vwDkC)9Awe_}#l!G^IL%H!qq9gU=GQrx&7J$1q#FDT@2pt0V$%5sU0m}_h;HPTb z)0Wyo@0yqsPyVxg^dY*86m`sp%9e#-6UO8<09(JVZfa}gx^B`ZFkWLmlda6BznS^m zYE`+PN#0&9I!%*_ZL*i$1veaMM1PKE%tof`)xNdU8>>_o#HhAUnyCu) zNOp}>*QHq3wQ^n8NTCPAi_vwl7}XB#Mui!Jq%ywIG+#_r{y{58klF$Nl69mDI!C|F zU?kaXqXD7AHY1IO-0razVFv;^BtU}FK@>u!tcqkO_|kbi>u~U~Wt9Odl7B1TT9%Mv zhtM|-r7yW5IhB;EQY z;}<_63Re0rU*W19m6OY<`#-nKYVzi7+hfPyW#8%VVc)sSz|-I57LxsfJ=w#B^|vu8 z!3XS#^YE?+_PiNg6fkCS?|&xaVg~fFazGr4Apk?05CoN6U~U}N2QVDO^_B2#EMbD% zunt~H9h8tdT17ta&x+q*Na@j8M-9XAV19XQ;O?AURJRM**}$+`QCfIWAGYFX9>Hj^ zL43@WuX+d*WhV6L^)1hsBrve7g?GNjP?1`ulF!&OQiC693uFQxrGKH&wvfLg&J79C z(5I`tTwwA7m9jDjaTI3RU2IMgSd&HYERXa!%}Lxc4oDuEpc-<(N18LpNCY!v5PyN020d_;vnSuHr(y1^X?{+MFvuzfdl8(=MjQB!i=&xsAh#$YQ|!bdVMnQw!v$T0Yr3(2MtxMb(3)G@>! z7W&)ALC=6oFn@e*2$;ykd(&Ip#EtQ3GoUj{bjLLw2UWxm#iRvRW!wxMPaFPXq zP*uXkD#=Eo1=GS#=5ygrBMk%<80skU>JVxsE}C#$U`&J5pR0Nv1{L6yd_$+>SS`kr zs*Z@~A<~qG^CU(Und^XEsWi5XPlAtBo%SBi7y&&W9DiD?g%!iJmE?FKkAcOi0F(J^ zhp&i9p?W6hm=F5~`3HK*Y?r7u-XW@uw~1Win@k8r$_PJ~!<1i8 zw}OGZllgj$;4G+kP;sZhvy^9PqEc+>P6Q(+NPn^zq2{O#W5LLmAG9)<@cU)_Yp}U+zI6wTB44HhQUHcfs zTpR|Ch}iPUgj33~n#t;9EjcjeMV*5ITw$-bt2Rsq=Q>W&#wA)vJSSfbMc9P>L+C|@ zIDe#>LDXZR@2OTQpiOJo#5>ezhcPS_lD3h5gZANlcERP zX19UCvMO%e^U=k3-;WmK0pnU)4tJN)b$^(ZkQhdYqKIoOQt6S-kfy0^%-FK(jPyee^yiw44?kzleJ0IL7geOBXiV_l4>6D&0wj;# zY>?SggZ@ zw~QI8|JlNzHiWc^uc~c@r-214!%}&~N7o=ExrA7$9Q{>Xb}ce%&_h$Tat$y*wSa?B6(SOPYqX+t|db_5)q~sP#s?D z54;Fl^P25@J?x&=Jv{jzj~k_}ez#+!#s3r+6w(N(E>yW+#vX}!gWR!Wj(^Yu4hbqp zzyKnsJJe2JSpq$3<={kpQyr%_RJRqxcHmQ?AC7bqA1{yf9wQkZ48JSh+T$5yQSt!- zG~ghMJz9mwCK3MyL`IR+>eQ?c*&Zb7xf>h0hG$Q}KB=R^ z?b1bTh2OQCLQGfa_08+HR<3PPMg!|z1#6^g;ZzHyh*3=rg$;!|nA;$3onpX`w-vB> z*5F>%V5A~-ZCBS@hBEWX^xt5OZOBH|65oI6oc6NB-h*cyGpcdIet-8E{ zs%cPTio9jj=30X|IVy8gAa|-(Nwp88xs3ULDxl48*@fg9P`xEBBz`jusC`Fn?eZEc zyWT>uq$B|RAAy@f^*Cw+zuq#YetWD~@Y#32`^Ao<#7Q7#%OWR>=Z$p9Nox-oICMZG z7UtGng!1W%|2k!$0e`;zc`e&uat94y7pAgRQWa_$v6HKD92BYn+HN$h!^ttj&}26K z{m*iiIXMt0pzRnF6_}tSYDeNi+o-Xz+*s3{05;%d?aFl_&k zVWeQo2Jf^c5(oX}JYzn51=*OcnUlfD8=N;*I?9X$7IWyBz$a?unuW;E6WA;;IaOSo zwuoMpGL6b5r|Pl4+d9gBv~^UUsghvoWcp_I`=^&`AE$>*r1Jr0l3hsaI3wG7uyrNV z*!ViE1QNU-lz(vZDAoqyG^1b;#M(czPZ z25EeErKKJmKM&PiX8J%&ZOE0|ZdAMTm^f;A)zX~~VM8c4n8M}I^(EP(#t9WJqo>j+AZH}5ihr@WCKVCoHKgue&ShBiNLTscVM~#~-dO-*9u!*TD)1KF{D)us&*K-L$~~D0 zi3jOY5^Yi;BJl_QDec3if(FbcO(UuUObu{j$pqPYoPL#L8;F6iR*3a`wU+In=tx$} z80!5Glz;n~P%aCcG|Nigquoog375iv<}rS)z0DLuGU}{71Q`u`wWa{9a1F;%$Eq%o z;w;UX7D)cvu=eMp>Hj|$UqiZhPQq@-P8nyZBmd3mS!CZPumw+G>Vd$J8Eo4#kQI@J zV8soS1p9dNGk`#BYtbHiv6y}Dmc<)-_X`IYXMaH%3s(@yIDAHp3Cw~j$C3ysm-|<7 z{OH*EF+_6$t1jo)VsaC0-S)%Pj<}4gQ}N%X?~BRh6+54RfAzea-FHp@ZOo=Hs7z=l z1?yV4G*JlZ;LkpVv3D3Eb2dISq&_C-P6vkq3br!sG@VzMGq?iD>iJ~^;!C=>C6bZA ztbemfK1RP7L&Ay<_D3^9PfSN_G@~Y%k?Fj3OWZrG9NI*an<8=5!`~E%%l2wRBreQN z9B;Q;p!u4OW#v(6X@ zc!Y>EusKehoW3H|Ohv(6z$iBTXtgMolYe)G`{uSRYo%LYVx?|dny}XbAu^@~IpXrd zY$<2Tx!(K1-T`VC1fdcrgRDd)q^VONRBlqg=~?9>^FbP=w9FYi z*S6=F2&K%3phjEG<;N=wGK zHyIw_2crn*>&W<;o)?iGah?fipntAylz&8t+P}JRhKp*^b!bCMsjG_MOZ^b3Pfa9; zG7Zyp`{D11xm=k>H%E#~h=A#o90iWX()Usu>faBu3el_mIH7T*kI)`ILwhj2xo=|d zGd%;dI#d)qWU00Er2~koK8sOo9h2s6sut@mZEj%^ANr2Dmh!n=#*BD?n}0dh6z72t zqx~pSn|(}>;zXvAw4okRK7o0+D~%%VGq#myqMGZZXF0tSkfYOhq_}wqzjM98a+6|~ z9zg1hoOuo{6GC-Uh%gAQJm?C@EIdvBPABZRHaCvVot1bM6dsZFdBBSDIEgi6x)G?U ziLY0|(H=#rNDr&L;t@2bD}NLhOM0V*q%kd#6|@^NZ!<`oRKst@$ajk+#SCeW1Lo(6 zt<5mUn)vE}5ya+5dRw@&o1!_2JUPM`+{I7yoMd++>J%#9C=3WrF&Q|^pD3t5;rLTq z=H>|wPMP{+W~QQBgK*n`UE3P)ukM2RBdANT0IO*&0?RG@T${82>3>91+26=!pGMzv zxOthnEqJC0orQot1zDEKw_L3eiCnNEW(OIvA1q0%fi%biA<(^Mb_M6Esa{>pd0M%e z0(DN?cM8H_+3Zu_pk60>PGRq8B2^8+;v?UbB_(}pxRGmuYC47pW`Hb9eYyl?L8Zp! znNRYIQGEnsL+c9Tn14TT;A8(WQb1t0TI%U4JgXXT%2a!m-cEr<`ipY5)O525Tqie3l$F?Y)PEBDyl#AKEpFgS-LD*9 zLt<#g9?BRKHFWZ*x=IsEr}yI7UTB8Y5Fl{5yd`eBz`v5t3A+q`sMIUz4~g{WIC&XI zLvt(#=Jt?{GWSdpb`vkb=(ce9;LKy1dB$1HZN_xaH=pd3NK#+qA))W{3Su*a}^vUqTs)z~N4`H+FtMT1+R?%bG&u?m}1&+}K`{fLIbt zg}((mmKpO+e20uBpyp-iuk8=9`sDvd3jXvst>rvo897}FxC?LiE=m$oDt)S}yvivScL z>H-NyLoZr#k*xCU<_42{FKo48p>Qf-iocqYR{yesSC zHUNI@#2u(1y{l=qay7_>Jk@vd#P6(94a-O_R-&-cTzOWGi$!xH8#e-L$mlXzg$!Dgx&Yd#4o-su);8Y+ z$Mb0PO0zQcy?0aF8M@%7rjsq!{H|D3lZ#QQA|6~hnJ~qnr|jw$&YRYPiRU*4e?iLt zTg#Vj4XHNN4mHRP7tj>2-+Q=Q8YQBYwh62GR++M;g`qb%0aw~gYoJ%N#pK;=TIo=8 zxqp7LMA?5AA&yM<@MCw2IsV+bOnrPe2H`F1apCBsn+dTiR!OZ_3kA&N9cj-Mrh-(1 ze)&->*5A^8SBkK%Si6{z^^9^D65sjs#@}GEj-)hW`q21tUq(O-Uzny89(S?BXz-!o z-{nvW=o^?Ynw4&|OoekO82MUPuFd>PXn(rQtzJHRqg- z`{FlyT;9I3F3~+7;b>HpB}KDgePnAgkKC+rs7;m>+l1+yPV&e=6&cQg-t!TI=fI^r zfcqgyhww@+WFMAObPSIS4?~7KG<1pv+(^mGMXGGiElcSe2Zd1ON`7eK_mHe2kAE`< zcVJ>c#D-rDzy%!H08D9E%NI0_Vq(u?xGp0GJ&)gvF*FeJ0sOvaaS_ZZ2q^-5%g`%KMn(^C2dI^RBBF30PzQ6L_cgsm;4_W_9)d~C<4^+=If=&S*W6-6 z51j@MIrNOtnLZ$tb*^r>IKSS=34c~WT*ADAQBp#jlx7;yN}lC}pu7s*WAur*tRGza z&6ag-<%od_m;nuu&OCi^`GnkFp(!h^pt9BtA;%(g0=Ez5y=%(ZY6eUV*R-UWx^J(~ zmsaaxWz&etW40zM{*gGPZjI5rUYlSa3c(?Fn0$wizR|ALU#eo0vR5pMUS%z-8u#52-w zYg0#0?ZAV3v2lYjv`|2VjrkNZsnr$D|0z|$70M`n5ckPp5oqw*5;1w;yONU7X#yAR zQolUjuO{B%6KWRNYKD?JT7MVrQ%ZxZDWYAAvR)>v8=~#0y-dBL5jh=K1+RAHg}@SI zAY%9+?TH|@;Br$P-nL50>v|Y+S-4qOmkq|nTt?m%^m)hP+O^Idv-p+4hAY7jnl&&d z9rcg0#?}CCK#{*q@Yh}tA$}6}1jfAvq3DGIJS#2Ml@<}NVkR;wUBxfN>H~ky!5N1L zcmH)I$lWEc&ZiBZG38HHx(s6i_=Yldf`sj~~d9ir;uD9~QXZcMBIQ#x(Z-9Ud3ib#@?iefU~ ztf;S!5SiJ=W;GNiLW3c7IA&hGVQy&!!K9cWx+-8=m;v)jN{0f?JK-BT6U@G90|H_) z5E-Fl5Eslz-hCOSxS3-vjEmUH%yELxU~(A)G2oyXUjr)(TkeR_aw>Ab{8z>F6v7if z67w6SHi@P5iv#8n=~aIL2~I&skN7Xx8BzC`<##coxZo;7lq$HF|3Wz8?7SO@BYO3# z#emSHDTU{74UZW}3~P1A-5u&*G!{S}Q?tD}b}aiH@xY_zG4rV&p!PiruZTP@B^0)+ z=0pf^(9567qRD|p+JNenST;DNP#$d_LfSk4UzwUiU1VTQAKic9oRV3MkT(@dAYeuu zsrgTy28`^Yo=J>WZ!|9+6+mDo5dlt4gF81BUh_^*1M&-Soj0*C0{z!m{~NsF?l{tn zuS!;?4#_c4vk3#H%4X3JZ$Jy+LdHAkE?`z$I(VqXM?#iGNpakCdi0rKfAQmeOXJ6e z`Xjc~fv>Ia@FRa*!XE6C)^bVHMGn1$I65bZp;?3dkQx?6WLHsw+^1m39nTkoK8E2A zG;FjQz!+33U4wxRJ%a-#_7c3bxGEP3*^fjyW@4wW0#s}Z{v9x6=M{E<4|+?tM5Q~V z-ZSL)%|@zRySI>6HiMoT+e2}vG&p5&45uFysDgKTrdxlUtcaopUx~a1lNGUv<;3=s zxX(G}#fI32x;rYfTO6~2eEQd@)K)RIGzhHNteA~eW!x1tA9Po3!qi{@v9&WA48(gG z48)DWK)lUhAZ`o>;(ZJT;;Me=HyDVG!9dPX{(?0@isE5y0%wfz+{PNu4~42gvB&82 z170;@YLS26n&KHtJlhNHgqq>GwH;n(>MarQd!6|>@tuq;H1kWDsc#viRmLW){%$@S zBP^$~24Ps3Zu;rHZ6&y%ce)<6X=H5~sg_=ySvMT@?{v;(z8P|BEz_pj9U3dZzD%9Q zbkM141Id+4kM}fSSfJn|6N~1m$}f1ofo8RGh4=?dEC@PGh*K zcAMSQn8s++TAXTf&K(X~m*wodmBPACT^8t-gZQ1~B6%eSYNwJ#72^@A6-4W?Rlsf4 za~o*pF-o+6`L6X?O`s{T`l0#Q)UZ%ws$t*hGn&1<{gXOsxur$|WB8#lcM~R*p?1Nf zm-ByWgrRhT*=5W@O(>Do0?wHkfidchK}crv?C}#5R;W>pUrV!dI(&x=V48;&EtTdb z@IFK;BsLuC#^=m08Zfq-nakKD?)0O%?n@0CTA9$Jv4**Ti3ZNI+|kTCa+)Td^7@Kx zz60AyGibWQ>XLYBswE|fU;=}2PN`I>b5eh+HrdrU!l_}rcz$Tl7|ShHyLpgTJ{h`@ zY!$4?gs#zUMsQVk$Q^`~A*W7e?TC#15VNwH{6Dd8VxFqP59E|*t$28TK-ZiYZ3J1~ zxztguQKC67p@a3c$JBLLrH4)2sv%-@+eDh8Xs&!J*;G{eSgcYm3OvB0m!Vaj>}qIe_jU8@(Cbid69vvaWBw1uXaeL? zrV%%psyq`|7@a~eT`X*_dp2lH{Tv!7LbCxbBCL5R8x2&B+V2;|^x}%4)p377Bj#ul zIe7rKhoK|_<}X7cVO1swDHOvNC;<*-xnXQHsI?k8Vd@xbTR%apYK$>)2P8B_$a%I{ zbCSd!kiMNZ-2Y6F<9m%w8SMRxnw&0Zh@g|pMnnj21W}@NhzqD}V64n#HCleR)S$vJ zOiEUjbnBTR{11>B!r!6|H(Gy3-;>Um;FUHCCl%n7Nq)F~I*;vWf_}!fpK-gN;csX@ z19UT73G#%D>~AJzRV;u4Rtc4Fm3eG7G|9J%#j0MpJiM7Xdtq%efwgAjtI*_r$Tgqd zZCR>!x(Tq^apvf=PB1?+sh$&BK(!xqPjJ;( zh{;AcIf*Jcd~4}rp7oJM@b{eNj-=Q~Kd72ECp86%GAU(l<`m&Gu2g11>2YZFkV0}v zsh95>QdUoq(ixetB(amUHdz@bs|T|4SkMS}ds8ef$_b*n#%fkvMlf$my?HKVr~E&* zBXZFpxl0U5tigZDhz=eU8b{O$L?nScn*fzMRAmN3i@CycxiGTSl(kW2cPETpF@Tf~ z79=#0CdV_Tnz5~+cBas^g4K^Kis=qFdJLcneUlyfSipH9S2ix3r_}U9wdt3!bOis+ z1z*&jB4z9=+HF|Tm$9R)Gqrk33{&0^s1P1OKSSoPKwYL1k>Vpo@vImKo>6KzV-uSBp+4= z$zoas8;g1BL)Fv7FaxEuPMuZawALmu`y-{2PCd6GOEggrRE!ptTU_5%Z#A0`vJK^P z8A$^6PctLJ|BhzOnm*Sk|7|3mBw_+YdfirmNq>LBbP5=d$q7^URqt}&glY}UnM^L% z*zu#!Nc<~-7JwwSW)T0d78BQ+TgZAKR)fQi5$LM)deE{(4_(gvT|=^|fqASVI5^I}TqV!DV! zO2~U2yfwm7z&6r&#RSmTX$s8S<<-q($|Qf^*bSNV8%nSs3+i~jMBHkNQ8=xDahOq$ z0Jc3zEwK-S4kj=4=)-}?8X3uqunZ7>DT7(F97P_ShCz|}0VwD)Kt_)=r{9HfyJ$su zUnjsDYvJW=fw)$YF>CGGHv5KmsO_353*KVaY`$AET8U^{OyA{(X9ZLA?#uk%me+r| zP2JE)r5|D(jq$qYZ{1OOb2U0Is)5ZPlr~X#tszwX6dMN7jcq>kUvjQ8&o|MC17pk^ z)R`XH^)Rj(#n@D|@rt2I(o89_nLf+xVhX|SuFZ&zfAC8W)0iwjcq|HF-$lfvM!j>| zo|D;PtcmJ=mC2}4GHT;yP>+FPjP`$k15>scX1;NltE2qYmfc_5eEq}Nx&^jQR2#{w zYB4##t%~KZG1lC;QUh&X;3!874BaSUH-=gN5@$pfSo3YT*Z@uIG)z&$v z2fxSYR+kSNct0j{tgt>#mZW6}g-DR8Iu5HxgC4`3!WhhccTEAZ4>V$;@j`5)em*n+ zQqT^2PN1Z{5q0WKIa*S~kV93G1tp?HBc&9RO_6;uOay5s6%wc`0}Sy(&C5X-!=Q=7 z7+Y$r4xVdNlhieX*7ub%w`_lTQ1fE3QE5Y-3k$)FG6o-7nJ}0K^x-u+-4s4dpg}Zr z&=n(gxU_9&zSdmTOt7#+4CYuCL+E&VVQ@_hPRkZO-o(JQ?fa zaAdj_VT~T!q0(C#vzB9N2_PX|P!#ND33(JJ)>tIj1B;wTWWkKGR^q=r z`$dvqUTNZwMR75s_*xB3G8mfVG&D);STmXrl-4!0Hb|?;7+PrTj`kmQ5x1`8wqcn+ zjQC87_<^a#N`$4LT91GBvn}7isACWUD~yRe(8MTXV{;%Xi?97eP!9V9;dQG>Qx#7p zi!u3eevUPZePBTGsr}uxwM?>l#7dzc2{8fW0F0R*FjW~AAM6)C#QFsv%#XeWLpx%! z!)V{Qb0OG_C^jCDHinHRDGR~eM?umefx>zl1!fzCDQv3@J?FD{uhc}OP?^vt^7cqTWOGY-wyUP2dTW5xC3$SduUg?IQ;_9? zESYb558NMjx?eKlAY!ToIbG;L!XR`?CqYIh7YL(NA%!baTmI5xk)8`CCE@OPv=JR$ zR^rh*A0{Aekf(C-YzjzgCR;;cuOLg1U=B4NJDh`IY!ZJ)^%bi)-m=K^1I>&I34H>4 zgdqPlCLPlir$L$W;_k>YjT*_u2JqFY$#+Wow5_y(x0MQEfG)p*ytQ-+vS1^{(t%|` z^%YbwCWo5Bww@euJunNdTdvMR6t8T&6-;1|fH2-Kn^pX4oEtR4NcM053u13u&-sXrl=Rej_9mru5DP6)?90phXh+Io;N8Y9V4u8DXm}vmxKi2 zuW_(J;vFZk5qP%(aClbfy&~{#-@9fpoch}7^SNufu9xoy8F_4F89@8nVd1MW6W$NczhEPX0KSqzQ0GXV&6)NoH~Czj1?qdrD4{$7)_UNXx62=2P_2x z2?fmd=&rKK!GN5U@gDs4JSy_ZSHE#mC%AlDu-|SqSEh*a5)BLQ6nhOE1G(mth5)X>A0kiDGTZSgQ&>o3=`Ew!@Zm|Dv4Ts+VLr8<~v^ zJ#r@7p8gzxMw*Uk32dgAW*HID1;NsyxvzhG5u(LqB;M7SsdDRw`WyCs)|}!S94*7$ zj+V+gfKScTP$5h-3?M8Sd|35DJ1$%o;@4PPf+rXcguQan|c**Z<;j>x@+jyE7*Um z9~n{jK*rX>4#c#sA1F;vr_jwAA`rB*Z|xYUeHN}TOuWX^%C}K;G)EaZW2oYBo5BPz z*Hwxc{-Ty2?731|d!?c}rlu~IdR&lsOJqu;BsJbdLAE6h{)(U1gOUODxHYw6;Ll|+&_1I+o#l1{>ImT&iUe48Lo1vF< z-qn>SP!pCYZ2r(^EyhxFV-8PiL(Lql&7hUm8$@=3ETE}bwIH@zYWG3zo|G&U0);vZ zCyg}LbYiCakf-K9v)^CRj#4tSmg4YZtA1g0j6n0H!JU63r@3mPfmLY% zmhi3iJ+#h_Y7Q7$U%6KQ!}b0<9Dp>>Qy0!iYJz5b0NH150-7Z07{c}#5{x0l7*ZJn zNF3oS-8U0WeUlo3k5odK;ik_FjT=Umh?DnsX}mGuXq>7N!Awxz(w!>%LP{bD)D}r2 zP^nc?fY&QzT^wjyhCF}Xa*)bb(^?RKyvcVR%Q-JTuzCGMj|1ZgLAw{IcbP86_wt7g zJ441B5>7I}I<(}SeN~$A%c+;?aN}*mjpHk~; zFe-r|^KI{J3h>4-CS2>PWi=@MhJ79)fd`ef%RI8anW0yux@&)H;*%jAjSWr+!KMmJ zHJn+h7d$IV-5|HlZvsEikc8l@gNV$6hWorigitDGW2^L667^zs^VY_C^Y;owbM<%? zW9U7O`P$Cea>0$-Z<~)()@Z>tIyoieNYu^1LFCRvjy%v_0bHn)yD*40`Z(2$oM4Yh zGEh;X8bx%uNf>`y$D_d{$bByn^kz6Iui5%{h}i1}ZEhtAXpO$CY8}hJ$HHZMt{d1o z!_$Rz5L;R*r#3!+y|LWZZgaW+%$jcTTg$fitvzH-{b1ik9hC(wL6aCUEAzBWLUqrK zn6)ybAU#p<3{OdJFnnpkaNHgli9l2SB@Ch+(yKiJQG|cgVG-OgVn)Q#oG00XbDn&d zlqa#?b~SVE)Vw&nm4xH6F*ftg<+F>cKrqHQ_ca_bs$`oImtKXQM2?n0UNcy}(C<1md$~rZG$%+hryaTKPSOh0Sn8LInF`_~3&I^oOmlu{On@*{C2mSQ4%HBc z;j(06$t@xhn2aD{3SD`bnnQ*g$<>_%M{MpTW9p%M&u+a)XmdXeg`3E5%h7?}(8&;f zlUkI%F{V)r&vN`+K_g`H@lpGvzU|DvM~)WxUXXvxOeyVvDq8t@M^mQiS_fY? zF*hORuFdw9yJG;|m|@%fG$-Gln1BXuPE1Ww8~?T>CzgPgPq|dIKCy}=L5|p0H58mF z5PyGFQ;_RX4&qw0s93_85C<^z`z7a*5J_@Q%B3G3h5+6cjehtDmap1<(cp;@vDRg zi@;aDMG|sXz6nA=!?Vo99+xMD|NRHne3;Yze_Sp)6WlXQAi zCkuspTo|(|YHI9Wh7jZxts;m!*R-#_^sV&5l+)ovZQtxj9a@}~X3u9;HM=&x9K1-I zC<7|~2x{~LG1N@c27P7Sun9UGn241p-!=|Ocm@Q=dc zdT=1aN1kPyCZ=@%G2bX*pSH>;Eji zeJ`}+#nnM^_@n&2oR!5G03v!LT?S3JCB0Y)} z+Ik^FaK4|6tE=5ZmV&*Htoxz8cB(};>+21R2~d$xudJEw;{VNqeR9a_x zG?`9|#eaVD6%@)O3Ig=$EkE#)7 z`|w9Wp26*OT)de~i?P70-rf|mHx5g^mI|ZG!r+!c*7lbpS)nhg;+miuytU=un+NZG zXP32laG&4Z}?ofylSSH-q|Jn8KRT2({rqfXOm-nG{H z`=&)Ym>3M#HJyKA^DFwUqPZ<>(7ZSl^u|K-{h2}EHs0B7N(?xgpdW)T#)8S3`~e+U z6!Y6+S;^22hvUierX0Qf>ug$BpimhWi{{&>GQRKZM>&Qn0VZE%m(_?|y{wL>hc90j z)A65+>OZUM=3wv9yF&gx zshcd0Mz_@!#-*b=EAPsuPY0J6nJih~=a&aNYIA1I;e3VyXB4S+CU|flr)bY4_dz^- zJ~*t8f3|wNEEX&6eDPTazLq&0wzl}-Vl=%#H##%7f>39Z@!40?|F?Mi_Z!TcAELSM zinp(3)? zl*PD>@~w5PTI)JJT2`a#cKPzYSZ*sG9zS+}Or~;dPR37U>Flj5;0^|#IXKyNCJpyl(Lvt|t!;+RR;kyoeREX9HvSD;$46_HrEquGzUJna8SlM> zHWYttZls-XUqALn+H0@e=N#B;MOp*`$$G=Jz_ZUAIo( z(Dl5L^&DU`3${Id+OrW}e)h%dS6}`0ub+Rv(oH|?!-`?ggdV=fL3Ta5Sj>bNJ>vuT z)YE@{+i=YwPHYi$rJtg;CE672`R$|}pLHOg-A)cxrm1dT&DzecmzOeG{lug~ya0!N zwiFVdZ`(Z7aC#cPC|(YzE@#wj%cxeuqrQ-p5)Mq(<@DKjF}pzl1@p{tCc@UTF9v^p zDQp7Q=h?@DA#0!CRux$|0uZ`L)@^tr{~I{}xS#Vk zmD>D&Tf#vxz%M0WtAz`uQy*Q{PZWPNm}gxe`{&AHW6oW3aXG6mTq89xvv@t3x?F{0 zIVol*&dq2%MtWNaG>@I==7$sehC)|;wFOV)KUWyf(QR3^a6++75m1p%aboEFYhX(M zYv2rtgf*V5j>~p$xuy$={#KrZ=eh1u(<;_T@V8dCd9eR$f z%wm6>gTK{t(9FfN7bE9tQM@_*k9zh0)!iMsq;`7@K7akS?2Kn-XUJbKJ{mm`)a%b$ zkY0cGa6rN}wIIn~HK=`d>1BWU_U5W*lgbX2Z8|#b#q{B1ZTkue9#qa`>P+|Fz}j|a z|4uhiC!_mOB6g#86eXi0ws=_YP)n~&f5v?}eaJqY{ucM?wBD!F);^tf_vv)kKJDA6 zlirOQdNS(*veq{p4xlE4yc;@{ohLn?e^_q1Wr+*T#RuKfv(`rH#h`!cuywk3M}BB; zuxV@KO*d~mm;g^l*Tu#QvUlfou1WNxwVi5+RI+eio$1E169oKoFBh}h8)q=|Aj`CM zj^yXEx`Mh;AYYA^E){nUp57G2_0lg>`jv zY^ip?fDSTFEZ29%+uMJeHBeU4TU||-mO3F-a|N2^^qH(tw??<5>b9U%tVfMbIitm7 zBq+1ISWM1kpl?r~abPM}>7g#_StnK)lxhmE43^~8@qdi+D2f6hzh}z{*7|sKE*$i2 zRh+1b{}^O9Y4Y?4s4_B#?k2rt0kL}A4A`XZxjpb&}@Igg#b|(!7gP-_ShT> z8&2SsmaGA_dgND!LO%9nofUbLhuz1gQh>hcs5>WZ2@)nG~ytu{sEqNFN$6St&ZAbJT`yYBW(Kx3mLLe z!3_o{8^qVbS?LArom4M!xoe->mG}`&9h*b8(_408$kVR>J3kHW3iX$(Cnwd zM+DX>{(NwBi9)&_rxaBTO%oj&X&{G_ZE?^v(rus(sRd@RWm^?%6VjD1!dy-#rB|vj z{q}!km6xxNHuj$cpseZU9!xj&z)DOW)&(;U4{6x&m=9}L7iQ09)dT?FKbwr8mplB? z9vsE#6Mxvo>E83LS^U$}t*61$r~UP})!kN4hq<95KW?h2xUr!oKW?gNmUKf^{rb~S z2QqWs;YsmQO1+sZt~Xv*pN*=Kb3J=Ac{6{Z(OQ3@ne%pb>wG_&3UNJi-~#INw-N-J! zzP_E-wgE!b6yw9~clf8b%eO~IN1G<(RU6_`_;9($Rm@esb+mz@b5jq!9Ej1ihulLTL1h=+`*vfiM|cG@r(t)1eW?&rGqLSivh| z=nCC(pCj$v6)T?xPUkxW?g^7<{7>7U<9tLw06ii4(% z-2jR%2gB*mPR`${eE)heyOaxg`I(a8`c*$!!=2VEYreB`jBkQQGaG|KuvmY(tw!f1 zxKxmVv>6(IBxK^O8kPUs_q>MR!rI*|E^ABcqWj6%4In2LZIU`>m(}b~lOKxlfwyX^ z)N6LIdLwm)ZtV5DC*KZQ)9c$OmIhWrbo0GnDA6q!Ktqadznv^Cy6s#y#ORhw!%(CB zC6pXJ)-eqRrtgD6(?yU(+6{ks(#GULVOH-?)~43dvG4aV7ipi_v+oA|>)5td-F_;4 zZkWX0k2vlXtb=Yk3YOf{?w-=(2G!_v&^5H_n$%d^{o2h$kiIyyN9(#V(Xlg~!Jz1n zr`w6*9}bYO&i_ZKs#?%)-60enoE^reb%zXU4yT4a8$x6#Q~PGcEL?vMn<+mGo2r)W zsNei^6|C!j+wl`<57+t>INpoZYA?4!JjQU}cg&S6#MLHhPY`lMM`pEzPR5ZiSS1TP z{uy$?tU@!k{qzdj1ewxiAtUQ)Y|q#12DVW2RB)y}4GdxO*+ykM>2y8d0^eTWjK-%w zUVXn9-Ebm?SMtI<)gpgy{&n6eqwLo5_{aCM|0dP3ZQ=mtT>yDRh^OP(#Vv<*u_$C0 z81ETj1}As8ds;<-MFV;94|yKcU(mVzVBjAE;_K0P(1op6+^Z|0=nq;Iy0zst;aPGz z@H!nhG8(hb#}i&SpzGV8N8|D5P-lU1E9Bxh7<^Z}rFzyDlfQp&7ENPzaW@T&qPoFa zc{@CF8xGdKQ+7O{aq!wV`93<-DRd6DJWSchyxaG0E z4~J6f&$DVKB`*16ir|k|v)N)inSxd%i7`Em&}y=))mID@xTwES!lJFoe+HBfP~k36 z&)q@yQ#HH1EQ{BZ%PG75x~MQoMT4>O-0HWK@rHwU#bST90vwf(FfFsDsyyp_5a?wK z=%Tn7$^7HvD`m)Jgg<;Q+<$|D@`oIz7NO2(Ghy1C3pCoJsj+BlTUr z-G<%X*V5*!)1vF2_K#O-^RM1u%N^QL_Lh9P>27IoX?5^``QA`5?cS(-p}#*m`zQU4 z`H;bQ{mmUMZ_kynmvg0XeQB9EwtEg`%qR;~+g-Rp3q2%`a4El1GUENPgMK~0daL!% z1Ym!C^222L>D&K_{ z7E}#%*c}&Kd@#J`t)cb*stPQ_Jy%h^G8k;w4)}x}ft#Zkb`Gpl zo+_=eAq>TBfg`N_!3^tVmmpeK*-mGl6&HiU<4xtL|1^b$tEj*xyHxv1O-AaM@dFVy zF&sU;GSymP9MmSlde?x5-{h3iDx-cWIQ{y4bT;@LYFmx#-Uctw)nfFSrIc#DX4ik; zs8eRuLvYWM{{BUS)uLORwr#}&^|{*E%Z~oK@r>Nu*B%ea&AshF-)BbmSeW98T=F|% z^$LH!HZ_*cc;-MBeT`TE#qx=49DA|7@PGQrPhQwRfBMPwU$ib^XK?t)#+~ciC8gjW z`xNiL@DoSK)T`NT<&dmHZ?+>cC!&8@@K^k7;osY>+ju4jn#cLz0anben4;IzkdFY?WLxxKFJ&0vRBu#e+M@waN84d zI_zD~VIN)}zBds*)-UYOzWUP8Lw}(@qQ1K!CDX%A*uXc1teJo}^8aBeZQOs3q?6E2 zp4z{L#&Y1Sr-u2o`sLX_e{}BgzkzLPa6FJpa(J)0#S{W1swB_;{)IqzGb)ACdJvEs zA;<*+iH`>X`0PKwd0Y=Jgce(j9tZ=zEyTXZfzirmf>ls@4WQh3$WRu=_;xxTO{+() z$zpb1JaSTvM&@QTg?!)<>wAB>IB&o_bcq(l&1@kT2V?X6wk4>6f6Ugp8ZFPh`O`ONuRnX>p0WV`{`!B@$DR|{*FuIa zKfpnOeZGYL_iC(YIb{ZbptY982*dzrh3zPNAci3u-^9lt!ghTTvN&S3U|I+9Ts@izj<&UF*c~b@Nfm+i-2YAOEx(FcE-dfHWo;TQh5j?Ty(=W3;Iv z`r`12x}9Qt3S%2%y#ggr_XO;gec4`)r6u%Q(1 z4cgY*4!lb$-2;ERt+)ex_t?A#{Oj>v6V7w18l692(s|;wn|QzGL(_}4P@upLrKRqA z0gcATgTt4t3TNt_#m!S39&h-vb1QDyBf1NADU}}D@W!F^90ZJHzWUljENf%k+zC8- zyvI>=kL&>tIOyOB^LFioYsTLH{l~6)?_j0CKfP~{ER%n2y&-`YXUn3hq|Z8kRvTtt zDml{%wM~`T=o&bE$RrI<{N`g%lO3k^=~HVSv9svQ6-RV!vz$!f5pNC;LA6hmLp?a$ z+KE-JczZwAOCOj~qtWk+bITSRm7eVm9UK<$$A;eUi3e|bb(0b1#`fKY@m^7}wMHkE zfBLE2B4K|@&E?`^UAx{Ya%R2^4tvXtVVZGe{CuUE!{Hu_u}XfuTqg^ZDzUxSA>+L{ zgLjO49l~Dy5^`k~LqNe?-Cj?|lj`jn{eq8GaeX5bQQaf8OH)u=ZkIba)NuNHg7Sw4d-SwLKei{Uk6g4F_S-IP zdUjWI6fL^?Bi3+x0eN$=!&i8}y506*2bf^2q%8hi?7t>y1r$@SJ?RoI& zZ~XLym3x}IT!_LG!>Da3by^&rY;Sx;oOyqEGI?{Lj~15N#f;gX?iZc7R*#0gHBB$K z)s=n@4}_ZNtuN%;Z2HOC81?Icv7MZ4g1pz@Yk{zd{ceu)AKuDACpR0f+CAX4B)eTe z@9qcZT?K_YCnG{ z7yTnTGy;tFgq!dn_-tp~2r&M8aJ*w>RwlX4F@LgOxKpDA#L5-#(HB#t1*A{5cn^R*)h(wo>(XFQDonno(`3Bp-COUsjTQsPw^opr#2k`z$68d3VZ-WsBxi;$ioheplcm^S8im(NR2;cEGhYi4I3NvcK@Wh z1-6o=W^WFkX4UJ0!RBJ$TL5sp3(^k3!zvg5(q8GUclYYuD!}7?0Pg5ySI>X`a&<*E ziX2YI1vE-$$a+&vii4e?mGasT_F%BjdV>Q8%$C{1y;fN&9B-_@pHRti*ex*D2IO8{ zF_n(D!r8A&WVTyyXijpk&Y;HeW(fOrqs6J$+o+`ixL1doddJ&g-KT3UiP8$tT4er! zPBu`FcSGG%aM=+-G-pyrGjV^vrwcqhdDy4hy^YmjYy(!ILas(8Eu+K%qEL=?h8I452G=LYw@kyT*lOoY*jd{;5w_6Q zd3c0i?D(DlcTGTZD(@V>5vy$-zA3YH^pB9}9p4w=uHo0B!kwefE@sK-~~ZqR>c-&5;;yeHTl9j@ie zFAq9aX@6f9YQ^bT_3=7QjlF6#o9-UP8!_khN?p=zkFxtsN}D3sqh!wwxYt-)XTtXKZCjsx%KiQI zr@MFOiuh=Ig>?zcp5;}DvDb7oSM*-R+gIeCxZ4p-B87j1+H!8u!96)W*jt}>$T0Iy zJiYmL=*@NjUOhg$u=mn(J-NRMtKaWfiu;5L3VXV`@utD9Y;0qz z9R10?Wb~Vl&dsvyCwoiCYv^rZ_Wly(C;LjN>vqCD+8N!mol#Fa(H`xb-?N?bo_69r z+PS!AI~VKi^lz3`k-&c2v8lNkx%xTy{ouFjZf<{Jg`a-1m1W<&nR`X2Pwpp>-41nYHrcO5Yq#;tO=K}$kfJbn74&A{le zo*aL?!ihnITkdhmKYhBfeBX7wrTB)McT0`ldvr_r`rz8u>6K$?SJCE-*;TSWGjyVBdz#qWTf`=L|7>us5@PIP4BYV`OPh z`WWez;!R+$PL(x=d8L{O<<+Uv<%m}*tVU*PPjf$;x&ojlSV;@UCbqE`$foLB+wX?Z zY1QpzC~f6V+#Idc$1JWE*C;vN@*R%QR#=O@qIGtYSseha&?_72uM$$7>P_604Yhw) zh^0>D{+KHp0Bxa-+S_tH@YXuKEexv#)f;@Pr)L|P(ltPJ0Iqc?TiH$vs2hiC9mp2G zvTO2W;Jw=q+&c5PVqRqDem`)d9&k|)xbywMo%eu?d%#`n2kxQ=oPp2|LA4HGg)3S) zKRUsm`q6QfC0v2968C8xMnB`Xb`XEB#Ix$0#Qmb8=g$T!F)dfaZB&~2aXPFvXR2MP z{$bP9PERY7rnWyC(R5p`+G#6SZS`$`?9RiJs++L3>PuK#^(3sFZUERJ#EX~xIczIo zO!_|zyS`KXDQ;V3x`}SrKCGv^-2?tZlHRVke66Rx?e_`0X9C9Q+-P!`)%H7(|4AGF+bs{n3T|D(pY&JOKce?Aklzmf+Q#1sVIWC_} zmVX`n^I*ndRXUs`O#lwAZ*!T(@x#? z2N+h(vmkWg!Su8}f|cZ%OtRU$``?2-uWIBXbVlXP)o6NqT`VRSNMpBHI?F=lP0Eg) z^S924^G5D$sZ>mt6m5Su2Ak~vdy^u)Vnm$c`QYqwF}uBCbhFjGc~_&Qi%obw0+T%4 zt9)T-CsP=~09LZAX@s?YNX+ur2D6<|`|7sB$}SM_1#tq}bBHi>WS6Yein+Cf2?0aI zcPwt+GzkKxGvrkNv89&~&fseecl1hGH_bpj91SPK*>G|AV|9O8OZTgveyUDdkr}}l zKYeNg3e9dSq2AB_eltea*}*^m<6DN3{MWRtFaUyUR(L^+>FIj&CQfFn%E(q3NtIDg z6%+JzSRh&2qFVlAQe8>=pTGW^$hSI0-T4^}N2l^q=0yOUg6psex{zC5R$q40g$(CE zggyITL5N6cU`~IYpAMc5o-evdwgw*=_V=av{YF+3Ilt_DwyEgWI9^Ntr`6j0AO6^# z>vpVKoe_j0tWGyUTA#|Dvu~%ecT{IfLSGr&!Ctd=SPyECDQLw?-G-@q7Hh{l?Z;IQ z8ov#iv^s&E*|bFH%T`>L zVb2M~y&FZ*w}1Qm^*5jV?VG{yi9a;0pB2lSGb@512lmTIMhJF!lnB=w)Vnz1x z2vkx5hmk~dwpX;Nb+vV-~>WAh6wJ)*l zIL`jv)hedjYuI{o#$I8=_4K0H(21(EX>9aC`}v@Y_p2X&?C$JOzUH?L2_@^V3^X+C zuWHl~x|*vmcdh7aDLkdBuiNr!$4&Ib{wr3hO{V<`HTC@Py>F%RWl;g#KLnhO9N&8N zW<7siyjqCZ0%y|w?~BEXoNF*(&}zIHop!=gLl<4sOQR#1nZJDT`kO;gr)pP$I+Nzh z$>eA`TU5;%LZmWeY|SwgN3Xy5^It#t%i)XqRb^kjbp7M?f*YdDd_5VD%i@`q zoBVV3?a}MkUwo#OK4KWGmHJqIQ`dnMwpg6>f;{QKWX}oefAxdi(5)BRgp?ongHr|e z#p|=L|Mt~4pTGL%^Uq}OO;-bY0l`72=omikwr8I-KC?rj{`8sPrz8Kla)n=y7H@x_ zIkPFlD4#yFq4?zHk?nl&ufgDXJxdLF1f|Nq{`G9oP)yGT&xX(b^{>G*kP31?nAzy| z6tZB`P3@2EU8~CoCN_9~pHS$)Q2<;(qrb~QwRbhrq<8l8RCtf(KQQGH%acb#Fv@_3!gw>gxJBrH^6Ck+D+0v;(uBL?p2NHU=!*{($lr7by*%hYs{6A%_n+k5s`WwMt=fMSA0Drrod=PZ^y?D-v6u;hDfaXa`ORLL z2-dS(?>X#8-BHRl92;T-w8lOY^uCW!(EFZj3Q3QP66sGYS{lB7dC6?^HroIHW$#@{ zxD&^fMd80f`|RBfjd_PWNHbX^kc1@UMczF*y&N#$1Z-lP1k#=Fw|`Y7$(D>s(lh(s zbM9I*=j@Krqg0YgRi#p?1bQUXNVlCr0U-ec|NeuQ!9xKd0mrxFLjfTK0pFJeNC6*z zGv)r3OOY$ar$U@TFkzq;1wyxZjGj->r9^T%oo1!~rRc~a<^W49)A<9e;OxqN z(eKtRD7x#w12&S1b@TJ*-+d%CX6KxLs?ebab%MVB;&F*|9unIdVtOd>EH9dq3S~6A z{$c?8*o6TzvlqbGxPh>6dyEFe>@h5cGx|D%uZyatyLeGGm^d_yW?LIJ{#zkt1tsBU zrchjAtDODLv*p5mKu(kWpw*n0ua#um8x#CD00wMNfSFW_<#GsUQZ1BaNRVBBSXxN@|&Wb7% zovs-{2X)YP;P3J4dT4iL2uxCcdO9spM9iEE1xp$f7%}PBh4SlI`L(NPih-e#!vrb% zN#2b9`W3su{8sgqgX4(l!AEJCnrrAs*YrBBHIANC|6Zf>ZSl#R(;O6SR6Wb%hR2jr zXVbTt`y8w`C>^&E^0`OmAu51a0z{3i0BMu$M254#nxcY|>?u)*&5omg;1#=nje$0| zg^dG@4DchsrSsc)4b3%CrTpPLKlqZ6^fcXA4?RHXQEA{1b2blP95OWm8`adyWP50!0! z0dT-HOI8maecFwyr<0KbnQBl^8F}t_7Y-=P!olWQieV;Z;OBiG=4Mfzx`YJ!uQ(6c z1U=>?&Wk;Xt0Y6u0H!RMzv{^OM?`U2KH7q?P0ZdR%=Kz@r&{;TEKll9OWBG_46Jb)F~BX zmX)|Ox~wI2rgc9u{xJZ5zDKLihRdDdqT`_CsB4F3{odN)l`@{yx3zf8!;bx&n-%Pn z8;1;4`aM+Gt%{F-EM@L@tspzUI#H>LQScYl`uKI(w&`=%Q+$#XEx&MrK>8Ds94 zdBktAVvD3K_n}X04<}ala7&6WC$$#i9W3L5LE~nor;%+@zLcT(=vcN%F7mJ}$rFs9 z${$WfcR;kE7R(Ok6Ya*?S@UqG{bRd!aIjh1+W*lysy8ZgBQ_c1xk%iUK~C*hlTYSD zptWNKTtEhYe+?QQ%zO+xxgiN07x(X?6RrNbaD=7fjMUHQ=)ZM%!7c|dSNgJrT!qOdo`S7%r*I2^+I5?!+|k*MRen6&vcWmy#Y9eO?UdSu4a z)O}T#d11AEbIgrqU3Q{917?Pj0=H^*x2pZONlgK`0Rbns0#5QVtLf1UlB z`jt#>RQ~+epZ|g{{P=EUUTT?}d}i&xZoj4=ktdMz}v zf8%-_ZfO7Fe-G)ecv%IbplxVhqiNPg(yQ_#gicClUs>kfOE30#)eZ)f=EJnX`^T8~ zFb#}FN%=n1y<1>JRtU3VNZ&TPhj`T_`->e1k?7bR!%u2jdYFE@i10NCeHjy$%`AEzZvp42`N_Pv;|sD5aG+(4cmbNG>yl;1etm_R{lU0hHHHDUXQMj@c&g^n zM>Hb~iVCQ?j=K@FCIt_Df33tVSb({>ITI%V24m6z*dSYi^iSeDWPTe0w@T2U{)0j; z!o(ik-GgG8g?*9Lw}1VL=ZXd3iiX>tj7;49N!L>XN0cBJ^&hNgqpzot;^0F@JTSbY zXZzR%mCf~M*$!-#f$LCIXq+BUYV1%2K}4DR?G{}Ml6YqzUyP_qe}Xgb%U46V*5m`^ zbt7w1G)mM*tMZRuzdjXoBij)>6U_gV*O`NhhJ67HjqI~)`8+SB^Ug8NS#$~S@ns*( znQj2@kKugsfz9X7fPFYP=x}3G8Whq^B)w3M{veb77K|5dUP2G#qzOaK9!-Y1^;0Q- z;5yF<6boknw88wHf42-9J?wG369&6ul`!D{1Ki|opk)_FBZ(G^^-QxE=ue+hsIj1D@9c;vvSeFTVA zp-*|}LmqI>bJavV4-%J0tyO_u3yC>6yA4{lO4ITVi)9@g??;0b}ULn~VTc|I=k1|w% zIW^D*(t=_>fBXnA4Rx}eyuzdqX<#*cs%d2j)3c=p*3RcTiifRRE*N}FdqN+jK4W!+qUUd`evvwGGgt~6fsi#i39`n|q z!W6{H4F2~56?Y1e-WERG+rs~Yy)8z1Tl{cui~nQ2e>EcYn~>g&)Zc@&y-59iNZW_{ zR_tg2L!E%Wb#;A=%Mf&%pDeQ4cjQvYm4FM~uEP(uU4<03VTEM)DBi9^Q3Q%0Z7gbw zqP8e%OGOPRYCur~iyES+A&MHj=&QJtgSg#XDY&_a+l$WeW4O5jH&@{1VuMV91^ixg zjw8d*e-rq50zXd_cM-=Io#V-HbOnyCz|j>rl0ZTvuWtmBvThi;gL5`86U6Qk_&N<5 zb}gH3M*-*K#7EhT!iLyUngHx9>*!E)bSOGH6qt9gqcjQFS=P~x=x9fDv?Gdlv7z7G(rHrMo-d8UJ*%{2v6;rxb9p;K@H`n-(R@{m

    QFqP^Od$fM@Oxl5?X9UBeRr9*Mmr~2ll(I9m?2B6VMJfAI&8I3!=2}O{ zCjDwuY11(jgn~@ED&w8;<>o+giRTHZzbZh|_~ro46o4}o;7kU1Lw4W@hBtEnUlf2Z z8B-aMD*A*2^I0oKna}@%=|Gw)e?>@BVfkq4L48UkO_5rm;*2ySoNaCC_rP!-w-(`X zYvtbq!?;~bU9~M`(Q>;~M7~SLDuSRc*jC{;Ah5;SDyk5QzX5>>E&iQ6-H>QV{_YDihx-94G?TzTk5p7%D(}DPwBFPgsB8HIE%5pVD%Dd& z7xOR@4RbprATYH2q^4^aCZsAk$hTJT{T~^$FkME^y@l)8=D~hH4e>FIhbhG_%pycBg zo-cPa6fr<7RFQCdw-)t~s(5dO6+`G-e53a7@o({u11OV9n zPXf~%0jXHV@LfRpe|G@Y?mTBW@y$9{FW-Q*7KJ5LQVHCt35t>R^dWGC_rY;n*&9#_ zD-kHPHJ3nelh#`xR^I`^4Nh-?SbGzMM7=RUf@sU^gs>Vt>ej7l&2^1g(nyKWbQFsY z-~W(KzMb23%^}W$xNx6=Bzm}|Hjp{m3aL^$@<+c)rmU(hfB2)MO=~t;o+N*(4YLv{ z6sa_uujFs|kxH{jrI-0i_J$p)^a7g&lRWkSXN!z%@TYkDza8s<3W9yZLRwJI=W*YG zF<#6HIx8X6$huFaHrP?QpQ`vUDBMoyM?81@6o9Zd%rtZ;2AiumG*nJEhj}tOoLFTZ z^!48dJzD_!f9CIlepvvz`5xn!H-LDPYaYbjhe2E~0@Kg{8qhz0KK{f4IAv)QFd7D7tkDy`4?TBOLV4 zukq15*n0=@Ay<88j8Wk!kX(3``j1WaE#EhHe?%kU<^h;em<}RJDpVj}d1(q+?1qJ*LO`W5?EcWqxENv|-{>+&{9g*FB$Mc0 zggi8RQNXVe;+CF-jD6aNm16I^L~hIyCL&x0-#taC70(a(E3G2*rvJMXj8_Q6E|UWA z&M#Q?Sp)e24as$0z^G`1R`FZ#_FL+w0urPBe=^FAk1s%KNLs5T1c7t9evg9J`HOR) z1_)ddNsW17Mi7W=)*<&<=02)F;cJ?qv+WbUaS`bQz)m~gpST-uwFu>{x5`)Wbv7tI zHx|()c1Mq@{nn6am*(AhGXea=Bfq)7FnW5V!DsXC$He-1~7-RJ5(D~wX4`K%5CGOG581z*PmE}G!oYuM7nXZ8R z<}z2~5X2208=k-Tyi_rNOJy`6{l)XS^33wkCw+8wKESSaG0p=0tTTj|BWpqT>@Is} z96p=}3bh`DdpFH-5Q~zrKM=ci_w#2ef1ARz!om^Ztmv^2|J3a5F*75cq_MWEwY2*H7 z`@G-Vb=oIuCyy)phtH3@&y&qUf2mblG768m`e@VL?H_kW_tuUx$mJT(TV;FaxG`!k z0i=hE{iDHNFMWB`ccy!t;r2`Ep>OAM-OXBhW)yY?6Zg>l_+|-r%KHxPRWAoSjbV z=O?+Gb-menx!<+U_BsG*wm;lGd3eel?4F!oKTO(Id1ZET2J_wT_ihf2`;*ee=p}sv zXr@P_(&eahQeIhpLfq4(eXsj>eyw;mgflhcE({_}Wqr#0MrXuho8?+84m=KWs(ZdMy#w3nLo;Z47OUcNl9O&k05f5XwJcCh<$GtO^6 zycD)uXQQ3%A^dI3oNm*2>TK1{ck7q#J`l~4VHBOMe)FKQIT_#dcb{s5#%AYc`QAC% zoVHh%YyD2g-5z#cHlOwnw(=*63$`VRb<-k+RoZS6mt z-sP4b`nl)J^h0~EoXfcf&fUX7+u9#J9_RAb!``HBw2gKzx4dT^Tpu*9?aN#m)_&pg z^kVNIx7HY)6s~WY-cxS*Pc$Hh8-5m7N58M4( zufH=p*sh&Fe_sc*(&?7Zt;6GsE9~2tXrht7xH;K>UTe0IRv4vRoHS?sW@C8aZa-|c z(|ZFe-Kb3_>EV9u;rhJM^hS+Z!)clI(N^QE_0((cp6xtrmrpNuR~}w+jrQ*4aqThp z(Ahd2JZ}0e;DN{8*2C7pumT(d?DmPX{YwyL9|rR1<$pdt;W=PdRiNHp7$HZuGh=0IL}3((6ijyDU5DoaNQWzoUMax zzg2Umf6vxaeQz&)cUssz+u!RB8_rqdV5|AqZ#-Y@v`^B5<|u!7x4(LM)j4Z4^XJEo zQ9QicS(+91^ZC8T<=u_(w0HGzZ9F<_Tc^A2a(TORb9TQE3-WN^*}6Wr+b4PVa_ZjP zZSUXhHwQ=i$2Vr7v$y|p(>6}r=Is1nw|+Cae<<%SO=oSde!72oR{opD;XdZ8#pB!IoUp$;V)SdIgUfZenPj>c?%?D>{?!45N>gP|ky>vHy>D;*f z-pm^B_l^%|<>&O;(7t-^KYG?|_t0!#jLp&W(%t3V+St1`ABk2ro!aJ!zcg!IOs|RE ze?Oc!@bB)^_4uGXTCU*&*}AGDt<=kF_jkiH%RMpICgW{ybaOXuO}ev{gO|cpp?>X6 zkB-`x{8{b#<}Yx-aEtm&fCKf2VD%P44$s+cR_TxI8P5jxG!J<-yZ|IX0h6 zAkDgyAN99Rw}wZJe(mt7w7F(1_pFEhd3ypfrq-&RxjWMp+wPagWy=~JAKrMqlY{Hc zqE|m?KD?an-yH4k)Qt04y))k4Y#;2bwYE-b2OxU;CtmS-Vjp=g2kqMI&5O_ckiJvu0hqy`n~|E2PY>TZ#26$Pma3)vNzc|uC=!|A37JUlat5s#hy2qSOx##>SXWaB7bzX zQ@d$hwT~K&%~Q+0y1O_%xm=m_e;-$xtrhq9vVAkF4_l??Fu zao(6dUeD~q!sE@;WAo^=(byhscJ@vlp1V_P+kehKHjW;4u6v-y^fo8fTI;00bW+=` zJzn~?%Ux${Iw@TDmM(gi2gl7;akN|C_U=v^7dy|h#}ntI^KAEa&E~_QzjkduSVp_x zSTD2Az#*o^WkCTqMP=njlt$g>-2o}K36E7H%|vIZR5Oq zl6Ftd%MUx|_H>jU+!dU`^7!&{^i-NWjZV$_Fn?}8`NsIdXuddw`~*3 z?`*BqACFJA`geDG=QZcFeSV)lY&NWZ{<=52JRdlPi_OhVrmt)+)i!UY<(FQ|crX$4 z2uY>3UEVGo=bzVhP^aDMQKQcXgBGmS>&sUEqOnsr&u=$(f3`OJSDRNgzt`F=n9g~8Kq)*)Epi5A@lfR?Xff-UFWCH(em9>$<60y z>1KV$>gLuA!?-!yX-)3eM&rp^Yiv1%?v?A7cN?c?H|^2md1)C&VKRC-1hL`VJ>{;Z zOHXUo{X_e-e|>mxGN@fnM#gxxczN31Jb%1u`xm+EPCI>dabUOG>C1z<>pa##n6?^T zt(`V6NACHHdz5z?qsCJHblAEnr;qB*huUnvwsZb`QyN|Dk2=PvvuC$1i_5Lkc z@_qW?VKCd>x!AeBZ=av+Dx4+yS+;sA1)53l;*MGA1 z50)RFp0>S0`VL6&rMx;hKeXN1$t=LHcHM%_*F2J)GR16t_07Z}z*n^u^xv z=JfPtfB4vb*ted&{N?uae75!M?OUzc%HaHBd(bqt+`|*t5u7!>1MBH|f8XkR_p4Xe z!)HHtxo;H@m%6kM+5&~-{`~Z?xjSy%Z0=lJ#>sK}dWKBsfa|lhtxNhdKHtu@`suvk z4BAbYpUs-r8Xo0x`wvT=<9M^eUVHoW`qDVqe_DFH*}T5oKHa(LK0gA64~Lr9!*u~?Ne`dMrt!kFLk*pub`A>0C*rzIzPh8 zeTd^W464_0O;hpFKpRZg>Ch>3R(x$_*}QwO{L{DUv!krn z*OBRYM&I#?7wz^ zedu?--8OyUxU#SrZmxyx5DYDQ#G08~&&;V$(M0c^en$ARXyPdu^A&qG4}GrxZ$W_c z2p?eQKzmMqn_t4l!1CPfN4YtYfAp(KKUc-8^!P62wly`o$zm!x5_{F1wZb;Os&1y~ zgy>c8JJNhaA~C6`Gd`6x@fD@WJib{^ow!0iaZt=Bj)|ekpx%VhaU8d6*)Re;L^2K9 zI!5>r01E^#EVv%wgzVhS8kx?-|6z5jd41pvyFW0cS};pGJ{HKr1&0P|e@y#vPx1VJ z2Ko8mwmjD3$9ZO!KaZo#mcL-O1OPT;Aw2OBOkpVn5R+!y%%T_wXB37qEo#%$D#H$C znY|wR(#IS3f(&`cZsaHtsoBQEdB$(}gkbcPDh5$8l_#UWq3^1igz-(IX-I8zX)dNE z)kOYg9t+Fzg&lUWLv^j=e+(fD_|Urc#}^g@oxQJ|(qRFp98x;$q33@oYP#-AOxRbr zudZV8ubeS8z1%d1Pr3Q7@njBvj7C*Niyyd{KyY~=Bga9(lHC4 zvkuw_0NUcN9K^|pG(hz-t5pM9Gsa_N`2%Z+67p4f3k792P?Jzl#EVUgwqp9Bi@YqW z%b=Q4x@eu^WL2fpbEDf;T6(jc^$+%5c*ZRr1Q5#sZjq7TLJzMQG*GX@Shpt3Oj4uh zyrv6VJrJ16e~l9m=uG=tH`#LsSP26-`G#eC)D03*l0pFs_Kf{X3cVpzF?75bmeSuv zWinO~=?qQ76=1{0QtKbakn1fQ$xy*j9VcM6Fi>;H9CDw5Q_~n?Q(Lf4ER;(0D4N}E z0U0E@n)9)~0IDDBj4rzJR!2DcVUPYoM_!pWid|W(f1^v9P`Ez1@6>}iqc>=I07*Yx zg_N}U9sa#tC;eS{AH@DW09?cN`Li;@hjY=M0mB7gT%Mhxa``B-QCig~21kBzky0Lu zT;;FxH%cix`SYrh*RSD!H-`WAb5x#@N^k4POgDq6ItF~@R zg3M49l!E}35PH}kd(acLEKO%#KJ&QC0K1L^e-AcX(Xzk;qDhe_`%c4wScuTrn0RJ@ z(EQM;7|9S*Kj%w-{yd+?Lq7M(groh}>T+*+by?HVexm(XZ+Qv+Pt*IZF{7XOf0{C1 zrxSaN@5`V~$;E0z9da}!VjDVpCk9%W*gII7Ua^!57O1(P9BLzEijjL46gp-DM1^=q zf9{5-=GbvDUOcnXkT1CFbBg5GH|wFU9K?WYk4<{%NOl!>#x>;49pHBOG!P~b+T;dK z20;wo>+xX(3Ch9?5_=|1D!NxaCyzw#StkO^$C!vlBdww}?an}32VsNsoYW{wOEFhG zPfgX?)4;MCF2S2u@poXL@GV369n~sre>8j(J^4UiFRb&oQe;5%L<%!t8R&UlogeXy zLJmy;m4fuD2zBv|8WpU;A2-*4s9-p3*u?L`h~lTfL>=Hy6iSt;QgzNAl3G^05ji%x ziLCr;q^4U!D_m3@y(D8xbzNtSx>tr70OJc8Q_IVUTOEnue#eIjzmI67!a`Kvf5O80 z^^4jtI{t;_O^l)Sf`pyYBcyBTG31KAk2IO>p=pk_3VqjxhC9+KG0XigtzwyGny@Gd zvchHL5=0-BMXUz4u%N0VH^aY--OM48M`nkJI%D)kmKVIz6s#=XV>Au$Po&hp#K3r~ zyywK{8Gdq;6l(LY4eeXKdbN6Je+!5(!W3U(F*$6~TO~kcj(cuhYBI{LrPxBzQsuZ( zN4=gFd1@$zTfYX3k7s5AyN5Q%-DzOd(jId82+t4tOg}e*C|7c7s-p2dprf-(%ynkD z@V<>? z(y3Bulv~MECXivNZ+T#P4!%@xv7lPLp#$9B$ra2JUdxoytlTmN>Eh~`LzpD3YSQ|5 z6*9gR@*B`<+NxN%ZwiE@)ND9>00eue320K*GjNy;dHrj85dMbp>4ju1*bC_V=B|3l zc0>JHVK3|PyGel=^~)bxe_Ab=7Vqk%!bxC$>lu<_nlzX(5;mA*5i~Y5S?5!gx!l~G zRXZJfw38T(aw7}4f(Cmh`byE8urevh2?42A?9{s2!Ei8jsR{m#ArAB~_z0q?D^V-f zgYoa9^E?|9Ps|X8CGkMO64ObLA^;oFPp~_+Y?E~!a&i1VRqfB8e;K1?pTtu>p?D5; z5Ui!?a_!WdgZ<~v!k$erij~4~r9%UzYt~)k83QgeRYW)N67rdIb$ye(JU(itQatG2 z`~k+sQl+?#Wj=q#e-~KJct5zYhEuebMnQ_Y5XSP>1x0){Br5pkZxkyYZPr^K2S56K z@QTgqXdK?r)eR8q0X&!Ebpc5uulhxmm!Gkq(d5EkRKz1YC0)G*qaH5NyXFo^(Gfdr zQJ(LYPj&$nE4}$D?N7$ec!GDb&PZ3oBB2dF(CU#w$ef8dvKJ*mN+>|Z#kCy1CP)uA zmydPX+`7UEscNpRCUDrmDM4-+2`Rci4jEX;yp>q^cqw!Se+su4 z@g75vO7@aqgz-fz2EzEqcJc>yN^FV~lmc>y>A zL)(|jc>x^_O-OOT$!dW<3v(bpkC*j%0WAS_mm_)sMh}}&$g~vC#z@U7x?|JBp_h1i z0U-j5ZsUFi@s|%a-taocSRBBx1C)xOCF#_ET&dH>HK$dirKg;;@Kd)+$Zhh< zcnzU$ux{j>Dn}y?e`Q{rM2o}Q-N?*UDZEid9EiwHM2cV!h#Pp--ym&yppfgmGfaiJ zVZwS6W}~jvKjO*#tK zRBsj4EE$N7c^U)xA@?q$Ab4lES}GIiicSH4#?&2cgrj2_X#?!zxfxCeY++OBxD19a zR7+Qjc`3G1ARHK4RWswKweeJ&3mvzE+m#E;d&A0^JYCf`_!yQvCFht4pL(vC|t*PVbsh&aj$aABJ&% z#fIs0%E6baVd$VR8vV0Yw~D7bNlI6hGcTo6sv=gaO!~4oXO@B~J}K`7ty*%cR!pn- zo+zbvL=>s2`ZIWxS?G`WHgjs7U9M44bt4h3d}JehPjn`^Z6a6^*dyj=mIOVR*ejTphQ$QrPgfZP9M zT(!auxu%+qECQcle|@{;Oq9HSujGp;dGlULLzJvxNoCO^5yg&Q{iszFl&#N80y;E^ zDunY;g2kb$#?_#@!V07N7+kbkFbj_Dnz+xdM)>4k=};6z&>L=&j)gFCK)T_7w8!%< zW(aW|$FDMs^^Rdb8SG|N2w3;WRhE$@er%HkMk{tT{pYha9G;r^ay)KHZGSkce9B`0 z_%X`Db$?8UxtA3BGh5L4?=53o)m(OF0ZACT@4;-d`%!oJnlRhqg$%Qr*QYIG%I*-+ zO}Cl)bBY`9V+Wo3X5lBL)-AVxT41T{(;qYcKlW;@KgQ{;{sbMf@^e}#@i7PvM zXZ9@{Es4q0-10?GptsPv?g4X%NjBULp{*lk(%|G^|AwC6dA<05m3)W7yu*I{*GmJru96niqwF(Oh{}snPTy>E)7Yp|7 z>%1fjRBp1rzkXqa6rLkChx~)(sf_MI_ncQVDVb}9$k`#hcw z7b+$$-K5e-Uc|>DJ{0i-7gbzm=%}`yWh!GhtcY*`4aPzoip`K7Oac=GY=qWfF7ZsG#+A_pLa)%;g8 z$AyVF^v4614YN{O&ZkYLV)9!!Uie^A^aT!~#hTpvbL`3d5D*@la)PaJxkcP??BPG= z2YDito?+>aamEWF<~B$(QyIQ4)2x+k7p()ReXp9U*MjkVn(ea zCm8d8!^p$BV{bC!4s^-I?-_p2bbw}x^dWxpbpG`5U^aIAq@$xXg51~ep9%hh-fVcz zHr&X6^Wc9~7yfZJoNrYMwNW*zlPbBZRq!u59aJ!%K7!x85}vXd0 zXodg5H1Av0iNG-;txZ^!041I>Uvu59b~kV~Y|@=dFzXUoz@%aJERrqgz^P8Cc1C0a zJxaB^RfB3rvPErEB4TwqAbwU>FIZamjeF4OL?pm z>_zQja;SU31Mw_nqT@yTs>;*J()&4j7AbgGn?uJWX> zNpmAptYAcw~LWD4HfQnJbHnnT|>8<;*Y-i!zQppa*vJEk>EvJT#P z$*@=|7hv0e^{Zie&eppx)ufSq$pFVn!OuAYh@D`3PNquF{~-<@{m#D7i<1^?7Oijg zx|L3+C_7#4`mDgT>L9b`s5)Mf@)oTdm>cY*o zE)Gy+jretaE?au0lGJ0lxS}t|fR^gY9=_G+@@5-<#O%@b4}C7rzu2@4n&PSog-WU)Eq zXL#@kDe!-m0j09&)V%FFBjk%-duDgYPNi;Yk`kxIbDg)@tc-LtOW>^_6e+X-Ct+bj zwiw@k?RQ8dyl@nW^u}L3;#)OzkQ!&llZa&vvvkSCCL!d%*K!!9OW9CJR&n!P0M{`9 zX1@b~;%lkx3uF5STA!;t`*>vxgf-tVCThM59F}c8GlloDhyt1|0u&tIR%J>Hz`of~ z^uTwHos_=G93)*W;0d{M;E~c7-aSAFufmFd@E1>ghKAjr;B#Xd+IYk-@;|M9|4xZo z1BzST0KQE2MQd8Sy_H_SnOMW_52ZQ|syM6mtJ*i_5GLMwl5ewrNhGXp^$WdU^d;fg zodLRrSHGxFO0g#qneWG!KhV7#&71Z&rBQK~Y@-mvSb5BaH^DAoKod&o@AmEY{4F$p z8tFMpuU17Ou46n67CvnnISy!l#DFW@;MNe2SM$1fj*I_)1w8~R3p5eKpYZ#;b&JnW*8mOcZsMEC@cBpz z4iyfH9$T6d?~lMy0u*UchgS$Z@qIHlnCFsrOPtU z?2-yy=SjtJA^8nRemOPK891If_d?>>?f0IeiR{*C?>Tcv(Mq_h6~kuk@k32#IAxe{ z4R2eD3^54Mj~}qYhabSX(LOHK6D+n3ln(sMC>`{m?cv1g9&YgqRXqBCjqHp$gub%s zb=cmppv&qkZQ!wikE0)p!REx9WwTkCVaeGHcEa)!9GspQ!wwfVi_eDTCt&-NfMw&( zviPbjVZ)F#Wh60r3`44Cg&vGLyA~o3C|w;|k4#Z88F~_rbHrV5sZ>RFwM)fKYd*M3 zvQdy=yiH{IY9yxO8|$%ugYz#t!LQrvZ$gqB2mgf!oI$+X%HOB*aG2Rt9lK5+w&ot+ zCD0)dZ;yGl^1JD{-Da1AbLeH_8^f;{MHUg_OC`9yym(D4AQ^-Uq>|85=>`0O0*{zd zoRhTnZ?!K7<6Nd0;6pvj9W5l}V@8&|*gN#R4Mm;}*Gz2SbzKa9I1_DALMAq!`?hN{ zn10y9rQmzu`{N(@V(7%SItEt#fdpxGQ-5m-Zpje61Y*rcbvR3~2Hsed>*mlirTtOt zl7k%%?m4$%uY|?}oxODI$Gmjxe>ZM*2cs;cEgmqSt*zTU07ufn=nQz%PY;r`(G1)8 zehX|;59_5~m1Q1(p!5SbZ13~ws3giqLTSisL(LI_V3FjK`9sJ8IFtVmF9W(Mj+Z8b zCjxW0y1Uw|HEZmuHX5zD8ZgrN_5_6Zcb-f-ptdeU?$_n@me%zLY*~nq_V> zGN#o6Xn`pFo9J+i+L#>ZG>vag2d?eB+PWD;dHGNFA)Q=*DrD?b{A1Fv{RS@5MYeAL zVItyqiaW3RprtqH321acU$jPn+vC)eaSuabMdxMlGtY0Y0ztX|Y1JrR3yM{AKg7w~O-1B4?jhn(bhD2qSeDNp7FtRzLt3k3B$?i;qwWO#7@s^eF zp>0#W1MiDBYJxcMjCiE$NqwadZ&4~M^~4q>gK~7q23B1%gd!u*S0h}_w;;trSJ0lT zHCMc9G~)uqUntWyDlDx4TaK z7)9=%U09yQdw_hPecasMZU+z7^Lco}Le|joXI1TqRnS!8p(tD*2g0IuX;CU*fmS6l z2x6sw`O&x(YUyB6KTb?{CaxP{@Bsi4_uzslgH~7vzeLU2XFuf|lBizJku{|%ouLS$ zYF|1mDY8t0f)S9s^eel_VgJC}tFHg!*?KWt^%6JUnelvc9EnVZK{h@mGlg#p?`efG zXBgBUU0Ob=U%%!WWG50vcpD8H3~ht#K*5lI4-t&-cKpS*=)E?CBrdiwIF<~@LOAjT zHaqqLTSB_Qw*HrHs?kWx=QP!yrdIupiDSGcq3N4v z6>SsPxbHYVp8Q~Z#|l15h99t-8-ecTo7n_j`k7(a7#2e}D~c9GQOnMZxw4FBcrd1+f8sXiH(Z$5@zZdOpH8?hQAa*fQ)d zKCha<2&F>-SimWY29f>{24S6q1Q2NtxKF@68;ox1ce_$jyTbQ>fC&Jl`mnSSK1IF5 z#`J{MOThLF7Ar34ciN~O)J|J$oPn}`6GObxk{B3X;?6YDT592o7T6&%N|{`% zOEABj1iR9gFsB{U?0O=US%L-fiop*C+^}daD0Vbdm_er!p3y^`C$`vJ6IX*4kumu| zvDn5TZa4va2nVQUTQjR8CX0k5|-j{(O7f9nfrbI82z1hG^!+@qTlwyQO5 z3sgK4wMLMspUpn%BD7k_piG+tKs|H7S8zh`%x(f=TMaP*u2|NT;boG{%XzU107fPW~g5KC-U`5~N5oW|8C_$a; z$ehlVe-7vdn(8y1gy=^6{PZR`P9juT^o*~mwMgQp#ZCX48ZG4E<3r8;8(ZMT7XdAn zIn?q8p<)FDTYeL4nIl{JD6(aSEtUtMSJw&goH7?=f1R-mzZjj)XVbtf(E3n(@I4?j zw1CMdJVxR$H@}P7UqkHXckv4DZB)c3J~Lgre*^hip~s@fcxzgd#(BLMK@7U5`RYcntp0_fjbzskE%ES)O51f&d8Xevv46;bQF#} zew6Ng3jPidShKf+nYI|-^}_@(fAk6r+Obw7$xpN%LXI|!2MvONtdJ89k>LJ zmYdZok$Rv9K2AixO|;3w<_xF8H3ftTf55=|BQx_Qfe#9yqD!h~90s4>Y2j0}-f!OI zLq6{%Iw}OuLGtPN6LZLENo^FyKzxh8(f%;J=*}d})zD-v(!EgMt0WkeV+p7@{1VVF zP9inhorLY+%byO^tt1uzMza4HOfJp@BpbteiDNKE)08?zz@H5!Jrd&Pw5WhSf9NEo zKcN;s1D!FkeF@{}V)r&81PpsSqFk(Lx}Opk!NRb579t9~&cb!<^sSC%4v|FJ>$w&2 zC=rtA7VHWvAJc+i!QYx*H@pF4F`Lf89b2Gu55l1J0SpRtX}oy}N`4QU>e6|VZ3i>y z;qDG{!UQ^c!VUqcz<8lH4FiBZy1@1Gl7D$}V2VxKHTxK;$K9X+JJ>2`j-l=vJp7F( zgJ@I@Rxox5r$ViPYm@FORq)CZ{fs?3W%K6+b24{gdJOv3NCoMB$F!O(^3LUYC1qSt4*D`|)x;ZHfUpk@{VXs#z^c%%f{iDW*5T7O0g zM<2s`Ak%?rL9))wL&;(}gK7hn%nh`MN98^M?86!v2EPzIyC99js}Q`lJ#?NE$#OnZ;vEhI+8uDLFhkdN z*TE&#~-^ zSnN0m2gV&ruO`M=nMfVd4#cs^6Lgi9fqV*1)JPv7#z-j<+Gr>>ak5(mj7FjX%bD#& z@qrzt%ZxBb(?_EUKGdLVOfk_a;zLKXi36*_>GjAc;tI_s0U3;z4rxLU9e=FPzUdcC z_aUfOj{5+*LBPm?dua3|yV%eRLo+Qb4{>5SKu_IZo}om*LjbIU4Ipwyoz7%T)P;?P zzcl>_T0MGzzwD7(_`yD~(u9W8#V}f=Vvtb>^$va;pYwP$4_q840*)URpyy;|;{x7i zMOOyk2E=b^YZD`1LJ<5`FMsvgM_&i?h4dSZKfxWCYFK}`;1RzQ)@bZnpj?o;v~#+7 z@J@Lwf_fRjCh-we7nik3U!yM?K={EXhSG!K?}x;BYWAS?fY>j-DDBa5o_7ujrg4N1 zdBKViEHTzgWKrp`a9k+`+Wgh&xGGRe8TnIGStL?bbPpHvLBycq7k}!Q7^;vhp#%oz z5i(ostOGgba_zwMSZSa_tcnyP3b>R+y=y47ARV{Qyx#!Uh5upOTyDuC3++O*a@uu# z3#n7lJlfym?b`&`M%i#Q>?g+(NldfGLM&s(I%kRwE$9zc@k4Z}3s&DYfRVAk`1{2~ ztpV6H;M{IE>p**5lz%lni*^cU{5`A2h^}}suxI9o4*T%<4{F0NNs?e9V0VVWKPqIX zq!0aUHpZslU&x&gm;oZ8wwF-ELSiE<`GHU|u`=64gEDYIJ%Oyk@O|{Oc)?ws8!A1d zyut{xw&LIrB9RN%(3v?&iYB2x-+v($N|HjU|C^Or-M8xmO@B~uh`cS-~4 zfUJ@G;xYTwIp`#oCo(F5)#6uz(G64mU>^Y~M|TuKx2Ne;rh-M8l6UFC)Fxo)jd}f) zTlA5nu94V|CKgCzd=&ve!wz=@EaGuOGRMZHKj}<>H=-IcV%o?^aad!HY9x{)5*c^3 z#-y7#W$K^Mqks4*Pp~_}bvHE4aiS$FJZ9p_WJ^f9H19z6yFN*N*QfI}*EW5jipzOe zRp~A$DvsydLS8c+*?r=}1Zz^!vo5V|3-Mt-cnMs+nzDRD8b`5C3u4@FQDqbPK8yal(3tW z1+}rS$FQB7n)6NZLM_94pmTl?V9-Vkb}yNC(ByS@fDoPyH0tuNuw?D{!d!Twr|juMzM@A-5SPog1h<-ZC6mKk!o!^K!4SAv0e-97`!45Usx@HvoNnP9-|5j z+IzcBcB-H>H>F79)FwkhTv?AY*w{;IOM>ghViJx+lMH9*p`F46`4`o25IbR${Vh6tH%7dH}+T8ihcdTa}n=ravmk~*gK2XzDEWn_P zPJhOcZ4Vm-kc1v)vRyx0NJs@}FftEZ})JZDns5_psC2yw&Dc2$4_*?G}z1BPNe zo}gV+A#OA#qiV|hemiJJ<~tR#BaYb~@PCV!=!q4H4bgF6px)CaHpu6=Fsrz-^Q6H- z_Y}~R4cZC=f@E@UACm_PcM*nlF`Tgh>R1WbsDa*sCJNK0@Ei=`AsQ9!M9*O%FKn@C z;cv2nFxk$fq(1afLts?EjaSwp~VJ*?I5qjE@qkmP< z9-|Hc)l@ni?zR&q-x%X55ym4IbugkyNFjjih}&64!3leo*=;Qwm0R(}6t`_FvGwNm zpR00pa^s@T;EJzk%E1ml0}-r*@T@Q~#r(fGqvnDsmjK0=c?o&g`+EnEx27=OIO#Ui zA+&gH7!RhIx&s*#o4m4tNmFeYCx4vlOZ5Lz8bq{hllfrWg%)r89p95U0SdC<5jPBM z79_(t_VgOjGHf=z_`za}>DVG|@Iy14j2SKc3tZ_y$4@|PPnO3GB5ZZPXQIPxq=9SM zAjb!wG}wCJsPOGRaRIK*1w$=kP>Cve3)F{-N(45y*3Azc8n7a2j6@MMH-8q{z11mV zJN$WoUo1(HU4UB%KIkgBPyfAcdM2<2%b&$})90$~m>IiBo74lRptsl5R$yt-nrtX! ziWK(EO5pi}T#u_YBewDtHN!+LCDd6E4^nP;_&uOWTvpwP(p32?x)1LonO_y00Z~=G zc>`bN@M;l2&ZbqMT$^G_6Mu}C}( z2U?@ZlIgJo^rG=GnjrcKPi!tjgy5!YH-^Q0RmnmREPsYx^GwD{P9DIRdwA?iIv$Ec z1JY?(I)?YdsosU*O8q6%2SUaN&u(z_JutjfHM*`GaxmD zD9wmG7$|lZ$&#wON>yDHWnc~#Pliw4VV`WnH^V=`fN%aOJk7swMnrCr%Ui0dDH`yF z?5cV%m&nM-*zyZ>E6J~(LtA%F7FXh!wN!qmVd*D&&+k%skbmB@1eaLN73NM|&aQ>{ z-o7UT;g_rHtr1>VbBgG~F#v7C*LEv9L*?fgF5%CzT3&C*dXC~seiA(-Fp|#%E8CBK2Fxd<+9e;A4%@rW%kO70ZJEDB;FWihUth`K zdIIz~Q6XaSi$xc>CM6htr{1$)Tbr5FtKwHSp@j)E$(PlYCh3`^*X|^qhf;QdZg2Uj zOm3n5PBLz5HSxgSL7>&jO>P?aVzmOL{d;Q%Z|$LfA%E0YX&jP8j{XYfck!YfWFGL{ z@g9o!4cs3TGXCjq`#sBWc~7}2x5g|5&05G;^+h0?MKpSU^<0NgUyk)la?hYj8(QvpE`Aw)M9rxDnA7`)TkjUFHVbaMON9GwbxPVPz53cYkM zR^KI5OG(gzyl{7)L9cEig_Qry+D7Mif*yWqa#Tvzv(hqThKoyBg8u zE_rE^G|bCS#*OyY?A086FArgAUAi5e z*3;XD$>vt?At>iy$8t02-Y{a`_Y%d+6=~#k!l7Qyt$aU1CzX{J#966bT;khPdps&` zCx0J|1fsLkso!^?wPj#S%N+6bVhe#V%)u8*#_CF_NsuwZ7T~vd z$t?jqX(3h#w0fJo#4dfpx|As6E6rNlN@OW{PN+K z$vxBtug<}Deou=){A%t$ZMkSqLXlVXjk(~xLzVAsKps%a#-d&rWeh&FA|7$ zpQvzma><{629JQ?)Gh>g98Z>=I$1tJt;}kgH01}UcTazF8h)2hc!TfCpJd>1GcxdK zM*vmSQO0RxmkF{#-ozZAU$zEBL4O|ego*J$c374*^0KQIj9@f^5a3Blzg^NT?BJ6t z$XU>uV(h7PKuiE7w~&N<9ewS)`BQoVCiBaO(dV8mcdruh0PN@A<5%SN`JMbr9tR)) z>I=6CAu`3cz%=4FOhGYGQ}Y8Q<9{IY{XaaBDS^T)Sk6ONx^~#r2kKJ5hkvwS+ckIq zE*5Y%1`L&ZGjgoJHz2pH44{+G=>DE{<7-Q~c~3X`YLrR{eE>CW*mEXdG`U>7(tKue zO07qXK7#i>wFkh`NnXOWx}6XxKydQ_DDKW1zf(`nH|)VLue`=J`@f951AdbkiEHhd zQr=pX$_OeFGZ|R$@BV7_4S!*;pq~l%kCs7rQo!kB0 z^?D|g!d^NfaoubX0R>B5Ci!FHnvj?0$vI$VP$%eG)C&aG!XiE;@+Ol>0^kxd8vjFXY-m()YdPYIT9hpsOufIFHr~s3?q2QGa%tmB@Z6jw6DN zK>4!4LxnEq&1C>i+i+h!PVR+o>FC?E>YC2M_l35*wIxd6@YgP^jNKc$nGrqNcR(8G z>d_7ZX!26?da2!sb3okDdAhn0$G1m;L5+oFwWgBVPLnUMByy2qrX^f@1)~v}5}-8Z z3>yp1!8v+K4a1Eej(>-oH8UB%2I_kB>b4#$L zAc+wqsOb9s%v=pqI2*IX%OpX28peVGO(@s^PNmnGa7k!8Sbyo`o7q~NVAzL_bHQb- z&Eh#ig+MwjPz&266f0p{@hE@>_(B-2Ibn#v5kv`|%Q>ymB`hkoBY_oWhE(7N(({1n zFC}G2ILTRaQm~(b1OdP!ak5(+d;b%K>_V_SHVc2xldD@e!kLbWScxf!J0p}t z%C!~eu^pcw$2Z$d*5XQRB}~)8E`=yicw#y1L-?ZrzdT-1!~Xe}(r2uCy3~MV6}=RD zfrF#<&V7bGi%oA{M{moLO&EG=U8{Jkl^G%$K>J?(C*~%jQe-IdL6*Qv!?)V zRTc1;x55b?b*54jW+wC@j~9KFTy$`blOc-Xq^uOcnT-u2fq< z_5ge5^%3Wt&%tnW`;$1w#v?*;xA*H-9>Ll=*uX*6PPf7xZ)VptKR+f4u zCx)4D*4!ZY`_k$iH6oZ>n4c2d`;=@T6qoJ7!QmsU5%75ccoAKanw>Mqlr^GqK98t# zQYAjM*M{wn_}-jr$BFpIy2EG#`f;N%w1583;M|Y|c;tMrEDoy>?%FqBTAm5YY$}2rETq;Lg&JF6MEDb;gJz6o(p_fPW!# zK(A6zHv+)H(BNv~$M`U``Y|Uk!W~MIg+v#SU~~jasM>Hb3F*3YLfC{X`v$C|9qP9m z(Ig-hIuM0Y4gj2w1o^U*F@3P`<59_LL@9Id3Liquo=yyQRAMi%HYUv#(FzrGVY~wu z!SFsy>B zd*ys-29819QEO4j{F>*~tfta{<`ZkKHn|eh#`GLs!9m;>2MHLkDAkd_L6M@BR!;2T(9xv6^K?_w;?5eNlI}&`W4UbsiC5{ay2Y)AozG%*0 zXB!337U|g;1xhv1zTMr@s)NtfTR>z4qb_qW7#~22nOTo*WK#^Wj=eY*(Ll~KW1O#- zn2En)Km`ZS5snkYN;J@k?pug3B$@{h))?o5AY9I_9Gu5rD)*l~@Gunu`gqCDV_~(; zzLzeaTVlu&(SSIR_N>s}?th(up6_fa&pT%>wKg^2>;-iXGANi`vW@J|qH#_c)rq1IHE}7)fV;%3fVnT-q0s=oZ3c z-~>g8N$%&pTq$GQihWstlN{}7_i}^DkviK!@T}7Cx4TF)dAu19&yiVKd4E`^( zT>M{DWm}&GK`r6${V*-x|4EjYReJ{iS7nO-mu)Nm&*=ZElAjCuzo!3-4xY=?Dy!w^ z?ks)(Cv{ac5r1b{TU(D7ZQf<_v;4m*smZ*7rphX7aHe@Gf3HjDIcl%WJb4pY1TEHZP^rzI#pgcR7=@sIpwNktGs}6^h7k`D~{Y=iTspL=^Ju6^% z8d8xKMPYrPr)|;5p|;l4pdGa#ay~Uhin?;9*3svpI-7u7s($-FG&O^gDmuwq>{JZ8 zED(ocEMjW-DKi|wRGA!(;#;-fJ*G0lvzV(FWR>lkQodj1mi)*wV(vaNSEI@1ZF&o{ z)s@unIqR_Ru78tl7@3ta8XR+D?u8KR4n7g*OxDzAmJCr}+^`rO0+)>*i15T)ADxF% z>kcok^!TbDVSFCktvkL-)33N$`W=Xz`_*H%f7BkuKHmi$;2`wfCx^`K#;0Zj_$r-K z1NZ_zrKq9gO(~>W1j%=QHCXAiMJv?vvq9ir7*B!oEPwJk&(Dt7u?-j8+ib(t_$sg1 zb8s*rW}&J>MZ>PeQlH^bj0abd<+Oa6*s$=qDRLCCIk|0&8MqUPHm}h00Yn5{VBAGYm5JEH~(Ua+;vkYx_W??C_0cI7~iMv|2 ztihJ4O@DWdpiK*ZnckLUXmb59!(yh@?zlRh!{$)1%(UK-!AX5ju6r+TGks$le{GGb zM4_3rC}|Dq9GAIlvOUxn3HglwX~1XXdD%@N&-xOXPC`I4Iw zNd0}GqK)R1r%Kx+StcY~n_C)|&vR-K%7$xwrGI4cqE%XA%HMNsa<#ehmOWooAsH(6 zFpak?>(tSH6;tGn)tfObRvQbdA7wPOCAa!y|2fIv7#4P%gvXk)J~j@6)$UpAuI}*v zyvXt!SSv&GGELc95$(lVRz=XFxv{kz!U3mF8^?W6a`%cJ6v~Y(t!p~mQsz!cyR;@> zn17Hv!)W1S46rFZ1<=ItPqSt7s!Gw26P6uqeNaCLT6Q$Lc%T_(0b4s)Xf+vMJ-IsW zwDqZ$DXpXA+C`OeK`ptCxJRgS846~NT+Rfk_AN8Yn4hfy6Lo(Mu#(y|iI&J$(`cF!}EuC%42{-~xot+2jIJ1tZ z<9R2it)O+h*EG32%jExg1G2!tyRRbX?)260wlr&NW>#zd4WYuTmWztylu${k^eg}h zuSeju%vgbb_krWB_bbkg>P+`o3t3si%EKnkQGLnNPWi_h^m%cV`9s$^1Wtc&n}05- z{h;0sa^%q2UH&7R^00;vaq*|G3T)^%vL z7h+7^nO}*(wt`%LfZo-P=4R7xeC2{516wV@Q?inQ@rr|ThQn564cwpX8VAHSDUf+3{WmFUHeRg-SLdB-5)77S*vAY|nw``;WUxtWm$ErvfTs8Zy^}k3Q#IID zf2{~^;rEFjPg@Drl7KJ$XLU7+vEA9VCP1Qf$fDvWWI`#$n3zzY4(67c z(58@HEfi{kzUXoyS7EsB#DAz)l{LkSQ4BvlP?}<>fsj?CZSnnh$CSGmGR&>I7xItZ zx)*%{U3cTCXUdi588oC7d6uVd=*T&@h2>zO0vm3-rpkujqgpOgZ-cw5L+(qx#8x>D zlHYy0*FbTOAs?YpA<6k;mG5wWa_e|lAE@|7gL^VL1OfVufj)n8G+xD{Be&|%#v*R={Sv=MG-fKFJUEcV#QSh6knonq zn^+@eV?d&;Z{qLCN;1C!lps|^1{k_QO`=E(aw&z1$(Tv-#}Sw+Qdwry#Iw|ktM`?g zVQtoRI7aUsmnaQPVH)+9TWRL*!zs({*P5}u>03NrVTOHl3d^VgMI+;drIpDtGvZ&r z$c!;dg&jnjsDDmNQe6s48DvFg=tIvWoU$`GP|g|17+$d%P2x%H5UMq!TAIcLcKsRV zu2u@JQn?yOl9GqOuTWzvl3Lw$ec@K)fxTB9cT zwNr+MAJLgJ_f#J-l*n^fIMU~^A0y{jh+m%zw<&=iibxJr_zCCrV1x2lKeRD6DH4kZA_2)O5k2%FajC`5EJ{Gl@cn7}ngya%Z24LE?L>J(+GGrk|&_lSn(v zij2F%wfj4FEDW9YUfC(>Dj8IeJB?b<(<>1TQ`}-pJ)$<4&SO?)*iz|RiKCS_8plrg znOwC`M`Z+|M?3KT237)~DOci;43#Yv{5le^nv zm7Va*fag9?+(}Yga#C5AGJ=@a_6((<6X&x~l8;dE>Fz_boW}?xhFni-!-o<&n=>4# zwX5qC(;scua(lLqF{yYeQ~pjh*ziS@$u+E~k0N})?@ho^Uf4Jn=AlKgFiuLoH@ScE zjDLJPMUiSn<~R{&<;snP8DeV6I5{#D2rzO*N4$z`f*jfBz8Y6MhU$YIF{(exzK_%z z<1&dw)B9x7V9Bv#O^@0eC_?rl($X$y#=5PYTtw~4ueo*{A#kkdSv(sdbO;SsLQ`9+ zKg&U>#WA5Zl&cIvY(fb&Fav0vsLMwmvwxjGu+mzRPK@42!-8k}_Sa?`O+c9@5+LCC zr0?OXZsQXT-sYG?CFQ0YuwE?WEf$@_w7c5$ZeNj5_oVZdI|e*CGcoVX#Bkk!6KljEZ<27hJy z#B~H_ty(+~v8npASv;j$KBt|2ft@(j_G$RF9_NmKU$UCDHq#0K(od=cAf}*E`a;*> zRx0uaePdJ%khYMU8fqs9%L;+EtK8Nt_b3)PR4Z_-T40g9>nOsZ5-#Cj53swwel)4b z;H2?HaRl5GJTv!nv$`L$<3=v-s(;FdLmc3iL!6+rsZxo7v>d-;;&>{1*F-|)6#INf zV|7lqmSS9{jc+qnr}5CXqj#qU$~@u^Lp)$1c9^7vu=+7j8WMh+zQ4!z>erOi{RJ-^ z9fm_PrXVHt@2d&XBX1l$%U~T#*{^?u)$%@DmO2(gkgn01mwr6>(2T{QLVuYo?ONa6 z=l7$u*DY{o8>mdP6hEg;e}dRsxsR)6E~|O6?Ekv-v{+W;GyHJMgA#Z=8zD0xHG!1{ z9b>li9XpJ30~JM&Wjv0kH9G3*TUP{QJ-}R|QFf4ImF3*>?}?8~5M+f+flXUv+dQwU zE|8>d>Y36Xk!q%W(NoO@R)7A79qXg;Pm!fXc^0mA+S@v{QphV0THTJM|BbJLI&_ce zi&QO6u!;B$O3SpcRQ!Qzszcxv!8C&4#mz|Z)fnu>^qZqY9S6#`js?^>{$QMXu(1n? z$M2Zcl6`W#_Epi@*v^X;q223-@U)#BFJkL+?|zMYm2Ho4e|n#R@PAUd;|_x9y|B`{ zba80EhP<-7!`C9Fcf_mo!cmhp(mhp&6CgYqDLuB8i5z8p=9l$-^ZM`K{P3@De)#t{ zum9uC4}bIKhktwX`t_UF|M=$hf4+JB-)~<3<(t3wr#CyLfD!QGzr$Bj{Gz~a zqd{M+R#*B5X}on~lz${uc-Zv@xJ8G}1xRxxPy0h#?yWcHC3tgHed4&#(&dUl5OnJD zEqg@OFCNm&Svg|{tz{{D38vG!HI3mjbXe1M&!%lk&7Q%c#_|RCS`DvdY#cPk(9%jw zX5y%BX=C~jzxmT!-8i0^X9DY^gTX%P(df({;DI%P5-Tj(m)t}Jv5RVz-Ic!$fWX3aiYm8@N=1xr}F z-vnz|JKuOEtbf@@w}v%-a?cg7el>myJmprf9y%F9ZG=i%Ti*rVU{$T*L*N-!(pr27 znlZ{-#4q*xWv}%&fsU*i*!s^{0c>i5J28?E6pCh~;sQI9Zw`l{ zF-5hH0BIAe#eFCqNgteCKQxnH<@=__5-t>eb2BfhoPR=Ih~O44Ic{=Vh5D0sBOJpz z{&^E6$WZ~x?XU?TbWqq=r8jc#?}Tieyy57P9Z$PdUgun2q|Kbv=CE9n>6}hjD@4}m z$cE9P=vG{Om;k--A5=-51Z)?`_n2?3cm}+ zCKF&{Re$yo7i#R>T#4(O3bp%8HFHx@-{}S2pS-hku}i_5z`ru7^0Xo!I>Ju7*-T?) zkCi(jZ?25aN7aSphsQPz$KW*KS-#<%E>*Bs&OT+qlwcNB;7+9yKiVP2sUowl+{z3N0-y<4XzcJSUpp(+>u{uhR%$nEUflSL0oqRq(%Wm9rUYMm0#&EqW z^iEQ`zDg#;Ji_3Sj;XHealwN(B(t6i<;qo~Lzo`pRd0du#>Rr+-8ljoc5-*q*V`LUCY^ z6t0C3)na34!97H5-ZBx7LlpaHu7Y~OG0Z?sr1otSX-FGv`1LTin3YDrbRi(CbmaBu zkkWV9ywg>zQy}Y9m3++{K5)CVNZ>K#z9XHb?dcT#Z1=j1Qo2Sd<)}P!;hRWQG zNw`#0QdeQ>CZZiGDk*KxL44(6+X4g(WF1Z8(V$XJ)F@+!drhpu{GLlC6_2V)gJMCy zr^ITP_Kw38IV>DVq*00rO@F?ccxDZ%o(G+2{+(!jCXGE)>w$|6UAUCtB#x&v|)l=PIw>OC1++Y0C2!^9eI+ba~ChQtK+s>hk7z zsofCu!K-d{r?t?w3Gc9+!53RQvI^X^5vPCz#%|M5UUniuD}|$)zkiUCqeP%}?CRGA zGyeMH`=11tO-0D$aqIyDO^ayJ*gNMMS=cw~J2k?ml%EP#%Hoo~Q^aRrO^m+db}Uto zS-sMzQt5#{b{~LYltLZ@(dfC2RrT>skFeW=hceJGGY)lGhOs&5KyvhTR|7PcC}JM} zfdF{)fYaj{#Y8~v%6~!894?kLS_92;OR2JDCtqw{Sf1%R1BXWpp|EgH=Dl?#va;OO zbkvQWc#SJuM{PkFNO8O|VkzrvRAPaP2cxzU6~-#ky5pi>Q=55v0urr`xtS-q%;YRf zr--&W$jDr2h)43O8Is3EFlVtJ!^q-zF)O!vw)$1wvB`x2NPo3xb)nO}_N~<`?Y}^+ z(j#c^S*3+|=&W+R2Xv?4fHn7A;yO?uq1zgY-yi<|LFihV9H^i2 z*JrNhsf&-lr+(46MaN|zMxFow0*t0e$N0#u(!U>CF8mb zrsrx*QRXA^FO`CXIRbg7RDtXxTRx&LEmJu3Ar;nY59G$W%u)}d(%ma&^u^>wZ;xS` zCb#eX4caRW?Uy(1SNv=|BsdWpD~awvZ&i`)z4yc3qd^pn zJbj0^v=v4@M4}exw#j*JoorvIai11;)@71&9a`tL*xw};0o}1ar`BLA8e>%VZZa%-l z%kYQ{FHZFi{(f)lO@?5MxbJ>I>qSYkON9^*y8E75e0-WaZeHZgyO2B)RSLqR^Qph541X-aiBD}2!fc$;_CV7>3+i}Ee75O zaXDWn>)moYznxqz&NnLw3WZRae}9c2ng8|2fB4%!{`22Czspw_7t48aF<;KUhu@dW zg?T@0*E+{z_(NLn**p6tAt+Aj|u%7`*G`1gEoO&~d1+XYTx;VAW^bji~!6L}C&kHyr z^a}lEcSY-bF@L$h(gWhBOD|&Ypgn4^u#gu=oU9e)oIsWbHh25v?&e$^b<6o?b_KXm zvJ2O-0m(U~`|9U&$%9a}CV$31#;(ddt%;F!_3S!X0<-u{?UABqH~lNX0*o}h2b= z#Jc+w)VJjpelUBLYza$@AQf*XpFe!SQ{1KAJ`QILQ67p`vy_UCQ@a44cs1Cems5X8 zhxcbf&q1(V|KORP;$!c}uY^rDUvEFcg|R-|K6z~a^4R|6iT%qH`LQq?Ya4SFj;p}H0 iZO=E0_4Utx_R-VT#rNXB7uT1|pZ_l!eG0rmMF;>lPSB+Q From 150aea653f35ed1960aaa9a1152e979a2f0810a7 Mon Sep 17 00:00:00 2001 From: vector76 Date: Mon, 14 Aug 2023 23:55:42 -0500 Subject: [PATCH 121/212] Fixes possible deadlock when pollLine grabs mutex and autoreport finds queue full --- FluidNC/src/Serial.cpp | 49 +++++++++++++++++++++++------------------- FluidNC/src/Serial.h | 3 ++- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 9b9348e14..826f07990 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -60,7 +60,8 @@ #include #include // portMUX_TYPE, TaskHandle_T -std::mutex AllChannels::_mutex; +std::mutex AllChannels::_mutex_general; +std::mutex AllChannels::_mutex_pollLine; static TaskHandle_t channelCheckTaskHandle = 0; @@ -195,73 +196,77 @@ void AllChannels::kill(Channel* channel) { } void AllChannels::registration(Channel* channel) { - _mutex.lock(); + _mutex_general.lock(); + _mutex_pollLine.lock(); _channelq.push_back(channel); - _mutex.unlock(); + _mutex_pollLine.unlock(); + _mutex_general.unlock(); } void AllChannels::deregistration(Channel* channel) { - _mutex.lock(); + _mutex_general.lock(); + _mutex_pollLine.lock(); if (channel == _lastChannel) { _lastChannel = nullptr; } _channelq.erase(std::remove(_channelq.begin(), _channelq.end(), channel), _channelq.end()); - _mutex.unlock(); + _mutex_pollLine.unlock(); + _mutex_general.unlock(); } void AllChannels::listChannels(Channel& out) { - _mutex.lock(); + _mutex_general.lock(); std::string retval; for (auto channel : _channelq) { log_to(out, channel->name()); } - _mutex.unlock(); + _mutex_general.unlock(); } void AllChannels::flushRx() { - _mutex.lock(); + _mutex_general.lock(); for (auto channel : _channelq) { channel->flushRx(); } - _mutex.unlock(); + _mutex_general.unlock(); } size_t AllChannels::write(uint8_t data) { - _mutex.lock(); + _mutex_general.lock(); for (auto channel : _channelq) { channel->write(data); } - _mutex.unlock(); + _mutex_general.unlock(); return 1; } void AllChannels::notifyWco(void) { - _mutex.lock(); + _mutex_general.lock(); for (auto channel : _channelq) { channel->notifyWco(); } - _mutex.unlock(); + _mutex_general.unlock(); } void AllChannels::notifyNgc(CoordIndex coord) { - _mutex.lock(); + _mutex_general.lock(); for (auto channel : _channelq) { channel->notifyNgc(coord); } - _mutex.unlock(); + _mutex_general.unlock(); } void AllChannels::stopJob() { - _mutex.lock(); + _mutex_general.lock(); for (auto channel : _channelq) { channel->stopJob(); } - _mutex.unlock(); + _mutex_general.unlock(); } size_t AllChannels::write(const uint8_t* buffer, size_t length) { - _mutex.lock(); + _mutex_general.lock(); for (auto channel : _channelq) { channel->write(buffer, length); } - _mutex.unlock(); + _mutex_general.unlock(); return length; } Channel* AllChannels::pollLine(char* line) { @@ -274,17 +279,17 @@ Channel* AllChannels::pollLine(char* line) { // To avoid starving other channels when one has a lot // of traffic, we poll the other channels before the last // one that returned a line. - _mutex.lock(); + _mutex_pollLine.lock(); for (auto channel : _channelq) { // Skip the last channel in the loop if (channel != _lastChannel && channel->pollLine(line)) { _lastChannel = channel; - _mutex.unlock(); + _mutex_pollLine.unlock(); return _lastChannel; } } - _mutex.unlock(); + _mutex_pollLine.unlock(); // If no other channel returned a line, try the last one if (_lastChannel && _lastChannel->pollLine(line)) { return _lastChannel; diff --git a/FluidNC/src/Serial.h b/FluidNC/src/Serial.h index b558953f4..87224109f 100644 --- a/FluidNC/src/Serial.h +++ b/FluidNC/src/Serial.h @@ -76,7 +76,8 @@ class AllChannels : public Channel { Channel* _lastChannel = nullptr; xQueueHandle _killQueue; - static std::mutex _mutex; + static std::mutex _mutex_general; + static std::mutex _mutex_pollLine; public: AllChannels() : Channel("all") { _killQueue = xQueueCreate(3, sizeof(Channel*)); } From 026be240225fb7215037dc7aabcf4f53b38cbba9 Mon Sep 17 00:00:00 2001 From: vector76 Date: Tue, 15 Aug 2023 00:12:30 -0500 Subject: [PATCH 122/212] Uniform (and not redundant) treatment of "0x" with to_hex() --- FluidNC/src/Motors/Dynamixel2.cpp | 2 +- FluidNC/src/NutsBolts.cpp | 2 +- FluidNC/src/OLED.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Motors/Dynamixel2.cpp b/FluidNC/src/Motors/Dynamixel2.cpp index ac573b4b7..4ad65bd61 100644 --- a/FluidNC/src/Motors/Dynamixel2.cpp +++ b/FluidNC/src/Motors/Dynamixel2.cpp @@ -97,7 +97,7 @@ namespace MotorDrivers { } else { msg += " M/N " + std::to_string(model_num); } - log_info(msg << " F/W Rev " << to_hex(fw_rev)); + log_info(msg << " F/W Rev 0x" << to_hex(fw_rev)); } else { log_warn(axisName() << " Ping failed"); return false; diff --git a/FluidNC/src/NutsBolts.cpp b/FluidNC/src/NutsBolts.cpp index ac5070779..16a45e823 100644 --- a/FluidNC/src/NutsBolts.cpp +++ b/FluidNC/src/NutsBolts.cpp @@ -217,7 +217,7 @@ bool multiple_bits_set(uint32_t val) { const char* to_hex(uint32_t n) { static char hexstr[12]; - snprintf(hexstr, 11, "0x%x", n); + snprintf(hexstr, 11, "%x", n); return hexstr; } diff --git a/FluidNC/src/OLED.cpp b/FluidNC/src/OLED.cpp index aa2d377d4..751b59dc3 100644 --- a/FluidNC/src/OLED.cpp +++ b/FluidNC/src/OLED.cpp @@ -67,7 +67,7 @@ void OLED::init() { if (_error) { return; } - log_info("OLED I2C address:" << to_hex(_address) << " width: " << _width << " height: " << _height); + log_info("OLED I2C address: 0x" << to_hex(_address) << " width: " << _width << " height: " << _height); _oled = new SSD1306_I2C(_address, _geometry, config->_i2c[_i2c_num], 400000); _oled->init(); From 128076b6f8681f1e9ea378d754bfb4e16a50d520 Mon Sep 17 00:00:00 2001 From: vector76 Date: Tue, 15 Aug 2023 00:21:56 -0500 Subject: [PATCH 123/212] Raising priority of i2s task prevents main task time-slicing in --- FluidNC/src/I2SOut.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/I2SOut.cpp b/FluidNC/src/I2SOut.cpp index 3cf336f0a..088fc9c41 100644 --- a/FluidNC/src/I2SOut.cpp +++ b/FluidNC/src/I2SOut.cpp @@ -887,7 +887,7 @@ int i2s_out_init(i2s_out_init_t& init_param) { "I2SOutTask", 4096, NULL, - 1, + 2, nullptr, CONFIG_ARDUINO_RUNNING_CORE // must run the task on same core ); From 3876da01d40663b9f47dc57794d927bc11c529ea Mon Sep 17 00:00:00 2001 From: vector76 Date: Tue, 15 Aug 2023 01:11:03 -0500 Subject: [PATCH 124/212] Reversed convention so to_hex has "0x" and caller should not have "0x" --- FluidNC/esp32/sdspi.cpp | 2 +- FluidNC/esp32/tmc_spi.cpp | 4 ++-- FluidNC/src/Motors/Dynamixel2.cpp | 2 +- FluidNC/src/Motors/TMC2209Driver.cpp | 14 +++++++------- FluidNC/src/Motors/TMC5160Driver.cpp | 14 +++++++------- FluidNC/src/Motors/TrinamicBase.cpp | 2 +- FluidNC/src/NutsBolts.cpp | 2 +- FluidNC/src/OLED.cpp | 2 +- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/FluidNC/esp32/sdspi.cpp b/FluidNC/esp32/sdspi.cpp index dc507702f..c33f5cf8d 100644 --- a/FluidNC/esp32/sdspi.cpp +++ b/FluidNC/esp32/sdspi.cpp @@ -12,7 +12,7 @@ #define CHECK_EXECUTE_RESULT(err, str) \ do { \ if ((err) != ESP_OK) { \ - log_error(str << " code 0x" << to_hex(err)); \ + log_error(str << " code " << to_hex(err)); \ goto cleanup; \ } \ } while (0) diff --git a/FluidNC/esp32/tmc_spi.cpp b/FluidNC/esp32/tmc_spi.cpp index d0b700d4f..90cf4a056 100644 --- a/FluidNC/esp32/tmc_spi.cpp +++ b/FluidNC/esp32/tmc_spi.cpp @@ -43,7 +43,7 @@ // This is executed in the object context so it has access to class // data such as the CS pin that switchCSpin() uses void TMC2130Stepper::write(uint8_t reg, uint32_t data) { - log_verbose("TMC reg 0x" << to_hex(reg) << " write 0x" << to_hex(data)); + log_verbose("TMC reg " << to_hex(reg) << " write " << to_hex(data)); tmc_spi_bus_setup(); switchCSpin(0); @@ -88,7 +88,7 @@ uint32_t TMC2130Stepper::read(uint8_t reg) { data += (uint32_t)in[dummy_in_bytes + 4]; switchCSpin(1); - log_verbose("TMC reg 0x" << to_hex(reg) << " read 0x" << to_hex(data) << " status 0x" << to_hex(status)); + log_verbose("TMC reg " << to_hex(reg) << " read " << to_hex(data) << " status " << to_hex(status)); return data; } diff --git a/FluidNC/src/Motors/Dynamixel2.cpp b/FluidNC/src/Motors/Dynamixel2.cpp index 4ad65bd61..ac573b4b7 100644 --- a/FluidNC/src/Motors/Dynamixel2.cpp +++ b/FluidNC/src/Motors/Dynamixel2.cpp @@ -97,7 +97,7 @@ namespace MotorDrivers { } else { msg += " M/N " + std::to_string(model_num); } - log_info(msg << " F/W Rev 0x" << to_hex(fw_rev)); + log_info(msg << " F/W Rev " << to_hex(fw_rev)); } else { log_warn(axisName() << " Ping failed"); return false; diff --git a/FluidNC/src/Motors/TMC2209Driver.cpp b/FluidNC/src/Motors/TMC2209Driver.cpp index 4cbe61070..cb87bd18e 100644 --- a/FluidNC/src/Motors/TMC2209Driver.cpp +++ b/FluidNC/src/Motors/TMC2209Driver.cpp @@ -80,13 +80,13 @@ namespace MotorDrivers { } // dump the registers. This is helpful for people migrating to the Pro version - log_verbose("CHOPCONF: 0x" << to_hex(tmc2209->CHOPCONF())); - log_verbose("COOLCONF: 0x" << to_hex(tmc2209->COOLCONF())); - log_verbose("TPWMTHRS: 0x" << to_hex(tmc2209->TPWMTHRS())); - log_verbose("TCOOLTHRS: 0x" << to_hex(tmc2209->TCOOLTHRS())); - log_verbose("GCONF: 0x" << to_hex(tmc2209->GCONF())); - log_verbose("PWMCONF: 0x" << to_hex(tmc2209->PWMCONF())); - log_verbose("IHOLD_IRUN: 0x" << to_hex(tmc2209->IHOLD_IRUN())); + log_verbose("CHOPCONF: " << to_hex(tmc2209->CHOPCONF())); + log_verbose("COOLCONF: " << to_hex(tmc2209->COOLCONF())); + log_verbose("TPWMTHRS: " << to_hex(tmc2209->TPWMTHRS())); + log_verbose("TCOOLTHRS: " << to_hex(tmc2209->TCOOLTHRS())); + log_verbose("GCONF: " << to_hex(tmc2209->GCONF())); + log_verbose("PWMCONF: " << to_hex(tmc2209->PWMCONF())); + log_verbose("IHOLD_IRUN: " << to_hex(tmc2209->IHOLD_IRUN())); _cs_pin.synchronousWrite(false); } diff --git a/FluidNC/src/Motors/TMC5160Driver.cpp b/FluidNC/src/Motors/TMC5160Driver.cpp index c6daeade8..8a05b116b 100644 --- a/FluidNC/src/Motors/TMC5160Driver.cpp +++ b/FluidNC/src/Motors/TMC5160Driver.cpp @@ -80,13 +80,13 @@ namespace MotorDrivers { } } // dump the registers. This is helpful for people migrating to the Pro version - log_verbose("CHOPCONF: 0x" << to_hex(tmc5160->CHOPCONF())); - log_verbose("COOLCONF: 0x" << to_hex(tmc5160->COOLCONF())); - log_verbose("THIGH: 0x" << to_hex(tmc5160->THIGH())); - log_verbose("TCOOLTHRS: 0x" << to_hex(tmc5160->TCOOLTHRS())); - log_verbose("GCONF: 0x" << to_hex(tmc5160->GCONF())); - log_verbose("PWMCONF: 0x" << to_hex(tmc5160->PWMCONF())); - log_verbose("IHOLD_IRUN: 0x" << to_hex(tmc5160->IHOLD_IRUN())); + log_verbose("CHOPCONF: " << to_hex(tmc5160->CHOPCONF())); + log_verbose("COOLCONF: " << to_hex(tmc5160->COOLCONF())); + log_verbose("THIGH: " << to_hex(tmc5160->THIGH())); + log_verbose("TCOOLTHRS: " << to_hex(tmc5160->TCOOLTHRS())); + log_verbose("GCONF: " << to_hex(tmc5160->GCONF())); + log_verbose("PWMCONF: " << to_hex(tmc5160->PWMCONF())); + log_verbose("IHOLD_IRUN: " << to_hex(tmc5160->IHOLD_IRUN())); } // Report diagnostic and tuning info diff --git a/FluidNC/src/Motors/TrinamicBase.cpp b/FluidNC/src/Motors/TrinamicBase.cpp index ba6324600..fdf138206 100644 --- a/FluidNC/src/Motors/TrinamicBase.cpp +++ b/FluidNC/src/Motors/TrinamicBase.cpp @@ -106,7 +106,7 @@ namespace MotorDrivers { bool TrinamicBase::checkVersion(uint8_t expected, uint8_t got) { if (expected != got) { - log_error(axisName() << " TMC driver not detected - expected 0x" << to_hex(expected) << " got 0x" << to_hex(got)); + log_error(axisName() << " TMC driver not detected - expected " << to_hex(expected) << " got " << to_hex(got)); return false; } log_info(axisName() << " driver test passed"); diff --git a/FluidNC/src/NutsBolts.cpp b/FluidNC/src/NutsBolts.cpp index 16a45e823..ac5070779 100644 --- a/FluidNC/src/NutsBolts.cpp +++ b/FluidNC/src/NutsBolts.cpp @@ -217,7 +217,7 @@ bool multiple_bits_set(uint32_t val) { const char* to_hex(uint32_t n) { static char hexstr[12]; - snprintf(hexstr, 11, "%x", n); + snprintf(hexstr, 11, "0x%x", n); return hexstr; } diff --git a/FluidNC/src/OLED.cpp b/FluidNC/src/OLED.cpp index 751b59dc3..886631064 100644 --- a/FluidNC/src/OLED.cpp +++ b/FluidNC/src/OLED.cpp @@ -67,7 +67,7 @@ void OLED::init() { if (_error) { return; } - log_info("OLED I2C address: 0x" << to_hex(_address) << " width: " << _width << " height: " << _height); + log_info("OLED I2C address: " << to_hex(_address) << " width: " << _width << " height: " << _height); _oled = new SSD1306_I2C(_address, _geometry, config->_i2c[_i2c_num], 400000); _oled->init(); From 715a092332e811bf50e5ed0f54970cdd8aecfa59 Mon Sep 17 00:00:00 2001 From: vector76 Date: Tue, 15 Aug 2023 01:12:29 -0500 Subject: [PATCH 125/212] Whoops, missed one --- FluidNC/src/Motors/TrinamicBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/Motors/TrinamicBase.cpp b/FluidNC/src/Motors/TrinamicBase.cpp index fdf138206..356ebb7ee 100644 --- a/FluidNC/src/Motors/TrinamicBase.cpp +++ b/FluidNC/src/Motors/TrinamicBase.cpp @@ -146,7 +146,7 @@ namespace MotorDrivers { // Display the stepper library version message once, before the first // TMC config message. if (_instances.empty()) { - log_debug("TMCStepper Library Ver. 0x" << to_hex(TMCSTEPPER_VERSION)); + log_debug("TMCStepper Library Ver. " << to_hex(TMCSTEPPER_VERSION)); auto timer = xTimerCreate("Stallguard", 200, true, nullptr, read_sg); // Timer failure is not fatal because you can still use the system if (!timer) { From 90f2be245a890eed81c1481cf76a75b6b20f87b2 Mon Sep 17 00:00:00 2001 From: vector76 Date: Tue, 15 Aug 2023 10:50:35 -0500 Subject: [PATCH 126/212] Breaks the vicious cycle where reporting low memory can trigger more reporting --- FluidNC/src/Protocol.cpp | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 62af92dee..7a1002cd1 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -240,6 +240,8 @@ static void check_startup_state() {} const uint32_t heapWarnThreshold = 15000; uint32_t heapLowWater = UINT_MAX; +uint32_t heapLowWaterReported = UINT_MAX; +int32_t heapLowWaterReportTime = 0; void protocol_main_loop() { start_polling(); @@ -290,8 +292,20 @@ void protocol_main_loop() { uint32_t newHeapSize = xPortGetFreeHeapSize(); if (newHeapSize < heapLowWater) { heapLowWater = newHeapSize; - if (heapLowWater < heapWarnThreshold) { + } + // Consider reporting when the minimum has not yet been reported and it is low enough. + if (heapLowWater < heapLowWaterReported && heapLowWater < heapWarnThreshold) { + // typecast to uint32_t handles roll-over for this case + uint32_t ticksSinceReported = (getCpuTicks() - heapLowWaterReportTime); + uint32_t tickLimit = usToCpuTicks(200000); + // Report only if it has been a while since the last report or if the memory has + // dropped significantly (2k bytes) since the last report. + // This prevents a cycle where the reporting itself consumes some heap and triggers another + // report, but the true minimum is reported eventually, and large drops are reported immediately. + if ((heapLowWater < heapLowWaterReported - 2048) || (ticksSinceReported > tickLimit)) { log_warn("Low memory: " << heapLowWater << " bytes"); + heapLowWaterReported = heapLowWater; + heapLowWaterReportTime = getCpuTicks(); } } } From 6d2e398f5b8f204cd81e44153fc0949126b1eb28 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 16 Aug 2023 11:44:53 -1000 Subject: [PATCH 127/212] Fixed crash caused by ! then CTRL-X, especially during an arc There were two problems. The first was that, after the reset, the arc calculation code was still trying to send more segments. The second was that the file input channel was closed, but the line processing code was trying to send an ack to it. --- FluidNC/src/I2SOut.cpp | 2 +- FluidNC/src/InputFile.cpp | 1 + FluidNC/src/Main.cpp | 1 + FluidNC/src/Protocol.cpp | 29 ++++++++++++++++------------- FluidNC/src/System.cpp | 2 ++ 5 files changed, 21 insertions(+), 14 deletions(-) diff --git a/FluidNC/src/I2SOut.cpp b/FluidNC/src/I2SOut.cpp index 088fc9c41..d94480f64 100644 --- a/FluidNC/src/I2SOut.cpp +++ b/FluidNC/src/I2SOut.cpp @@ -887,7 +887,7 @@ int i2s_out_init(i2s_out_init_t& init_param) { "I2SOutTask", 4096, NULL, - 2, + 3, nullptr, CONFIG_ARDUINO_RUNNING_CORE // must run the task on same core ); diff --git a/FluidNC/src/InputFile.cpp b/FluidNC/src/InputFile.cpp index 99f974a02..7878e8956 100644 --- a/FluidNC/src/InputFile.cpp +++ b/FluidNC/src/InputFile.cpp @@ -88,6 +88,7 @@ void InputFile::stopJob() { //Report print stopped _notifyf("File print canceled", "Reset during file job at line: %d", getLineNumber()); log_info("Reset during file job at line: " << getLineNumber()); + _progress = ""; allChannels.kill(this); } diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index 0035bf71b..6da6ed47e 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -138,6 +138,7 @@ void setup() { } void loop() { + vTaskPrioritySet(NULL, 2); static int tries = 0; try { // Start the main loop. Processes program inputs and executes them. diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 7a1002cd1..296989c8b 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -156,8 +156,9 @@ void send_line(Channel& channel, const std::string& line) { void output_loop(void* unused) { while (true) { + // Block until a message is received LogMessage message; - if (xQueueReceive(message_queue, &message, 0)) { + if (xQueueReceive(message_queue, &message, portMAX_DELAY)) { if (message.isString) { std::string* s = static_cast(message.line); message.channel->println(s->c_str()); @@ -167,7 +168,6 @@ void output_loop(void* unused) { message.channel->println(cp); } } - vTaskDelay(0); } } @@ -222,7 +222,7 @@ void start_polling() { 16000, // 8192, // size of task stack 0, // parameters - 1, // priority + 2, // priority &outputTask, // task handle SUPPORT_TASK_CORE // core ); @@ -239,9 +239,9 @@ static void check_startup_state() {} const uint32_t heapWarnThreshold = 15000; -uint32_t heapLowWater = UINT_MAX; -uint32_t heapLowWaterReported = UINT_MAX; -int32_t heapLowWaterReportTime = 0; +uint32_t heapLowWater = UINT_MAX; +uint32_t heapLowWaterReported = UINT_MAX; +int32_t heapLowWaterReportTime = 0; void protocol_main_loop() { start_polling(); @@ -259,7 +259,10 @@ void protocol_main_loop() { Error status_code = execute_line(activeLine, *activeChannel, WebUI::AuthenticationLevel::LEVEL_GUEST); // Tell the channel that the line has been processed. - activeChannel->ack(status_code); + // If the line was aborted, the channel could be invalid + if (!sys.abort) { + activeChannel->ack(status_code); + } // Tell the input polling task that the line has been processed, // so it can give us another one when available @@ -270,8 +273,7 @@ void protocol_main_loop() { protocol_auto_cycle_start(); protocol_execute_realtime(); // Runtime command check point. if (sys.abort) { - stop_polling(); - return; // Bail to main() program loop to reset system. + sys.abort = false; } // check to see if we should disable the stepper drivers @@ -297,14 +299,14 @@ void protocol_main_loop() { if (heapLowWater < heapLowWaterReported && heapLowWater < heapWarnThreshold) { // typecast to uint32_t handles roll-over for this case uint32_t ticksSinceReported = (getCpuTicks() - heapLowWaterReportTime); - uint32_t tickLimit = usToCpuTicks(200000); - // Report only if it has been a while since the last report or if the memory has + uint32_t tickLimit = usToCpuTicks(200000); + // Report only if it has been a while since the last report or if the memory has // dropped significantly (2k bytes) since the last report. - // This prevents a cycle where the reporting itself consumes some heap and triggers another + // This prevents a cycle where the reporting itself consumes some heap and triggers another // report, but the true minimum is reported eventually, and large drops are reported immediately. if ((heapLowWater < heapLowWaterReported - 2048) || (ticksSinceReported > tickLimit)) { log_warn("Low memory: " << heapLowWater << " bytes"); - heapLowWaterReported = heapLowWater; + heapLowWaterReported = heapLowWater; heapLowWaterReportTime = getCpuTicks(); } } @@ -809,6 +811,7 @@ static void protocol_do_late_reset() { // do we need to stop a running file job? allChannels.stopJob(); + sys.abort = true; } void protocol_exec_rt_system() { diff --git a/FluidNC/src/System.cpp b/FluidNC/src/System.cpp index cc97938db..de7b57f2c 100644 --- a/FluidNC/src/System.cpp +++ b/FluidNC/src/System.cpp @@ -21,8 +21,10 @@ int32_t probe_steps[MAX_N_AXIS]; // Last probe position in steps. void system_reset() { // Reset system variables. State prior_state = sys.state; + bool prior_abort = sys.abort; memset(&sys, 0, sizeof(system_t)); // Clear system struct variable. sys.state = prior_state; + sys.abort = prior_abort; sys.f_override = FeedOverride::Default; // Set to 100% sys.r_override = RapidOverride::Default; // Set to 100% sys.spindle_speed_ovr = SpindleSpeedOverride::Default; // Set to 100% From 26066b895c25d0e32914df92983e7d46a7b82e9a Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 16 Aug 2023 12:00:52 -1000 Subject: [PATCH 128/212] Cancel kinematics segment generation on sys.abort --- FluidNC/src/Kinematics/ParallelDelta.cpp | 11 +++++++---- FluidNC/src/Kinematics/WallPlotter.cpp | 3 +++ FluidNC/src/MotionControl.h | 6 ------ 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/FluidNC/src/Kinematics/ParallelDelta.cpp b/FluidNC/src/Kinematics/ParallelDelta.cpp index 7d24d6f52..f365d7942 100644 --- a/FluidNC/src/Kinematics/ParallelDelta.cpp +++ b/FluidNC/src/Kinematics/ParallelDelta.cpp @@ -60,10 +60,10 @@ namespace Kinematics { const float tan30 = 1.0 / sqrt3; // the geometry of the delta - float rf; // radius of the fixed side (length of motor cranks) - float re; // radius of end effector side (length of linkages) - float f; // sized of fixed side triangel - float e; // size of end effector side triangle + float rf; // radius of the fixed side (length of motor cranks) + float re; // radius of end effector side (length of linkages) + float f; // sized of fixed side triangel + float e; // size of end effector side triangle static float last_angle[MAX_N_AXIS] = { 0.0 }; // A place to save the previous motor angles for distance/feed rate calcs static float last_cartesian[MAX_N_AXIS] = { 0.0 }; // A place to save the previous motor angles for distance/feed rate calcs @@ -196,6 +196,9 @@ namespace Kinematics { float segment_dist = dist / ((float)segment_count); // distance of each segment...will be used for feedrate conversion for (uint32_t segment = 1; segment <= segment_count; segment++) { + if (sys.abort) { + return true; + } //log_debug("Segment:" << segment << " of " << segment_count); // determine this segment's target seg_target[X_AXIS] = position[X_AXIS] + (dx / float(segment_count) * segment); diff --git a/FluidNC/src/Kinematics/WallPlotter.cpp b/FluidNC/src/Kinematics/WallPlotter.cpp index ac1bdbd16..10e5a09f3 100644 --- a/FluidNC/src/Kinematics/WallPlotter.cpp +++ b/FluidNC/src/Kinematics/WallPlotter.cpp @@ -99,6 +99,9 @@ namespace Kinematics { // Calculate desired cartesian feedrate distance ratio. Same for each seg. for (uint32_t segment = 1; segment <= segment_count; segment++) { + if (sys.abort) { + return true; + } // calculate the cartesian end point of the next segment for (size_t axis = X_AXIS; axis < n_axis; axis++) { cartesian_segment_end[axis] += cartesian_segment_components[axis]; diff --git a/FluidNC/src/MotionControl.h b/FluidNC/src/MotionControl.h index 21a2539c9..f379113fe 100644 --- a/FluidNC/src/MotionControl.h +++ b/FluidNC/src/MotionControl.h @@ -19,12 +19,6 @@ extern bool probe_succeeded; // Tracks if last probing cycle was successful. // System motion commands must have a line number of zero. const int PARKING_MOTION_LINE_NUMBER = 0; -// Execute linear motion in absolute millimeter coordinates. Feed rate given in millimeters/second -// unless invert_feed_rate is true. Then the feed_rate means that the motion should be completed in -// (1 minute)/feed_rate time. -bool cartesian_to_motors(float* target, plan_line_data_t* pl_data, float* position); -void motors_to_cartesian(float* cartesian, float* motors, int n_axis); - // Execute a linear motion in cartesian space. bool mc_linear(float* target, plan_line_data_t* pl_data, float* position); From 97ce3e05499ddff2f3d63624c8d2bfb5ecdf2dc7 Mon Sep 17 00:00:00 2001 From: bdring Date: Thu, 17 Aug 2023 10:39:43 -0500 Subject: [PATCH 129/212] Swapped Huanyang frequency registers --- FluidNC/src/Spindles/HuanyangSpindle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/Spindles/HuanyangSpindle.cpp b/FluidNC/src/Spindles/HuanyangSpindle.cpp index 7664ca33a..d68947b60 100644 --- a/FluidNC/src/Spindles/HuanyangSpindle.cpp +++ b/FluidNC/src/Spindles/HuanyangSpindle.cpp @@ -243,7 +243,7 @@ namespace Spindles { auto huanyang = static_cast(vfd); huanyang->_minFrequency = value; - log_info(huanyang->name() << " PD005,PD011 Freq range (" << (huanyang->_minFrequency / 100) << "," + log_info(huanyang->name() << " PD0011, PD005 Freq range (" << (huanyang->_minFrequency / 100) << "," << (huanyang->_maxFrequency / 100) << ") Hz" << " (" << (huanyang->_minFrequency / 100 * 60) << "," << (huanyang->_maxFrequency / 100 * 60) << ") RPM"); From 353b9feaad7bdb253b10384d73baae21168f0164 Mon Sep 17 00:00:00 2001 From: vector76 Date: Thu, 24 Aug 2023 13:36:43 -0500 Subject: [PATCH 130/212] Add an option to enable/disable SSDP and mDNS to save memory SSDP can momentarily use a considerable amount (11k at least) of heap --- FluidNC/src/WebUI/TelnetServer.cpp | 8 +++++--- FluidNC/src/WebUI/WebServer.cpp | 6 +++--- FluidNC/src/WebUI/WifiConfig.cpp | 17 ++++++++++++----- FluidNC/src/WebUI/WifiConfig.h | 5 +++++ FluidNC/src/WebUI/WifiServices.cpp | 2 +- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/FluidNC/src/WebUI/TelnetServer.cpp b/FluidNC/src/WebUI/TelnetServer.cpp index f8329f9a2..4f00c486c 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,7 +50,9 @@ namespace WebUI { _setupdone = true; //add mDNS - MDNS.addService("telnet", "tcp", _port); + if (WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { + MDNS.addService("telnet", "tcp", _port); + } return no_error; } diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 2c0bf3e89..8710c7cd0 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) { + if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { _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) { + if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { MDNS.addService("http", "tcp", _port); } diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index 6798fc4f2..63068c532 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -8,17 +8,17 @@ #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 "Commands.h" // COMMANDS # include "WifiServices.h" // wifi_services.start() etc. -# include "WebSettings.h" // split_params(), get_params() +# include "WebSettings.h" // split_params(), get_params() -# include "WebServer.h" // webServer.port() -# include "TelnetServer.h" // telnetServer +# include "WebServer.h" // webServer.port() +# include "TelnetServer.h" // telnetServer # include "NotificationsService.h" // notificationsservice # include @@ -114,6 +114,7 @@ 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; @@ -139,6 +140,11 @@ namespace WebUI { { "WPA2-ENTERPRISE", WIFI_AUTH_WPA2_ENTERPRISE }, }; + enum_opt_t staSsdpModeOptions = { + { "SSDP and mDNS Disabled", SSDP_DISABLED }, + { "SSDP and mDNS Enabled", SSDP_ENABLED }, + }; + 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 @@ -339,6 +345,7 @@ namespace WebUI { (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", WEBSET, WA, NULL, "Sta/SSDP", DEFAULT_STA_SSDP_MODE, &staSsdpModeOptions, 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); diff --git a/FluidNC/src/WebUI/WifiConfig.h b/FluidNC/src/WebUI/WifiConfig.h index ad818e294..b13a1d0c1 100644 --- a/FluidNC/src/WebUI/WifiConfig.h +++ b/FluidNC/src/WebUI/WifiConfig.h @@ -41,6 +41,9 @@ 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 = ""; @@ -56,6 +59,7 @@ 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 @@ -124,6 +128,7 @@ 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 d01a002c6..b0ff51f0e 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) { + if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { //start mDns const char* h = wifi_hostname->get(); if (!MDNS.begin(h)) { From be209b4aaaae67dadf4ef38a9f37ddcc6ae64bad Mon Sep 17 00:00:00 2001 From: vector76 Date: Fri, 25 Aug 2023 21:28:01 -0500 Subject: [PATCH 131/212] Enable and Disabled instead of verbose option strings --- FluidNC/src/WebUI/WifiConfig.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index 63068c532..add0940a4 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -141,8 +141,8 @@ namespace WebUI { }; enum_opt_t staSsdpModeOptions = { - { "SSDP and mDNS Disabled", SSDP_DISABLED }, - { "SSDP and mDNS Enabled", SSDP_ENABLED }, + { "Enable", SSDP_ENABLED }, + { "Disabled", SSDP_DISABLED }, }; static void print_mac(Channel& out, const char* prefix, const char* mac) { log_to(out, prefix, " (" << mac << ")"); } From ff701e0e8e6722cca3960fe26794bfecac030b26 Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 26 Aug 2023 07:30:27 -0600 Subject: [PATCH 132/212] Updating Spindle Uarts --- example_configs/6_pack_TMC5160_Huanyang.yaml | 14 ++++++++------ example_configs/6_pack_external_huanyang.yaml | 14 ++++++++------ example_configs/tmc2209_huanyang.yml | 19 ++++++++++--------- 3 files changed, 26 insertions(+), 21 deletions(-) diff --git a/example_configs/6_pack_TMC5160_Huanyang.yaml b/example_configs/6_pack_TMC5160_Huanyang.yaml index baa79121d..a4e1e04fa 100644 --- a/example_configs/6_pack_TMC5160_Huanyang.yaml +++ b/example_configs/6_pack_TMC5160_Huanyang.yaml @@ -178,14 +178,16 @@ user_outputs: start: must_home: false + +uart1: + txd_pin: gpio.26 + rxd_pin: gpio.16 + rts_pin: gpio.4 + baud: 9600 + mode: 8N1 Huanyang: - uart: - txd_pin: gpio.26 - rxd_pin: gpio.16 - rts_pin: gpio.4 - baud: 9600 - mode: 8N1 + uart_num: 1 modbus_id: 1 tool_num: 0 speed_map: 0=0% 1000=0% 24000=100% diff --git a/example_configs/6_pack_external_huanyang.yaml b/example_configs/6_pack_external_huanyang.yaml index 03ef5d413..7f599a937 100644 --- a/example_configs/6_pack_external_huanyang.yaml +++ b/example_configs/6_pack_external_huanyang.yaml @@ -147,14 +147,16 @@ user_outputs: start: must_home: false + +uart1: + txd_pin: gpio.26 + rxd_pin: gpio.16 + rts_pin: gpio.4 + baud: 9600 + mode: 8N1 Huanyang: - uart: - txd_pin: gpio.26 - rxd_pin: gpio.16 - rts_pin: gpio.4 - baud: 9600 - mode: 8N1 + uart_num: 1 modbus_id: 1 tool_num: 0 speed_map: 0=0% 0=25% 6000=25% 24000=100% diff --git a/example_configs/tmc2209_huanyang.yml b/example_configs/tmc2209_huanyang.yml index 8dda93dc9..8ba2e126d 100644 --- a/example_configs/tmc2209_huanyang.yml +++ b/example_configs/tmc2209_huanyang.yml @@ -84,7 +84,7 @@ axes: limit_pos_pin: gpio.34 limit_all_pin: NO_PIN hard_limits: false - pulloff_mm:1.00 + pulloff_mm: 1.00 tmc_2209: step_pin: gpio.33 direction_pin: gpio.32 @@ -112,7 +112,7 @@ axes: limit_pos_pin: gpio.39 limit_all_pin: NO_PIN hard_limits: false - pulloff_mm:1.00 + pulloff_mm: 1.00 tmc_2209: step_pin: gpio.2 direction_pin: gpio.14 @@ -141,7 +141,7 @@ axes: limit_pos_pin: gpio.36 limit_all_pin: NO_PIN hard_limits: false - pulloff_mm:1.00 + pulloff_mm: 1.00 tmc_2209: step_pin: gpio.16 direction_pin: gpio.15 @@ -162,14 +162,15 @@ sdcard: probe: pin: NO_PIN +uart1: + txd_pin: gpio.4 + rxd_pin: gpio.13 + rts_pin: gpio.17 + baud: 9600 + mode: 8N1 Huanyang: - uart: - txd_pin: gpio.4 - rxd_pin: gpio.13 - rts_pin: gpio.17 - baud: 9600 - mode: 8N1 + uart_num: 1 modbus_id: 1 tool_num: 0 speed_map: 0=0% 1000=0% 24000=100% From bb822274733c473b64f7f19f6df8389ccf98395f Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 1 Sep 2023 10:08:37 -1000 Subject: [PATCH 133/212] Fix crash when running numbered macros --- FluidNC/src/Machine/Macros.cpp | 24 +++++++++++++----------- FluidNC/src/Machine/Macros.h | 24 ++++++++++++------------ 2 files changed, 25 insertions(+), 23 deletions(-) diff --git a/FluidNC/src/Machine/Macros.cpp b/FluidNC/src/Machine/Macros.cpp index f58379e73..2284ae0d0 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -6,20 +6,17 @@ #include "src/System.h" // sys #include "src/Machine/MachineConfig.h" // config +Macro::Macro(const char* name) : _name(name) {} + void MacroEvent::run(void* arg) { - 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(); + config->_macros->_macro[_num].run(); } -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" }; +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" }; MacroEvent macro0Event { 0 }; MacroEvent macro1Event { 1 }; @@ -54,6 +51,11 @@ 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 a462bc0c6..ec117fa1e 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; - std::string _name; - Macro(const char* name) : _name(name) {} + const char* _name; + Macro(const char* name); bool run(); }; class Macros : public Configuration::Configurable { public: static const int n_startup_lines = 2; - static const int n_macros = 4; + static const int n_macros = 5; 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.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); + 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); } ~Macros() {} From a79981a15bc5cd33454dbf54c03b22e9f31d484e Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 2 Sep 2023 09:23:53 -1000 Subject: [PATCH 134/212] Fix reset from arc If an arc is in progress when a feedhold followed by a ctrl-x reset comes in, the next move after the reset is wrong. For example: G0 X0 Y0 G3 X0 Y0 I-100 J0 F500 ! CTRL-X $J=G91 Z0.1 F100 Instead of the jog going only in the Z direction, there will be motion in X and Y too. The problem is caused by incorrect synchronization of the GCode position after the aborted arc. The code incorrectly sets the GCode position to the target of the arc, as if the arc had completed, instead of setting it to the actual position that existed at the time of the hold+reset. (It is possible that the same problem might occur without the feedhold, only the reset. In any case, this patch works in both scenarios.) --- FluidNC/src/Error.cpp | 1 + FluidNC/src/Error.h | 1 + FluidNC/src/GCode.cpp | 3 +++ 3 files changed, 5 insertions(+) diff --git a/FluidNC/src/Error.cpp b/FluidNC/src/Error.cpp index 7722f3d2c..45de5ab93 100644 --- a/FluidNC/src/Error.cpp +++ b/FluidNC/src/Error.cpp @@ -68,6 +68,7 @@ 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 a8387b25e..590c5a816 100644 --- a/FluidNC/src/Error.h +++ b/FluidNC/src/Error.h @@ -72,6 +72,7 @@ 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 3d74db282..1ea5e722a 100644 --- a/FluidNC/src/GCode.cpp +++ b/FluidNC/src/GCode.cpp @@ -1620,6 +1620,9 @@ 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) { From 3f4d3a0a70718da6ca95db9724b7f2e343010729 Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 3 Sep 2023 17:07:29 -0500 Subject: [PATCH 135/212] Updated name to be consistent --- FluidNC/src/WebUI/WifiConfig.cpp | 37 +++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index add0940a4..49c542e58 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -13,12 +13,12 @@ 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 +# include "WebServer.h" // webServer.port() +# include "TelnetServer.h" // telnetServer # include "NotificationsService.h" // notificationsservice # include @@ -145,7 +145,9 @@ namespace WebUI { { "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())); @@ -344,8 +346,9 @@ 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", WEBSET, WA, NULL, "Sta/SSDP", DEFAULT_STA_SSDP_MODE, &staSsdpModeOptions, 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_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); @@ -784,7 +787,9 @@ namespace WebUI { /** * End WiFi */ - void WiFiConfig::end() { StopWiFi(); } + void WiFiConfig::end() { + StopWiFi(); + } /** * Reset ESP @@ -804,12 +809,16 @@ 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 @@ -823,7 +832,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) { @@ -848,6 +857,8 @@ namespace WebUI { return Error::Ok; } - WiFiConfig::~WiFiConfig() { end(); } + WiFiConfig::~WiFiConfig() { + end(); + } } #endif From bae0a69b6cfdc0457c938a7bfa61b5830950a101 Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 5 Sep 2023 09:58:06 -0600 Subject: [PATCH 136/212] 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 137/212] 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 138/212] 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 bc5f3e936a9b4f2c29f0d4b9099d4dcdfffcdc5d Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 5 Sep 2023 15:34:56 -0500 Subject: [PATCH 139/212] Update index.html.gz For probing fix --- 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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

      O1lG7&Xg=TugKV)T!tS(|(++Nd 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 z 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 delta 113887 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
      o!z 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 H;zS4lrIyZF From 1a5056a01b79c6f0fbb4c37e551f8fb4e652d1f9 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 28 Dec 2023 09:14:38 -1000 Subject: [PATCH 204/212] Added $SD/ShowSome and $LocalFS/ShowSome =N,filename to show the first N lines =N:M,filename to show lines [N..M) --- FluidNC/src/WebUI/WebSettings.cpp | 85 +++++++++++++++++++++++++++++-- 1 file changed, 82 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index 6c1132278..8ae3e0634 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -312,6 +312,17 @@ namespace WebUI { return Error::Ok; } + static bool split(char* input, char** next, char delim) { + char* pos = strchr(input, delim); + if (pos) { + *pos = '\0'; + *next = pos + 1; + return true; + } + *next = input + strlen(input); // End of string + return false; + } + static Error showSDFile(char* parameter, AuthenticationLevel auth_level, Channel& out) { // ESP221 return showFile("sd", parameter, auth_level, out); } @@ -319,6 +330,73 @@ namespace WebUI { return showFile("", parameter, auth_level, out); } + static Error showFileSome(const char* fs, char* parameter, AuthenticationLevel auth_level, Channel& out) { // ESP221 + if (notIdleOrAlarm()) { + return Error::IdleError; + } + if (!parameter || !*parameter) { + log_error_to(out, "Missing argument"); + return Error::InvalidValue; + } + int firstline = 0; + int lastline = 0; + char* filename; + split(parameter, &filename, ','); + if (*filename == '\0') { + log_error_to(out, "Missing filename"); + return Error::InvalidValue; + } + + // Parameter is the list of lines to display + // N means the first N lines + // N:M means lines N through M inclusive + if (!*parameter) { + log_error_to(out, "Missing line count"); + return Error::InvalidValue; + } + char* second; + split(parameter, &second, ':'); + if (*second) { + firstline = atoi(parameter); + lastline = atoi(second); + } else { + firstline = 0; + lastline = atoi(parameter); + } + InputFile* theFile; + Error err; + if ((err = openFile(fs, filename, auth_level, out, theFile)) != Error::Ok) { + log_error_to(out, "Cannot open file " << filename); + return err; + } + char fileLine[255]; + Error res; + for (int linenum = 0; (res = theFile->readLine(fileLine, 255)) == Error::Ok; ++linenum) { + if (linenum >= lastline) { + break; + } + if (linenum >= firstline) { + // We cannot use the 2-argument form of log_to() here because + // fileLine can be overwritten by readLine before the output + // task has a chance to forward the line to the output channel. + // The 3-argument form works because it copies the line to a + // temporary string. + log_to(out, "", fileLine); + } + } + if (res != Error::Eof && res != Error::Ok) { + log_to(out, errorString(res)); + } + delete theFile; + return Error::Ok; + } + + static Error showSDSome(char* parameter, AuthenticationLevel auth_level, Channel& out) { // ESP221 + return showFileSome("sd", parameter, auth_level, out); + } + static Error showLocalSome(char* parameter, AuthenticationLevel auth_level, Channel& out) { // ESP701 + return showFileSome("", parameter, auth_level, out); + } static Error runFile(const char* fs, char* parameter, AuthenticationLevel auth_level, Channel& out) { Error err; if (sys.state == State::Alarm || sys.state == State::ConfigAlarm) { @@ -479,7 +557,7 @@ namespace WebUI { } filepath = outFile.fpath(); } catch (const Error err) { - log_error("Cannot create file " << opath); + log_error_to(out, "Cannot create file " << opath); return Error::FsFailedCreateFile; } // Rehash after outFile goes out of scope @@ -519,7 +597,7 @@ namespace WebUI { Error err = Error::Ok; for (auto const& dir_entry : iter) { if (dir_entry.is_directory()) { - log_error("Not handling localfs subdirectories"); + log_error_to(out, "Not handling localfs subdirectories"); } else { std::string opath(oDir); opath += "/"; @@ -552,7 +630,7 @@ namespace WebUI { static Error migrateLocalFS(char* parameter, AuthenticationLevel auth_level, Channel& out) { // No ESP command const char* newfs = parameter && *parameter ? parameter : "littlefs"; if (strcmp(newfs, localfsName) == 0) { - log_error("localfs format is already " << newfs); + log_error_to(out, "localfs format is already " << newfs); return Error::InvalidValue; } log_info("Backing up local filesystem contents to SD"); @@ -692,6 +770,7 @@ namespace WebUI { new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Migrate", migrateLocalFS); new WebCommand(NULL, WEBCMD, WU, NULL, "LocalFS/Hashes", showLocalFSHashes); + new WebCommand("path", WEBCMD, WU, "ESP221", "SD/ShowSome", showSDSome); new WebCommand("path", WEBCMD, WU, "ESP221", "SD/Show", showSDFile); new WebCommand("path", WEBCMD, WU, "ESP220", "SD/Run", runSDFile); new WebCommand("file_or_directory_path", WEBCMD, WU, "ESP215", "SD/Delete", deleteSDObject); From 13c74e15b90f4ea8593a2dd479638b9ff391c686 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 30 Dec 2023 10:41:45 -1000 Subject: [PATCH 205/212] Better structuring of ESPxxx command response in WebServer ... eliminates problems with first-time connection fails --- FluidNC/src/WebUI/WebServer.cpp | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index af0434c86..cc984ef59 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -444,27 +444,26 @@ namespace WebUI { char line[256]; strncpy(line, cmd.c_str(), 255); webClient.attachWS(_webserver, silent); - Error err = settings_execute_line(line, webClient, auth_level); - std::string answer; - if (err == Error::Ok) { - answer = "ok\n"; - } else { - const char* msg = errorString(err); - answer = "Error: "; + Error err = settings_execute_line(line, webClient, auth_level); + if (err != Error::Ok) { + std::string answer = "Error: "; + const char* msg = errorString(err); if (msg) { answer += msg; } else { answer += std::to_string(static_cast(err)); } answer += "\n"; - } - - // Give the output task a chance to dequeue and forward a message - // to webClient, if there is one. - vTaskDelay(10); - - if (!webClient.anyOutput()) { - _webserver->send(err != Error::Ok ? 500 : 200, "text/plain", answer.c_str()); + _webserver->send(500, "text/plain", answer.c_str()); + } else { + // Give the output task a chance to dequeue and forward a message + // to webClient, if there is one. + for (int i = 0; i < 100 && !webClient.anyOutput(); i++) { + vTaskDelay(10); + } + if (!webClient.anyOutput()) { + _webserver->send(500, "text/plain", "No response"); + } } webClient.detachWS(); } else { //execute GCODE From 6f2b1d870fc8455a342ce65bad0c9986895b695c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 30 Dec 2023 10:52:14 -1000 Subject: [PATCH 206/212] Run the protocol engine while delaying for the OLED screens --- FluidNC/src/NutsBolts.h | 2 +- FluidNC/src/OLED.cpp | 7 +++---- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/FluidNC/src/NutsBolts.h b/FluidNC/src/NutsBolts.h index 248649d65..b547a1d1d 100644 --- a/FluidNC/src/NutsBolts.h +++ b/FluidNC/src/NutsBolts.h @@ -59,7 +59,7 @@ bool read_float(const char* line, size_t* char_counter, float* float_ptr); void delay_us(int32_t microseconds); // Delay while checking for realtime characters and other events -bool delay_msec(uint32_t milliseconds, DwellMode mode); +bool delay_msec(uint32_t milliseconds, DwellMode mode = DwellMode::Dwell); // Delay without checking for realtime events. Use only for short delays void delay_ms(uint16_t ms); diff --git a/FluidNC/src/OLED.cpp b/FluidNC/src/OLED.cpp index 7e0192af7..b41478578 100644 --- a/FluidNC/src/OLED.cpp +++ b/FluidNC/src/OLED.cpp @@ -405,7 +405,7 @@ void OLED::parse_IP() { wrapped_draw_string(0, _radio_info, ArialMT_Plain_10); wrapped_draw_string(fh * 2, _radio_addr, ArialMT_Plain_10); _oled->display(); - delay_ms(_radio_delay); + delay_msec(_radio_delay); } // [MSG:INFO: AP SSID foo IP 192.168.68.134 mask foo channel foo] @@ -424,7 +424,7 @@ void OLED::parse_AP() { wrapped_draw_string(0, _radio_info, ArialMT_Plain_10); wrapped_draw_string(fh * 2, _radio_addr, ArialMT_Plain_10); _oled->display(); - delay_ms(_radio_delay); + delay_msec(_radio_delay); } void OLED::parse_BT() { @@ -436,7 +436,7 @@ void OLED::parse_BT() { _oled->clear(); wrapped_draw_string(0, _radio_info, ArialMT_Plain_10); _oled->display(); - delay_ms(_radio_delay); + delay_msec(_radio_delay); } void OLED::parse_WebUI() { @@ -448,7 +448,6 @@ void OLED::parse_WebUI() { wrapped_draw_string(0, "WebUI from", ArialMT_Plain_10); wrapped_draw_string(fh * 2, ipaddr, ArialMT_Plain_10); _oled->display(); - delay_ms(_radio_delay); } void OLED::parse_report() { From 02364b6efa89ec2dfa62eaabeb4996b305c566b4 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 4 Jan 2024 07:36:43 -1000 Subject: [PATCH 207/212] index.html.gz from main to fix merge conflict --- FluidNC/data/index.html.gz | Bin 116731 -> 116717 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index f48937f2b4681deb9f37e96da319d246bef3453a..a408d9687ec89f3f215dfcfd445900997db19fe1 100644 GIT binary patch delta 90512 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 TB>yg_Nj?2~b!Pctl!}8s3vz%g&kJ?2Z*t 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 delta 90532 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 From 993f632a28fb311584020c8e33c23a0a73ad94f2 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 4 Jan 2024 07:41:03 -1000 Subject: [PATCH 208/212] index.html.gz responsds to Files changed message --- FluidNC/data/index.html.gz | Bin 116717 -> 116731 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index a408d9687ec89f3f215dfcfd445900997db19fe1..f48937f2b4681deb9f37e96da319d246bef3453a 100644 GIT binary patch delta 90532 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 delta 90512 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 TB>yg_Nj?2~b!Pctl!}8s3vz%g&kJ?2Z*t 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 From b4864436ddd495b197bcca196fa0e453c9717b4c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 4 Jan 2024 13:57:32 -1000 Subject: [PATCH 209/212] Fixed merge botches --- FluidNC/src/Machine/Macros.cpp | 1 + FluidNC/src/OLED.h | 4 +--- FluidNC/src/Serial.cpp | 8 ++------ 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/FluidNC/src/Machine/Macros.cpp b/FluidNC/src/Machine/Macros.cpp index 6047efe93..f15917c69 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -50,6 +50,7 @@ Cmd findOverride(std::string name) { return it == overrideCodes.end() ? Cmd::None : it->second; } +bool Macro::run() { if (sys.state != State::Idle) { log_error("Macro can only be used in idle state"); return false; diff --git a/FluidNC/src/OLED.h b/FluidNC/src/OLED.h index db555ba15..82530ed82 100644 --- a/FluidNC/src/OLED.h +++ b/FluidNC/src/OLED.h @@ -41,13 +41,11 @@ class OLED : public Channel, public Configuration::Configurable { float _percent; std::string _ticker; - int _radio_delay = 0; + int _radio_delay = 0; int _report_interval_ms = 500; uint8_t _i2c_num = 0; - int _report_interval_ms = 500; - void parse_report(); void parse_status_report(); void parse_gcode_report(); diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 4d30f9478..05715d5aa 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -136,9 +136,7 @@ void AllChannels::flushRx() { size_t AllChannels::write(uint8_t data) { _mutex_general.lock(); for (auto channel : _channelq) { - if (channel->all_messages()) { - channel->write(data); - } + channel->write(data); } _mutex_general.unlock(); return 1; @@ -169,9 +167,7 @@ void AllChannels::stopJob() { size_t AllChannels::write(const uint8_t* buffer, size_t length) { _mutex_general.lock(); for (auto channel : _channelq) { - if (channel->all_messages()) { - channel->write(buffer, length); - } + channel->write(buffer, length); } _mutex_general.unlock(); return length; From dcd879344c753d3a8ec53676a4fec862b1dc07f3 Mon Sep 17 00:00:00 2001 From: matt <10769515+whosmatt@users.noreply.github.com> Date: Sat, 13 Jan 2024 23:10:11 +0100 Subject: [PATCH 210/212] fixed wifi hostname not being applied https://github.com/espressif/arduino-esp32/issues/6278#issuecomment-1047894027 --- FluidNC/src/WebUI/WifiConfig.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index 7fd4523d4..df8b26819 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -613,11 +613,12 @@ namespace WebUI { log_info("STA SSID is not set"); return false; } + //Hostname needs to be set before mode to take effect + WiFi.setHostname(wifi_hostname->get()); WiFi.mode(WIFI_STA); WiFi.setMinSecurity(static_cast(wifi_sta_min_security->get())); WiFi.setScanMethod(wifi_fast_scan->get() ? WIFI_FAST_SCAN : WIFI_ALL_CHANNEL_SCAN); //Get parameters for STA - WiFi.setHostname(wifi_hostname->get()); //password const char* password = wifi_sta_password->get(); int8_t IP_mode = wifi_sta_mode->get(); From d90a8c95cfeada68a510346195cd5f44919f7752 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 19 Jan 2024 10:32:42 -1000 Subject: [PATCH 211/212] Added error message for new error number 162 --- FluidNC/src/Error.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/FluidNC/src/Error.cpp b/FluidNC/src/Error.cpp index ed590ab0e..846471a56 100644 --- a/FluidNC/src/Error.cpp +++ b/FluidNC/src/Error.cpp @@ -73,4 +73,5 @@ std::map ErrorNames = { { Error::ConfigurationInvalid, "Configuration is invalid. Check boot messages for ERR's." }, { Error::UploadFailed, "File Upload Failed" }, { Error::DownloadFailed, "File Download Failed" }, + { Error::ReadOnlySetting, "Read-only setting" }, }; From bacb53b18bfb9dfb174e2e26ecd5ebcd150614a4 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 19 Jan 2024 10:33:30 -1000 Subject: [PATCH 212/212] Added macros to make the proxy code a little less grotesque --- FluidNC/src/SettingsDefinitions.cpp | 55 +++++++++++++---------------- 1 file changed, 24 insertions(+), 31 deletions(-) diff --git a/FluidNC/src/SettingsDefinitions.cpp b/FluidNC/src/SettingsDefinitions.cpp index e6250bdc1..f67f823af 100644 --- a/FluidNC/src/SettingsDefinitions.cpp +++ b/FluidNC/src/SettingsDefinitions.cpp @@ -43,6 +43,14 @@ void make_coordinate(CoordIndex index, const char* name) { } } +#define FLOAT_PROXY(number, name, configvar) \ + float_proxies.emplace_back( \ + std::make_unique>(number, name, [](MachineConfig const& config) { return configvar; })); + +#define INT_PROXY(number, name, configvar) \ + int_proxies.emplace_back( \ + std::make_unique>(number, name, [](MachineConfig const& config) { return configvar; })); + void make_settings() { Setting::init(); @@ -78,41 +86,26 @@ void make_settings() { // which are derived from MachineConfig settings. // 130-132: Max travel (mm) - float_proxies.emplace_back(std::make_unique>( - "130", "Grbl/MaxTravel/X", [](MachineConfig const& config) { return config._axes->_axis[0]->_maxTravel; })); - float_proxies.emplace_back(std::make_unique>( - "131", "Grbl/MaxTravel/Y", [](MachineConfig const& config) { return config._axes->_axis[1]->_maxTravel; })); - float_proxies.emplace_back(std::make_unique>( - "132", "Grbl/MaxTravel/Z", [](MachineConfig const& config) { return config._axes->_axis[2]->_maxTravel; })); + FLOAT_PROXY("130", "Grbl/MaxTravel/X", config._axes->_axis[0]->_maxTravel) + FLOAT_PROXY("131", "Grbl/MaxTravel/Y", config._axes->_axis[1]->_maxTravel) + FLOAT_PROXY("132", "Grbl/MaxTravel/Z", config._axes->_axis[2]->_maxTravel) // 120-122: Acceleration (mm/sec^2) - float_proxies.emplace_back(std::make_unique>( - "120", "Grbl/Acceleration/X", [](MachineConfig const& config) { return config._axes->_axis[0]->_acceleration; })); - float_proxies.emplace_back(std::make_unique>( - "121", "Grbl/Acceleration/Y", [](MachineConfig const& config) { return config._axes->_axis[1]->_acceleration; })); - float_proxies.emplace_back(std::make_unique>( - "122", "Grbl/Acceleration/Z", [](MachineConfig const& config) { return config._axes->_axis[2]->_acceleration; })); + FLOAT_PROXY("120", "Grbl/Acceleration/X", config._axes->_axis[0]->_acceleration) + FLOAT_PROXY("121", "Grbl/Acceleration/Y", config._axes->_axis[1]->_acceleration) + FLOAT_PROXY("122", "Grbl/Acceleration/Z", config._axes->_axis[2]->_acceleration) // 110-112: Max rate (mm/min) - float_proxies.emplace_back(std::make_unique>( - "110", "Grbl/MaxRate/X", [](MachineConfig const& config) { return config._axes->_axis[0]->_maxRate; })); - float_proxies.emplace_back(std::make_unique>( - "111", "Grbl/MaxRate/Y", [](MachineConfig const& config) { return config._axes->_axis[1]->_maxRate; })); - float_proxies.emplace_back(std::make_unique>( - "112", "Grbl/MaxRate/Z", [](MachineConfig const& config) { return config._axes->_axis[2]->_maxRate; })); + FLOAT_PROXY("110", "Grbl/MaxRate/X", config._axes->_axis[0]->_maxRate) + FLOAT_PROXY("111", "Grbl/MaxRate/Y", config._axes->_axis[1]->_maxRate) + FLOAT_PROXY("112", "Grbl/MaxRate/Z", config._axes->_axis[2]->_maxRate) // 100-102: Resolution (steps/mm) - float_proxies.emplace_back(std::make_unique>( - "100", "Grbl/Resolution/X", [](MachineConfig const& config) { return config._axes->_axis[0]->_stepsPerMm; })); - float_proxies.emplace_back(std::make_unique>( - "101", "Grbl/Resolution/Y", [](MachineConfig const& config) { return config._axes->_axis[1]->_stepsPerMm; })); - float_proxies.emplace_back(std::make_unique>( - "102", "Grbl/Resolution/Z", [](MachineConfig const& config) { return config._axes->_axis[2]->_stepsPerMm; })); - - int_proxies.emplace_back(std::make_unique>( - "20", "Grbl/SoftLimitsEnable", [](MachineConfig const& config) { return config._axes->_axis[0]->_softLimits ? 1 : 0; })); - int_proxies.emplace_back(std::make_unique>( - "21", "Grbl/HardLimitsEnable", [](MachineConfig const& config) { return config._axes->hasHardLimits() ? 1 : 0; })); - int_proxies.emplace_back(std::make_unique>( - "22", "Grbl/HomingCycleEnable", [](MachineConfig const& config) { return Axes::homingMask ? 1 : 0; })); + FLOAT_PROXY("100", "Grbl/Resolution/X", config._axes->_axis[0]->_stepsPerMm) + FLOAT_PROXY("101", "Grbl/Resolution/Y", config._axes->_axis[1]->_stepsPerMm) + FLOAT_PROXY("102", "Grbl/Resolution/Z", config._axes->_axis[2]->_stepsPerMm) + + INT_PROXY("20", "Grbl/SoftLimitsEnable", config._axes->_axis[0]->_softLimits) + INT_PROXY("21", "Grbl/HardLimitsEnable", config._axes->hasHardLimits()) + INT_PROXY("22", "Grbl/HomingCycleEnable", (bool)Axes::homingMask) }

    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 Ne*x>&Gph1L2ml@UDy{$k From 93048392bf1996354a65de82d519b6aea86482bb Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 6 Sep 2023 19:17:34 -1000 Subject: [PATCH 140/212] 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 141/212] 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 142/212] 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 143/212] 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 144/212] 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 145/212] 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 146/212] 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 147/212] 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 148/212] 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: From 41dd0f053c0a7ee3b17d6c5ba04d51a1c8454a04 Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 3 Oct 2023 17:25:49 -0500 Subject: [PATCH 149/212] Working on parsing --- FluidNC/src/Pin.cpp | 23 ++++++ FluidNC/src/Pins/PinCapabilities.cpp | 1 + FluidNC/src/Pins/PinCapabilities.h | 3 +- FluidNC/src/Pins/UARTPinDetail.cpp | 107 +++++++++++++++++++++++++++ FluidNC/src/Pins/UARTPinDetail.h | 38 ++++++++++ FluidNC/src/UartChannel.cpp | 1 + FluidNC/src/UartChannel.h | 8 +- 7 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 FluidNC/src/Pins/UARTPinDetail.cpp create mode 100644 FluidNC/src/Pins/UARTPinDetail.h diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index 5e22afacf..829493dcc 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -10,8 +10,11 @@ #include "Pins/GPIOPinDetail.h" #include "Pins/VoidPinDetail.h" #include "Pins/I2SOPinDetail.h" +#include "Pins/UARTPinDetail.h" #include "Pins/ErrorPinDetail.h" #include "string_util.h" +#include "Machine/MachineConfig.h" // config +#include Pins::PinDetail* Pin::undefinedPin = new Pins::VoidPinDetail(); Pins::PinDetail* Pin::errorPin = new Pins::ErrorPinDetail("unknown"); @@ -73,8 +76,28 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa pinImplementation = new Pins::GPIOPinDetail(static_cast(pin_number), parser); } if (string_util::equal_ignore_case(prefix, "i2so")) { + if (config->_i2so == nullptr) { + return "i2so: section must be defined before using i2so pins"; + } pinImplementation = new Pins::I2SOPinDetail(static_cast(pin_number), parser); } + + if (prefix.length() == 13) { + if (prefix.substr(0, 12) == "uart_channel") { + log_info("More:" << prefix[12]); + if (prefix[12] >= '0' && prefix[12] <= '2') { // TODO use MAX_N_UARTS + // check to see if the channel exits + auto deviceId = prefix[12] - '0'; + if (config->_uart_channels[deviceId] == nullptr) { + return " uart channel number not found"; + } + pinImplementation = new Pins::UARTIODetail(deviceId, pinnum_t(pin_number), parser); + } else { + return "Incorrect pin extender specification. Expected 'pinext[0-2].[port number]'."; + } + } + } + if (string_util::equal_ignore_case(prefix, "no_pin")) { pinImplementation = undefinedPin; } diff --git a/FluidNC/src/Pins/PinCapabilities.cpp b/FluidNC/src/Pins/PinCapabilities.cpp index 1b8c6d0cf..3e54bb00a 100644 --- a/FluidNC/src/Pins/PinCapabilities.cpp +++ b/FluidNC/src/Pins/PinCapabilities.cpp @@ -29,6 +29,7 @@ namespace Pins { PinCapabilities PinCapabilities::Native(1 << (__LINE__ - START_LINE)); PinCapabilities PinCapabilities::I2S(1 << (__LINE__ - START_LINE)); + PinCapabilities PinCapabilities::UARTIO(1 << (__LINE__ - START_LINE)); PinCapabilities PinCapabilities::Error(1 << (__LINE__ - START_LINE)); PinCapabilities PinCapabilities::Void(1 << (__LINE__ - START_LINE)); } diff --git a/FluidNC/src/Pins/PinCapabilities.h b/FluidNC/src/Pins/PinCapabilities.h index ea9849d2c..f457115f1 100644 --- a/FluidNC/src/Pins/PinCapabilities.h +++ b/FluidNC/src/Pins/PinCapabilities.h @@ -21,7 +21,7 @@ namespace Pins { friend class PinAttributes; // Wants access to _value for validation public: - PinCapabilities(const PinCapabilities&) = default; + PinCapabilities(const PinCapabilities&) = default; PinCapabilities& operator=(const PinCapabilities&) = default; // All the capabilities we use and test: @@ -44,6 +44,7 @@ namespace Pins { // can compare classes of pins along with their properties by just looking at the capabilities. static PinCapabilities Native; static PinCapabilities I2S; + static PinCapabilities UARTIO; static PinCapabilities Error; static PinCapabilities Void; diff --git a/FluidNC/src/Pins/UARTPinDetail.cpp b/FluidNC/src/Pins/UARTPinDetail.cpp new file mode 100644 index 000000000..34ae4b280 --- /dev/null +++ b/FluidNC/src/Pins/UARTPinDetail.cpp @@ -0,0 +1,107 @@ +// Copyright (c) 2023 Bart Dring +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#ifdef ESP32 +# include "UARTPinDetail.h" +# include "PinDetail.h" + +# include "../I2SOut.h" +# include "../Assert.h" + +namespace Pins { + std::vector UARTIODetail::_claimed(nPins, false); + + UARTIODetail::UARTIODetail(int deviceId, pinnum_t index, const PinOptionsParser& options) : + PinDetail(index), _capabilities(PinCapabilities::Output | PinCapabilities::UARTIO), _attributes(Pins::PinAttributes::Undefined), + _readWriteMask(0) { + Assert(index < nPins, "Pin number is greater than max %d", nPins - 1); + Assert(!_claimed[index], "Pin is already used."); + + // User defined pin capabilities + for (auto opt : options) { + if (opt.is("pu")) { + } else if (opt.is("pd")) { + } else if (opt.is("low")) { + _attributes = _attributes | PinAttributes::ActiveLow; + } else if (opt.is("high")) { + // Default: Active HIGH. + } else { + Assert(false, "Bad UARTPin option passed to pin %d: %s", int(index), opt()); + } + } + + _device_id = deviceId; + + //log_info("created uart pin:" << index); + _claimed[index] = true; + + // readWriteMask is xor'ed with the value to invert it if active low + _readWriteMask = int(_attributes.has(PinAttributes::ActiveLow)); + } + // The write will not happen immediately; the data is queued for + // delivery to the serial shift register chain via DMA and a FIFO + + PinCapabilities UARTIODetail::capabilities() const { + return PinCapabilities::Output | PinCapabilities::UARTIO; + } + + void IRAM_ATTR UARTIODetail::write(int high) { + if (high != _lastWrittenValue) { + _lastWrittenValue = high; + if (!_attributes.has(PinAttributes::Output)) { + log_error(toString()); + } + Assert(_attributes.has(PinAttributes::Output), "Pin %s cannot be written", toString().c_str()); + int value = _readWriteMask ^ high; + log_info("Set uart pin:" << high); + } + } + + int UARTIODetail::read() { + return 0; + } + + void UARTIODetail::setAttr(PinAttributes value) { + // These two assertions will fail if we do them for index 1/3 (Serial uart). This is because + // they are initialized by HardwareSerial well before we start our main operations. Best to + // just ignore them for now, and figure this out later. TODO FIXME! + + // Check the attributes first: + Assert(value.validateWith(this->_capabilities) || _index == 1 || _index == 3, + "The requested attributes don't match the capabilities for %s", + toString().c_str()); + Assert(!_attributes.conflictsWith(value) || _index == 1 || _index == 3, + "The requested attributes on %s conflict with previous settings", + toString().c_str()); + + _attributes = _attributes | value; + + // If the pin is ActiveLow, we should take that into account here: + if (value.has(PinAttributes::Output)) { + //gpio_write(_index, int(value.has(PinAttributes::InitialOn)) ^ _readWriteMask); + } + } + + PinAttributes UARTIODetail::getAttr() const { + return _attributes; + } + + std::string UARTIODetail::toString() { + std::string s("uart_channel"); + s += std::to_string(_device_id); + s += "."; + s += std::to_string(_index); + if (_attributes.has(PinAttributes::ActiveLow)) { + s += ":low"; + } + if (_attributes.has(PinAttributes::PullUp)) { + s += ":pu"; + } + if (_attributes.has(PinAttributes::PullDown)) { + s += ":pd"; + } + return s; + } +} + +#endif diff --git a/FluidNC/src/Pins/UARTPinDetail.h b/FluidNC/src/Pins/UARTPinDetail.h new file mode 100644 index 000000000..4137f295a --- /dev/null +++ b/FluidNC/src/Pins/UARTPinDetail.h @@ -0,0 +1,38 @@ +// Copyright (c) 2023 B. Dring +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#pragma once +#ifdef ESP32 + +# include "PinDetail.h" + +namespace Pins { + class UARTIODetail : public PinDetail { + PinCapabilities _capabilities; + PinAttributes _attributes; + int _readWriteMask; + + int _device_id; + + static const int nPins = 255; + static std::vector _claimed; + + bool _lastWrittenValue = false; + + public: + UARTIODetail(int deviceId, pinnum_t index, const PinOptionsParser& options); + + // I/O: + PinCapabilities capabilities() const override; + void write(int high) override; + int read() override; + void setAttr(PinAttributes value) override; + PinAttributes getAttr() const override; + + std::string toString() override; + + ~UARTIODetail() override { _claimed[_index] = false; } + }; +} + +#endif diff --git a/FluidNC/src/UartChannel.cpp b/FluidNC/src/UartChannel.cpp index f304f8802..8cd56f158 100644 --- a/FluidNC/src/UartChannel.cpp +++ b/FluidNC/src/UartChannel.cpp @@ -20,6 +20,7 @@ void UartChannel::init() { void UartChannel::init(Uart* uart) { _uart = uart; allChannels.registration(this); + log_info("uart_channel" << _uart_num << " created"); } size_t UartChannel::write(uint8_t c) { diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index 94f9aec5f..dbbca4e4c 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -12,7 +12,8 @@ class UartChannel : public Channel, public Configuration::Configurable { Lineedit* _lineedit; Uart* _uart; - int _uart_num = 0; + int _uart_num = 0; + bool _has_pins = false; // the device is a pin extender public: UartChannel(bool addCR = false); @@ -39,7 +40,10 @@ class UartChannel : public Channel, public Configuration::Configurable { Channel* pollLine(char* line) override; // Configuration methods - void group(Configuration::HandlerBase& handler) override { handler.item("uart_num", _uart_num); } + void group(Configuration::HandlerBase& handler) override { + handler.item("uart_num", _uart_num); + handler.item("has_pins", _has_pins); + } }; extern UartChannel Uart0; From 10f088c3e65695fbad0616a35e3b543604a3d16e Mon Sep 17 00:00:00 2001 From: bdring Date: Wed, 4 Oct 2023 14:02:20 -0500 Subject: [PATCH 150/212] Adding a test config. --- example_configs/uartio.yaml | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 example_configs/uartio.yaml diff --git a/example_configs/uartio.yaml b/example_configs/uartio.yaml new file mode 100644 index 000000000..b1775e725 --- /dev/null +++ b/example_configs/uartio.yaml @@ -0,0 +1,38 @@ +name: "ESP32 Dev Controller V4" +board: "ESP32 Dev Controller V4" + +stepping: + engine: RMT + idle_ms: 250 + dir_delay_us: 1 + pulse_us: 2 + disable_delay_us: 0 + + +uart1: + txd_pin: gpio.26 + rxd_pin: gpio.4 + baud: 115200 + mode: 8N1 + +uart_channel1: + uart_num: 1 + +i2so: + bck_pin: gpio.22 + data_pin: gpio.21 + ws_pin: gpio.17 + +spi: + miso_pin: gpio.19 + mosi_pin: gpio.23 + sck_pin: gpio.18 + +sdcard: + cs_pin: gpio.5 + card_detect_pin: NO_PIN + +coolant: + mist_pin: uart_channel0.1 + + From f7369e5aa40691e3d16a8414a9c38b4563f1446e Mon Sep 17 00:00:00 2001 From: bdring Date: Wed, 4 Oct 2023 14:22:00 -0500 Subject: [PATCH 151/212] SSDP Fix again after PR1004 got lost I think this was lost when main and devt got out of sync --- FluidNC/src/WebUI/TelnetServer.cpp | 10 ++-- FluidNC/src/WebUI/WebServer.cpp | 38 ++++++++++---- FluidNC/src/WebUI/WifiConfig.cpp | 40 +++++++++++---- FluidNC/src/WebUI/WifiConfig.h | 5 ++ FluidNC/src/WebUI/WifiServices.cpp | 82 ++++++++++++++++-------------- 5 files changed, 112 insertions(+), 63 deletions(-) diff --git a/FluidNC/src/WebUI/TelnetServer.cpp b/FluidNC/src/WebUI/TelnetServer.cpp index f8329f9a2..0abf7d54c 100644 --- a/FluidNC/src/WebUI/TelnetServer.cpp +++ b/FluidNC/src/WebUI/TelnetServer.cpp @@ -9,7 +9,7 @@ #ifdef ENABLE_WIFI namespace WebUI { - TelnetServer telnetServer __attribute__((init_priority(107))) ; + TelnetServer telnetServer __attribute__((init_priority(107))); } # include "WifiServices.h" @@ -50,7 +50,9 @@ namespace WebUI { _setupdone = true; //add mDNS - MDNS.addService("telnet", "tcp", _port); + if (WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { + MDNS.addService("telnet", "tcp", _port); + } return no_error; } @@ -90,7 +92,9 @@ namespace WebUI { allChannels.registration(tnc); } } - TelnetServer::~TelnetServer() { end(); } + TelnetServer::~TelnetServer() { + end(); + } } #endif diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 2c0bf3e89..2c2ddf193 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; @@ -87,7 +87,9 @@ namespace WebUI { &onoffOptions, NULL); } - Web_Server::~Web_Server() { end(); } + Web_Server::~Web_Server() { + end(); + } bool Web_Server::begin() { bool no_error = true; @@ -159,7 +161,7 @@ namespace WebUI { } //SSDP service presentation - if (WiFi.getMode() == WIFI_STA) { + if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { _webserver->on("/description.xml", HTTP_GET, handle_SSDP); //Add specific for SSDP SSDP.setSchemaURL("description.xml"); @@ -185,7 +187,7 @@ namespace WebUI { _webserver->begin(); //add mDNS - if (WiFi.getMode() == WIFI_STA) { + if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { MDNS.addService("http", "tcp", _port); } @@ -316,7 +318,9 @@ namespace WebUI { "interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) " "\n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n\n\n\n\n\n"; - void Web_Server::sendCaptivePortal() { sendWithOurAddress(PAGE_CAPTIVE, 200); } + void Web_Server::sendCaptivePortal() { + sendWithOurAddress(PAGE_CAPTIVE, 200); + } //Default 404 page that is sent when a request cannot be satisfied const char PAGE_404[] = @@ -326,7 +330,9 @@ namespace WebUI { "interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) " "\n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n\n\n\n\n\n"; - void Web_Server::send404Page() { sendWithOurAddress(PAGE_404, 404); } + void Web_Server::send404Page() { + sendWithOurAddress(PAGE_404, 404); + } void Web_Server::handle_root() { if (!(_webserver->hasArg("forcefallback") && _webserver->arg("forcefallback") == "yes")) { @@ -752,10 +758,16 @@ namespace WebUI { sendJSON(code, s); } - void Web_Server::sendAuthFailed() { sendStatus(401, "Authentication failed"); } + void Web_Server::sendAuthFailed() { + sendStatus(401, "Authentication failed"); + } - void Web_Server::LocalFSFileupload() { fileUpload(localfsName); } - void Web_Server::SDFileUpload() { fileUpload(sdName); } + void Web_Server::LocalFSFileupload() { + fileUpload(localfsName); + } + void Web_Server::SDFileUpload() { + fileUpload(sdName); + } //Web Update handler void Web_Server::handleUpdate() { @@ -1000,8 +1012,12 @@ namespace WebUI { sendJSON(200, s); } - void Web_Server::handle_direct_SDFileList() { handleFileOps(sdName); } - void Web_Server::handleFileList() { handleFileOps(localfsName); } + void Web_Server::handle_direct_SDFileList() { + handleFileOps(sdName); + } + void Web_Server::handleFileList() { + handleFileOps(localfsName); + } // File upload void Web_Server::uploadStart(const char* filename, size_t filesize, const char* fs) { diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index 6798fc4f2..49c542e58 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,6 +114,7 @@ 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; @@ -139,7 +140,14 @@ namespace WebUI { { "WPA2-ENTERPRISE", WIFI_AUTH_WPA2_ENTERPRISE }, }; - static void print_mac(Channel& out, const char* prefix, const char* mac) { log_to(out, prefix, " (" << mac << ")"); } + 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 Error showIP(char* parameter, AuthenticationLevel auth_level, Channel& out) { // ESP111 log_to(out, parameter, IP_string(WiFi.getMode() == WIFI_STA ? WiFi.localIP() : WiFi.softAPIP())); @@ -338,7 +346,9 @@ 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_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_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); @@ -777,7 +787,9 @@ namespace WebUI { /** * End WiFi */ - void WiFiConfig::end() { StopWiFi(); } + void WiFiConfig::end() { + StopWiFi(); + } /** * Reset ESP @@ -797,12 +809,16 @@ 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 @@ -816,7 +832,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) { @@ -841,6 +857,8 @@ 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 ad818e294..b13a1d0c1 100644 --- a/FluidNC/src/WebUI/WifiConfig.h +++ b/FluidNC/src/WebUI/WifiConfig.h @@ -41,6 +41,9 @@ 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 = ""; @@ -56,6 +59,7 @@ 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 @@ -124,6 +128,7 @@ 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 d01a002c6..1fa4bd570 100644 --- a/FluidNC/src/WebUI/WifiServices.cpp +++ b/FluidNC/src/WebUI/WifiServices.cpp @@ -10,9 +10,13 @@ namespace WebUI { WiFiServices wifi_services; WiFiServices::WiFiServices() {} - WiFiServices::~WiFiServices() { end(); } + WiFiServices::~WiFiServices() { + end(); + } - bool WiFiServices::begin() { return false; } + bool WiFiServices::begin() { + return false; + } void WiFiServices::end() {} void WiFiServices::handle() {} } @@ -33,7 +37,9 @@ namespace WebUI { WiFiServices wifi_services; WiFiServices::WiFiServices() {} - WiFiServices::~WiFiServices() { end(); } + WiFiServices::~WiFiServices() { + end(); + } bool WiFiServices::begin() { bool no_error = true; @@ -82,49 +88,49 @@ namespace WebUI { }); ArduinoOTA.begin(); //no need in AP mode - if (WiFi.getMode() == WIFI_STA) { + if (WiFi.getMode() == WIFI_STA && WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) //start mDns const char* h = wifi_hostname->get(); - if (!MDNS.begin(h)) { - log_info("Cannot start mDNS"); - no_error = false; - } else { - log_info("Start mDNS with hostname:http://" << h << ".local/"); - } + if (!MDNS.begin(h)) { + log_info("Cannot start mDNS"); + no_error = false; + } else { + log_info("Start mDNS with hostname:http://" << h << ".local/"); } - webServer.begin(); - telnetServer.begin(); - notificationsService.begin(); - - //be sure we are not is mixed mode in setup - WiFi.scanNetworks(true); - return no_error; } - void WiFiServices::end() { - notificationsService.end(); - telnetServer.end(); - webServer.end(); + webServer.begin(); + telnetServer.begin(); + notificationsService.begin(); - //stop OTA - ArduinoOTA.end(); + //be sure we are not is mixed mode in setup + WiFi.scanNetworks(true); + return no_error; +} +void WiFiServices::end() { + notificationsService.end(); + telnetServer.end(); + webServer.end(); - //Stop mDNS - MDNS.end(); - } + //stop OTA + ArduinoOTA.end(); - void WiFiServices::handle() { - //to avoid mixed mode due to scan network - if (WiFi.getMode() == WIFI_AP_STA) { - // In principle it should be sufficient to check for != WIFI_SCAN_RUNNING, - // but that does not work well. Doing so makes scans in AP mode unreliable. - // Sometimes the first try works, but subsequent scans fail. - if (WiFi.scanComplete() >= 0) { - WiFi.enableSTA(false); - } + //Stop mDNS + MDNS.end(); +} + +void WiFiServices::handle() { + //to avoid mixed mode due to scan network + if (WiFi.getMode() == WIFI_AP_STA) { + // In principle it should be sufficient to check for != WIFI_SCAN_RUNNING, + // but that does not work well. Doing so makes scans in AP mode unreliable. + // Sometimes the first try works, but subsequent scans fail. + if (WiFi.scanComplete() >= 0) { + WiFi.enableSTA(false); } - ArduinoOTA.handle(); - webServer.handle(); - telnetServer.handle(); } + ArduinoOTA.handle(); + webServer.handle(); + telnetServer.handle(); +} } #endif From c8a8545b857fc15471017903288501132eadd650 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 4 Oct 2023 10:16:45 -1000 Subject: [PATCH 152/212] Fixed missing brace and eliminated unnecessary enum --- FluidNC/src/WebUI/TelnetServer.cpp | 6 +-- FluidNC/src/WebUI/WebServer.cpp | 36 ++++--------- FluidNC/src/WebUI/WifiConfig.cpp | 35 ++++--------- FluidNC/src/WebUI/WifiConfig.h | 5 +- FluidNC/src/WebUI/WifiServices.cpp | 82 ++++++++++++++---------------- 5 files changed, 61 insertions(+), 103 deletions(-) diff --git a/FluidNC/src/WebUI/TelnetServer.cpp b/FluidNC/src/WebUI/TelnetServer.cpp index 0abf7d54c..3d82381e2 100644 --- a/FluidNC/src/WebUI/TelnetServer.cpp +++ b/FluidNC/src/WebUI/TelnetServer.cpp @@ -50,7 +50,7 @@ namespace WebUI { _setupdone = true; //add mDNS - if (WebUI::wifi_sta_ssdp->get() == SSDP_ENABLED) { + if (WebUI::wifi_sta_ssdp->get()) { MDNS.addService("telnet", "tcp", _port); } @@ -92,9 +92,7 @@ namespace WebUI { allChannels.registration(tnc); } } - TelnetServer::~TelnetServer() { - end(); - } + TelnetServer::~TelnetServer() { end(); } } #endif diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 2c2ddf193..224ca3e69 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -87,9 +87,7 @@ namespace WebUI { &onoffOptions, NULL); } - Web_Server::~Web_Server() { - end(); - } + Web_Server::~Web_Server() { end(); } bool Web_Server::begin() { bool no_error = true; @@ -161,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 && WebUI::wifi_sta_ssdp->get()) { _webserver->on("/description.xml", HTTP_GET, handle_SSDP); //Add specific for SSDP SSDP.setSchemaURL("description.xml"); @@ -187,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 && WebUI::wifi_sta_ssdp->get()) { MDNS.addService("http", "tcp", _port); } @@ -318,9 +316,7 @@ namespace WebUI { "interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) " "\n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n\n\n\n\n\n"; - void Web_Server::sendCaptivePortal() { - sendWithOurAddress(PAGE_CAPTIVE, 200); - } + void Web_Server::sendCaptivePortal() { sendWithOurAddress(PAGE_CAPTIVE, 200); } //Default 404 page that is sent when a request cannot be satisfied const char PAGE_404[] = @@ -330,9 +326,7 @@ namespace WebUI { "interval=setInterval(function(){\ni=i+1; \nvar x = document.getElementById(\"prg\"); \nx.value=i; \nif (i>5) " "\n{\nclearInterval(interval);\nwindow.location.href='/';\n}\n},1000);\n\n\n\n\n\n"; - void Web_Server::send404Page() { - sendWithOurAddress(PAGE_404, 404); - } + void Web_Server::send404Page() { sendWithOurAddress(PAGE_404, 404); } void Web_Server::handle_root() { if (!(_webserver->hasArg("forcefallback") && _webserver->arg("forcefallback") == "yes")) { @@ -758,16 +752,10 @@ namespace WebUI { sendJSON(code, s); } - void Web_Server::sendAuthFailed() { - sendStatus(401, "Authentication failed"); - } + void Web_Server::sendAuthFailed() { sendStatus(401, "Authentication failed"); } - void Web_Server::LocalFSFileupload() { - fileUpload(localfsName); - } - void Web_Server::SDFileUpload() { - fileUpload(sdName); - } + void Web_Server::LocalFSFileupload() { fileUpload(localfsName); } + void Web_Server::SDFileUpload() { fileUpload(sdName); } //Web Update handler void Web_Server::handleUpdate() { @@ -1012,12 +1000,8 @@ namespace WebUI { sendJSON(200, s); } - void Web_Server::handle_direct_SDFileList() { - handleFileOps(sdName); - } - void Web_Server::handleFileList() { - handleFileOps(localfsName); - } + void Web_Server::handle_direct_SDFileList() { handleFileOps(sdName); } + void Web_Server::handleFileList() { handleFileOps(localfsName); } // File upload void Web_Server::uploadStart(const char* filename, size_t filesize, const char* fs) { diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index 49c542e58..7fd4523d4 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -13,9 +13,9 @@ 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 @@ -140,14 +140,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())); @@ -348,7 +341,7 @@ namespace WebUI { 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); + new EnumSetting("SSDP and mDNS enable", WEBSET, WA, NULL, "Sta/SSDP/Enable", DEFAULT_STA_SSDP_ENABLED, &onoffOptions, 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 +780,7 @@ namespace WebUI { /** * End WiFi */ - void WiFiConfig::end() { - StopWiFi(); - } + void WiFiConfig::end() { StopWiFi(); } /** * Reset ESP @@ -809,16 +800,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 +819,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 +844,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..8ff92f1db 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,7 @@ 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 int DEFAULT_STA_SSDP_ENABLED = true; static const char* HIDDEN_PASSWORD = "********"; //boundaries diff --git a/FluidNC/src/WebUI/WifiServices.cpp b/FluidNC/src/WebUI/WifiServices.cpp index 1fa4bd570..0d322abdd 100644 --- a/FluidNC/src/WebUI/WifiServices.cpp +++ b/FluidNC/src/WebUI/WifiServices.cpp @@ -10,13 +10,9 @@ namespace WebUI { WiFiServices wifi_services; WiFiServices::WiFiServices() {} - WiFiServices::~WiFiServices() { - end(); - } + WiFiServices::~WiFiServices() { end(); } - bool WiFiServices::begin() { - return false; - } + bool WiFiServices::begin() { return false; } void WiFiServices::end() {} void WiFiServices::handle() {} } @@ -37,9 +33,7 @@ namespace WebUI { WiFiServices wifi_services; WiFiServices::WiFiServices() {} - WiFiServices::~WiFiServices() { - end(); - } + WiFiServices::~WiFiServices() { end(); } bool WiFiServices::begin() { bool no_error = true; @@ -88,49 +82,49 @@ 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 && WebUI::wifi_sta_ssdp->get()) { //start mDns const char* h = wifi_hostname->get(); - if (!MDNS.begin(h)) { - log_info("Cannot start mDNS"); - no_error = false; - } else { - log_info("Start mDNS with hostname:http://" << h << ".local/"); + if (!MDNS.begin(h)) { + log_info("Cannot start mDNS"); + no_error = false; + } else { + log_info("Start mDNS with hostname:http://" << h << ".local/"); + } } - } - webServer.begin(); - telnetServer.begin(); - notificationsService.begin(); + webServer.begin(); + telnetServer.begin(); + notificationsService.begin(); - //be sure we are not is mixed mode in setup - WiFi.scanNetworks(true); - return no_error; -} -void WiFiServices::end() { - notificationsService.end(); - telnetServer.end(); - webServer.end(); + //be sure we are not is mixed mode in setup + WiFi.scanNetworks(true); + return no_error; + } + void WiFiServices::end() { + notificationsService.end(); + telnetServer.end(); + webServer.end(); - //stop OTA - ArduinoOTA.end(); + //stop OTA + ArduinoOTA.end(); - //Stop mDNS - MDNS.end(); -} + //Stop mDNS + MDNS.end(); + } -void WiFiServices::handle() { - //to avoid mixed mode due to scan network - if (WiFi.getMode() == WIFI_AP_STA) { - // In principle it should be sufficient to check for != WIFI_SCAN_RUNNING, - // but that does not work well. Doing so makes scans in AP mode unreliable. - // Sometimes the first try works, but subsequent scans fail. - if (WiFi.scanComplete() >= 0) { - WiFi.enableSTA(false); + void WiFiServices::handle() { + //to avoid mixed mode due to scan network + if (WiFi.getMode() == WIFI_AP_STA) { + // In principle it should be sufficient to check for != WIFI_SCAN_RUNNING, + // but that does not work well. Doing so makes scans in AP mode unreliable. + // Sometimes the first try works, but subsequent scans fail. + if (WiFi.scanComplete() >= 0) { + WiFi.enableSTA(false); + } } + ArduinoOTA.handle(); + webServer.handle(); + telnetServer.handle(); } - ArduinoOTA.handle(); - webServer.handle(); - telnetServer.handle(); -} } #endif From d1fa280f27e8f2eae3b98a79d8b5fc8d73c8e9ac Mon Sep 17 00:00:00 2001 From: bdring Date: Wed, 4 Oct 2023 20:17:21 -0500 Subject: [PATCH 153/212] WIP --- FluidNC/src/Pin.cpp | 13 ++++++------- .../Pins/{UARTPinDetail.cpp => UARTIODetail.cpp} | 6 ++++-- .../src/Pins/{UARTPinDetail.h => UARTIODetail.h} | 0 FluidNC/src/UartChannel.h | 9 +++++---- example_configs/uartio.yaml | 9 ++++++++- 5 files changed, 23 insertions(+), 14 deletions(-) rename FluidNC/src/Pins/{UARTPinDetail.cpp => UARTIODetail.cpp} (96%) rename FluidNC/src/Pins/{UARTPinDetail.h => UARTIODetail.h} (100%) diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index 829493dcc..747a4172c 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -10,7 +10,7 @@ #include "Pins/GPIOPinDetail.h" #include "Pins/VoidPinDetail.h" #include "Pins/I2SOPinDetail.h" -#include "Pins/UARTPinDetail.h" +#include "Pins/UARTIODetail.h" #include "Pins/ErrorPinDetail.h" #include "string_util.h" #include "Machine/MachineConfig.h" // config @@ -84,18 +84,17 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa if (prefix.length() == 13) { if (prefix.substr(0, 12) == "uart_channel") { - log_info("More:" << prefix[12]); if (prefix[12] >= '0' && prefix[12] <= '2') { // TODO use MAX_N_UARTS - // check to see if the channel exits auto deviceId = prefix[12] - '0'; - if (config->_uart_channels[deviceId] == nullptr) { - return " uart channel number not found"; - } + // check to see if the channel exists + //if (config->_uart_channels[deviceId] == nullptr) { + // return " uart channel is not a controller"; + //} pinImplementation = new Pins::UARTIODetail(deviceId, pinnum_t(pin_number), parser); } else { return "Incorrect pin extender specification. Expected 'pinext[0-2].[port number]'."; } - } + } } if (string_util::equal_ignore_case(prefix, "no_pin")) { diff --git a/FluidNC/src/Pins/UARTPinDetail.cpp b/FluidNC/src/Pins/UARTIODetail.cpp similarity index 96% rename from FluidNC/src/Pins/UARTPinDetail.cpp rename to FluidNC/src/Pins/UARTIODetail.cpp index 34ae4b280..3b4700ca0 100644 --- a/FluidNC/src/Pins/UARTPinDetail.cpp +++ b/FluidNC/src/Pins/UARTIODetail.cpp @@ -2,7 +2,7 @@ // Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. #ifdef ESP32 -# include "UARTPinDetail.h" +# include "UARTIODetail.h" # include "PinDetail.h" # include "../I2SOut.h" @@ -42,10 +42,11 @@ namespace Pins { // delivery to the serial shift register chain via DMA and a FIFO PinCapabilities UARTIODetail::capabilities() const { - return PinCapabilities::Output | PinCapabilities::UARTIO; + return PinCapabilities::Output | PinCapabilities::UARTIO | PinCapabilities::PWM | PinCapabilities::Input; } void IRAM_ATTR UARTIODetail::write(int high) { + log_info("uart pin write"); if (high != _lastWrittenValue) { _lastWrittenValue = high; if (!_attributes.has(PinAttributes::Output)) { @@ -58,6 +59,7 @@ namespace Pins { } int UARTIODetail::read() { + log_info("Uart Read"); return 0; } diff --git a/FluidNC/src/Pins/UARTPinDetail.h b/FluidNC/src/Pins/UARTIODetail.h similarity index 100% rename from FluidNC/src/Pins/UARTPinDetail.h rename to FluidNC/src/Pins/UARTIODetail.h diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index dbbca4e4c..50b522ade 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -13,13 +13,13 @@ class UartChannel : public Channel, public Configuration::Configurable { Uart* _uart; int _uart_num = 0; - bool _has_pins = false; // the device is a pin extender + bool _controller = false; // the device is a pin extender public: UartChannel(bool addCR = false); void init(); - void init(Uart* uart); + void init(Uart* uart); // Print methods (Stream inherits from Print) size_t write(uint8_t c) override; @@ -28,7 +28,7 @@ class UartChannel : public Channel, public Configuration::Configurable { // Stream methods (Channel inherits from Stream) int peek(void) override; int available(void) override; - int read() override; + int read() override; // Channel methods int rx_buffer_available() override; @@ -38,11 +38,12 @@ class UartChannel : public Channel, public Configuration::Configurable { bool realtimeOkay(char c) override; bool lineComplete(char* line, char c) override; Channel* pollLine(char* line) override; + bool isController(){return _controller;} // Configuration methods void group(Configuration::HandlerBase& handler) override { handler.item("uart_num", _uart_num); - handler.item("has_pins", _has_pins); + handler.item("controller", _controller); } }; diff --git a/example_configs/uartio.yaml b/example_configs/uartio.yaml index b1775e725..fb13b9bb0 100644 --- a/example_configs/uartio.yaml +++ b/example_configs/uartio.yaml @@ -31,8 +31,15 @@ spi: sdcard: cs_pin: gpio.5 card_detect_pin: NO_PIN + +probe: + pin: uart_channel0.3 + +user_outputs: + analog0_pin: uart_channel0.2 coolant: - mist_pin: uart_channel0.1 + mist_pin: uart_channel0.0 + flood_pin: uart_channel0.1 From d0ba0959352a53e1cd9346ee4d79c56d207c569a Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 6 Oct 2023 20:41:59 -0500 Subject: [PATCH 154/212] Fix add $30 to $$ report Also fixed errors when there is no spindle. --- FluidNC/src/ProcessSettings.cpp | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 4c2a29dab..047860572 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -35,6 +35,8 @@ // WU Readable and writable as user and admin // WA Readable as user and admin, writable as admin +static Error fakeMaxSpindleSpeed(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out); + // If authentication is disabled, auth_level will be LEVEL_ADMIN static bool auth_failed(Word* w, const char* value, WebUI::AuthenticationLevel auth_level) { permissions_t permissions = w->getPermissions(); @@ -193,6 +195,8 @@ static void show_settings(Channel& out, type_t type) { show_setting(s->getGrblName(), s->getCompatibleValue(), NULL, out); } } + // need this per issue #1036 + fakeMaxSpindleSpeed(NULL, WebUI::AuthenticationLevel::LEVEL_ADMIN, out); } static Error report_normal_settings(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { show_settings(out, GRBL); // GRBL non-axis settings @@ -687,14 +691,22 @@ static Error dump_config(const char* value, WebUI::AuthenticationLevel auth_leve static Error fakeMaxSpindleSpeed(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { if (!value) { - log_to(out, "$30=", spindle->maxSpeed()) + if (spindle != nullptr) { + log_to(out, "$30=0"); + } else { + log_to(out, "$30=", spindle->maxSpeed()); + } } return Error::Ok; } static Error fakeLaserMode(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { if (!value) { - log_to(out, "$32=", (spindle->isRateAdjusted() ? "1" : "0")); + if (spindle != nullptr) { + log_to(out, "$32=0"); + } else { + log_to(out, "$32=", (spindle->isRateAdjusted() ? "1" : "0")); + } } return Error::Ok; } From 094db49a9b6b30755589b763ad19658ab8f7b5d5 Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 6 Oct 2023 21:37:18 -0500 Subject: [PATCH 155/212] Fixed .... spindle is never nullptr --- FluidNC/src/ProcessSettings.cpp | 12 ++---------- FluidNC/src/Spindles/Spindle.cpp | 8 ++++++++ FluidNC/src/Spindles/Spindle.h | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 047860572..dbd6d7116 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -691,22 +691,14 @@ static Error dump_config(const char* value, WebUI::AuthenticationLevel auth_leve static Error fakeMaxSpindleSpeed(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { if (!value) { - if (spindle != nullptr) { - log_to(out, "$30=0"); - } else { - log_to(out, "$30=", spindle->maxSpeed()); - } + log_to(out, "$30=", spindle->maxSpeed()); } return Error::Ok; } static Error fakeLaserMode(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { if (!value) { - if (spindle != nullptr) { - log_to(out, "$32=0"); - } else { - log_to(out, "$32=", (spindle->isRateAdjusted() ? "1" : "0")); - } + log_to(out, "$32=", (spindle->isRateAdjusted() ? "1" : "0")); } return Error::Ok; } diff --git a/FluidNC/src/Spindles/Spindle.cpp b/FluidNC/src/Spindles/Spindle.cpp index fa617f8e7..eefc09aea 100644 --- a/FluidNC/src/Spindles/Spindle.cpp +++ b/FluidNC/src/Spindles/Spindle.cpp @@ -103,6 +103,14 @@ namespace Spindles { _speeds.push_back({ max, 100.0f }); } + uint32_t Spindle::maxSpeed() { + if (_speeds.size() == 0) { + return 0; + } else { + return _speeds[_speeds.size() - 1].speed; + } + } + uint32_t IRAM_ATTR Spindle::mapSpeed(SpindleSpeed speed) { if (_speeds.size() == 0) { return 0; diff --git a/FluidNC/src/Spindles/Spindle.h b/FluidNC/src/Spindles/Spindle.h index ccf5d3255..ee772a990 100644 --- a/FluidNC/src/Spindles/Spindle.h +++ b/FluidNC/src/Spindles/Spindle.h @@ -31,7 +31,7 @@ namespace Spindles { bool _defaultedSpeeds; uint32_t offSpeed() { return _speeds[0].offset; } - uint32_t maxSpeed() { return _speeds[_speeds.size() - 1].speed; } + uint32_t maxSpeed(); // { return _speeds[_speeds.size() - 1].speed; } uint32_t mapSpeed(SpindleSpeed speed); void setupSpeeds(uint32_t max_dev_speed); void shelfSpeeds(SpindleSpeed min, SpindleSpeed max); From 184afd43f0084d79b6a359988aafcd941b304b66 Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 7 Oct 2023 13:04:33 -0500 Subject: [PATCH 156/212] cleanup --- FluidNC/src/Spindles/Spindle.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/Spindles/Spindle.h b/FluidNC/src/Spindles/Spindle.h index ee772a990..85e7be5e6 100644 --- a/FluidNC/src/Spindles/Spindle.h +++ b/FluidNC/src/Spindles/Spindle.h @@ -31,7 +31,7 @@ namespace Spindles { bool _defaultedSpeeds; uint32_t offSpeed() { return _speeds[0].offset; } - uint32_t maxSpeed(); // { return _speeds[_speeds.size() - 1].speed; } + uint32_t maxSpeed(); uint32_t mapSpeed(SpindleSpeed speed); void setupSpeeds(uint32_t max_dev_speed); void shelfSpeeds(SpindleSpeed min, SpindleSpeed max); From 05641dc8a80e74d55cc4370d2ff2138ed0f5ca30 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 7 Oct 2023 09:03:33 -1000 Subject: [PATCH 157/212] report_interval_ms config for some channel types --- FluidNC/src/OLED.cpp | 2 +- FluidNC/src/OLED.h | 3 +++ FluidNC/src/Status_outputs.cpp | 6 +++--- FluidNC/src/Status_outputs.h | 10 +++++----- FluidNC/src/UartChannel.cpp | 1 + FluidNC/src/UartChannel.h | 14 ++++++++------ 6 files changed, 21 insertions(+), 15 deletions(-) diff --git a/FluidNC/src/OLED.cpp b/FluidNC/src/OLED.cpp index 886631064..ce34cf8b9 100644 --- a/FluidNC/src/OLED.cpp +++ b/FluidNC/src/OLED.cpp @@ -81,7 +81,7 @@ void OLED::init() { _oled->display(); allChannels.registration(this); - setReportInterval(500); + setReportInterval(_report_interval_ms); } Channel* OLED::pollLine(char* line) { diff --git a/FluidNC/src/OLED.h b/FluidNC/src/OLED.h index 25e599696..96f130ab1 100644 --- a/FluidNC/src/OLED.h +++ b/FluidNC/src/OLED.h @@ -45,6 +45,8 @@ class OLED : public Channel, public Configuration::Configurable { uint8_t _i2c_num = 0; + int _report_interval_ms = 500; + void parse_report(); void parse_status_report(); void parse_gcode_report(); @@ -115,6 +117,7 @@ class OLED : public Channel, public Configuration::Configurable { void afterParse() override; void group(Configuration::HandlerBase& handler) override { + handler.item("report_interval_ms", _report_interval_ms, 100, 5000); handler.item("i2c_num", _i2c_num); handler.item("i2c_address", _address); handler.item("width", _width); diff --git a/FluidNC/src/Status_outputs.cpp b/FluidNC/src/Status_outputs.cpp index 2ed99b8f5..d6a468809 100644 --- a/FluidNC/src/Status_outputs.cpp +++ b/FluidNC/src/Status_outputs.cpp @@ -27,11 +27,11 @@ void Status_Outputs::init() { } log_info("Status outputs" - << " Interval:" << _interval_ms << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() << " Hold:" << _Hold_pin.name() - << " Alarm:" << _Alarm_pin.name()); + << " Interval:" << _report_interval_ms << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() + << " Hold:" << _Hold_pin.name() << " Alarm:" << _Alarm_pin.name()); allChannels.registration(this); - setReportInterval(_interval_ms); + setReportInterval(_report_interval_ms); } void Status_Outputs::parse_report() { diff --git a/FluidNC/src/Status_outputs.h b/FluidNC/src/Status_outputs.h index 793624288..1ef334ee7 100644 --- a/FluidNC/src/Status_outputs.h +++ b/FluidNC/src/Status_outputs.h @@ -17,7 +17,7 @@ class Status_Outputs : public Channel, public Configuration::Configurable { std::string _report; std::string _state; - int _interval_ms = 500; + int _report_interval_ms = 500; void parse_report(); void parse_status_report(); @@ -25,10 +25,10 @@ class Status_Outputs : public Channel, public Configuration::Configurable { public: Status_Outputs() : Channel("status_outputs") {} - Status_Outputs(const Status_Outputs&) = delete; - Status_Outputs(Status_Outputs&&) = delete; + Status_Outputs(const Status_Outputs&) = delete; + Status_Outputs(Status_Outputs&&) = delete; Status_Outputs& operator=(const Status_Outputs&) = delete; - Status_Outputs& operator=(Status_Outputs&&) = delete; + Status_Outputs& operator=(Status_Outputs&&) = delete; virtual ~Status_Outputs() = default; @@ -47,7 +47,7 @@ class Status_Outputs : public Channel, public Configuration::Configurable { void afterParse() override {}; void group(Configuration::HandlerBase& handler) override { - handler.item("report_interval_ms", _interval_ms, 100, 5000); + handler.item("report_interval_ms", _report_interval_ms, 100, 5000); handler.item("idle_pin", _Idle_pin); handler.item("run_pin", _Run_pin); handler.item("hold_pin", _Hold_pin); diff --git a/FluidNC/src/UartChannel.cpp b/FluidNC/src/UartChannel.cpp index 8cd56f158..4aff0cf8c 100644 --- a/FluidNC/src/UartChannel.cpp +++ b/FluidNC/src/UartChannel.cpp @@ -16,6 +16,7 @@ void UartChannel::init() { } else { log_error("UartChannel: missing uart" << _uart_num); } + setReportInterval(_report_interval_ms); } void UartChannel::init(Uart* uart) { _uart = uart; diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index 50b522ade..055612744 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -12,14 +12,15 @@ class UartChannel : public Channel, public Configuration::Configurable { Lineedit* _lineedit; Uart* _uart; - int _uart_num = 0; - bool _controller = false; // the device is a pin extender + int _uart_num = 0; + int _report_interval_ms = 0; + bool _controller = false; // the device is a pin extender public: UartChannel(bool addCR = false); void init(); - void init(Uart* uart); + void init(Uart* uart); // Print methods (Stream inherits from Print) size_t write(uint8_t c) override; @@ -28,7 +29,7 @@ class UartChannel : public Channel, public Configuration::Configurable { // Stream methods (Channel inherits from Stream) int peek(void) override; int available(void) override; - int read() override; + int read() override; // Channel methods int rx_buffer_available() override; @@ -38,10 +39,11 @@ class UartChannel : public Channel, public Configuration::Configurable { bool realtimeOkay(char c) override; bool lineComplete(char* line, char c) override; Channel* pollLine(char* line) override; - bool isController(){return _controller;} + bool isController() { return _controller; } // Configuration methods - void group(Configuration::HandlerBase& handler) override { + void group(Configuration::HandlerBase& handler) override { + handler.item("report_interval_ms", _report_interval_ms); handler.item("uart_num", _uart_num); handler.item("controller", _controller); } From c86b291b2143104dfa60669a23c33633700dca20 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 8 Oct 2023 12:33:42 -1000 Subject: [PATCH 158/212] Pin extenders via Channel --- FluidNC/src/Channel.cpp | 52 ++++++++++- FluidNC/src/Channel.h | 25 ++++- FluidNC/src/ControlPin.cpp | 11 ++- FluidNC/src/ControlPin.h | 8 +- FluidNC/src/Machine/EventPin.cpp | 33 ++----- FluidNC/src/Machine/EventPin.h | 36 ++------ FluidNC/src/Machine/LimitPin.cpp | 7 +- FluidNC/src/Machine/LimitPin.h | 4 + FluidNC/src/Pin.cpp | 32 +++++-- FluidNC/src/Pin.h | 23 +---- FluidNC/src/Pins/ChannelPinDetail.cpp | 26 ++++++ FluidNC/src/Pins/ChannelPinDetail.h | 32 +++++++ FluidNC/src/Pins/DebugPinDetail.cpp | 36 -------- FluidNC/src/Pins/DebugPinDetail.h | 4 - FluidNC/src/Pins/GPIOPinDetail.cpp | 18 ++-- FluidNC/src/Pins/GPIOPinDetail.h | 6 +- FluidNC/src/Pins/PinAttributes.h | 3 + FluidNC/src/Pins/PinDetail.cpp | 9 +- FluidNC/src/Pins/PinDetail.h | 5 +- FluidNC/src/Pins/PinOptionsParser.h | 2 - FluidNC/src/Pins/UARTIODetail.cpp | 109 ---------------------- FluidNC/src/Pins/UARTIODetail.h | 38 -------- FluidNC/src/RealtimeCmd.cpp | 126 ++++++++++++++++++++++++++ FluidNC/src/RealtimeCmd.h | 56 ++++++++++++ FluidNC/src/Serial.cpp | 103 --------------------- FluidNC/src/Serial.h | 47 ---------- FluidNC/src/WebUI/WSChannel.cpp | 18 +++- FluidNC/test/Pins/ErrorPinTest.cpp | 3 - FluidNC/test/Pins/GPIO.cpp | 14 --- FluidNC/test/Pins/Undefined.cpp | 3 - 30 files changed, 412 insertions(+), 477 deletions(-) create mode 100644 FluidNC/src/Pins/ChannelPinDetail.cpp create mode 100644 FluidNC/src/Pins/ChannelPinDetail.h delete mode 100644 FluidNC/src/Pins/UARTIODetail.cpp delete mode 100644 FluidNC/src/Pins/UARTIODetail.h create mode 100644 FluidNC/src/RealtimeCmd.cpp create mode 100644 FluidNC/src/RealtimeCmd.h diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index 28d033d72..32b8fa285 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -4,7 +4,7 @@ #include "Channel.h" #include "Report.h" // report_gcode_modes #include "Machine/MachineConfig.h" // config -#include "Serial.h" // execute_realtime_command +#include "RealtimeCmd.h" // execute_realtime_command #include "Limits.h" void Channel::flushRx() { @@ -140,10 +140,34 @@ Channel* Channel::pollLine(char* line) { if (ch < 0) { break; } - if (realtimeOkay(ch) && is_realtime_command(ch)) { - execute_realtime_command(static_cast(ch), *this); + if (_last_rt_cmd == Cmd::PinLow) { + try { + auto event_pin = _events.at(ch); + _pin_values[ch] = false; + event_pin->trigger(false); + } catch (std::exception& ex) {} + _last_rt_cmd = Cmd::None; continue; } + if (_last_rt_cmd == Cmd::PinHigh) { + try { + auto event_pin = _events.at(ch); + _pin_values[ch] = true; + event_pin->trigger(true); + } catch (std::exception& ex) {} + _last_rt_cmd = Cmd::None; + continue; + } + if (realtimeOkay(ch)) { + if (is_extended_realtime_command(ch)) { + _last_rt_cmd = static_cast(ch); + continue; + } + if (is_realtime_command(ch)) { + execute_realtime_command(static_cast(ch), *this); + continue; + } + } if (!line) { // If we are not able to handle a line we save the character // until later @@ -158,6 +182,28 @@ Channel* Channel::pollLine(char* line) { return nullptr; } +void Channel::setAttr(int index, Pins::PinAttributes attr) { + // XXX send INI message + _pin_attributes[index] = attr; +} +Pins::PinAttributes Channel::getAttr(int index) const { + try { + return _pin_attributes.at(index); + } catch (std::exception& ex) { return Pins::PinAttributes::None; } +} + +void Channel::out(int index, int value) { + _pin_values[index] = value; + // XXX send SET message +} +int Channel::in(int index) { + return _pin_values[index]; +} + +void Channel::registerEvent(uint8_t code, EventPin* obj) { + _events[code] = obj; +} + void Channel::ack(Error status) { if (status == Error::Ok) { log_to(*this, "ok"); diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index 9ba892d38..3cb13333b 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -16,9 +16,14 @@ #pragma once -#include "Error.h" // Error -#include "GCode.h" // gc_modal_t -#include "Types.h" // State +#include "Error.h" // Error +#include "GCode.h" // gc_modal_t +#include "Types.h" // State +#include "RealtimeCmd.h" // Cmd + +#include "Pins/PinAttributes.h" +#include "Machine/EventPin.h" + #include #include // TickType_T #include @@ -50,6 +55,12 @@ class Channel : public Stream { bool _reportWco = true; CoordIndex _reportNgc = CoordIndex::End; + Cmd _last_rt_cmd; + + std::map _events; + std::map _pin_values; + std::map _pin_attributes; + public: Channel(const char* name, bool addCR = false) : _name(name), _linelen(0), _addCR(addCR) {} virtual ~Channel() = default; @@ -108,4 +119,12 @@ class Channel : public Stream { uint32_t getReportInterval() { return _reportInterval; } virtual void autoReport(); void autoReportGCodeState(); + + // Pin extender functions + virtual void out(int index, int value); + virtual int in(int index); + virtual void setAttr(int index, Pins::PinAttributes value); + virtual Pins::PinAttributes getAttr(int index) const; + + virtual void registerEvent(uint8_t code, EventPin* obj); }; diff --git a/FluidNC/src/ControlPin.cpp b/FluidNC/src/ControlPin.cpp index 721a7adac..763c9a5ff 100644 --- a/FluidNC/src/ControlPin.cpp +++ b/FluidNC/src/ControlPin.cpp @@ -1,3 +1,12 @@ #include "ControlPin.h" -namespace Machine {} +namespace Machine { + void ControlPin::init() { + if (_pin.undefined()) { + return; + } + _pin.report(_legend); + _pin.setAttr(Pin::Attr::Input); + _pin.registerEvent(static_cast(this)); + } +}; diff --git a/FluidNC/src/ControlPin.h b/FluidNC/src/ControlPin.h index 01f72191f..c9e451fe2 100644 --- a/FluidNC/src/ControlPin.h +++ b/FluidNC/src/ControlPin.h @@ -3,15 +3,19 @@ #include "Pin.h" #include "Machine/EventPin.h" namespace Machine { - class ControlPin : public Machine::EventPin { + class ControlPin : public EventPin { private: const char _letter; // The name that appears in init() messages and the name of the configuration item public: - ControlPin(Event* event, const char* legend, char letter) : EventPin(event, legend, &_pin), _letter(letter) {} + ControlPin(Event* event, const char* legend, char letter) : EventPin(event, legend), _letter(letter) {} + + void init(); Pin _pin; + bool get() { return _pin.read(); } + char letter() { return _letter; }; ~ControlPin(); diff --git a/FluidNC/src/Machine/EventPin.cpp b/FluidNC/src/Machine/EventPin.cpp index b8e4beebd..9684112c0 100644 --- a/FluidNC/src/Machine/EventPin.cpp +++ b/FluidNC/src/Machine/EventPin.cpp @@ -4,32 +4,11 @@ #include "src/Protocol.h" // event_queue #include "src/System.h" // sys -#include "Driver/fluidnc_gpio.h" +EventPin::EventPin(Event* event, const char* legend) : _event(event), _legend(legend) {} -namespace Machine { - EventPin::EventPin(Event* event, const char* legend, Pin* pin) : _event(event), _legend(legend), _pin(pin) {} - bool EventPin::get() { return _pin->read(); } - - void EventPin::gpioAction(int gpio_num, void* arg, bool active) { - EventPin* obj = static_cast(arg); - obj->update(active); - if (active) { - protocol_send_event(obj->_event, obj); - } - } - - void EventPin::init() { - if (_pin->undefined()) { - return; - } - - _pin->report(_legend); - - auto attr = Pin::Attr::Input; - _pin->setAttr(attr); - _gpio = _pin->getNative(Pin::Capabilities::Input); - gpio_set_action(_gpio, gpioAction, (void*)this, _pin->getAttr().has(Pin::Attr::ActiveLow)); +void EventPin::trigger(bool active) { + update(active); + if (active) { + protocol_send_event(_event, this); } - - EventPin::~EventPin() { gpio_clear_action(_gpio); } -}; +} diff --git a/FluidNC/src/Machine/EventPin.h b/FluidNC/src/Machine/EventPin.h index 709237bb9..9faa4247a 100644 --- a/FluidNC/src/Machine/EventPin.h +++ b/FluidNC/src/Machine/EventPin.h @@ -1,36 +1,20 @@ #pragma once -#include "src/Pin.h" #include "src/Event.h" -#include "src/Config.h" +#include -namespace Machine { - class EventPin { - protected: - static void gpioAction(int, void*, bool); +class EventPin { +protected: + Event* _event = nullptr; // Subordinate event that is called conditionally - Event* _event = nullptr; // Subordinate event that is called conditionally +public: + std::string _legend; // The name that appears in init() messages and the name of the configuration item - pinnum_t _gpio; + EventPin(Event* event, const char* legend); - static bool inactive(EventPin* pin); + virtual void update(bool state) {}; - public: - std::string _legend; // The name that appears in init() messages and the name of the configuration item + void trigger(bool active); - EventPin(Event* event, const char* legend, Pin* pin); - - // This is a pointer instead of a reference because the derived classes - // like ControlPin and LimitPin "own" the actual Pin object. That is - // necessary because those objects are configurable and must stay - // within their class for later operations on the configuration tree. - Pin* _pin = nullptr; - - void init(); - bool get(); - - virtual void update(bool state) {}; - - ~EventPin(); - }; + ~EventPin() {} }; diff --git a/FluidNC/src/Machine/LimitPin.cpp b/FluidNC/src/Machine/LimitPin.cpp index 35c6dfecd..37cb90ce7 100644 --- a/FluidNC/src/Machine/LimitPin.cpp +++ b/FluidNC/src/Machine/LimitPin.cpp @@ -7,7 +7,8 @@ namespace Machine { LimitPin::LimitPin(Pin& pin, int axis, int motor, int direction, bool& pHardLimits, bool& pLimited) : - EventPin(&limitEvent, "Limit", &pin), _axis(axis), _motorNum(motor), _value(false), _pHardLimits(pHardLimits), _pLimited(pLimited) { + EventPin(&limitEvent, "Limit"), _axis(axis), _motorNum(motor), _value(false), _pHardLimits(pHardLimits), _pLimited(pLimited), + _pin(&pin) { const char* sDir; // Select one or two bitmask variables to receive the switch data switch (direction) { @@ -43,10 +44,12 @@ namespace Machine { } void LimitPin::init() { - EventPin::init(); if (_pin->undefined()) { return; } + _pin->report(_legend); + _pin->setAttr(Pin::Attr::Input); + _pin->registerEvent(static_cast(this)); update(get()); } diff --git a/FluidNC/src/Machine/LimitPin.h b/FluidNC/src/Machine/LimitPin.h index 251ed97c9..75d02e4fd 100644 --- a/FluidNC/src/Machine/LimitPin.h +++ b/FluidNC/src/Machine/LimitPin.h @@ -25,6 +25,8 @@ namespace Machine { volatile uint32_t* _posLimits = nullptr; volatile uint32_t* _negLimits = nullptr; + Pin* _pin; + public: LimitPin(Pin& pin, int axis, int motorNum, int direction, bool& phardLimits, bool& pLimited); @@ -36,6 +38,8 @@ namespace Machine { bool isHard() { return _pHardLimits; } + bool get() { return _pin->read(); } + int _axis; int _motorNum; }; diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index 747a4172c..cb4b14141 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -10,6 +10,7 @@ #include "Pins/GPIOPinDetail.h" #include "Pins/VoidPinDetail.h" #include "Pins/I2SOPinDetail.h" +#include "Pins/ChannelPinDetail.h" #include "Pins/UARTIODetail.h" #include "Pins/ErrorPinDetail.h" #include "string_util.h" @@ -82,6 +83,20 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa pinImplementation = new Pins::I2SOPinDetail(static_cast(pin_number), parser); } + if (string_util::equal_ignore_case(prefix, "uart_channel0")) { + pinImplementation = new Pins::ChannelPinDetail(config->_uart_channels[0], pin_number, parser); + return nullptr; + } + if (string_util::equal_ignore_case(prefix, "uart_channel1")) { + pinImplementation = new Pins::ChannelPinDetail(config->_uart_channels[1], pin_number, parser); + return nullptr; + } + if (string_util::equal_ignore_case(prefix, "uart_channel2")) { + pinImplementation = new Pins::ChannelPinDetail(config->_uart_channels[2], pin_number, parser); + return nullptr; + } + +#if 0 if (prefix.length() == 13) { if (prefix.substr(0, 12) == "uart_channel") { if (prefix[12] >= '0' && prefix[12] <= '2') { // TODO use MAX_N_UARTS @@ -91,31 +106,34 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa // return " uart channel is not a controller"; //} pinImplementation = new Pins::UARTIODetail(deviceId, pinnum_t(pin_number), parser); - } else { - return "Incorrect pin extender specification. Expected 'pinext[0-2].[port number]'."; + return nullptr; } + return "Incorrect pin extender specification. Expected 'pinext[0-2].[port number]'."; } } +#endif if (string_util::equal_ignore_case(prefix, "no_pin")) { pinImplementation = undefinedPin; + return nullptr; } if (string_util::equal_ignore_case(prefix, "void")) { // Note: having multiple void pins has its uses for debugging. pinImplementation = new Pins::VoidPinDetail(); + return nullptr; } if (pinImplementation == nullptr) { log_error("Unknown prefix:" << prefix); return "Unknown pin prefix"; - } else { + } #ifdef DEBUG_PIN_DUMP - pinImplementation = new Pins::DebugPinDetail(pinImplementation); + pinImplementation = new Pins::DebugPinDetail(pinImplementation); + return nullptr; +#else + return "Unknown pin prefix"; #endif - - return nullptr; - } } Pin Pin::create(std::string_view str) { diff --git a/FluidNC/src/Pin.h b/FluidNC/src/Pin.h index bfe4c0762..a3cf11b5f 100644 --- a/FluidNC/src/Pin.h +++ b/FluidNC/src/Pin.h @@ -6,6 +6,7 @@ #include "Pins/PinDetail.h" #include "Pins/PinCapabilities.h" #include "Pins/PinAttributes.h" +#include "src/Machine/EventPin.h" #include // IRAM_ATTR #include @@ -17,21 +18,6 @@ // #define DEBUG_PIN_DUMP // Pin debugging. WILL spam you with a lot of data! -// Yuck, yuck, yuck... apparently we can't create a template with an IRAM_ATTR, because GCC refuses to obide -// by the attributes. In other words, _all_ templates are out when using an ISR! This define makes an anonymous -// method in the class, which can be used to wrap a single function. It can then be used by running the attachInterrupt -// with ISRHandler. -// -// Usage: -// - In header file (private / protected members) or in cpp file in anonymous namespace (public members) -// CreateISRHandlerFor(LimitPin, handleISR); -// - When attaching an ISR: _pin.attachInterrupt(ISRHandler, EITHER_EDGE, this); -// -// I'd rather not use any defines, but templates... but apparently there's no choice here. Let's just make it as safe -// as possible... -#define CreateISRHandlerFor(className, methodName) \ - static void IRAM_ATTR ISRHandler(void* data) { static_cast(data)->methodName(); } - // Pin class. A pin is basically a thing that can 'output', 'input' or do both. GPIO on an ESP32 comes to mind, // but there are way more possible pins. Think about I2S/I2C/SPI extenders, RS485 driven pin devices and even // WiFi wall sockets. @@ -142,12 +128,7 @@ class Pin { static Pin Error() { return Pin(errorPin); } - // ISR handlers. Map methods on 'this' types. - - // Backward compatibility ISR handler: - void attachInterrupt(void (*callback)(void*), int mode, void* arg = nullptr) const { _detail->attachInterrupt(callback, arg, mode); } - - void detachInterrupt() const { _detail->detachInterrupt(); } + void registerEvent(EventPin* obj) { _detail->registerEvent(obj); }; // Other functions: Capabilities capabilities() const { return _detail->capabilities(); } diff --git a/FluidNC/src/Pins/ChannelPinDetail.cpp b/FluidNC/src/Pins/ChannelPinDetail.cpp new file mode 100644 index 000000000..e76f5c8b7 --- /dev/null +++ b/FluidNC/src/Pins/ChannelPinDetail.cpp @@ -0,0 +1,26 @@ +// Copyright (c) 2023 - MitchBradley +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#include "ChannelPinDetail.h" + +namespace Pins { + ChannelPinDetail::ChannelPinDetail(Channel* channel, int number, const PinOptionsParser& options) : + PinDetail(number), _channel(channel) {} + + PinCapabilities ChannelPinDetail::capabilities() const { + return PinCapabilities::Output | PinCapabilities::Input | PinCapabilities::Void; + } + + void ChannelPinDetail::write(int high) { _channel->out(_index, high); } + int ChannelPinDetail::read() { return _channel->in(_index); } + void ChannelPinDetail::setAttr(PinAttributes value) { _channel->setAttr(_index, value); } + PinAttributes ChannelPinDetail::getAttr() const { return _channel->getAttr(_index); } + std::string ChannelPinDetail::toString() { + std::string s = _channel->name(); + s += "."; + s += std::to_string(_index); + return s; + } + + void ChannelPinDetail::registerEvent(EventPin* obj) { _channel->registerEvent(_index, obj); } +} diff --git a/FluidNC/src/Pins/ChannelPinDetail.h b/FluidNC/src/Pins/ChannelPinDetail.h new file mode 100644 index 000000000..c2edb6e3d --- /dev/null +++ b/FluidNC/src/Pins/ChannelPinDetail.h @@ -0,0 +1,32 @@ +// Copyright (c) 2023 - Mitch Bradley +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#pragma once + +#include "PinDetail.h" +#include "PinOptionsParser.h" +#include "src/Channel.h" + +namespace Pins { + class ChannelPinDetail : public PinDetail { + private: + Channel* _channel; + + public: + ChannelPinDetail(Channel* channel, int number, const PinOptionsParser& options); + + PinCapabilities capabilities() const override; + + // I/O: + void write(int high) override; + int read() override; + void setAttr(PinAttributes value) override; + PinAttributes getAttr() const override; + + void registerEvent(EventPin* obj); + + std::string toString() override; + + ~ChannelPinDetail() override {} + }; +} diff --git a/FluidNC/src/Pins/DebugPinDetail.cpp b/FluidNC/src/Pins/DebugPinDetail.cpp index 7bac835e6..d32f7f9f7 100644 --- a/FluidNC/src/Pins/DebugPinDetail.cpp +++ b/FluidNC/src/Pins/DebugPinDetail.cpp @@ -67,40 +67,4 @@ namespace Pins { } handler->callback(handler->argument); } - - // ISR's: - void DebugPinDetail::attachInterrupt(void (*callback)(void*), void* arg, int mode) { - _isrHandler._myPin = this; - _isrHandler.argument = arg; - _isrHandler.callback = callback; - - if (shouldEvent()) { - log_msg_to(Uart0, "Attaching interrupt to pin " << toString() << ", mode " << mode); - } - _implementation->attachInterrupt(_isrHandler.handle, &_isrHandler, mode); - } - void DebugPinDetail::detachInterrupt() { _implementation->detachInterrupt(); } - - bool DebugPinDetail::shouldEvent() { - // This method basically ensures we don't flood users: - auto time = millis(); - - if ((time - _lastEvent) > 1000) { - _lastEvent = time; - _eventCount = 1; - return true; - } else if (_eventCount < 10) { - _lastEvent = time; - ++_eventCount; - return true; - } else if (_eventCount == 10) { - _lastEvent = time; - ++_eventCount; - log_msg_to(Uart0, "Suppressing events..."); - return false; - } else { - _lastEvent = time; - return false; - } - } } diff --git a/FluidNC/src/Pins/DebugPinDetail.h b/FluidNC/src/Pins/DebugPinDetail.h index b6b10ff84..2b2616095 100644 --- a/FluidNC/src/Pins/DebugPinDetail.h +++ b/FluidNC/src/Pins/DebugPinDetail.h @@ -38,10 +38,6 @@ namespace Pins { void setAttr(PinAttributes value) override; PinAttributes getAttr() const override; - // ISR's: - void attachInterrupt(void (*callback)(void*), void* arg, int mode) override; - void detachInterrupt() override; - std::string toString() override { return _implementation->toString(); } ~DebugPinDetail() override {} diff --git a/FluidNC/src/Pins/GPIOPinDetail.cpp b/FluidNC/src/Pins/GPIOPinDetail.cpp index b10172c2e..a1f136b5a 100644 --- a/FluidNC/src/Pins/GPIOPinDetail.cpp +++ b/FluidNC/src/Pins/GPIOPinDetail.cpp @@ -7,8 +7,9 @@ #include #include "GPIOPinDetail.h" -#include "../Assert.h" -#include "../Config.h" +#include "src/Assert.h" +#include "src/Config.h" +#include "src/Machine/EventPin.h" namespace Pins { std::vector GPIOPinDetail::_claimed(nGPIOPins, false); @@ -169,14 +170,15 @@ namespace Pins { false); // We do not have an OpenDrain attribute yet } - void GPIOPinDetail::attachInterrupt(void (*callback)(void*), void* arg, int mode) { - Assert(_attributes.has(PinAttributes::ISR), "Pin %s does not support interrupts", toString().c_str()); - ::attachInterruptArg(_index, callback, arg, mode); + // This is a callback from the low-level GPIO driver that is invoked after + // registerEvent() has been called and the pin becomes active. + void GPIOPinDetail::gpioAction(int gpio_num, void* arg, bool active) { + EventPin* obj = static_cast(arg); + obj->trigger(active); } - void GPIOPinDetail::detachInterrupt() { - Assert(_attributes.has(PinAttributes::ISR), "Pin %s does not support interrupts"); - ::detachInterrupt(_index); + void GPIOPinDetail::registerEvent(EventPin* obj) { + gpio_set_action(_index, gpioAction, (void*)obj, _attributes.has(Pin::Attr::ActiveLow)); } std::string GPIOPinDetail::toString() { diff --git a/FluidNC/src/Pins/GPIOPinDetail.h b/FluidNC/src/Pins/GPIOPinDetail.h index c4f04ef53..68dbdee0b 100644 --- a/FluidNC/src/Pins/GPIOPinDetail.h +++ b/FluidNC/src/Pins/GPIOPinDetail.h @@ -17,6 +17,8 @@ namespace Pins { bool _lastWrittenValue = false; + static void gpioAction(int, void*, bool); + public: static const int nGPIOPins = 40; @@ -30,9 +32,7 @@ namespace Pins { void setAttr(PinAttributes value) override; PinAttributes getAttr() const override; - // ISR's: - void attachInterrupt(void (*callback)(void*), void* arg, int mode) override; - void detachInterrupt() override; + void registerEvent(EventPin* obj) override; std::string toString() override; diff --git a/FluidNC/src/Pins/PinAttributes.h b/FluidNC/src/Pins/PinAttributes.h index 30d5b6617..abe3a43b6 100644 --- a/FluidNC/src/Pins/PinAttributes.h +++ b/FluidNC/src/Pins/PinAttributes.h @@ -23,6 +23,9 @@ namespace Pins { constexpr PinAttributes(const uint32_t value) : _value(value) {} public: + // Having a default constructor lets us use PinAttributes with std::map + PinAttributes() { _value = Undefined; } + PinAttributes(const PinAttributes&) = default; PinAttributes& operator=(const PinAttributes&) = default; diff --git a/FluidNC/src/Pins/PinDetail.cpp b/FluidNC/src/Pins/PinDetail.cpp index d2348af7a..9b41dc30a 100644 --- a/FluidNC/src/Pins/PinDetail.cpp +++ b/FluidNC/src/Pins/PinDetail.cpp @@ -7,13 +7,8 @@ #include // IRAM_ATTR namespace Pins { - void PinDetail::attachInterrupt(void (*callback)(void*), void* arg, int mode) { - Assert(false, "Interrupts are not supported by pin %d", _index); - } - void PinDetail::detachInterrupt() { - Assert(false, "Interrupts are not supported by pin %d", _index); - ; - } + void PinDetail::registerEvent(EventPin* obj) { Assert(false, "registerEvent is not supported by pin %d", _index); } + void IRAM_ATTR PinDetail::synchronousWrite(int high) { write(high); } } diff --git a/FluidNC/src/Pins/PinDetail.h b/FluidNC/src/Pins/PinDetail.h index c0cf4cccb..ecfc77bc7 100644 --- a/FluidNC/src/Pins/PinDetail.h +++ b/FluidNC/src/Pins/PinDetail.h @@ -6,6 +6,7 @@ #include "PinCapabilities.h" #include "PinAttributes.h" #include "PinOptionsParser.h" +#include "src/Machine/EventPin.h" #include #include @@ -37,9 +38,7 @@ namespace Pins { virtual void setAttr(PinAttributes value) = 0; virtual PinAttributes getAttr() const = 0; - // ISR's. - virtual void attachInterrupt(void (*callback)(void*), void* arg, int mode); - virtual void detachInterrupt(); + virtual void registerEvent(EventPin* obj); virtual std::string toString() = 0; diff --git a/FluidNC/src/Pins/PinOptionsParser.h b/FluidNC/src/Pins/PinOptionsParser.h index 73c430477..46d7c288b 100644 --- a/FluidNC/src/Pins/PinOptionsParser.h +++ b/FluidNC/src/Pins/PinOptionsParser.h @@ -3,8 +3,6 @@ #pragma once -class Pin; // Forward declaration - namespace Pins { // Pin options are passed as PinOption object. This is a simple C++ forward iterator, // which will implicitly convert pin options to lower case, so you can simply do diff --git a/FluidNC/src/Pins/UARTIODetail.cpp b/FluidNC/src/Pins/UARTIODetail.cpp deleted file mode 100644 index 3b4700ca0..000000000 --- a/FluidNC/src/Pins/UARTIODetail.cpp +++ /dev/null @@ -1,109 +0,0 @@ -// Copyright (c) 2023 Bart Dring -// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. - -#ifdef ESP32 -# include "UARTIODetail.h" -# include "PinDetail.h" - -# include "../I2SOut.h" -# include "../Assert.h" - -namespace Pins { - std::vector UARTIODetail::_claimed(nPins, false); - - UARTIODetail::UARTIODetail(int deviceId, pinnum_t index, const PinOptionsParser& options) : - PinDetail(index), _capabilities(PinCapabilities::Output | PinCapabilities::UARTIO), _attributes(Pins::PinAttributes::Undefined), - _readWriteMask(0) { - Assert(index < nPins, "Pin number is greater than max %d", nPins - 1); - Assert(!_claimed[index], "Pin is already used."); - - // User defined pin capabilities - for (auto opt : options) { - if (opt.is("pu")) { - } else if (opt.is("pd")) { - } else if (opt.is("low")) { - _attributes = _attributes | PinAttributes::ActiveLow; - } else if (opt.is("high")) { - // Default: Active HIGH. - } else { - Assert(false, "Bad UARTPin option passed to pin %d: %s", int(index), opt()); - } - } - - _device_id = deviceId; - - //log_info("created uart pin:" << index); - _claimed[index] = true; - - // readWriteMask is xor'ed with the value to invert it if active low - _readWriteMask = int(_attributes.has(PinAttributes::ActiveLow)); - } - // The write will not happen immediately; the data is queued for - // delivery to the serial shift register chain via DMA and a FIFO - - PinCapabilities UARTIODetail::capabilities() const { - return PinCapabilities::Output | PinCapabilities::UARTIO | PinCapabilities::PWM | PinCapabilities::Input; - } - - void IRAM_ATTR UARTIODetail::write(int high) { - log_info("uart pin write"); - if (high != _lastWrittenValue) { - _lastWrittenValue = high; - if (!_attributes.has(PinAttributes::Output)) { - log_error(toString()); - } - Assert(_attributes.has(PinAttributes::Output), "Pin %s cannot be written", toString().c_str()); - int value = _readWriteMask ^ high; - log_info("Set uart pin:" << high); - } - } - - int UARTIODetail::read() { - log_info("Uart Read"); - return 0; - } - - void UARTIODetail::setAttr(PinAttributes value) { - // These two assertions will fail if we do them for index 1/3 (Serial uart). This is because - // they are initialized by HardwareSerial well before we start our main operations. Best to - // just ignore them for now, and figure this out later. TODO FIXME! - - // Check the attributes first: - Assert(value.validateWith(this->_capabilities) || _index == 1 || _index == 3, - "The requested attributes don't match the capabilities for %s", - toString().c_str()); - Assert(!_attributes.conflictsWith(value) || _index == 1 || _index == 3, - "The requested attributes on %s conflict with previous settings", - toString().c_str()); - - _attributes = _attributes | value; - - // If the pin is ActiveLow, we should take that into account here: - if (value.has(PinAttributes::Output)) { - //gpio_write(_index, int(value.has(PinAttributes::InitialOn)) ^ _readWriteMask); - } - } - - PinAttributes UARTIODetail::getAttr() const { - return _attributes; - } - - std::string UARTIODetail::toString() { - std::string s("uart_channel"); - s += std::to_string(_device_id); - s += "."; - s += std::to_string(_index); - if (_attributes.has(PinAttributes::ActiveLow)) { - s += ":low"; - } - if (_attributes.has(PinAttributes::PullUp)) { - s += ":pu"; - } - if (_attributes.has(PinAttributes::PullDown)) { - s += ":pd"; - } - return s; - } -} - -#endif diff --git a/FluidNC/src/Pins/UARTIODetail.h b/FluidNC/src/Pins/UARTIODetail.h deleted file mode 100644 index 4137f295a..000000000 --- a/FluidNC/src/Pins/UARTIODetail.h +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright (c) 2023 B. Dring -// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. - -#pragma once -#ifdef ESP32 - -# include "PinDetail.h" - -namespace Pins { - class UARTIODetail : public PinDetail { - PinCapabilities _capabilities; - PinAttributes _attributes; - int _readWriteMask; - - int _device_id; - - static const int nPins = 255; - static std::vector _claimed; - - bool _lastWrittenValue = false; - - public: - UARTIODetail(int deviceId, pinnum_t index, const PinOptionsParser& options); - - // I/O: - PinCapabilities capabilities() const override; - void write(int high) override; - int read() override; - void setAttr(PinAttributes value) override; - PinAttributes getAttr() const override; - - std::string toString() override; - - ~UARTIODetail() override { _claimed[_index] = false; } - }; -} - -#endif diff --git a/FluidNC/src/RealtimeCmd.cpp b/FluidNC/src/RealtimeCmd.cpp new file mode 100644 index 000000000..b3c490d7a --- /dev/null +++ b/FluidNC/src/RealtimeCmd.cpp @@ -0,0 +1,126 @@ +#include "RealtimeCmd.h" +#include "Config.h" +#include "Channel.h" +#include "Protocol.h" +#include "Report.h" +#include "System.h" +#include "Machine/Macros.h" // macroNEvent + +void execute_extended_realtime_command(Cmd command, uint8_t arg, Channel& channel) { + switch (command) { + case Cmd::PinLow: + //protocol_send_event(&pinLowEvent, arg); + break; + case Cmd::PinHigh: + //protocol_send_event(&pinHighEvent, arg); + break; + } +} + +// Act upon a realtime character +void execute_realtime_command(Cmd command, Channel& channel) { + switch (command) { + case Cmd::Reset: + log_debug("Cmd::Reset"); + protocol_send_event(&rtResetEvent); + break; + case Cmd::StatusReport: + report_realtime_status(channel); // direct call instead of setting flag + // protocol_send_event(&reportStatusEvent, int(&channel)); + break; + case Cmd::CycleStart: + protocol_send_event(&cycleStartEvent); + break; + case Cmd::FeedHold: + protocol_send_event(&feedHoldEvent); + break; + case Cmd::SafetyDoor: + protocol_send_event(&safetyDoorEvent); + break; + case Cmd::JogCancel: + if (sys.state == State::Jog) { // Block all other states from invoking motion cancel. + protocol_send_event(&motionCancelEvent); + } + break; + case Cmd::DebugReport: + protocol_send_event(&debugEvent); + break; + case Cmd::SpindleOvrStop: + protocol_send_event(&accessoryOverrideEvent, AccessoryOverride::SpindleStopOvr); + break; + case Cmd::FeedOvrReset: + protocol_send_event(&feedOverrideEvent, FeedOverride::Default); + break; + case Cmd::FeedOvrCoarsePlus: + protocol_send_event(&feedOverrideEvent, FeedOverride::CoarseIncrement); + break; + case Cmd::FeedOvrCoarseMinus: + protocol_send_event(&feedOverrideEvent, -FeedOverride::CoarseIncrement); + break; + case Cmd::FeedOvrFinePlus: + protocol_send_event(&feedOverrideEvent, FeedOverride::FineIncrement); + break; + case Cmd::FeedOvrFineMinus: + protocol_send_event(&feedOverrideEvent, -FeedOverride::FineIncrement); + break; + case Cmd::RapidOvrReset: + protocol_send_event(&rapidOverrideEvent, RapidOverride::Default); + break; + case Cmd::RapidOvrMedium: + protocol_send_event(&rapidOverrideEvent, RapidOverride::Medium); + break; + case Cmd::RapidOvrLow: + protocol_send_event(&rapidOverrideEvent, RapidOverride::Low); + break; + case Cmd::RapidOvrExtraLow: + protocol_send_event(&rapidOverrideEvent, RapidOverride::ExtraLow); + break; + case Cmd::SpindleOvrReset: + protocol_send_event(&spindleOverrideEvent, SpindleSpeedOverride::Default); + break; + case Cmd::SpindleOvrCoarsePlus: + protocol_send_event(&spindleOverrideEvent, SpindleSpeedOverride::CoarseIncrement); + break; + case Cmd::SpindleOvrCoarseMinus: + protocol_send_event(&spindleOverrideEvent, -SpindleSpeedOverride::CoarseIncrement); + break; + case Cmd::SpindleOvrFinePlus: + protocol_send_event(&spindleOverrideEvent, SpindleSpeedOverride::FineIncrement); + break; + case Cmd::SpindleOvrFineMinus: + protocol_send_event(&spindleOverrideEvent, -SpindleSpeedOverride::FineIncrement); + break; + case Cmd::CoolantFloodOvrToggle: + protocol_send_event(&accessoryOverrideEvent, AccessoryOverride::FloodToggle); + break; + case Cmd::CoolantMistOvrToggle: + protocol_send_event(&accessoryOverrideEvent, AccessoryOverride::MistToggle); + break; + case Cmd::Macro0: + protocol_send_event(¯o0Event); + break; + case Cmd::Macro1: + protocol_send_event(¯o1Event); + break; + case Cmd::Macro2: + protocol_send_event(¯o2Event); + break; + case Cmd::Macro3: + protocol_send_event(¯o3Event); + break; + } +} + +// checks to see if a character is a realtime character +bool is_realtime_command(uint8_t data) { + if (data >= 0x80) { + return true; + } + auto cmd = static_cast(data); + return cmd == Cmd::Reset || cmd == Cmd::StatusReport || cmd == Cmd::CycleStart || cmd == Cmd::FeedHold; +} + +bool is_extended_realtime_command(uint8_t data) { + auto cmd = static_cast(data); + return cmd == Cmd::PinLow || cmd == Cmd::PinHigh; +} diff --git a/FluidNC/src/RealtimeCmd.h b/FluidNC/src/RealtimeCmd.h new file mode 100644 index 000000000..052be0c6e --- /dev/null +++ b/FluidNC/src/RealtimeCmd.h @@ -0,0 +1,56 @@ +#pragma once + +#include + +// Define realtime command special characters. These characters are 'picked-off' directly from the +// serial read data stream and are not passed to the grbl line execution parser. Select characters +// that do not and must not exist in the streamed GCode program. ASCII control characters may be +// used, if they are available per user setup. Also, extended ASCII codes (>127), which are never in +// GCode programs, maybe selected for interface programs. +// NOTE: If changed, manually update help message in report.c. + +// NOTE: All override realtime commands must be in the extended ASCII character set, starting +// at character value 128 (0x80) and up to 255 (0xFF). If the normal set of realtime commands, +// such as status reports, feed hold, reset, and cycle start, are moved to the extended set +// space, serial.c's RX ISR will need to be modified to accommodate the change. + +enum class Cmd : uint8_t { + None = 0, + Reset = 0x18, // Ctrl-X + StatusReport = '?', + CycleStart = '~', + FeedHold = '!', + SafetyDoor = 0x84, + JogCancel = 0x85, + DebugReport = 0x86, // Only when DEBUG_REPORT_REALTIME enabled, sends debug report in '{}' braces. + Macro0 = 0x87, + Macro1 = 0x88, + Macro2 = 0x89, + Macro3 = 0x8a, + FeedOvrReset = 0x90, // Restores feed override value to 100%. + FeedOvrCoarsePlus = 0x91, + FeedOvrCoarseMinus = 0x92, + FeedOvrFinePlus = 0x93, + FeedOvrFineMinus = 0x94, + RapidOvrReset = 0x95, // Restores rapid override value to 100%. + RapidOvrMedium = 0x96, + RapidOvrLow = 0x97, + RapidOvrExtraLow = 0x98, // *NOT SUPPORTED* + SpindleOvrReset = 0x99, // Restores spindle override value to 100%. + SpindleOvrCoarsePlus = 0x9A, // 154 + SpindleOvrCoarseMinus = 0x9B, + SpindleOvrFinePlus = 0x9C, + SpindleOvrFineMinus = 0x9D, + SpindleOvrStop = 0x9E, + CoolantFloodOvrToggle = 0xA0, + CoolantMistOvrToggle = 0xA1, + PinLow = 0xB0, // Start of two-character sequence; second is event number + PinHigh = 0xB1, // Start of two-character sequence; second is event number +}; + +class Channel; + +bool is_realtime_command(uint8_t data); +bool is_extended_realtime_command(uint8_t data); +void execute_realtime_command(Cmd command, Channel& channel); +// void execute_extended_realtime_command(Cmd command, uint8_t arg, Channel& channel); diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 826f07990..900cc12c7 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -83,109 +83,6 @@ void heapCheckTask(void* pvParameters) { } } -// Act upon a realtime character -void execute_realtime_command(Cmd command, Channel& channel) { - switch (command) { - case Cmd::Reset: - log_debug("Cmd::Reset"); - protocol_send_event(&rtResetEvent); - break; - case Cmd::StatusReport: - report_realtime_status(channel); // direct call instead of setting flag - // protocol_send_event(&reportStatusEvent, int(&channel)); - break; - case Cmd::CycleStart: - protocol_send_event(&cycleStartEvent); - break; - case Cmd::FeedHold: - protocol_send_event(&feedHoldEvent); - break; - case Cmd::SafetyDoor: - protocol_send_event(&safetyDoorEvent); - break; - case Cmd::JogCancel: - if (sys.state == State::Jog) { // Block all other states from invoking motion cancel. - protocol_send_event(&motionCancelEvent); - } - break; - case Cmd::DebugReport: - protocol_send_event(&debugEvent); - break; - case Cmd::SpindleOvrStop: - protocol_send_event(&accessoryOverrideEvent, AccessoryOverride::SpindleStopOvr); - break; - case Cmd::FeedOvrReset: - protocol_send_event(&feedOverrideEvent, FeedOverride::Default); - break; - case Cmd::FeedOvrCoarsePlus: - protocol_send_event(&feedOverrideEvent, FeedOverride::CoarseIncrement); - break; - case Cmd::FeedOvrCoarseMinus: - protocol_send_event(&feedOverrideEvent, -FeedOverride::CoarseIncrement); - break; - case Cmd::FeedOvrFinePlus: - protocol_send_event(&feedOverrideEvent, FeedOverride::FineIncrement); - break; - case Cmd::FeedOvrFineMinus: - protocol_send_event(&feedOverrideEvent, -FeedOverride::FineIncrement); - break; - case Cmd::RapidOvrReset: - protocol_send_event(&rapidOverrideEvent, RapidOverride::Default); - break; - case Cmd::RapidOvrMedium: - protocol_send_event(&rapidOverrideEvent, RapidOverride::Medium); - break; - case Cmd::RapidOvrLow: - protocol_send_event(&rapidOverrideEvent, RapidOverride::Low); - break; - case Cmd::RapidOvrExtraLow: - protocol_send_event(&rapidOverrideEvent, RapidOverride::ExtraLow); - break; - case Cmd::SpindleOvrReset: - protocol_send_event(&spindleOverrideEvent, SpindleSpeedOverride::Default); - break; - case Cmd::SpindleOvrCoarsePlus: - protocol_send_event(&spindleOverrideEvent, SpindleSpeedOverride::CoarseIncrement); - break; - case Cmd::SpindleOvrCoarseMinus: - protocol_send_event(&spindleOverrideEvent, -SpindleSpeedOverride::CoarseIncrement); - break; - case Cmd::SpindleOvrFinePlus: - protocol_send_event(&spindleOverrideEvent, SpindleSpeedOverride::FineIncrement); - break; - case Cmd::SpindleOvrFineMinus: - protocol_send_event(&spindleOverrideEvent, -SpindleSpeedOverride::FineIncrement); - break; - case Cmd::CoolantFloodOvrToggle: - protocol_send_event(&accessoryOverrideEvent, AccessoryOverride::FloodToggle); - break; - case Cmd::CoolantMistOvrToggle: - protocol_send_event(&accessoryOverrideEvent, AccessoryOverride::MistToggle); - break; - case Cmd::Macro0: - protocol_send_event(¯o0Event); - break; - case Cmd::Macro1: - protocol_send_event(¯o1Event); - break; - case Cmd::Macro2: - protocol_send_event(¯o2Event); - break; - case Cmd::Macro3: - protocol_send_event(¯o3Event); - break; - } -} - -// checks to see if a character is a realtime character -bool is_realtime_command(uint8_t data) { - if (data >= 0x80) { - return true; - } - auto cmd = static_cast(data); - return cmd == Cmd::Reset || cmd == Cmd::StatusReport || cmd == Cmd::CycleStart || cmd == Cmd::FeedHold; -} - void AllChannels::init() { registration(&WebUI::inputBuffer); // Macros registration(&startupLog); // Early startup messages for $SS diff --git a/FluidNC/src/Serial.h b/FluidNC/src/Serial.h index 87224109f..84650b30c 100644 --- a/FluidNC/src/Serial.h +++ b/FluidNC/src/Serial.h @@ -21,53 +21,6 @@ uint8_t check_action_command(uint8_t data); void channel_init(); -// Define realtime command special characters. These characters are 'picked-off' directly from the -// serial read data stream and are not passed to the grbl line execution parser. Select characters -// that do not and must not exist in the streamed GCode program. ASCII control characters may be -// used, if they are available per user setup. Also, extended ASCII codes (>127), which are never in -// GCode programs, maybe selected for interface programs. -// NOTE: If changed, manually update help message in report.c. - -// NOTE: All override realtime commands must be in the extended ASCII character set, starting -// at character value 128 (0x80) and up to 255 (0xFF). If the normal set of realtime commands, -// such as status reports, feed hold, reset, and cycle start, are moved to the extended set -// space, serial.c's RX ISR will need to be modified to accommodate the change. - -enum class Cmd : uint8_t { - None = 0, - Reset = 0x18, // Ctrl-X - StatusReport = '?', - CycleStart = '~', - FeedHold = '!', - SafetyDoor = 0x84, - JogCancel = 0x85, - DebugReport = 0x86, // Only when DEBUG_REPORT_REALTIME enabled, sends debug report in '{}' braces. - Macro0 = 0x87, - Macro1 = 0x88, - Macro2 = 0x89, - Macro3 = 0x8a, - FeedOvrReset = 0x90, // Restores feed override value to 100%. - FeedOvrCoarsePlus = 0x91, - FeedOvrCoarseMinus = 0x92, - FeedOvrFinePlus = 0x93, - FeedOvrFineMinus = 0x94, - RapidOvrReset = 0x95, // Restores rapid override value to 100%. - RapidOvrMedium = 0x96, - RapidOvrLow = 0x97, - RapidOvrExtraLow = 0x98, // *NOT SUPPORTED* - SpindleOvrReset = 0x99, // Restores spindle override value to 100%. - SpindleOvrCoarsePlus = 0x9A, // 154 - SpindleOvrCoarseMinus = 0x9B, - SpindleOvrFinePlus = 0x9C, - SpindleOvrFineMinus = 0x9D, - SpindleOvrStop = 0x9E, - CoolantFloodOvrToggle = 0xA0, - CoolantMistOvrToggle = 0xA1, -}; - -bool is_realtime_command(uint8_t data); -void execute_realtime_command(Cmd command, Channel& channel); - Channel* pollChannels(char* line = nullptr); class AllChannels : public Channel { diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index ec7aee8c7..22aa4fae2 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -174,11 +174,19 @@ namespace WebUI { // because we need to know whether to add a newline. We should not add newline // on a realtime sequence, but we must add one (if not already present) // on a text command. - if (cmd.length() == 3 && cmd[0] == 0xc2 && is_realtime_command(cmd[1]) && cmd[2] == '\0') { - // Handles old WebUIs that send a null after high-bit-set realtime chars - wsChannel->pushRT(cmd[1]); - } else if (cmd.length() == 2 && cmd[0] == 0xc2 && is_realtime_command(cmd[1])) { - // Handles old WebUIs that send a null after high-bit-set realtime chars + if (cmd.length() > 0 && cmd[0] == 0xc2) { + if (cmd.length() == 3 && is_extended_realtime_command(cmd[1])) { + wsChannel->pushRT(cmd[1]); + wsChannel->pushRT(cmd[2]); + } else if (cmd.length() == 3 && is_realtime_command(cmd[1]) && cmd[2] == '\0') { + // Handles old WebUIs that send a null after high-bit-set realtime chars + wsChannel->pushRT(cmd[1]); + } else if (cmd.length() == 2 && is_realtime_command(cmd[1])) { + // Handles old WebUIs that send a null after high-bit-set realtime chars + wsChannel->pushRT(cmd[1]); + } + } else if (cmd.length() == 2 && is_extended_realtime_command(cmd[0])) { + wsChannel->pushRT(cmd[0]); wsChannel->pushRT(cmd[1]); } else if (cmd.length() == 1 && is_realtime_command(cmd[0])) { wsChannel->pushRT(cmd[0]); diff --git a/FluidNC/test/Pins/ErrorPinTest.cpp b/FluidNC/test/Pins/ErrorPinTest.cpp index d673296f6..3cf7320fe 100644 --- a/FluidNC/test/Pins/ErrorPinTest.cpp +++ b/FluidNC/test/Pins/ErrorPinTest.cpp @@ -16,9 +16,6 @@ namespace Pins { AssertThrow(errorPin.write(true)); AssertThrow(errorPin.read()); - AssertThrow(errorPin.attachInterrupt([](void* arg) {}, EITHER_EDGE)); - AssertThrow(errorPin.detachInterrupt()); - Assert(errorPin.capabilities() == Pin::Capabilities::Error, "Incorrect caps"); } } diff --git a/FluidNC/test/Pins/GPIO.cpp b/FluidNC/test/Pins/GPIO.cpp index c17acdde3..6fb68b558 100644 --- a/FluidNC/test/Pins/GPIO.cpp +++ b/FluidNC/test/Pins/GPIO.cpp @@ -114,16 +114,6 @@ namespace Pins { gpio16.setAttr(Pin::Attr::Input | Pin::Attr::ISR); gpio17.setAttr(Pin::Attr::Output); - int hitCount = 0; - int expected = 0; - gpio16.attachInterrupt( - [](void* arg) { - int* hc = static_cast(arg); - ++(*hc); - }, - mode, - &hitCount); - // Two ways to set I/O: // 1. using on/off // 2. external source (e.g. set softwareio pin value) @@ -299,10 +289,6 @@ namespace Pins { gpio16.setAttr(Pin::Attr::Input | Pin::Attr::ISR); gpio17.setAttr(Pin::Attr::Output); - hitCount = 0; - int expected = 0; - gpio16.attachInterrupt(this, mode); - // Two ways to set I/O: // 1. using on/off // 2. external source (e.g. set softwareio pin value) diff --git a/FluidNC/test/Pins/Undefined.cpp b/FluidNC/test/Pins/Undefined.cpp index 8d68c27a5..d2e356c28 100644 --- a/FluidNC/test/Pins/Undefined.cpp +++ b/FluidNC/test/Pins/Undefined.cpp @@ -21,9 +21,6 @@ namespace Pins { Assert(0 == result, "Result value incorrect"); } - AssertThrow(unassigned.attachInterrupt([](void* arg) {}, EITHER_EDGE)); - AssertThrow(unassigned.detachInterrupt()); - Assert(unassigned.capabilities().has(Pin::Capabilities::Void)); auto name = unassigned.name(); Assert(unassigned.name().equals("NO_PIN")); From 8f3948760e42d7e3349eca6e9ef4bb5568d407d1 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 8 Oct 2023 12:43:55 -1000 Subject: [PATCH 159/212] include cleanup --- FluidNC/src/Machine/EventPin.cpp | 4 +--- FluidNC/src/Pin.cpp | 18 ------------------ 2 files changed, 1 insertion(+), 21 deletions(-) diff --git a/FluidNC/src/Machine/EventPin.cpp b/FluidNC/src/Machine/EventPin.cpp index 9684112c0..28b5bd250 100644 --- a/FluidNC/src/Machine/EventPin.cpp +++ b/FluidNC/src/Machine/EventPin.cpp @@ -1,8 +1,6 @@ #include "EventPin.h" -#include "src/Report.h" // addPinReport -#include "src/Protocol.h" // event_queue -#include "src/System.h" // sys +#include "src/Protocol.h" // protocol_send_event EventPin::EventPin(Event* event, const char* legend) : _event(event), _legend(legend) {} diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index cb4b14141..c9e6da644 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -11,7 +11,6 @@ #include "Pins/VoidPinDetail.h" #include "Pins/I2SOPinDetail.h" #include "Pins/ChannelPinDetail.h" -#include "Pins/UARTIODetail.h" #include "Pins/ErrorPinDetail.h" #include "string_util.h" #include "Machine/MachineConfig.h" // config @@ -96,23 +95,6 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa return nullptr; } -#if 0 - if (prefix.length() == 13) { - if (prefix.substr(0, 12) == "uart_channel") { - if (prefix[12] >= '0' && prefix[12] <= '2') { // TODO use MAX_N_UARTS - auto deviceId = prefix[12] - '0'; - // check to see if the channel exists - //if (config->_uart_channels[deviceId] == nullptr) { - // return " uart channel is not a controller"; - //} - pinImplementation = new Pins::UARTIODetail(deviceId, pinnum_t(pin_number), parser); - return nullptr; - } - return "Incorrect pin extender specification. Expected 'pinext[0-2].[port number]'."; - } - } -#endif - if (string_util::equal_ignore_case(prefix, "no_pin")) { pinImplementation = undefinedPin; return nullptr; From b648ef6714701ea5f7c3711786da3b912352f354 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 9 Oct 2023 06:29:25 -1000 Subject: [PATCH 160/212] Fixed pin parsing oops --- FluidNC/src/Pin.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index c9e6da644..a2f4b69e9 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -74,12 +74,14 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa // Build this pin: if (string_util::equal_ignore_case(prefix, "gpio")) { pinImplementation = new Pins::GPIOPinDetail(static_cast(pin_number), parser); + return nullptr; } if (string_util::equal_ignore_case(prefix, "i2so")) { if (config->_i2so == nullptr) { return "i2so: section must be defined before using i2so pins"; } pinImplementation = new Pins::I2SOPinDetail(static_cast(pin_number), parser); + return nullptr; } if (string_util::equal_ignore_case(prefix, "uart_channel0")) { From 7ba12439fa7f63c41e01902846c15c19c642cad4 Mon Sep 17 00:00:00 2001 From: Mike Melancon Date: Mon, 9 Oct 2023 16:11:27 -0500 Subject: [PATCH 161/212] Fixed bug in JSONEncoder when trying to create a member whose value is an object --- FluidNC/src/WebUI/JSONEncoder.cpp | 10 ++++++++++ FluidNC/src/WebUI/JSONEncoder.h | 10 ++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/FluidNC/src/WebUI/JSONEncoder.cpp b/FluidNC/src/WebUI/JSONEncoder.cpp index 4c6cc6fa9..68db060cc 100644 --- a/FluidNC/src/WebUI/JSONEncoder.cpp +++ b/FluidNC/src/WebUI/JSONEncoder.cpp @@ -149,6 +149,16 @@ namespace WebUI { add(']'); } + // Begins the creation of a member whose value is an object. + // Call end_object() to close the member + void JSONencoder::begin_member_object(const char* tag) { + comma_line(); + quoted(tag); + add(':'); + add('{'); + inc_level(); + } + // Starts an object with {. // If you need a named object you must call begin_member() first. void JSONencoder::begin_object() { diff --git a/FluidNC/src/WebUI/JSONEncoder.h b/FluidNC/src/WebUI/JSONEncoder.h index 7d8298fc7..e5444ff74 100644 --- a/FluidNC/src/WebUI/JSONEncoder.h +++ b/FluidNC/src/WebUI/JSONEncoder.h @@ -22,6 +22,9 @@ namespace WebUI { void indent(); void line(); + // begin_member() starts the creation of a member. + void begin_member(const char* tag); + std::string linebuf; std::string* _str = nullptr; @@ -58,10 +61,9 @@ namespace WebUI { // end_object() closes the object with } void end_object(); - // begin_member() starts the creation of a member. - // The only case where you need to use it directly - // is when you want a member whose value is an object. - void begin_member(const char* tag); + // Begins the creation of a member whose value is an object. + // Call end_object() to close the member + void begin_member_object(const char* tag); // The begin_webui() methods are specific to Esp3D_WebUI // WebUI sends JSON objects to the UI to generate configuration From 2da13ded6b4a30b3e7e21d8bc2858b0db0b0fa5a Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 10 Oct 2023 04:26:58 -1000 Subject: [PATCH 162/212] Reinstated a macro fix that got lost in a git mixup --- FluidNC/src/Error.cpp | 1 + FluidNC/src/Error.h | 1 + FluidNC/src/GCode.cpp | 3 +++ FluidNC/src/Machine/Macros.cpp | 18 ++++++++++-------- FluidNC/src/Machine/Macros.h | 22 +++++++++++----------- 5 files changed, 26 insertions(+), 19 deletions(-) diff --git a/FluidNC/src/Error.cpp b/FluidNC/src/Error.cpp index 7722f3d2c..45de5ab93 100644 --- a/FluidNC/src/Error.cpp +++ b/FluidNC/src/Error.cpp @@ -68,6 +68,7 @@ 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 a8387b25e..590c5a816 100644 --- a/FluidNC/src/Error.h +++ b/FluidNC/src/Error.h @@ -72,6 +72,7 @@ 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 3d74db282..1ea5e722a 100644 --- a/FluidNC/src/GCode.cpp +++ b/FluidNC/src/GCode.cpp @@ -1620,6 +1620,9 @@ 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 f58379e73..2f4e529b3 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -6,17 +6,14 @@ #include "src/System.h" // sys #include "src/Machine/MachineConfig.h" // config +Macro::Macro(const char* name) : _name(name) {} + void MacroEvent::run(void* arg) { - 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(); + config->_macros->_macro[_num].run(); } -Macro Macros::_startup_line[n_startup_lines] = { { "startup_line0" }, { "startup_line1" } }; -Macro Macros::_macro[n_macros] = { { "macro0" }, { "macro1" }, { "macro2" }, { "macro3" } }; +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" }; @@ -54,6 +51,11 @@ 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 a462bc0c6..80358fd01 100644 --- a/FluidNC/src/Machine/Macros.h +++ b/FluidNC/src/Machine/Macros.h @@ -27,8 +27,8 @@ namespace Machine { class Macro { public: std::string _gcode; - std::string _name; - Macro(const char* name) : _name(name) {} + const char* _name; + Macro(const char* name); bool run(); }; @@ -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.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); + 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); } ~Macros() {} From 3a5e93a61929b3e2688e18c9d18bc648d5e1ced7 Mon Sep 17 00:00:00 2001 From: Mike Melancon Date: Wed, 11 Oct 2023 17:07:55 -0500 Subject: [PATCH 163/212] Fix Generation of JSON for boolean settings --- FluidNC/src/Configuration/JsonGenerator.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/FluidNC/src/Configuration/JsonGenerator.cpp b/FluidNC/src/Configuration/JsonGenerator.cpp index 54597fc0d..d8b306932 100644 --- a/FluidNC/src/Configuration/JsonGenerator.cpp +++ b/FluidNC/src/Configuration/JsonGenerator.cpp @@ -58,6 +58,8 @@ namespace Configuration { { _encoder.begin_object(); _encoder.member("False", 0); + _encoder.end_object(); + _encoder.begin_object(); _encoder.member("True", 1); _encoder.end_object(); } From 6af08d0ad6eed27efa3a6c23e4c60c7fa67b2a32 Mon Sep 17 00:00:00 2001 From: Mike Melancon Date: Wed, 11 Oct 2023 21:51:33 -0500 Subject: [PATCH 164/212] Change hidden password string to abide by minimum length --- FluidNC/src/Settings.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Settings.cpp b/FluidNC/src/Settings.cpp index d5ff38135..3794f07bf 100644 --- a/FluidNC/src/Settings.cpp +++ b/FluidNC/src/Settings.cpp @@ -262,10 +262,10 @@ static bool isPassword(bool (*_checker)(char*)) { const char* StringSetting::getDefaultString() { // If the string is a password do not display it - return (_checker && isPassword(_checker)) ? "******" : _defaultValue.c_str(); + return (_checker && isPassword(_checker)) ? "********" : _defaultValue.c_str(); } const char* StringSetting::getStringValue() { - return (_checker && isPassword(_checker)) ? "******" : get(); + return (_checker && isPassword(_checker)) ? "********" : get(); } void StringSetting::addWebui(WebUI::JSONencoder* j) { From 10c9199613cc32ed1cdad29376158c1d99309725 Mon Sep 17 00:00:00 2001 From: bdring Date: Mon, 16 Oct 2023 12:38:38 -0500 Subject: [PATCH 165/212] possible fix --- FluidNC/src/Machine/Axes.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/FluidNC/src/Machine/Axes.cpp b/FluidNC/src/Machine/Axes.cpp index 06f349f9a..336c4a8dc 100644 --- a/FluidNC/src/Machine/Axes.cpp +++ b/FluidNC/src/Machine/Axes.cpp @@ -65,6 +65,10 @@ namespace Machine { } _sharedStepperDisable.synchronousWrite(disable); + + if (!disable) { // wait for the enable delay + delay_us(config->_stepping->_disableDelayUsecs); + } } // Put the motors in the given axes into homing mode, returning a From 8d9d9529d082b912e075d5cb7c61438559420ad6 Mon Sep 17 00:00:00 2001 From: bdring Date: Mon, 16 Oct 2023 14:14:48 -0500 Subject: [PATCH 166/212] WIP --- FluidNC/src/Machine/Axes.cpp | 5 +++-- FluidNC/src/Stepping.cpp | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Machine/Axes.cpp b/FluidNC/src/Machine/Axes.cpp index 336c4a8dc..ae7dc8121 100644 --- a/FluidNC/src/Machine/Axes.cpp +++ b/FluidNC/src/Machine/Axes.cpp @@ -66,9 +66,10 @@ namespace Machine { _sharedStepperDisable.synchronousWrite(disable); - if (!disable) { // wait for the enable delay + if (!disable && config->_stepping->_disableDelayUsecs) { // wait for the enable delay + log_debug("enable delay:" << config->_stepping->_disableDelayUsecs); delay_us(config->_stepping->_disableDelayUsecs); - } + } } // Put the motors in the given axes into homing mode, returning a diff --git a/FluidNC/src/Stepping.cpp b/FluidNC/src/Stepping.cpp index d677cfd6f..631c47687 100644 --- a/FluidNC/src/Stepping.cpp +++ b/FluidNC/src/Stepping.cpp @@ -138,7 +138,7 @@ namespace Machine { handler.item("idle_ms", _idleMsecs, 0, 10000000); // full range handler.item("pulse_us", _pulseUsecs, 0, 30); handler.item("dir_delay_us", _directionDelayUsecs, 0, 10); - handler.item("disable_delay_us", _disableDelayUsecs, 0, 10); + handler.item("disable_delay_us", _disableDelayUsecs, 0, 1000000); // max 1 second handler.item("segments", _segments, 6, 20); } From f98ad13060b91918c0b6e0b121755684cf6579e0 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 25 Oct 2023 10:01:49 -1000 Subject: [PATCH 167/212] Fix #1051 - bad VFD UART validation and generation logic --- FluidNC/src/Spindles/VFDSpindle.cpp | 29 +++++++++++++++++++++++++---- FluidNC/src/Spindles/VFDSpindle.h | 15 ++------------- 2 files changed, 27 insertions(+), 17 deletions(-) diff --git a/FluidNC/src/Spindles/VFDSpindle.cpp b/FluidNC/src/Spindles/VFDSpindle.cpp index b6055ecb6..9965eb4c4 100644 --- a/FluidNC/src/Spindles/VFDSpindle.cpp +++ b/FluidNC/src/Spindles/VFDSpindle.cpp @@ -20,10 +20,11 @@ */ #include "VFDSpindle.h" -#include "../Machine/MachineConfig.h" -#include "../MotionControl.h" // mc_critical -#include "../Protocol.h" // rtAlarm -#include "../Report.h" // hex message +#include "src/Machine/MachineConfig.h" +#include "src/MotionControl.h" // mc_critical +#include "src/Protocol.h" // rtAlarm +#include "src/Report.h" // hex message +#include "src/Configuration/HandlerType.h" #include #include @@ -474,4 +475,24 @@ namespace Spindles { return crc; } + void VFD::validate() { + Spindle::validate(); + Assert(_uart != nullptr || _uart_num != -1, "VFD: missing UART configuration"); + } + + void VFD::group(Configuration::HandlerBase& handler) { + if (handler.handlerType() == Configuration::HandlerType::Generator) { + if (_uart_num == -1) { + handler.section("uart", _uart, 1); + } else { + handler.item("uart_num", _uart_num); + } + } else { + handler.section("uart", _uart, 1); + handler.item("uart_num", _uart_num); + } + handler.item("modbus_id", _modbus_id, 0, 247); // per https://modbus.org/docs/PI_MBUS_300.pdf + + Spindle::group(handler); + } } diff --git a/FluidNC/src/Spindles/VFDSpindle.h b/FluidNC/src/Spindles/VFDSpindle.h index d7f0aa816..58169134b 100644 --- a/FluidNC/src/Spindles/VFDSpindle.h +++ b/FluidNC/src/Spindles/VFDSpindle.h @@ -94,19 +94,8 @@ namespace Spindles { SpindleSpeed _slop; // Configuration handlers: - void validate() override { - Spindle::validate(); - Assert(_uart != nullptr || _uart_num != -1, "VFD: missing UART configuration"); - Assert(!(_uart != nullptr && _uart_num != -1), "VFD: conflicting UART configuration"); - } - - void group(Configuration::HandlerBase& handler) override { - handler.section("uart", _uart, 1); - handler.item("uart_num", _uart_num); - handler.item("modbus_id", _modbus_id, 0, 247); // per https://modbus.org/docs/PI_MBUS_300.pdf - - Spindle::group(handler); - } + void validate() override; + void group(Configuration::HandlerBase& handler) override; virtual ~VFD() {} }; From b379f4cfd32e156fada0286b833a349a664acf83 Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 27 Oct 2023 15:41:55 -0500 Subject: [PATCH 168/212] WIP - Fixed attributes - Worked on commands for extender. --- FluidNC/src/Channel.cpp | 15 +++++- FluidNC/src/Pins/ChannelPinDetail.cpp | 67 +++++++++++++++++++++++---- FluidNC/src/Pins/ChannelPinDetail.h | 1 + example_configs/uartio.yaml | 32 ++++++------- 4 files changed, 89 insertions(+), 26 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index 32b8fa285..af2f5e62d 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -184,7 +184,7 @@ Channel* Channel::pollLine(char* line) { void Channel::setAttr(int index, Pins::PinAttributes attr) { // XXX send INI message - _pin_attributes[index] = attr; + _pin_attributes[index] = _pin_attributes[index] | attr; } Pins::PinAttributes Channel::getAttr(int index) const { try { @@ -193,8 +193,19 @@ Pins::PinAttributes Channel::getAttr(int index) const { } void Channel::out(int index, int value) { + if (value == _pin_values[index]) { + return; + } _pin_values[index] = value; - // XXX send SET message + std::string s = "[MSG:SET: io."; + s += std::to_string(index); + s += "="; + s += std::to_string(value); + s += "]"; + + println(s.c_str()); // send it out + + log_info(s.c_str()); } int Channel::in(int index) { return _pin_values[index]; diff --git a/FluidNC/src/Pins/ChannelPinDetail.cpp b/FluidNC/src/Pins/ChannelPinDetail.cpp index e76f5c8b7..e71ebd2cc 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.cpp +++ b/FluidNC/src/Pins/ChannelPinDetail.cpp @@ -5,22 +5,73 @@ namespace Pins { ChannelPinDetail::ChannelPinDetail(Channel* channel, int number, const PinOptionsParser& options) : - PinDetail(number), _channel(channel) {} + PinDetail(number), _channel(channel) { + for (auto opt : options) { + if (opt.is("pu")) { + _channel->setAttr(_index, PinAttributes::PullUp); + } else if (opt.is("pd")) { + _channel->setAttr(_index, PinAttributes::PullDown); + } else if (opt.is("low")) { + _channel->setAttr(_index, PinAttributes::ActiveLow); + } else if (opt.is("high")) { + // Default: Active HIGH. + } + } + } PinCapabilities ChannelPinDetail::capabilities() const { - return PinCapabilities::Output | PinCapabilities::Input | PinCapabilities::Void; + return PinCapabilities::Output | PinCapabilities::Input | PinCapabilities::PWM | PinCapabilities::Void; + } + + void ChannelPinDetail::write(int high) { + _channel->out(_index, high); + } + int ChannelPinDetail::read() { + return _channel->in(_index); } + void ChannelPinDetail::setAttr(PinAttributes value) { + _channel->setAttr(_index, value); + std::string s = "[MSG:INI: io."; + s += std::to_string(_index); + s += "="; + if (value.has(PinAttributes::Input)) { + s += "inp"; + } else if (_channel->getAttr(_index) & PinAttributes::Output) { + s += "out"; + } + if (_channel->getAttr(_index) & PinAttributes::PullUp) { + s += ":pu"; + } + if (_channel->getAttr(_index) & PinAttributes::PullDown) { + s += ":pu"; + } + if (_channel->getAttr(_index) & PinAttributes::ActiveLow) { + s += ":low"; + } - void ChannelPinDetail::write(int high) { _channel->out(_index, high); } - int ChannelPinDetail::read() { return _channel->in(_index); } - void ChannelPinDetail::setAttr(PinAttributes value) { _channel->setAttr(_index, value); } - PinAttributes ChannelPinDetail::getAttr() const { return _channel->getAttr(_index); } - std::string ChannelPinDetail::toString() { + s += "]"; + log_info(s); + } + PinAttributes ChannelPinDetail::getAttr() const { + return _channel->getAttr(_index); + } + std::string ChannelPinDetail::toString() { std::string s = _channel->name(); s += "."; s += std::to_string(_index); + if (_channel->getAttr(_index) & PinAttributes::ActiveLow) { + s += ":low"; + } + if (_channel->getAttr(_index) & PinAttributes::PullUp) { + s += ":pu"; + } + if (_channel->getAttr(_index) & PinAttributes::PullDown) { + s += ":pd"; + } return s; } - void ChannelPinDetail::registerEvent(EventPin* obj) { _channel->registerEvent(_index, obj); } + void ChannelPinDetail::registerEvent(EventPin* obj) { + _channel->registerEvent(_index, obj); + } } diff --git a/FluidNC/src/Pins/ChannelPinDetail.h b/FluidNC/src/Pins/ChannelPinDetail.h index c2edb6e3d..487779277 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.h +++ b/FluidNC/src/Pins/ChannelPinDetail.h @@ -6,6 +6,7 @@ #include "PinDetail.h" #include "PinOptionsParser.h" #include "src/Channel.h" +#include "../Logging.h" namespace Pins { class ChannelPinDetail : public PinDetail { diff --git a/example_configs/uartio.yaml b/example_configs/uartio.yaml index fb13b9bb0..56aa9460d 100644 --- a/example_configs/uartio.yaml +++ b/example_configs/uartio.yaml @@ -1,5 +1,5 @@ -name: "ESP32 Dev Controller V4" -board: "ESP32 Dev Controller V4" +name: "UART I/O test config" +board: "6 Pack Controller" stepping: engine: RMT @@ -8,16 +8,18 @@ stepping: pulse_us: 2 disable_delay_us: 0 - + uart1: - txd_pin: gpio.26 - rxd_pin: gpio.4 + txd_pin: gpio.4 + rxd_pin: gpio.26 baud: 115200 mode: 8N1 - + uart_channel1: - uart_num: 1 - + report_interval_ms: 75 + uart_num: 1 + controller: true + i2so: bck_pin: gpio.22 data_pin: gpio.21 @@ -31,15 +33,13 @@ spi: sdcard: cs_pin: gpio.5 card_detect_pin: NO_PIN - + probe: - pin: uart_channel0.3 - + pin: uart_channel1.0:pu:low + user_outputs: - analog0_pin: uart_channel0.2 + analog0_pin: uart_channel1.2 coolant: - mist_pin: uart_channel0.0 - flood_pin: uart_channel0.1 - - + mist_pin: uart_channel1.15:low + flood_pin: uart_channel1.14 From 61428cbe2c25874960625502e9ce8b041ab48ff4 Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 28 Oct 2023 15:45:19 -0500 Subject: [PATCH 169/212] WIP --- FluidNC/src/Channel.cpp | 2 +- FluidNC/src/Pins/ChannelPinDetail.cpp | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index af2f5e62d..83ed03e4e 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -205,7 +205,7 @@ void Channel::out(int index, int value) { println(s.c_str()); // send it out - log_info(s.c_str()); + //log_info(s.c_str()); } int Channel::in(int index) { return _pin_values[index]; diff --git a/FluidNC/src/Pins/ChannelPinDetail.cpp b/FluidNC/src/Pins/ChannelPinDetail.cpp index e71ebd2cc..f76dc3aa3 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.cpp +++ b/FluidNC/src/Pins/ChannelPinDetail.cpp @@ -6,6 +6,7 @@ namespace Pins { ChannelPinDetail::ChannelPinDetail(Channel* channel, int number, const PinOptionsParser& options) : PinDetail(number), _channel(channel) { + log_debug("channel pin:" << number); for (auto opt : options) { if (opt.is("pu")) { _channel->setAttr(_index, PinAttributes::PullUp); @@ -38,7 +39,10 @@ namespace Pins { s += "inp"; } else if (_channel->getAttr(_index) & PinAttributes::Output) { s += "out"; + } else { + return; } + if (_channel->getAttr(_index) & PinAttributes::PullUp) { s += ":pu"; } @@ -50,7 +54,8 @@ namespace Pins { } s += "]"; - log_info(s); + //log_info(s); + _channel->println(s.c_str()); } PinAttributes ChannelPinDetail::getAttr() const { return _channel->getAttr(_index); From 594296a2444450c1b07eca9261d115a9b8820b83 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 2 Nov 2023 08:17:31 -1000 Subject: [PATCH 170/212] New message to indicate an incoming WebUI connection --- FluidNC/src/OLED.cpp | 16 ++++++++++++++++ FluidNC/src/OLED.h | 1 + FluidNC/src/WebUI/WebServer.cpp | 1 + 3 files changed, 18 insertions(+) diff --git a/FluidNC/src/OLED.cpp b/FluidNC/src/OLED.cpp index 886631064..e65eacb7f 100644 --- a/FluidNC/src/OLED.cpp +++ b/FluidNC/src/OLED.cpp @@ -439,6 +439,18 @@ void OLED::parse_BT() { delay_ms(_radio_delay); } +void OLED::parse_WebUI() { + size_t start = strlen("[MSG:INFO: WebUI: Request from "); + std::string ipaddr = _report.substr(start, _report.size() - start - 1); + + _oled->clear(); + auto fh = font_height(ArialMT_Plain_10); + wrapped_draw_string(0, "WebUI from", ArialMT_Plain_10); + wrapped_draw_string(fh * 2, ipaddr, ArialMT_Plain_10); + _oled->display(); + delay_ms(_radio_delay); +} + void OLED::parse_report() { if (_report.length() == 0) { return; @@ -467,6 +479,10 @@ void OLED::parse_report() { parse_BT(); return; } + if (_report.rfind("[MSG:INFO: WebUI: Request from ", 0) == 0) { + parse_WebUI(); + return; + } } // This is how the OLED driver receives channel data diff --git a/FluidNC/src/OLED.h b/FluidNC/src/OLED.h index 25e599696..833b4025a 100644 --- a/FluidNC/src/OLED.h +++ b/FluidNC/src/OLED.h @@ -52,6 +52,7 @@ class OLED : public Channel, public Configuration::Configurable { void parse_IP(); void parse_AP(); void parse_BT(); + void parse_WebUI(); void parse_axes(std::string s, float* axes); void parse_numbers(std::string s, float* nums, int maxnums); diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 224ca3e69..e72e533e8 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -329,6 +329,7 @@ namespace WebUI { void Web_Server::send404Page() { sendWithOurAddress(PAGE_404, 404); } void Web_Server::handle_root() { + log_info("WebUI: Request from " << _webserver->client().remoteIP()); if (!(_webserver->hasArg("forcefallback") && _webserver->arg("forcefallback") == "yes")) { if (myStreamFile("index.html")) { return; From 35e885e3f7a2b62f4f5d83e1c26a992c75c0cfdc Mon Sep 17 00:00:00 2001 From: bdring Date: Thu, 2 Nov 2023 17:01:09 -0500 Subject: [PATCH 171/212] Added an initial GET after the channels are ready. --- FluidNC/src/Channel.h | 13 ++++++++----- FluidNC/src/Main.cpp | 1 + FluidNC/src/Pins/ChannelPinDetail.cpp | 2 -- FluidNC/src/Probe.cpp | 2 ++ FluidNC/src/Serial.cpp | 8 ++++++++ FluidNC/src/Serial.h | 1 + FluidNC/src/UartChannel.h | 4 +--- example_configs/uartio.yaml | 8 ++++++-- 8 files changed, 27 insertions(+), 12 deletions(-) diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index 3cb13333b..8e5bd583d 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -29,6 +29,7 @@ #include class Channel : public Stream { +private: public: static const int maxLine = 255; @@ -36,8 +37,9 @@ class Channel : public Stream { const char* _name; char _line[maxLine]; size_t _linelen; - bool _addCR = false; - char _lastWasCR = false; + bool _addCR = false; + char _lastWasCR = false; + bool _controller = false; // the device is a pin extender std::queue _queue; @@ -111,9 +113,10 @@ class Channel : public Stream { void notifyWco() { _reportWco = true; } void notifyNgc(CoordIndex coord) { _reportNgc = coord; } - int peek() override { return -1; } - int read() override { return -1; } - int available() override { return _queue.size(); } + int peek() override { return -1; } + int read() override { return -1; } + int available() override { return _queue.size(); } + bool isController() { return _controller; } uint32_t setReportInterval(uint32_t ms); uint32_t getReportInterval() { return _reportInterval; } diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index 3c8b5513c..b775c325b 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -141,6 +141,7 @@ void setup() { allChannels.deregistration(&startupLog); protocol_send_event(&startEvent); + allChannels.ready(); } void loop() { diff --git a/FluidNC/src/Pins/ChannelPinDetail.cpp b/FluidNC/src/Pins/ChannelPinDetail.cpp index f76dc3aa3..5bfd0f248 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.cpp +++ b/FluidNC/src/Pins/ChannelPinDetail.cpp @@ -6,7 +6,6 @@ namespace Pins { ChannelPinDetail::ChannelPinDetail(Channel* channel, int number, const PinOptionsParser& options) : PinDetail(number), _channel(channel) { - log_debug("channel pin:" << number); for (auto opt : options) { if (opt.is("pu")) { _channel->setAttr(_index, PinAttributes::PullUp); @@ -54,7 +53,6 @@ namespace Pins { } s += "]"; - //log_info(s); _channel->println(s.c_str()); } PinAttributes ChannelPinDetail::getAttr() const { diff --git a/FluidNC/src/Probe.cpp b/FluidNC/src/Probe.cpp index b21565557..833e3b65c 100644 --- a/FluidNC/src/Probe.cpp +++ b/FluidNC/src/Probe.cpp @@ -11,6 +11,7 @@ void Probe::init() { static bool show_init_msg = true; // used to show message only once. if (_probePin.defined()) { + _probePin.getNative(Pin::Capabilities::Input | Pin::Capabilities::Native); _probePin.setAttr(Pin::Attr::Input); if (show_init_msg) { @@ -20,6 +21,7 @@ void Probe::init() { } if (_toolsetter_Pin.defined()) { + _toolsetter_Pin.getNative(Pin::Capabilities::Input | Pin::Capabilities::Native); _toolsetter_Pin.setAttr(Pin::Attr::Input); if (show_init_msg) { diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 900cc12c7..74a79db05 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -88,6 +88,14 @@ void AllChannels::init() { registration(&startupLog); // Early startup messages for $SS } +void AllChannels::ready() { + for (auto channel : _channelq) { + if (channel->isController()) { + channel->println("[MSG:GET: io.*]"); + } + } +} + void AllChannels::kill(Channel* channel) { xQueueSend(_killQueue, &channel, 0); } diff --git a/FluidNC/src/Serial.h b/FluidNC/src/Serial.h index 84650b30c..44d87ead3 100644 --- a/FluidNC/src/Serial.h +++ b/FluidNC/src/Serial.h @@ -40,6 +40,7 @@ class AllChannels : public Channel { void registration(Channel* channel); void deregistration(Channel* channel); void init(); + void ready(); size_t write(uint8_t data) override; size_t write(const uint8_t* buffer, size_t length) override; diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index 055612744..d28163b79 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -14,7 +14,6 @@ class UartChannel : public Channel, public Configuration::Configurable { int _uart_num = 0; int _report_interval_ms = 0; - bool _controller = false; // the device is a pin extender public: UartChannel(bool addCR = false); @@ -38,8 +37,7 @@ class UartChannel : public Channel, public Configuration::Configurable { size_t timedReadBytes(uint8_t* buffer, size_t length, TickType_t timeout) { return timedReadBytes((char*)buffer, length, timeout); }; bool realtimeOkay(char c) override; bool lineComplete(char* line, char c) override; - Channel* pollLine(char* line) override; - bool isController() { return _controller; } + Channel* pollLine(char* line) override; // Configuration methods void group(Configuration::HandlerBase& handler) override { diff --git a/example_configs/uartio.yaml b/example_configs/uartio.yaml index 56aa9460d..88b57cc15 100644 --- a/example_configs/uartio.yaml +++ b/example_configs/uartio.yaml @@ -35,10 +35,14 @@ sdcard: card_detect_pin: NO_PIN probe: - pin: uart_channel1.0:pu:low + pin: NO_PIN + +control: + feed_hold_pin: uart_channel1.1:pu + cycle_start_pin: uart_channel1.2:pu user_outputs: - analog0_pin: uart_channel1.2 + analog0_pin: NO_PIN coolant: mist_pin: uart_channel1.15:low From 3a1810254aa84dc1a513e91e20c0204c9ddcc423 Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 4 Nov 2023 07:07:57 -0500 Subject: [PATCH 172/212] Cycle 0 and Macro Fixes - Homing cycle 0 was incorrectly running like -1 when run with $H - Eliminated a needless macro error when the macro was empty. --- FluidNC/src/Machine/Axis.cpp | 2 +- FluidNC/src/Machine/Macros.cpp | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/FluidNC/src/Machine/Axis.cpp b/FluidNC/src/Machine/Axis.cpp index 8c78cd6bb..1563d0aac 100644 --- a/FluidNC/src/Machine/Axis.cpp +++ b/FluidNC/src/Machine/Axis.cpp @@ -45,7 +45,7 @@ namespace Machine { m->init(); } } - if (_homing->_cycle) { + if (_homing && _homing->_cycle != Machine::Homing::set_mpos_only) { _homing->init(); set_bitnum(Axes::homingMask, _axis); } diff --git a/FluidNC/src/Machine/Macros.cpp b/FluidNC/src/Machine/Macros.cpp index 2f4e529b3..7858aaad9 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -50,15 +50,15 @@ Cmd findOverride(std::string name) { return it == overrideCodes.end() ? Cmd::None : it->second; } -bool Macro::run() { - if (sys.state != State::Idle) { - log_error("Macro can only be used in idle state"); +bool Macro::run() { // return true if the macro was run + const std::string& s = _gcode; + if (_gcode == "") { return false; } - const std::string& s = _gcode; - if (_gcode == "") { - return true; + if (sys.state != State::Idle) { + log_error("Macro can only be used in idle state"); + return false; } log_info("Running macro " << _name << ": " << _gcode); From a3a8f1cd17ea1ea5f9a08935ca6f20bbecffe0f8 Mon Sep 17 00:00:00 2001 From: bdring Date: Tue, 7 Nov 2023 19:35:18 -0600 Subject: [PATCH 173/212] Working on NAK --- FluidNC/src/Channel.cpp | 14 +++++++++++++- FluidNC/src/Channel.h | 1 + FluidNC/src/Pins/ChannelPinDetail.cpp | 6 +++++- FluidNC/src/RealtimeCmd.h | 8 ++++++-- FluidNC/src/Serial.cpp | 4 +++- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index 83ed03e4e..c020f513c 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -203,7 +203,9 @@ void Channel::out(int index, int value) { s += std::to_string(value); s += "]"; - println(s.c_str()); // send it out + if (!sendCtrlCmd(s.c_str(), true)) {// send it out + // do something about the NAK + } //log_info(s.c_str()); } @@ -230,3 +232,13 @@ void Channel::ack(Error status) { msg << static_cast(status); } } + +// send a command and optionally wait for an ACK +bool Channel::sendCtrlCmd(std::string cmd, bool need_Ack) { // return false is command was NAK'd + println(cmd.c_str()); + if (need_Ack) { + // need some code here + return true; + } + return true; +} diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index 8e5bd583d..b17759db9 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -117,6 +117,7 @@ class Channel : public Stream { int read() override { return -1; } int available() override { return _queue.size(); } bool isController() { return _controller; } + bool sendCtrlCmd(std::string s, bool need_Ack); uint32_t setReportInterval(uint32_t ms); uint32_t getReportInterval() { return _reportInterval; } diff --git a/FluidNC/src/Pins/ChannelPinDetail.cpp b/FluidNC/src/Pins/ChannelPinDetail.cpp index 5bfd0f248..5f5398016 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.cpp +++ b/FluidNC/src/Pins/ChannelPinDetail.cpp @@ -53,7 +53,11 @@ namespace Pins { } s += "]"; - _channel->println(s.c_str()); + + if (!_channel->sendCtrlCmd(s, true)) { + // do something about the NAK + } + //_channel->println(s.c_str()); } PinAttributes ChannelPinDetail::getAttr() const { return _channel->getAttr(_index); diff --git a/FluidNC/src/RealtimeCmd.h b/FluidNC/src/RealtimeCmd.h index 052be0c6e..f2e5282ab 100644 --- a/FluidNC/src/RealtimeCmd.h +++ b/FluidNC/src/RealtimeCmd.h @@ -44,8 +44,12 @@ enum class Cmd : uint8_t { SpindleOvrStop = 0x9E, CoolantFloodOvrToggle = 0xA0, CoolantMistOvrToggle = 0xA1, - PinLow = 0xB0, // Start of two-character sequence; second is event number - PinHigh = 0xB1, // Start of two-character sequence; second is event number + + // UART Extender + PinLow = 0xB0, // Start of two-character sequence; second is event number + PinHigh = 0xB1, // Start of two-character sequence; second is event number + NAK = 0xB2, + ACK = 0xB3, }; class Channel; diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 74a79db05..09aced804 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -91,7 +91,9 @@ void AllChannels::init() { void AllChannels::ready() { for (auto channel : _channelq) { if (channel->isController()) { - channel->println("[MSG:GET: io.*]"); + if (!channel->sendCtrlCmd("[MSG:GET: io.*]", true)){ + // do something about the NAK + } } } } From a1f185033763208b4e0e856b623803a026afd56d Mon Sep 17 00:00:00 2001 From: bdring Date: Thu, 9 Nov 2023 15:25:33 -0600 Subject: [PATCH 174/212] wip --- FluidNC/esp32/PwmPin.cpp | 1 + FluidNC/src/Channel.cpp | 12 +++++++++++- FluidNC/src/RealtimeCmd.cpp | 2 +- 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/FluidNC/esp32/PwmPin.cpp b/FluidNC/esp32/PwmPin.cpp index 879deb99c..0a34164a4 100644 --- a/FluidNC/esp32/PwmPin.cpp +++ b/FluidNC/esp32/PwmPin.cpp @@ -72,6 +72,7 @@ static uint8_t calc_pwm_precision(uint32_t frequency) { } PwmPin::PwmPin(Pin& pin, uint32_t frequency) : _frequency(frequency) { + log_info("....PwnPin Create"); uint8_t bits = calc_pwm_precision(frequency); _period = (1 << bits) - 1; _channel = allocateChannel(); diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index c020f513c..f1ef1a1e1 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -158,6 +158,17 @@ Channel* Channel::pollLine(char* line) { _last_rt_cmd = Cmd::None; continue; } + if (_last_rt_cmd == Cmd::ACK) { + log_info("ACK'd"); + _last_rt_cmd = Cmd::None; + continue; + } + if (_last_rt_cmd == Cmd::NAK) { + log_info("NAK'd"); + _last_rt_cmd = Cmd::None; + continue; + } + if (realtimeOkay(ch)) { if (is_extended_realtime_command(ch)) { _last_rt_cmd = static_cast(ch); @@ -183,7 +194,6 @@ Channel* Channel::pollLine(char* line) { } void Channel::setAttr(int index, Pins::PinAttributes attr) { - // XXX send INI message _pin_attributes[index] = _pin_attributes[index] | attr; } Pins::PinAttributes Channel::getAttr(int index) const { diff --git a/FluidNC/src/RealtimeCmd.cpp b/FluidNC/src/RealtimeCmd.cpp index b3c490d7a..a8771f3b5 100644 --- a/FluidNC/src/RealtimeCmd.cpp +++ b/FluidNC/src/RealtimeCmd.cpp @@ -122,5 +122,5 @@ bool is_realtime_command(uint8_t data) { bool is_extended_realtime_command(uint8_t data) { auto cmd = static_cast(data); - return cmd == Cmd::PinLow || cmd == Cmd::PinHigh; + return cmd == Cmd::PinLow || cmd == Cmd::PinHigh || cmd == Cmd::ACK || cmd == Cmd::NAK; } From 2250d6c2ce0d6e7b2aba77cc609addf2aab6d2b3 Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 11 Nov 2023 09:59:48 -0600 Subject: [PATCH 175/212] Added auto update to channels. I just copied the code from the commit mitch did to the uart extender branch. --- FluidNC/src/OLED.cpp | 2 +- FluidNC/src/OLED.h | 2 ++ FluidNC/src/Status_outputs.cpp | 6 +++--- FluidNC/src/Status_outputs.h | 10 +++++----- FluidNC/src/UartChannel.cpp | 1 + FluidNC/src/UartChannel.h | 8 ++++++-- 6 files changed, 18 insertions(+), 11 deletions(-) diff --git a/FluidNC/src/OLED.cpp b/FluidNC/src/OLED.cpp index e65eacb7f..7e0192af7 100644 --- a/FluidNC/src/OLED.cpp +++ b/FluidNC/src/OLED.cpp @@ -81,7 +81,7 @@ void OLED::init() { _oled->display(); allChannels.registration(this); - setReportInterval(500); + setReportInterval(_report_interval_ms); } Channel* OLED::pollLine(char* line) { diff --git a/FluidNC/src/OLED.h b/FluidNC/src/OLED.h index 833b4025a..9e299feca 100644 --- a/FluidNC/src/OLED.h +++ b/FluidNC/src/OLED.h @@ -42,6 +42,7 @@ class OLED : public Channel, public Configuration::Configurable { std::string _ticker; int _radio_delay = 0; + int _report_interval_ms = 500; uint8_t _i2c_num = 0; @@ -116,6 +117,7 @@ class OLED : public Channel, public Configuration::Configurable { void afterParse() override; void group(Configuration::HandlerBase& handler) override { + handler.item("report_interval_ms", _report_interval_ms, 100, 5000); handler.item("i2c_num", _i2c_num); handler.item("i2c_address", _address); handler.item("width", _width); diff --git a/FluidNC/src/Status_outputs.cpp b/FluidNC/src/Status_outputs.cpp index 2ed99b8f5..4f9b348dd 100644 --- a/FluidNC/src/Status_outputs.cpp +++ b/FluidNC/src/Status_outputs.cpp @@ -27,11 +27,11 @@ void Status_Outputs::init() { } log_info("Status outputs" - << " Interval:" << _interval_ms << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() << " Hold:" << _Hold_pin.name() - << " Alarm:" << _Alarm_pin.name()); + << " Interval:" << _report_interval_ms << " Idle:" << _Idle_pin.name() << " Cycle:" << _Run_pin.name() + << " Hold:" << _Hold_pin.name() << " Alarm:" << _Alarm_pin.name()); allChannels.registration(this); - setReportInterval(_interval_ms); + setReportInterval(_report_interval_ms); } void Status_Outputs::parse_report() { diff --git a/FluidNC/src/Status_outputs.h b/FluidNC/src/Status_outputs.h index 793624288..1ef334ee7 100644 --- a/FluidNC/src/Status_outputs.h +++ b/FluidNC/src/Status_outputs.h @@ -17,7 +17,7 @@ class Status_Outputs : public Channel, public Configuration::Configurable { std::string _report; std::string _state; - int _interval_ms = 500; + int _report_interval_ms = 500; void parse_report(); void parse_status_report(); @@ -25,10 +25,10 @@ class Status_Outputs : public Channel, public Configuration::Configurable { public: Status_Outputs() : Channel("status_outputs") {} - Status_Outputs(const Status_Outputs&) = delete; - Status_Outputs(Status_Outputs&&) = delete; + Status_Outputs(const Status_Outputs&) = delete; + Status_Outputs(Status_Outputs&&) = delete; Status_Outputs& operator=(const Status_Outputs&) = delete; - Status_Outputs& operator=(Status_Outputs&&) = delete; + Status_Outputs& operator=(Status_Outputs&&) = delete; virtual ~Status_Outputs() = default; @@ -47,7 +47,7 @@ class Status_Outputs : public Channel, public Configuration::Configurable { void afterParse() override {}; void group(Configuration::HandlerBase& handler) override { - handler.item("report_interval_ms", _interval_ms, 100, 5000); + handler.item("report_interval_ms", _report_interval_ms, 100, 5000); handler.item("idle_pin", _Idle_pin); handler.item("run_pin", _Run_pin); handler.item("hold_pin", _Hold_pin); diff --git a/FluidNC/src/UartChannel.cpp b/FluidNC/src/UartChannel.cpp index f304f8802..b3cc42fce 100644 --- a/FluidNC/src/UartChannel.cpp +++ b/FluidNC/src/UartChannel.cpp @@ -16,6 +16,7 @@ void UartChannel::init() { } else { log_error("UartChannel: missing uart" << _uart_num); } + setReportInterval(_report_interval_ms); } void UartChannel::init(Uart* uart) { _uart = uart; diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index 94f9aec5f..30d03ce3a 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -12,7 +12,8 @@ class UartChannel : public Channel, public Configuration::Configurable { Lineedit* _lineedit; Uart* _uart; - int _uart_num = 0; + int _uart_num = 0; + int _report_interval_ms = 0; public: UartChannel(bool addCR = false); @@ -39,7 +40,10 @@ class UartChannel : public Channel, public Configuration::Configurable { Channel* pollLine(char* line) override; // Configuration methods - void group(Configuration::HandlerBase& handler) override { handler.item("uart_num", _uart_num); } + void group(Configuration::HandlerBase& handler) override { + handler.item("uart_num", _uart_num); + handler.item("report_interval_ms", _report_interval_ms); + } }; extern UartChannel Uart0; From b1f534475968bbcdb24c0b7be4e1c88332b08bd5 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 10 Oct 2023 08:02:18 -1000 Subject: [PATCH 176/212] Reinstated a macro fix that got lost in a git mixup --- FluidNC/src/Error.cpp | 1 + FluidNC/src/Error.h | 1 + FluidNC/src/GCode.cpp | 3 +++ FluidNC/src/Machine/Macros.cpp | 18 ++++++++++-------- FluidNC/src/Machine/Macros.h | 22 +++++++++++----------- 5 files changed, 26 insertions(+), 19 deletions(-) diff --git a/FluidNC/src/Error.cpp b/FluidNC/src/Error.cpp index 7722f3d2c..45de5ab93 100644 --- a/FluidNC/src/Error.cpp +++ b/FluidNC/src/Error.cpp @@ -68,6 +68,7 @@ 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 a8387b25e..590c5a816 100644 --- a/FluidNC/src/Error.h +++ b/FluidNC/src/Error.h @@ -72,6 +72,7 @@ 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 3d74db282..1ea5e722a 100644 --- a/FluidNC/src/GCode.cpp +++ b/FluidNC/src/GCode.cpp @@ -1620,6 +1620,9 @@ 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 f58379e73..2f4e529b3 100644 --- a/FluidNC/src/Machine/Macros.cpp +++ b/FluidNC/src/Machine/Macros.cpp @@ -6,17 +6,14 @@ #include "src/System.h" // sys #include "src/Machine/MachineConfig.h" // config +Macro::Macro(const char* name) : _name(name) {} + void MacroEvent::run(void* arg) { - 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(); + config->_macros->_macro[_num].run(); } -Macro Macros::_startup_line[n_startup_lines] = { { "startup_line0" }, { "startup_line1" } }; -Macro Macros::_macro[n_macros] = { { "macro0" }, { "macro1" }, { "macro2" }, { "macro3" } }; +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" }; @@ -54,6 +51,11 @@ 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 a462bc0c6..80358fd01 100644 --- a/FluidNC/src/Machine/Macros.h +++ b/FluidNC/src/Machine/Macros.h @@ -27,8 +27,8 @@ namespace Machine { class Macro { public: std::string _gcode; - std::string _name; - Macro(const char* name) : _name(name) {} + const char* _name; + Macro(const char* name); bool run(); }; @@ -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.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); + 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); } ~Macros() {} From 7cf191ef7b74e55f0d6605592c1747769f446fdd Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 18 Nov 2023 14:28:12 -1000 Subject: [PATCH 177/212] Rebase merge and add ready() method --- FluidNC/src/Channel.cpp | 96 +++++++++++---------------- FluidNC/src/Channel.h | 59 ++++++++-------- FluidNC/src/HashFS.cpp | 1 - FluidNC/src/Logging.h | 4 +- FluidNC/src/Machine/EventPin.cpp | 3 + FluidNC/src/Machine/LimitPin.cpp | 1 - FluidNC/src/Machine/MachineConfig.cpp | 4 +- FluidNC/src/Pin.cpp | 3 - FluidNC/src/Pins/ChannelPinDetail.cpp | 61 ++++++++--------- FluidNC/src/Pins/ChannelPinDetail.h | 4 +- FluidNC/src/ProcessSettings.cpp | 84 +++++++++++++++++++++++ FluidNC/src/RealtimeCmd.cpp | 18 ++--- FluidNC/src/RealtimeCmd.h | 6 +- FluidNC/src/Report.cpp | 32 ++++----- FluidNC/src/Report.h | 3 + FluidNC/src/Serial.cpp | 17 +++-- FluidNC/src/Serial.h | 1 + FluidNC/src/UartChannel.cpp | 5 +- FluidNC/src/UartChannel.h | 9 ++- FluidNC/src/WebUI/WSChannel.cpp | 31 +++++---- FluidNC/src/WebUI/WSChannel.h | 2 +- FluidNC/src/WebUI/WebServer.cpp | 9 ++- 22 files changed, 259 insertions(+), 194 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index f1ef1a1e1..11fb2c8b3 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -101,17 +101,19 @@ void Channel::autoReportGCodeState() { } void Channel::autoReport() { if (_reportInterval) { - auto limitState = limits_get_state(); auto probeState = config->_probe->get_state(); - if (_reportWco || sys.state != _lastState || limitState != _lastLimits || probeState != _lastProbe || + if (probeState != _lastProbe) { + report_recompute_pin_string(); + } + if (_reportWco || sys.state != _lastState || probeState != _lastProbe || _lastPinString != report_pin_string || (motionState() && (int32_t(xTaskGetTickCount()) - _nextReportTime) >= 0)) { if (_reportWco) { report_wco_counter = 0; } - _reportWco = false; - _lastState = sys.state; - _lastLimits = limitState; - _lastProbe = probeState; + _reportWco = false; + _lastState = sys.state; + _lastProbe = probeState; + _lastPinString = report_pin_string; _nextReportTime = xTaskGetTickCount() + _reportInterval; report_realtime_status(*this); @@ -140,20 +142,12 @@ Channel* Channel::pollLine(char* line) { if (ch < 0) { break; } - if (_last_rt_cmd == Cmd::PinLow) { - try { - auto event_pin = _events.at(ch); - _pin_values[ch] = false; - event_pin->trigger(false); - } catch (std::exception& ex) {} - _last_rt_cmd = Cmd::None; - continue; - } - if (_last_rt_cmd == Cmd::PinHigh) { + if (_last_rt_cmd == Cmd::PinLow || _last_rt_cmd == Cmd::PinHigh) { + bool isHigh = _last_rt_cmd == Cmd::PinHigh; try { - auto event_pin = _events.at(ch); - _pin_values[ch] = true; - event_pin->trigger(true); + auto event_pin = _events.at(ch); + *_pin_values[ch] = isHigh; + event_pin->trigger(isHigh); } catch (std::exception& ex) {} _last_rt_cmd = Cmd::None; continue; @@ -170,12 +164,13 @@ Channel* Channel::pollLine(char* line) { } if (realtimeOkay(ch)) { - if (is_extended_realtime_command(ch)) { - _last_rt_cmd = static_cast(ch); - continue; - } if (is_realtime_command(ch)) { - execute_realtime_command(static_cast(ch), *this); + auto cmd = static_cast(ch); + if (cmd == Cmd::PinLow || cmd == Cmd::PinHigh) { + _last_rt_cmd = cmd; + } else { + execute_realtime_command(cmd, *this); + } continue; } } @@ -193,34 +188,29 @@ Channel* Channel::pollLine(char* line) { return nullptr; } -void Channel::setAttr(int index, Pins::PinAttributes attr) { - _pin_attributes[index] = _pin_attributes[index] | attr; +void Channel::setAttr(int index, bool* value, const std::string& attrString) { + if (value) { + _pin_values[index] = value; + } + while (_ackwait) { + pollLine(NULL); + delay_ms(10); + } + log_msg_to(*this, attrString); + _ackwait = true; + log_debug(attrString); } -Pins::PinAttributes Channel::getAttr(int index) const { - try { - return _pin_attributes.at(index); - } catch (std::exception& ex) { return Pins::PinAttributes::None; } + +void Channel::out(const std::string& s) { + log_msg_to(*this, s); + // _channel->_ackwait = true; + log_debug(s); } -void Channel::out(int index, int value) { - if (value == _pin_values[index]) { - return; +void Channel::ready() { + if (!_pin_values.empty()) { + out("GET: io.*"); } - _pin_values[index] = value; - std::string s = "[MSG:SET: io."; - s += std::to_string(index); - s += "="; - s += std::to_string(value); - s += "]"; - - if (!sendCtrlCmd(s.c_str(), true)) {// send it out - // do something about the NAK - } - - //log_info(s.c_str()); -} -int Channel::in(int index) { - return _pin_values[index]; } void Channel::registerEvent(uint8_t code, EventPin* obj) { @@ -242,13 +232,3 @@ void Channel::ack(Error status) { msg << static_cast(status); } } - -// send a command and optionally wait for an ACK -bool Channel::sendCtrlCmd(std::string cmd, bool need_Ack) { // return false is command was NAK'd - println(cmd.c_str()); - if (need_Ack) { - // need some code here - return true; - } - return true; -} diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index b17759db9..04f8fb3fd 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -34,43 +34,48 @@ class Channel : public Stream { static const int maxLine = 255; protected: - const char* _name; + std::string _name; char _line[maxLine]; size_t _linelen; - bool _addCR = false; - char _lastWasCR = false; - bool _controller = false; // the device is a pin extender + bool _addCR = false; + char _lastWasCR = false; std::queue _queue; uint32_t _reportInterval = 0; int32_t _nextReportTime = 0; - gc_modal_t _lastModal; - uint8_t _lastTool; - float _lastSpindleSpeed; - float _lastFeedRate; - State _lastState; - MotorMask _lastLimits; - bool _lastProbe; + gc_modal_t _lastModal; + uint8_t _lastTool; + float _lastSpindleSpeed; + float _lastFeedRate; + State _lastState; + MotorMask _lastLimits; + bool _lastProbe; + std::string _lastPinString; bool _reportWco = true; CoordIndex _reportNgc = CoordIndex::End; Cmd _last_rt_cmd; - std::map _events; - std::map _pin_values; - std::map _pin_attributes; + std::map _events; + std::map _pin_values; public: Channel(const char* name, bool addCR = false) : _name(name), _linelen(0), _addCR(addCR) {} + Channel(const char* name, int num, bool addCR = false) { + _name = name; + _name += std::to_string(num), _linelen = 0, _addCR = addCR; + } virtual ~Channel() = default; - virtual void handle() {}; - virtual Channel* pollLine(char* line); - virtual void ack(Error status); - const char* name() { return _name; } + bool _ackwait = false; + + virtual void handle() {}; + virtual Channel* pollLine(char* line); + virtual void ack(Error status); + const std::string& name() { return _name; } // rx_buffer_available() is the number of bytes that can be sent without overflowing // a reception buffer, even if the system is busy. Channels that can handle external @@ -113,11 +118,9 @@ class Channel : public Stream { void notifyWco() { _reportWco = true; } void notifyNgc(CoordIndex coord) { _reportNgc = coord; } - int peek() override { return -1; } - int read() override { return -1; } - int available() override { return _queue.size(); } - bool isController() { return _controller; } - bool sendCtrlCmd(std::string s, bool need_Ack); + int peek() override { return -1; } + int read() override { return -1; } + int available() override { return _queue.size(); } uint32_t setReportInterval(uint32_t ms); uint32_t getReportInterval() { return _reportInterval; } @@ -125,10 +128,8 @@ class Channel : public Stream { void autoReportGCodeState(); // Pin extender functions - virtual void out(int index, int value); - virtual int in(int index); - virtual void setAttr(int index, Pins::PinAttributes value); - virtual Pins::PinAttributes getAttr(int index) const; - - virtual void registerEvent(uint8_t code, EventPin* obj); + void out(const std::string& s); + void setAttr(int index, bool* valuep, const std::string& s); + void ready(); + void registerEvent(uint8_t code, EventPin* obj); }; diff --git a/FluidNC/src/HashFS.cpp b/FluidNC/src/HashFS.cpp index 9c780c412..b8ebf1afc 100644 --- a/FluidNC/src/HashFS.cpp +++ b/FluidNC/src/HashFS.cpp @@ -70,7 +70,6 @@ void HashFS::rehash_file(const std::filesystem::path& path) { delete_file(path); } else { localFsHashes[path.filename()] = hash; - log_debug(path.filename() << " hash " << hash); } } } diff --git a/FluidNC/src/Logging.h b/FluidNC/src/Logging.h index 256cfe90f..b5c246903 100644 --- a/FluidNC/src/Logging.h +++ b/FluidNC/src/Logging.h @@ -50,7 +50,7 @@ extern bool atMsgLevel(MsgLevel level); // Note: these '{'..'}' scopes are here for a reason: the destructor should flush. // #define log_bare(prefix, x) { LogStream ss(prefix); ss << x; } -#define log_msg(x) { LogStream ss("[MSG: "); ss << x; } +#define log_msg(x) { LogStream ss("[MSG:"); ss << x; } #define log_verbose(x) if (atMsgLevel(MsgLevelVerbose)) { LogStream ss("[MSG:VRB: "); ss << x; } #define log_debug(x) if (atMsgLevel(MsgLevelDebug)) { LogStream ss("[MSG:DBG: "); ss << x; } #define log_info(x) if (atMsgLevel(MsgLevelInfo)) { LogStream ss("[MSG:INFO: "); ss << x; } @@ -58,7 +58,7 @@ extern bool atMsgLevel(MsgLevel level); #define log_error(x) if (atMsgLevel(MsgLevelError)) { LogStream ss("[MSG:ERR: "); ss << x; } #define log_fatal(x) { LogStream ss("[MSG:FATAL: "); ss << x; Assert(false, "A fatal error occurred."); } -#define log_msg_to(out, x) { LogStream ss(out, "[MSG: "); ss << x; } +#define log_msg_to(out, x) { LogStream ss(out, "[MSG:"); ss << x; } #define log_verbose_to(out, x) if (atMsgLevel(MsgLevelVerbose)) { LogStream ss(out, "[MSG:VRB: "); ss << x; } #define log_debug_to(out, x) if (atMsgLevel(MsgLevelDebug)) { LogStream ss(out, "[MSG:DBG: "); ss << x; } #define log_info_to(out, x) if (atMsgLevel(MsgLevelInfo)) { LogStream ss(out, "[MSG:INFO: "); ss << x; } diff --git a/FluidNC/src/Machine/EventPin.cpp b/FluidNC/src/Machine/EventPin.cpp index 28b5bd250..1ffc251ff 100644 --- a/FluidNC/src/Machine/EventPin.cpp +++ b/FluidNC/src/Machine/EventPin.cpp @@ -1,4 +1,5 @@ #include "EventPin.h" +#include "src/Report.h" #include "src/Protocol.h" // protocol_send_event @@ -6,7 +7,9 @@ EventPin::EventPin(Event* event, const char* legend) : _event(event), _legend(le void EventPin::trigger(bool active) { update(active); + log_debug(_legend << " " << active); if (active) { protocol_send_event(_event, this); } + report_recompute_pin_string(); } diff --git a/FluidNC/src/Machine/LimitPin.cpp b/FluidNC/src/Machine/LimitPin.cpp index 37cb90ce7..986ddd808 100644 --- a/FluidNC/src/Machine/LimitPin.cpp +++ b/FluidNC/src/Machine/LimitPin.cpp @@ -54,7 +54,6 @@ namespace Machine { } void LimitPin::update(bool value) { - log_debug(_legend << " " << value); if (value) { if (Homing::approach() || (sys.state != State::Homing && _pHardLimits)) { _pLimited = value; diff --git a/FluidNC/src/Machine/MachineConfig.cpp b/FluidNC/src/Machine/MachineConfig.cpp index 21f461066..c8c458dbc 100644 --- a/FluidNC/src/Machine/MachineConfig.cpp +++ b/FluidNC/src/Machine/MachineConfig.cpp @@ -42,8 +42,8 @@ namespace Machine { handler.section("uart1", _uarts[1], 1); handler.section("uart2", _uarts[2], 2); - handler.section("uart_channel1", _uart_channels[1]); - handler.section("uart_channel2", _uart_channels[2]); + handler.section("uart_channel1", _uart_channels[1], 1); + handler.section("uart_channel2", _uart_channels[2], 2); handler.section("i2so", _i2so); diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index a2f4b69e9..82c31577e 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -77,9 +77,6 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa return nullptr; } if (string_util::equal_ignore_case(prefix, "i2so")) { - if (config->_i2so == nullptr) { - return "i2so: section must be defined before using i2so pins"; - } pinImplementation = new Pins::I2SOPinDetail(static_cast(pin_number), parser); return nullptr; } diff --git a/FluidNC/src/Pins/ChannelPinDetail.cpp b/FluidNC/src/Pins/ChannelPinDetail.cpp index 5f5398016..f75d9bcee 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.cpp +++ b/FluidNC/src/Pins/ChannelPinDetail.cpp @@ -8,11 +8,11 @@ namespace Pins { PinDetail(number), _channel(channel) { for (auto opt : options) { if (opt.is("pu")) { - _channel->setAttr(_index, PinAttributes::PullUp); + setAttr(PinAttributes::PullUp); } else if (opt.is("pd")) { - _channel->setAttr(_index, PinAttributes::PullDown); + setAttr(PinAttributes::PullDown); } else if (opt.is("low")) { - _channel->setAttr(_index, PinAttributes::ActiveLow); + setAttr(PinAttributes::ActiveLow); } else if (opt.is("high")) { // Default: Active HIGH. } @@ -24,61 +24,58 @@ namespace Pins { } void ChannelPinDetail::write(int high) { - _channel->out(_index, high); - } - int ChannelPinDetail::read() { - return _channel->in(_index); + if (high == _value) { + return; + } + std::string s = "SET: io."; + s += std::to_string(_index); + s += "="; + s += std::to_string(high); + _channel->out(s); } - void ChannelPinDetail::setAttr(PinAttributes value) { - _channel->setAttr(_index, value); - std::string s = "[MSG:INI: io."; + int ChannelPinDetail::read() { return _value; } + void ChannelPinDetail::setAttr(PinAttributes attr) { + _attributes = _attributes | attr; + + std::string s = "INI: io."; s += std::to_string(_index); s += "="; - if (value.has(PinAttributes::Input)) { + if (_attributes.has(Pins::PinAttributes::Input)) { s += "inp"; - } else if (_channel->getAttr(_index) & PinAttributes::Output) { + } else if (_attributes.has(Pins::PinAttributes::Output)) { s += "out"; } else { return; } - if (_channel->getAttr(_index) & PinAttributes::PullUp) { + if (_attributes.has(Pins::PinAttributes::PullUp)) { s += ":pu"; } - if (_channel->getAttr(_index) & PinAttributes::PullDown) { - s += ":pu"; + if (_attributes.has(Pins::PinAttributes::PullDown)) { + s += ":pd"; } - if (_channel->getAttr(_index) & PinAttributes::ActiveLow) { + if (_attributes.has(Pins::PinAttributes::ActiveLow)) { s += ":low"; } - s += "]"; - - if (!_channel->sendCtrlCmd(s, true)) { - // do something about the NAK - } - //_channel->println(s.c_str()); - } - PinAttributes ChannelPinDetail::getAttr() const { - return _channel->getAttr(_index); + _channel->setAttr(_index, _attributes.has(Pins::PinAttributes::Input) ? &this->_value : nullptr, s); } - std::string ChannelPinDetail::toString() { + PinAttributes ChannelPinDetail::getAttr() const { return _attributes; } + std::string ChannelPinDetail::toString() { std::string s = _channel->name(); s += "."; s += std::to_string(_index); - if (_channel->getAttr(_index) & PinAttributes::ActiveLow) { + if (_attributes.has(PinAttributes::ActiveLow)) { s += ":low"; } - if (_channel->getAttr(_index) & PinAttributes::PullUp) { + if (_attributes.has(PinAttributes::PullUp)) { s += ":pu"; } - if (_channel->getAttr(_index) & PinAttributes::PullDown) { + if (_attributes.has(PinAttributes::PullDown)) { s += ":pd"; } return s; } - void ChannelPinDetail::registerEvent(EventPin* obj) { - _channel->registerEvent(_index, obj); - } + void ChannelPinDetail::registerEvent(EventPin* obj) { _channel->registerEvent(_index, obj); } } diff --git a/FluidNC/src/Pins/ChannelPinDetail.h b/FluidNC/src/Pins/ChannelPinDetail.h index 487779277..82dd1f129 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.h +++ b/FluidNC/src/Pins/ChannelPinDetail.h @@ -11,7 +11,9 @@ namespace Pins { class ChannelPinDetail : public PinDetail { private: - Channel* _channel; + Channel* _channel; + PinAttributes _attributes; + bool _value; public: ChannelPinDetail(Channel* channel, int number, const PinOptionsParser& options); diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 4c2a29dab..02d85e621 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -298,6 +298,81 @@ static Error report_ngc(const char* value, WebUI::AuthenticationLevel auth_level report_ngc_parameters(out); return Error::Ok; } +static Error msg_to_uart0(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + if (value) { + Channel* dest = allChannels.find("uart_channel0"); + if (dest) { + log_msg_to(*dest, value); + } + } + return Error::Ok; +} +static Error msg_to_uart1(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + if (value && config->_uart_channels[1]) { + log_msg_to(*(config->_uart_channels[1]), value); + } + return Error::Ok; +} +static Error cmd_log_msg(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + if (value) { + if (*value == '*') { + log_msg(value + 1); + } else { + log_msg_to(out, value); + } + } + return Error::Ok; +} +static Error cmd_log_error(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + if (value) { + if (*value == '*') { + log_error(value + 1); + } else { + log_error_to(out, value); + } + } + return Error::Ok; +} +static Error cmd_log_warn(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + if (value) { + if (*value == '*') { + log_warn(value + 1); + } else { + log_warn_to(out, value); + } + } + return Error::Ok; +} +static Error cmd_log_info(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + if (value) { + if (*value == '*') { + log_info(value + 1); + } else { + log_info_to(out, value); + } + } + return Error::Ok; +} +static Error cmd_log_debug(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + if (value) { + if (*value == '*') { + log_debug(value + 1); + } else { + log_debug_to(out, value); + } + } + return Error::Ok; +} +static Error cmd_log_verbose(const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + if (value) { + if (*value == '*') { + log_verbose(value + 1); + } else { + log_verbose_to(out, value); + } + } + return Error::Ok; +} static Error home(AxisMask axisMask) { if (axisMask != Machine::Homing::AllCycles) { // if not AllCycles we need to make sure the cycle is not prohibited // if there is a cycle it is the axis from $H @@ -796,6 +871,15 @@ void make_user_commands() { new UserCommand("HB", "Home/B", home_b, notIdleOrAlarm); new UserCommand("HC", "Home/C", home_c, notIdleOrAlarm); + new UserCommand("MU0", "Msg/Uart0", msg_to_uart0, anyState); + new UserCommand("MU1", "Msg/Uart1", msg_to_uart1, anyState); + new UserCommand("LM", "Log/Msg", cmd_log_msg, anyState); + new UserCommand("LE", "Log/Error", cmd_log_error, anyState); + new UserCommand("LW", "Log/Warn", cmd_log_warn, anyState); + new UserCommand("LI", "Log/Info", cmd_log_info, anyState); + new UserCommand("LD", "Log/Debug", cmd_log_debug, anyState); + new UserCommand("LV ", "Log/Verbose", cmd_log_verbose, anyState); + new UserCommand("SLP", "System/Sleep", go_to_sleep, notIdleOrAlarm); new UserCommand("I", "Build/Info", get_report_build_info, notIdleOrAlarm); new UserCommand("N", "GCode/StartupLines", show_startup_lines, notIdleOrAlarm); diff --git a/FluidNC/src/RealtimeCmd.cpp b/FluidNC/src/RealtimeCmd.cpp index a8771f3b5..2e6cdc98b 100644 --- a/FluidNC/src/RealtimeCmd.cpp +++ b/FluidNC/src/RealtimeCmd.cpp @@ -6,17 +6,6 @@ #include "System.h" #include "Machine/Macros.h" // macroNEvent -void execute_extended_realtime_command(Cmd command, uint8_t arg, Channel& channel) { - switch (command) { - case Cmd::PinLow: - //protocol_send_event(&pinLowEvent, arg); - break; - case Cmd::PinHigh: - //protocol_send_event(&pinHighEvent, arg); - break; - } -} - // Act upon a realtime character void execute_realtime_command(Cmd command, Channel& channel) { switch (command) { @@ -108,6 +97,12 @@ void execute_realtime_command(Cmd command, Channel& channel) { case Cmd::Macro3: protocol_send_event(¯o3Event); break; + case Cmd::ACK: + channel._ackwait = false; + break; + case Cmd::NAK: + channel._ackwait = false; + break; } } @@ -119,7 +114,6 @@ bool is_realtime_command(uint8_t data) { auto cmd = static_cast(data); return cmd == Cmd::Reset || cmd == Cmd::StatusReport || cmd == Cmd::CycleStart || cmd == Cmd::FeedHold; } - bool is_extended_realtime_command(uint8_t data) { auto cmd = static_cast(data); return cmd == Cmd::PinLow || cmd == Cmd::PinHigh || cmd == Cmd::ACK || cmd == Cmd::NAK; diff --git a/FluidNC/src/RealtimeCmd.h b/FluidNC/src/RealtimeCmd.h index f2e5282ab..e19ef7566 100644 --- a/FluidNC/src/RealtimeCmd.h +++ b/FluidNC/src/RealtimeCmd.h @@ -44,12 +44,11 @@ enum class Cmd : uint8_t { SpindleOvrStop = 0x9E, CoolantFloodOvrToggle = 0xA0, CoolantMistOvrToggle = 0xA1, - // UART Extender PinLow = 0xB0, // Start of two-character sequence; second is event number PinHigh = 0xB1, // Start of two-character sequence; second is event number - NAK = 0xB2, - ACK = 0xB3, + NAK = 0xB2, // IO Expander rejected command + ACK = 0xB3, // IO Expander accepted command }; class Channel; @@ -57,4 +56,3 @@ class Channel; bool is_realtime_command(uint8_t data); bool is_extended_realtime_command(uint8_t data); void execute_realtime_command(Cmd command, Channel& channel); -// void execute_extended_realtime_command(Cmd command, uint8_t arg, Channel& channel); diff --git a/FluidNC/src/Report.cpp b/FluidNC/src/Report.cpp index 9ade3d5ed..ee31f1e03 100644 --- a/FluidNC/src/Report.cpp +++ b/FluidNC/src/Report.cpp @@ -45,6 +45,10 @@ EspClass esp; #endif +volatile bool protocol_pin_changed = false; + +std::string report_pin_string; + portMUX_TYPE mmux = portMUX_INITIALIZER_UNLOCKED; void _notify(const char* title, const char* msg) { @@ -491,15 +495,10 @@ const char* state_name() { return ""; } -static std::string pinString() { - std::string msg; - bool prefixNeeded = true; +void report_recompute_pin_string() { + report_pin_string = ""; if (config->_probe->get_state()) { - if (prefixNeeded) { - prefixNeeded = false; - msg += "|Pn:"; - } - msg += 'P'; + report_pin_string += 'P'; } MotorMask lim_pin_state = limits_get_state(); @@ -508,24 +507,15 @@ static std::string pinString() { for (size_t axis = 0; axis < n_axis; axis++) { if (bitnum_is_true(lim_pin_state, Machine::Axes::motor_bit(axis, 0)) || bitnum_is_true(lim_pin_state, Machine::Axes::motor_bit(axis, 1))) { - if (prefixNeeded) { - prefixNeeded = false; - msg += "|Pn:"; - } - msg += config->_axes->axisName(axis); + report_pin_string += config->_axes->axisName(axis); } } } std::string ctrl_pin_report = config->_control->report_status(); if (ctrl_pin_report.length()) { - if (prefixNeeded) { - prefixNeeded = false; - msg += "|Pn:"; - } - msg += ctrl_pin_report; + report_pin_string += ctrl_pin_report; } - return msg; } // Define this to do something if a debug request comes in over serial @@ -574,7 +564,9 @@ void report_realtime_status(Channel& channel) { } msg << "|FS:" << setprecision(0) << rate << "," << sys.spindle_speed; - msg << pinString(); + if (report_pin_string.length()) { + msg << "|Pn:" << report_pin_string; + } if (report_wco_counter > 0) { report_wco_counter--; diff --git a/FluidNC/src/Report.h b/FluidNC/src/Report.h index 221b9015f..d90ab815e 100644 --- a/FluidNC/src/Report.h +++ b/FluidNC/src/Report.h @@ -98,3 +98,6 @@ extern const char* git_url; void display_init(); extern bool readyNext; + +extern std::string report_pin_string; +void report_recompute_pin_string(); diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 09aced804..c0c8c1bbb 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -90,11 +90,7 @@ void AllChannels::init() { void AllChannels::ready() { for (auto channel : _channelq) { - if (channel->isController()) { - if (!channel->sendCtrlCmd("[MSG:GET: io.*]", true)){ - // do something about the NAK - } - } + channel->ready(); } } @@ -176,6 +172,17 @@ size_t AllChannels::write(const uint8_t* buffer, size_t length) { _mutex_general.unlock(); return length; } +Channel* AllChannels::find(const std::string& name) { + _mutex_general.lock(); + for (auto channel : _channelq) { + if (channel->name() == name) { + _mutex_general.unlock(); + return channel; + } + } + _mutex_general.unlock(); + return nullptr; +} Channel* AllChannels::pollLine(char* line) { Channel* deadChannel; while (xQueueReceive(_killQueue, &deadChannel, 0)) { diff --git a/FluidNC/src/Serial.h b/FluidNC/src/Serial.h index 44d87ead3..c07d16f3c 100644 --- a/FluidNC/src/Serial.h +++ b/FluidNC/src/Serial.h @@ -53,6 +53,7 @@ class AllChannels : public Channel { void listChannels(Channel& out); Channel* pollLine(char* line) override; + Channel* find(const std::string& name); void stopJob() override; }; diff --git a/FluidNC/src/UartChannel.cpp b/FluidNC/src/UartChannel.cpp index 4aff0cf8c..5b8cebba2 100644 --- a/FluidNC/src/UartChannel.cpp +++ b/FluidNC/src/UartChannel.cpp @@ -5,7 +5,7 @@ #include "Machine/MachineConfig.h" // config #include "Serial.h" // allChannels -UartChannel::UartChannel(bool addCR) : Channel("uart", addCR) { +UartChannel::UartChannel(int num, bool addCR) : Channel("uart_channel", num, addCR) { _lineedit = new Lineedit(this, _line, Channel::maxLine - 1); } @@ -22,6 +22,7 @@ void UartChannel::init(Uart* uart) { _uart = uart; allChannels.registration(this); log_info("uart_channel" << _uart_num << " created"); + log_msg_to(*this, "RST"); } size_t UartChannel::write(uint8_t c) { @@ -117,7 +118,7 @@ size_t UartChannel::timedReadBytes(char* buffer, size_t length, TickType_t timeo return length - remlen; } -UartChannel Uart0(true); // Primary serial channel with LF to CRLF conversion +UartChannel Uart0(0, true); // Primary serial channel with LF to CRLF conversion void uartInit() { auto uart0 = new Uart(0); diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index d28163b79..3865529bd 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -12,11 +12,11 @@ class UartChannel : public Channel, public Configuration::Configurable { Lineedit* _lineedit; Uart* _uart; - int _uart_num = 0; - int _report_interval_ms = 0; + int _uart_num = 0; + int _report_interval_ms = 0; public: - UartChannel(bool addCR = false); + UartChannel(int num, bool addCR = false); void init(); void init(Uart* uart); @@ -37,13 +37,12 @@ class UartChannel : public Channel, public Configuration::Configurable { size_t timedReadBytes(uint8_t* buffer, size_t length, TickType_t timeout) { return timedReadBytes((char*)buffer, length, timeout); }; bool realtimeOkay(char c) override; bool lineComplete(char* line, char c) override; - Channel* pollLine(char* line) override; + Channel* pollLine(char* line) override; // Configuration methods void group(Configuration::HandlerBase& handler) override { handler.item("report_interval_ms", _report_interval_ms); handler.item("uart_num", _uart_num); - handler.item("controller", _controller); } }; diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index 22aa4fae2..c2feeb90c 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -164,28 +164,33 @@ namespace WebUI { } } - bool WSChannels::runGCode(int pageid, std::string cmd) { + bool WSChannels::runGCode(int pageid, std::string& cmd) { bool has_error = false; WSChannel* wsChannel = getWSChannel(pageid); if (wsChannel) { + if (cmd.length() > 0 && ((cmd[0] & 0xe0) == 0xc0)) { + // In UTF-8, 0x80-0xff is encoded as follows: + // 0b1NMMMMMM -> 0b1100001N 0b10MMMMMM + // The GRBL protocol is 8-bit only, so we handle only the + // UTF-8 encodings for 0x80-0xff, ignoring encodings for + // numbers that will not fit in 8 bits. + uint8_t hibits = cmd[0] & 0x1f; + if (hibits < 4) { + // Decode from UTF-8 to 8-bit binary + cmd.erase(0, 1); + cmd[0] = (hibits << 6) | (cmd[0] & 0x3f); + } + // If hibits >= 4, we pass the byte through un-decoded. + // This probably will not happen, since URLs are supposed to + // be in UTF-8, but we consider it anyway in case of buggy clients. + } // It is very tempting to let wsChannel->push() handle the realtime // character sequences so we don't have to do it here. That does not work // because we need to know whether to add a newline. We should not add newline // on a realtime sequence, but we must add one (if not already present) // on a text command. - if (cmd.length() > 0 && cmd[0] == 0xc2) { - if (cmd.length() == 3 && is_extended_realtime_command(cmd[1])) { - wsChannel->pushRT(cmd[1]); - wsChannel->pushRT(cmd[2]); - } else if (cmd.length() == 3 && is_realtime_command(cmd[1]) && cmd[2] == '\0') { - // Handles old WebUIs that send a null after high-bit-set realtime chars - wsChannel->pushRT(cmd[1]); - } else if (cmd.length() == 2 && is_realtime_command(cmd[1])) { - // Handles old WebUIs that send a null after high-bit-set realtime chars - wsChannel->pushRT(cmd[1]); - } - } else if (cmd.length() == 2 && is_extended_realtime_command(cmd[0])) { + if (cmd.length() == 2 && is_extended_realtime_command(cmd[0])) { wsChannel->pushRT(cmd[0]); wsChannel->pushRT(cmd[1]); } else if (cmd.length() == 1 && is_realtime_command(cmd[0])) { diff --git a/FluidNC/src/WebUI/WSChannel.h b/FluidNC/src/WebUI/WSChannel.h index 01ee9ece7..5ba30c255 100644 --- a/FluidNC/src/WebUI/WSChannel.h +++ b/FluidNC/src/WebUI/WSChannel.h @@ -88,7 +88,7 @@ namespace WebUI { static void removeChannel(WSChannel* channel); static void removeChannel(uint8_t num); - static bool runGCode(int pageid, std::string cmd); + static bool runGCode(int pageid, std::string& cmd); static bool sendError(int pageid, std::string error); static void sendPing(); static void handleEvent(WebSocketsServer* server, uint8_t num, uint8_t type, uint8_t* payload, size_t length); diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 2c0bf3e89..307d38349 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; @@ -438,8 +438,11 @@ namespace WebUI { } //if it is internal command [ESPXXX] // cmd.trim(); - int ESPpos = cmd.find("[ESP"); - if (ESPpos != std::string::npos) { + auto isCommand = cmd.length() && cmd[0] == '$'; + if (!isCommand) { + isCommand = cmd.find("[ESP") != std::string::npos; + } + if (isCommand) { char line[256]; strncpy(line, cmd.c_str(), 255); webClient.attachWS(_webserver, silent); From a52945132c4a7369ac591556bac3194ef1eb0181 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 18 Nov 2023 14:34:34 -1000 Subject: [PATCH 178/212] Send GET io.* while startup log is still active --- FluidNC/src/Main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index b775c325b..0d2246b37 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -139,9 +139,9 @@ void setup() { WebUI::wifi_config.begin(); } + allChannels.ready(); allChannels.deregistration(&startupLog); protocol_send_event(&startEvent); - allChannels.ready(); } void loop() { From a564bd1762f08ddda6d75c22086cea8ae5a06036 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 23 Nov 2023 11:46:03 -1000 Subject: [PATCH 179/212] Use UTF8 for extender pin reports --- FluidNC/src/Channel.cpp | 72 ++++++----- FluidNC/src/Channel.h | 13 ++ FluidNC/src/Pins/ChannelPinDetail.h | 2 +- FluidNC/src/RealtimeCmd.cpp | 10 -- FluidNC/src/RealtimeCmd.h | 7 +- FluidNC/src/UTF8.cpp | 177 ++++++++++++++++++++++++++++ FluidNC/src/UTF8.h | 26 ++++ FluidNC/src/UartChannel.cpp | 2 + FluidNC/src/WebUI/WSChannel.cpp | 45 ++----- FluidNC/src/WebUI/WSChannel.h | 3 +- 10 files changed, 272 insertions(+), 85 deletions(-) create mode 100644 FluidNC/src/UTF8.cpp create mode 100644 FluidNC/src/UTF8.h diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index 11fb2c8b3..80082a5fd 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -126,6 +126,14 @@ void Channel::autoReport() { } } +void Channel::pin_event(uint32_t pinnum, bool active) { + try { + auto event_pin = _events.at(pinnum); + *_pin_values[pinnum] = active; + event_pin->trigger(active); + } catch (std::exception& ex) {} +} + Channel* Channel::pollLine(char* line) { handle(); while (1) { @@ -142,45 +150,48 @@ Channel* Channel::pollLine(char* line) { if (ch < 0) { break; } - if (_last_rt_cmd == Cmd::PinLow || _last_rt_cmd == Cmd::PinHigh) { - bool isHigh = _last_rt_cmd == Cmd::PinHigh; - try { - auto event_pin = _events.at(ch); - *_pin_values[ch] = isHigh; - event_pin->trigger(isHigh); - } catch (std::exception& ex) {} - _last_rt_cmd = Cmd::None; + uint32_t cmd; + + int res = _utf8.decode(ch, cmd); + if (res == -1) { + log_debug("UTF8 decoding error"); continue; } - if (_last_rt_cmd == Cmd::ACK) { - log_info("ACK'd"); - _last_rt_cmd = Cmd::None; + if (res == 0) { continue; } - if (_last_rt_cmd == Cmd::NAK) { - log_info("NAK'd"); - _last_rt_cmd = Cmd::None; + // Otherwise res==1 and we have decoded a sequence so proceed + + if (cmd == PinACK) { + _ackwait = false; + continue; + } + if (cmd == PinNAK) { + _ackwait = false; continue; } - if (realtimeOkay(ch)) { - if (is_realtime_command(ch)) { - auto cmd = static_cast(ch); - if (cmd == Cmd::PinLow || cmd == Cmd::PinHigh) { - _last_rt_cmd = cmd; - } else { - execute_realtime_command(cmd, *this); - } - continue; - } + if (cmd >= PinLowFirst && cmd < PinLowLast) { + pin_event(cmd - PinLowFirst, false); + continue; + } + if (cmd >= PinHighFirst && cmd < PinHighLast) { + pin_event(cmd - PinHighFirst, true); + continue; } + + if (realtimeOkay(cmd) && is_realtime_command(cmd)) { + execute_realtime_command(static_cast(cmd), *this); + continue; + } + if (!line) { // If we are not able to handle a line we save the character // until later - _queue.push(uint8_t(ch)); + _queue.push(uint8_t(cmd)); continue; } - if (line && lineComplete(line, ch)) { + if (lineComplete(line, cmd)) { return this; } } @@ -192,9 +203,10 @@ void Channel::setAttr(int index, bool* value, const std::string& attrString) { if (value) { _pin_values[index] = value; } - while (_ackwait) { + int count = 0; + while (_ackwait && ++count < 2000) { pollLine(NULL); - delay_ms(10); + delay_ms(1); } log_msg_to(*this, attrString); _ackwait = true; @@ -208,9 +220,13 @@ void Channel::out(const std::string& s) { } void Channel::ready() { +#if 0 + // At the moment this is unnecessary because initializing + // an input pin triggers an initial value event if (!_pin_values.empty()) { out("GET: io.*"); } +#endif } void Channel::registerEvent(uint8_t code, EventPin* obj) { diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index 04f8fb3fd..a2a96fea5 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -20,6 +20,7 @@ #include "GCode.h" // gc_modal_t #include "Types.h" // State #include "RealtimeCmd.h" // Cmd +#include "UTF8.h" #include "Pins/PinAttributes.h" #include "Machine/EventPin.h" @@ -30,6 +31,16 @@ class Channel : public Stream { private: + void pin_event(uint32_t pinnum, bool active); + + const int PinLowFirst = 0x100; + const int PinLowLast = 0x13f; + const int PinHighFirst = 0x140; + const int PinHighLast = 0x17f; + + const int PinACK = 0xB2; + const int PinNAK = 0xB3; + public: static const int maxLine = 255; @@ -62,6 +73,8 @@ class Channel : public Stream { std::map _events; std::map _pin_values; + UTF8 _utf8; + public: Channel(const char* name, bool addCR = false) : _name(name), _linelen(0), _addCR(addCR) {} Channel(const char* name, int num, bool addCR = false) { diff --git a/FluidNC/src/Pins/ChannelPinDetail.h b/FluidNC/src/Pins/ChannelPinDetail.h index 82dd1f129..a460cfab0 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.h +++ b/FluidNC/src/Pins/ChannelPinDetail.h @@ -13,7 +13,7 @@ namespace Pins { private: Channel* _channel; PinAttributes _attributes; - bool _value; + bool _value = false; public: ChannelPinDetail(Channel* channel, int number, const PinOptionsParser& options); diff --git a/FluidNC/src/RealtimeCmd.cpp b/FluidNC/src/RealtimeCmd.cpp index 2e6cdc98b..aeb696cd2 100644 --- a/FluidNC/src/RealtimeCmd.cpp +++ b/FluidNC/src/RealtimeCmd.cpp @@ -97,12 +97,6 @@ void execute_realtime_command(Cmd command, Channel& channel) { case Cmd::Macro3: protocol_send_event(¯o3Event); break; - case Cmd::ACK: - channel._ackwait = false; - break; - case Cmd::NAK: - channel._ackwait = false; - break; } } @@ -114,7 +108,3 @@ bool is_realtime_command(uint8_t data) { auto cmd = static_cast(data); return cmd == Cmd::Reset || cmd == Cmd::StatusReport || cmd == Cmd::CycleStart || cmd == Cmd::FeedHold; } -bool is_extended_realtime_command(uint8_t data) { - auto cmd = static_cast(data); - return cmd == Cmd::PinLow || cmd == Cmd::PinHigh || cmd == Cmd::ACK || cmd == Cmd::NAK; -} diff --git a/FluidNC/src/RealtimeCmd.h b/FluidNC/src/RealtimeCmd.h index e19ef7566..bb9fea62e 100644 --- a/FluidNC/src/RealtimeCmd.h +++ b/FluidNC/src/RealtimeCmd.h @@ -44,15 +44,10 @@ enum class Cmd : uint8_t { SpindleOvrStop = 0x9E, CoolantFloodOvrToggle = 0xA0, CoolantMistOvrToggle = 0xA1, - // UART Extender - PinLow = 0xB0, // Start of two-character sequence; second is event number - PinHigh = 0xB1, // Start of two-character sequence; second is event number - NAK = 0xB2, // IO Expander rejected command - ACK = 0xB3, // IO Expander accepted command + // Channel Extender uses the Bx range; see Channel.h }; class Channel; bool is_realtime_command(uint8_t data); -bool is_extended_realtime_command(uint8_t data); void execute_realtime_command(Cmd command, Channel& channel); diff --git a/FluidNC/src/UTF8.cpp b/FluidNC/src/UTF8.cpp new file mode 100644 index 000000000..54cebfc21 --- /dev/null +++ b/FluidNC/src/UTF8.cpp @@ -0,0 +1,177 @@ +// Copyright (c) 2021 - Mitch Bradley +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#define PASS_THROUGH_80_BF +// #define TEST_UTF8 + +#include "UTF8.h" + +// Returns 1 if we have a valid sequence, and value is set +// Returns 0 if we are in the middle of a sequence +// Returns -1 if there is a sequence error +int UTF8::decode(uint8_t ch, uint32_t& value) { + if (_state) { + if ((ch & 0xc0) != 0x80) { + // Trailing bytes in a sequence must have 10 in the two high bits + _state = 0; + return -1; + } + // Otherwise, ch is between 0x80 and 0xbf, so it is the + // second, third, or fourth byte of a UTF8 sequence + _state--; + _num = (_num << 6) | (ch & 0x3f); + if (_state) { + return 0; + } + value = _num; + return 1; + } + // After this point, _state is zero + if (ch < 0x80) { + // 1-byte sequence - No decoding necessary + value = ch; + return 1; + } +#ifdef PASS_THROUGH_80_BF + if (ch < 0xbf) { + // UTF8 uses 0x80-0xbf only for continuation bytes, i.e. the second, + // third, or fourth byte of a sequence. Therefore, a byte in that + // range should be an error if it occurs outside of a sequence. + // But GRBL uses that range for realtime characters, and all + // preexisting GRBL serial senders send such bytes unencoded. + // By passing them through without an error, we can be backwards + // compatible. + value = ch; + return 1; + } +#endif + + if (ch >= 0xf0) { + _state = 3; // Start of 4-byte sequence + _num = ch & 0x07; + return 0; + } + if (ch >= 0xe0) { + _state = 2; // Start of 3-byte sequence + _num = ch & 0x0f; + return 0; + } + if (ch >= 0xc0) { + _state = 1; // Start of 2-byte sequence + _num = ch & 0x1f; + return 0; + } + // Otherwise we received a continuation byte with the two high bits == 10, + // i.e. ch between 0x80 and 0xbf, when not in the midst of a sequence + return -1; +} +bool UTF8::decode(const std::vector& input, uint32_t& value) { + int len = input.size(); + for (auto& ch : input) { + --len; + int result = decode(ch, value); + if (result == -1) { + return false; + } + if (result == 1) { + return len == 0; // Error if there are more bytes in the input + } + } + // Reached end of input without finishing the decode + return false; +} +std::vector UTF8::encode(const uint32_t value) { + std::vector output; + if (value >= 0x110000) { + // In this case, the returned vector will be empty + return output; + } + if (value >= 0x100000) { + output.push_back(0xf0 | ((value >> 18) & 0x07)); + output.push_back(0x80 | ((value >> 12) & 0x3f)); + output.push_back(0x80 | ((value >> 6) & 0x3f)); + output.push_back(0x80 | (value & 0x3f)); + return output; + } + if (value >= 0x800) { + output.push_back(0xe0 | ((value >> 12) & 0x0f)); + output.push_back(0x80 | ((value >> 6) & 0x3f)); + output.push_back(0x80 | (value & 0x3f)); + return output; + } + if (value >= 0x80) { + output.push_back(0xc0 | ((value >> 6) & 0x01f)); + output.push_back(0x80 | (value & 0x3f)); + return output; + } + output.push_back(value); + return output; +} + +#ifdef TEST_UTF8 +# include + +static bool decode_test(UTF8* utf8, std::vector input, uint32_t& value) { + for (auto& ch : input) { + printf("%x ", ch); + } + printf("-> "); + auto res = utf8->decode(input, value); + if (res) { + printf("%x\n", value); + } else { + printf("ERROR\n"); + } + return res; +} + +static bool encode_test(UTF8* utf8, uint32_t value) { + auto encoded = utf8->encode(value); + printf("%x -> ", value); + if (encoded.size()) { + uint32_t out_value; + bool res = decode_test(utf8, encoded, out_value); + if (!res) { + return false; + } + if (out_value != value) { + printf(" -- Incorrect value\n"); + return false; + } + return true; + } else { + printf("ERROR\n"); + return false; + } +} + +void test_UTF8() { + UTF8* utf8 = new UTF8(); + encode_test(utf8, 0x7f); + encode_test(utf8, 0x80); + encode_test(utf8, 0x90); + encode_test(utf8, 0xa0); + encode_test(utf8, 0xbf); + encode_test(utf8, 0x100); + encode_test(utf8, 0x13f); + encode_test(utf8, 0x140); + encode_test(utf8, 0x17f); + encode_test(utf8, 0x1ff); + encode_test(utf8, 0x200); + encode_test(utf8, 0x2ff); + encode_test(utf8, 0x7ff); + encode_test(utf8, 0x800); + encode_test(utf8, 0xffff); + encode_test(utf8, 0x100000); + encode_test(utf8, 0x10ffff); + encode_test(utf8, 0x110000); + uint32_t out_value; + decode_test(utf8, std::vector { 0x80 }, out_value); // continuation byte outside + decode_test(utf8, std::vector { 0xc0 }, out_value); // Incomplete sequence + decode_test(utf8, std::vector { 0xc0, 0x30 }, out_value); // Non-continuation inside + decode_test(utf8, std::vector { 0xc0, 0x80, 0x30 }, out_value); // Extra bytes + delete utf8; +} +#else +void test_UTF8() {} +#endif diff --git a/FluidNC/src/UTF8.h b/FluidNC/src/UTF8.h new file mode 100644 index 000000000..8786ed94a --- /dev/null +++ b/FluidNC/src/UTF8.h @@ -0,0 +1,26 @@ +// Copyright (c) 2021 - Mitch Bradley +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. + +#pragma once + +#include +#include + +class UTF8 { +private: + uint32_t _num; + int _state = 0; + +public: + // Byte-at-a-time decoder. Returns -1 for error, 1 for okay, 0 for keep trying + int decode(uint8_t ch, uint32_t& value); + + // Vector-of-bytes decoder. Returns true if the vector contains + // a well-formed UTF8 sequence. + bool decode(const std::vector& in, uint32_t& value); + + // Encode to vector + std::vector encode(const uint32_t value); +}; + +void test_UTF8(); diff --git a/FluidNC/src/UartChannel.cpp b/FluidNC/src/UartChannel.cpp index 5b8cebba2..fb9e5172d 100644 --- a/FluidNC/src/UartChannel.cpp +++ b/FluidNC/src/UartChannel.cpp @@ -23,6 +23,8 @@ void UartChannel::init(Uart* uart) { allChannels.registration(this); log_info("uart_channel" << _uart_num << " created"); log_msg_to(*this, "RST"); + // Give the extender a little time to process the command + delay(100); } size_t UartChannel::write(uint8_t c) { diff --git a/FluidNC/src/WebUI/WSChannel.cpp b/FluidNC/src/WebUI/WSChannel.cpp index c2feeb90c..df9220406 100644 --- a/FluidNC/src/WebUI/WSChannel.cpp +++ b/FluidNC/src/WebUI/WSChannel.cpp @@ -79,8 +79,6 @@ namespace WebUI { return size; } - void WSChannel::pushRT(char ch) { _rtchar = ch; } - bool WSChannel::push(const uint8_t* data, size_t length) { if (_dead) { return false; @@ -92,7 +90,7 @@ namespace WebUI { return true; } - bool WSChannel::push(std::string& s) { return push((uint8_t*)s.c_str(), s.length()); } + bool WSChannel::push(const std::string& s) { return push((uint8_t*)s.c_str(), s.length()); } bool WSChannel::sendTXT(std::string& s) { if (_dead) { @@ -165,46 +163,17 @@ namespace WebUI { } bool WSChannels::runGCode(int pageid, std::string& cmd) { - bool has_error = false; - WSChannel* wsChannel = getWSChannel(pageid); if (wsChannel) { - if (cmd.length() > 0 && ((cmd[0] & 0xe0) == 0xc0)) { - // In UTF-8, 0x80-0xff is encoded as follows: - // 0b1NMMMMMM -> 0b1100001N 0b10MMMMMM - // The GRBL protocol is 8-bit only, so we handle only the - // UTF-8 encodings for 0x80-0xff, ignoring encodings for - // numbers that will not fit in 8 bits. - uint8_t hibits = cmd[0] & 0x1f; - if (hibits < 4) { - // Decode from UTF-8 to 8-bit binary - cmd.erase(0, 1); - cmd[0] = (hibits << 6) | (cmd[0] & 0x3f); + if (cmd.length()) { + bool has_error = wsChannel->push(cmd); + if (!has_error && !is_realtime_command(cmd[0]) && cmd[cmd.length() - 1] != '\n') { + has_error = !wsChannel->push("\n"); } - // If hibits >= 4, we pass the byte through un-decoded. - // This probably will not happen, since URLs are supposed to - // be in UTF-8, but we consider it anyway in case of buggy clients. + return has_error; } - // It is very tempting to let wsChannel->push() handle the realtime - // character sequences so we don't have to do it here. That does not work - // because we need to know whether to add a newline. We should not add newline - // on a realtime sequence, but we must add one (if not already present) - // on a text command. - if (cmd.length() == 2 && is_extended_realtime_command(cmd[0])) { - wsChannel->pushRT(cmd[0]); - wsChannel->pushRT(cmd[1]); - } else if (cmd.length() == 1 && is_realtime_command(cmd[0])) { - wsChannel->pushRT(cmd[0]); - } else { - if (cmd.length() && cmd[cmd.length() - 1] != '\n') { - cmd += '\n'; - } - has_error = !wsChannel->push(cmd); - } - } else { - has_error = true; } - return has_error; + return true; } bool WSChannels::sendError(int pageid, std::string err) { diff --git a/FluidNC/src/WebUI/WSChannel.h b/FluidNC/src/WebUI/WSChannel.h index 5ba30c255..27d927f5c 100644 --- a/FluidNC/src/WebUI/WSChannel.h +++ b/FluidNC/src/WebUI/WSChannel.h @@ -44,8 +44,7 @@ namespace WebUI { inline size_t write(int n) { return write((uint8_t)n); } bool push(const uint8_t* data, size_t length); - bool push(std::string& s); - void pushRT(char ch); + bool push(const std::string& s); void flush(void) override {} From 1bf2afd458f0de9590d6e41518feb01fb077386a Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 8 Dec 2023 12:58:52 -0600 Subject: [PATCH 180/212] Added an interval range --- FluidNC/src/UartChannel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index 30d03ce3a..263e93c7e 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -42,7 +42,7 @@ class UartChannel : public Channel, public Configuration::Configurable { // Configuration methods void group(Configuration::HandlerBase& handler) override { handler.item("uart_num", _uart_num); - handler.item("report_interval_ms", _report_interval_ms); + handler.item("report_interval_ms", _report_interval_ms, 50, 5000); } }; From 8753a05f1b3ab917f70e2b19437ccf0bf232ee7f Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 8 Dec 2023 13:25:32 -0600 Subject: [PATCH 181/212] Oops, we need 0 in the range to turn it off --- FluidNC/src/UartChannel.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index 263e93c7e..58bcead85 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -42,7 +42,7 @@ class UartChannel : public Channel, public Configuration::Configurable { // Configuration methods void group(Configuration::HandlerBase& handler) override { handler.item("uart_num", _uart_num); - handler.item("report_interval_ms", _report_interval_ms, 50, 5000); + handler.item("report_interval_ms", _report_interval_ms, 0, 5000); } }; From 0477d57ba9d1c44d80bc5298297f74ee7b91b551 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 10 Dec 2023 14:24:39 -1000 Subject: [PATCH 182/212] Added all_messages config item to suppress chitchat on a channel --- FluidNC/src/Channel.h | 7 +++++++ FluidNC/src/Serial.cpp | 8 ++++++-- FluidNC/src/UartChannel.h | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index a2a96fea5..b3e81507d 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -75,6 +75,11 @@ class Channel : public Stream { UTF8 _utf8; + // Set this to false to suppress messages sent to AllChannels + // It is useful for IO Expanders that do not want to be spammed + // with chitchat + bool _all_messages = true; + public: Channel(const char* name, bool addCR = false) : _name(name), _linelen(0), _addCR(addCR) {} Channel(const char* name, int num, bool addCR = false) { @@ -135,6 +140,8 @@ class Channel : public Stream { int read() override { return -1; } int available() override { return _queue.size(); } + bool all_messages() { return _all_messages; } + uint32_t setReportInterval(uint32_t ms); uint32_t getReportInterval() { return _reportInterval; } virtual void autoReport(); diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index c0c8c1bbb..bc9c561d1 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -136,7 +136,9 @@ void AllChannels::flushRx() { size_t AllChannels::write(uint8_t data) { _mutex_general.lock(); for (auto channel : _channelq) { - channel->write(data); + if (channel->all_messages()) { + channel->write(data); + } } _mutex_general.unlock(); return 1; @@ -167,7 +169,9 @@ void AllChannels::stopJob() { size_t AllChannels::write(const uint8_t* buffer, size_t length) { _mutex_general.lock(); for (auto channel : _channelq) { - channel->write(buffer, length); + if (channel->all_messages()) { + channel->write(buffer, length); + } } _mutex_general.unlock(); return length; diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index 3865529bd..c6ee99e40 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -43,6 +43,7 @@ class UartChannel : public Channel, public Configuration::Configurable { void group(Configuration::HandlerBase& handler) override { handler.item("report_interval_ms", _report_interval_ms); handler.item("uart_num", _uart_num); + handler.item("all_messages", _all_messages); } }; From cabeb751861bbf451279c1d1c2aff603193fc443 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 10 Dec 2023 14:28:05 -1000 Subject: [PATCH 183/212] Fix unitialized UART config that caused inaccurate high baud rates --- FluidNC/src/Uart.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/FluidNC/src/Uart.cpp b/FluidNC/src/Uart.cpp index 5e31104b3..68de4e2c4 100644 --- a/FluidNC/src/Uart.cpp +++ b/FluidNC/src/Uart.cpp @@ -20,6 +20,7 @@ static void uart_driver_n_install(void* arg) { void Uart::begin(unsigned long baud, UartData dataBits, UartStop stopBits, UartParity parity) { // uart_driver_delete(_uart_num); uart_config_t conf; + conf.source_clk = UART_SCLK_APB; conf.baud_rate = baud; conf.data_bits = uart_word_length_t(_dataBits); conf.parity = uart_parity_t(_parity); From 3e94650100ded590d832089beedc60791a95fde1 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 10 Dec 2023 14:29:48 -1000 Subject: [PATCH 184/212] Fix unitialized UART config that caused inaccurate high baud rates --- FluidNC/src/Uart.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/FluidNC/src/Uart.cpp b/FluidNC/src/Uart.cpp index 5e31104b3..68de4e2c4 100644 --- a/FluidNC/src/Uart.cpp +++ b/FluidNC/src/Uart.cpp @@ -20,6 +20,7 @@ static void uart_driver_n_install(void* arg) { void Uart::begin(unsigned long baud, UartData dataBits, UartStop stopBits, UartParity parity) { // uart_driver_delete(_uart_num); uart_config_t conf; + conf.source_clk = UART_SCLK_APB; conf.baud_rate = baud; conf.data_bits = uart_word_length_t(_dataBits); conf.parity = uart_parity_t(_parity); From 6db0190d9ed5a94f0f75723a62cbf7fe2eb0c626 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 10 Dec 2023 14:35:23 -1000 Subject: [PATCH 185/212] Added all_messages config item to suppress chitchat on a channel --- FluidNC/src/Channel.h | 7 +++++++ FluidNC/src/Serial.cpp | 8 ++++++-- FluidNC/src/UartChannel.h | 1 + 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index 9ba892d38..ca46eec32 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -50,6 +50,11 @@ class Channel : public Stream { bool _reportWco = true; CoordIndex _reportNgc = CoordIndex::End; + // Set this to false to suppress messages sent to AllChannels + // It is useful for IO Expanders that do not want to be spammed + // with chitchat + bool _all_messages = true; + public: Channel(const char* name, bool addCR = false) : _name(name), _linelen(0), _addCR(addCR) {} virtual ~Channel() = default; @@ -104,6 +109,8 @@ class Channel : public Stream { int read() override { return -1; } int available() override { return _queue.size(); } + bool all_messages() { return _all_messages; } + uint32_t setReportInterval(uint32_t ms); uint32_t getReportInterval() { return _reportInterval; } virtual void autoReport(); diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 826f07990..739c38619 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -233,7 +233,9 @@ void AllChannels::flushRx() { size_t AllChannels::write(uint8_t data) { _mutex_general.lock(); for (auto channel : _channelq) { - channel->write(data); + if (channel->all_messages()) { + channel->write(data); + } } _mutex_general.unlock(); return 1; @@ -264,7 +266,9 @@ void AllChannels::stopJob() { size_t AllChannels::write(const uint8_t* buffer, size_t length) { _mutex_general.lock(); for (auto channel : _channelq) { - channel->write(buffer, length); + if (channel->all_messages()) { + channel->write(buffer, length); + } } _mutex_general.unlock(); return length; diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index 58bcead85..a94f05a8f 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -43,6 +43,7 @@ class UartChannel : public Channel, public Configuration::Configurable { void group(Configuration::HandlerBase& handler) override { handler.item("uart_num", _uart_num); handler.item("report_interval_ms", _report_interval_ms, 0, 5000); + handler.item("all_messages", _all_messages); } }; From c5144c0f5a3e595e1fc4d99529eaf51541549b72 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 11 Dec 2023 08:46:58 -1000 Subject: [PATCH 186/212] Added report interval message to uart channel --- FluidNC/src/UartChannel.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/UartChannel.cpp b/FluidNC/src/UartChannel.cpp index fb9e5172d..7520a52a9 100644 --- a/FluidNC/src/UartChannel.cpp +++ b/FluidNC/src/UartChannel.cpp @@ -21,7 +21,11 @@ void UartChannel::init() { void UartChannel::init(Uart* uart) { _uart = uart; allChannels.registration(this); - log_info("uart_channel" << _uart_num << " created"); + if (_report_interval_ms) { + log_info("uart_channel" << _uart_num << " created at report interval: " << _report_interval_ms); + } else { + log_info("uart_channel" << _uart_num << " created"); + } log_msg_to(*this, "RST"); // Give the extender a little time to process the command delay(100); From 2f2bd9f95afb69ea6cbcf2842eafc691fe8c171d Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 11 Dec 2023 11:30:22 -1000 Subject: [PATCH 187/212] Bug in ChannelPinDetail.cpp - cached value was not updated. --- FluidNC/src/Pins/ChannelPinDetail.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/FluidNC/src/Pins/ChannelPinDetail.cpp b/FluidNC/src/Pins/ChannelPinDetail.cpp index f75d9bcee..ab5c60e69 100644 --- a/FluidNC/src/Pins/ChannelPinDetail.cpp +++ b/FluidNC/src/Pins/ChannelPinDetail.cpp @@ -27,6 +27,7 @@ namespace Pins { if (high == _value) { return; } + _value = high; std::string s = "SET: io."; s += std::to_string(_index); s += "="; From 370d4f6134c69934b3e28d81a354dc5522daa6d7 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Mon, 11 Dec 2023 11:31:05 -1000 Subject: [PATCH 188/212] Added debug message for acks from expander --- FluidNC/src/Channel.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index 80082a5fd..94486e56d 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -6,6 +6,7 @@ #include "Machine/MachineConfig.h" // config #include "RealtimeCmd.h" // execute_realtime_command #include "Limits.h" +#include "Logging.h" void Channel::flushRx() { _linelen = 0; @@ -163,10 +164,12 @@ Channel* Channel::pollLine(char* line) { // Otherwise res==1 and we have decoded a sequence so proceed if (cmd == PinACK) { + log_debug("ACK"); _ackwait = false; continue; } if (cmd == PinNAK) { + log_debug("NAK"); _ackwait = false; continue; } From 41a2d2c74ace145c2a41aaa92982b7cf51caefec Mon Sep 17 00:00:00 2001 From: bdring Date: Wed, 13 Dec 2023 08:21:14 -0600 Subject: [PATCH 189/212] Update uartio.yaml --- example_configs/uartio.yaml | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/example_configs/uartio.yaml b/example_configs/uartio.yaml index 88b57cc15..a3425a07a 100644 --- a/example_configs/uartio.yaml +++ b/example_configs/uartio.yaml @@ -12,13 +12,14 @@ stepping: uart1: txd_pin: gpio.4 rxd_pin: gpio.26 - baud: 115200 + baud: 921600 mode: 8N1 uart_channel1: report_interval_ms: 75 uart_num: 1 - controller: true + all_messages: false + i2so: bck_pin: gpio.22 @@ -37,13 +38,16 @@ sdcard: probe: pin: NO_PIN -control: - feed_hold_pin: uart_channel1.1:pu - cycle_start_pin: uart_channel1.2:pu - user_outputs: - analog0_pin: NO_PIN + digital0_pin: uart_channel1.0 + digital1_pin: uart_channel1.1 + digital2_pin: uart_channel1.2 + digital3_pin: uart_channel1.3 + digital4_pin: uart_channel1.4 + digital5_pin: uart_channel1.5 + digital6_pin: uart_channel1.6 + digital7_pin: uart_channel1.7 coolant: - mist_pin: uart_channel1.15:low - flood_pin: uart_channel1.14 + mist_pin: uart_channel1.8 + flood_pin: uart_channel1.9 From 2240a0295b782b9264847001908dd93e356a53e8 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Wed, 13 Dec 2023 13:05:22 -1000 Subject: [PATCH 190/212] Added per-channel message_level filter --- FluidNC/src/Channel.cpp | 6 ++++++ FluidNC/src/Channel.h | 9 +++------ FluidNC/src/Logging.cpp | 13 ++++++++++--- FluidNC/src/Logging.h | 41 ++++++++++++++++++++++----------------- FluidNC/src/Protocol.cpp | 23 +++++++++++----------- FluidNC/src/Protocol.h | 6 +++--- FluidNC/src/Serial.cpp | 16 +++++++++------ FluidNC/src/Serial.h | 2 ++ FluidNC/src/UartChannel.h | 2 +- 9 files changed, 70 insertions(+), 48 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index 94486e56d..d5163a869 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -251,3 +251,9 @@ void Channel::ack(Error status) { msg << static_cast(status); } } + +void Channel::print_msg(MsgLevel level, const char* msg) { + if (_message_level >= level) { + println(msg); + } +} diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index b3e81507d..0ecd89da3 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -44,6 +44,8 @@ class Channel : public Stream { public: static const int maxLine = 255; + int _message_level = MsgLevelVerbose; + protected: std::string _name; char _line[maxLine]; @@ -75,11 +77,6 @@ class Channel : public Stream { UTF8 _utf8; - // Set this to false to suppress messages sent to AllChannels - // It is useful for IO Expanders that do not want to be spammed - // with chitchat - bool _all_messages = true; - public: Channel(const char* name, bool addCR = false) : _name(name), _linelen(0), _addCR(addCR) {} Channel(const char* name, int num, bool addCR = false) { @@ -140,7 +137,7 @@ class Channel : public Stream { int read() override { return -1; } int available() override { return _queue.size(); } - bool all_messages() { return _all_messages; } + virtual void print_msg(MsgLevel level, const char* msg); uint32_t setReportInterval(uint32_t ms); uint32_t getReportInterval() { return _reportInterval; } diff --git a/FluidNC/src/Logging.cpp b/FluidNC/src/Logging.cpp index 39540896e..593c3d17c 100644 --- a/FluidNC/src/Logging.cpp +++ b/FluidNC/src/Logging.cpp @@ -6,15 +6,22 @@ #include "Serial.h" #include "SettingsDefinitions.h" +EnumItem messageLevels2[] = { + { MsgLevelNone, "None" }, { MsgLevelError, "Error" }, { MsgLevelWarning, "Warn" }, + { MsgLevelInfo, "Info" }, { MsgLevelDebug, "Debug" }, { MsgLevelVerbose, "Verbose" }, +}; + bool atMsgLevel(MsgLevel level) { return message_level == nullptr || message_level->get() >= level; } -LogStream::LogStream(Channel& channel, const char* name) : _channel(channel) { +LogStream::LogStream(Channel& channel, MsgLevel level, const char* name) : _channel(channel), _level(level) { _line = new std::string(); print(name); } -LogStream::LogStream(const char* name) : LogStream(allChannels, name) {} + +LogStream::LogStream(Channel& channel, const char* name) : LogStream(channel, MsgLevelNone, name) {} +LogStream::LogStream(MsgLevel level, const char* name) : LogStream(allChannels, level, name) {} size_t LogStream::write(uint8_t c) { *_line += (char)c; @@ -25,5 +32,5 @@ LogStream::~LogStream() { if ((*_line).length() && (*_line)[0] == '[') { *_line += ']'; } - send_line(_channel, _line); + send_line(_channel, _level, _line); } diff --git a/FluidNC/src/Logging.h b/FluidNC/src/Logging.h index b5c246903..53b28061f 100644 --- a/FluidNC/src/Logging.h +++ b/FluidNC/src/Logging.h @@ -4,6 +4,7 @@ #pragma once #include +#include "EnumItem.h" class Channel; @@ -16,6 +17,8 @@ enum MsgLevel { MsgLevelVerbose = 5, }; +extern EnumItem messageLevels2[]; + // How to use logging? Well, the basics are pretty simple: // // - The syntax is like standard iostream's. @@ -34,13 +37,15 @@ enum MsgLevel { class LogStream : public Print { public: LogStream(Channel& channel, const char* name); - LogStream(const char* name); + LogStream(Channel& channel, MsgLevel level, const char* name); + LogStream(MsgLevel level, const char* name); size_t write(uint8_t c) override; ~LogStream(); private: Channel& _channel; std::string* _line; + MsgLevel _level; }; extern bool atMsgLevel(MsgLevel level); @@ -50,21 +55,21 @@ extern bool atMsgLevel(MsgLevel level); // Note: these '{'..'}' scopes are here for a reason: the destructor should flush. // #define log_bare(prefix, x) { LogStream ss(prefix); ss << x; } -#define log_msg(x) { LogStream ss("[MSG:"); ss << x; } -#define log_verbose(x) if (atMsgLevel(MsgLevelVerbose)) { LogStream ss("[MSG:VRB: "); ss << x; } -#define log_debug(x) if (atMsgLevel(MsgLevelDebug)) { LogStream ss("[MSG:DBG: "); ss << x; } -#define log_info(x) if (atMsgLevel(MsgLevelInfo)) { LogStream ss("[MSG:INFO: "); ss << x; } -#define log_warn(x) if (atMsgLevel(MsgLevelWarning)) { LogStream ss("[MSG:WARN: "); ss << x; } -#define log_error(x) if (atMsgLevel(MsgLevelError)) { LogStream ss("[MSG:ERR: "); ss << x; } -#define log_fatal(x) { LogStream ss("[MSG:FATAL: "); ss << x; Assert(false, "A fatal error occurred."); } - -#define log_msg_to(out, x) { LogStream ss(out, "[MSG:"); ss << x; } -#define log_verbose_to(out, x) if (atMsgLevel(MsgLevelVerbose)) { LogStream ss(out, "[MSG:VRB: "); ss << x; } -#define log_debug_to(out, x) if (atMsgLevel(MsgLevelDebug)) { LogStream ss(out, "[MSG:DBG: "); ss << x; } -#define log_info_to(out, x) if (atMsgLevel(MsgLevelInfo)) { LogStream ss(out, "[MSG:INFO: "); ss << x; } -#define log_warn_to(out, x) if (atMsgLevel(MsgLevelWarning)) { LogStream ss(out, "[MSG:WARN: "); ss << x; } -#define log_error_to(out, x) if (atMsgLevel(MsgLevelError)) { LogStream ss(out, "[MSG:ERR: "); ss << x; } -#define log_fatal_to(out, x) { LogStream ss(out, "[MSG:FATAL: "); ss << x; Assert(false, "A fatal error occurred."); } +#define log_msg(x) { LogStream ss(MsgLevelNone, "[MSG:"); ss << x; } +#define log_verbose(x) if (atMsgLevel(MsgLevelVerbose)) { LogStream ss(MsgLevelVerbose, "[MSG:VRB: "); ss << x; } +#define log_debug(x) if (atMsgLevel(MsgLevelDebug)) { LogStream ss(MsgLevelDebug, "[MSG:DBG: "); ss << x; } +#define log_info(x) if (atMsgLevel(MsgLevelInfo)) { LogStream ss(MsgLevelInfo, "[MSG:INFO: "); ss << x; } +#define log_warn(x) if (atMsgLevel(MsgLevelWarning)) { LogStream ss(MsgLevelWarning, "[MSG:WARN: "); ss << x; } +#define log_error(x) if (atMsgLevel(MsgLevelError)) { LogStream ss(MsgLevelError, "[MSG:ERR: "); ss << x; } +#define log_fatal(x) { LogStream ss(MsgLevelNone, "[MSG:FATAL: "); ss << x; Assert(false, "A fatal error occurred."); } + +#define log_msg_to(out, x) { LogStream ss(out, MsgLevelNone, "[MSG:"); ss << x; } +#define log_verbose_to(out, x) if (atMsgLevel(MsgLevelVerbose)) { LogStream ss(out, MsgLevelVerbose, "[MSG:VRB: "); ss << x; } +#define log_debug_to(out, x) if (atMsgLevel(MsgLevelDebug)) { LogStream ss(out, MsgLevelDebug, "[MSG:DBG: "); ss << x; } +#define log_info_to(out, x) if (atMsgLevel(MsgLevelInfo)) { LogStream ss(out, MsgLevelInfo, "[MSG:INFO: "); ss << x; } +#define log_warn_to(out, x) if (atMsgLevel(MsgLevelWarning)) { LogStream ss(out, MsgLevelWarning, "[MSG:WARN: "); ss << x; } +#define log_error_to(out, x) if (atMsgLevel(MsgLevelError)) { LogStream ss(out, MsgLevelError, "[MSG:ERR: "); ss << x; } +#define log_fatal_to(out, x) { LogStream ss(out, MsgLevelNone, "[MSG:FATAL: "); ss << x; Assert(false, "A fatal error occurred."); } // GET_MACRO is a preprocessor trick to let log_to() behave differently // with 2 arguments vs 3. The 2 argument case is super efficient @@ -76,5 +81,5 @@ extern bool atMsgLevel(MsgLevel level); #define GET_MACRO(_1,_2,_3, NAME, ...) NAME #define log_to(...) GET_MACRO(__VA_ARGS__, log_to3, log_to2)(__VA_ARGS__) -#define log_to2(out, prefix) send_line(out, prefix) -#define log_to3(out, prefix, x) { LogStream ss(out, prefix); ss << x; } +#define log_to2(out, prefix) send_line(out, MsgLevelNone, prefix) +#define log_to3(out, prefix, x) { LogStream ss(out, MsgLevelNone, prefix); ss << x; } diff --git a/FluidNC/src/Protocol.cpp b/FluidNC/src/Protocol.cpp index 296989c8b..7fc6dec19 100644 --- a/FluidNC/src/Protocol.cpp +++ b/FluidNC/src/Protocol.cpp @@ -94,6 +94,7 @@ xQueueHandle message_queue; struct LogMessage { Channel* channel; void* line; + MsgLevel level; bool isString; }; @@ -108,12 +109,12 @@ void drain_messages() { // memory does not need to be reclaimed later. // This is the most efficient form, but it only works // with fixed messages. -void send_line(Channel& channel, const char* line) { +void send_line(Channel& channel, MsgLevel level, const char* line) { if (outputTask) { - LogMessage msg { &channel, (void*)line, false }; + LogMessage msg { &channel, (void*)line, level, false }; while (!xQueueSend(message_queue, &msg, 10)) {} } else { - channel.println(line); + channel.print_msg(level, line); } } @@ -125,12 +126,12 @@ void send_line(Channel& channel, const char* line) { // the pointer to reclaim the memory. // This form has intermediate efficiency, as the string // is allocated once and freed once. -void send_line(Channel& channel, const std::string* line) { +void send_line(Channel& channel, MsgLevel level, const std::string* line) { if (outputTask) { - LogMessage msg { &channel, (void*)line, true }; + LogMessage msg { &channel, (void*)line, level, true }; while (!xQueueSend(message_queue, &msg, 10)) {} } else { - channel.println(line->c_str()); + channel.print_msg(level, line->c_str()); delete line; } } @@ -146,11 +147,11 @@ void send_line(Channel& channel, const std::string* line) { // This is the least efficient form, requiring two strings // to be allocated and freed, with an intermediate copy. // It is used only rarely. -void send_line(Channel& channel, const std::string& line) { +void send_line(Channel& channel, MsgLevel level, const std::string& line) { if (outputTask) { - send_line(channel, new std::string(line)); + send_line(channel, level, new std::string(line)); } else { - channel.println(line.c_str()); + channel.print_msg(level, line.c_str()); } } @@ -161,11 +162,11 @@ void output_loop(void* unused) { if (xQueueReceive(message_queue, &message, portMAX_DELAY)) { if (message.isString) { std::string* s = static_cast(message.line); - message.channel->println(s->c_str()); + message.channel->print_msg(message.level, s->c_str()); delete s; } else { const char* cp = static_cast(message.line); - message.channel->println(cp); + message.channel->print_msg(message.level, cp); } } } diff --git a/FluidNC/src/Protocol.h b/FluidNC/src/Protocol.h index 331e5d677..2d3e50e12 100644 --- a/FluidNC/src/Protocol.h +++ b/FluidNC/src/Protocol.h @@ -128,9 +128,9 @@ inline void protocol_send_event(Event* evt, int arg) { void protocol_send_event_from_ISR(Event* evt, void* arg = 0); -void send_line(Channel& channel, const char* message); -void send_line(Channel& channel, const std::string* message); -void send_line(Channel& channel, const std::string& message); +void send_line(Channel& channel, MsgLevel level, const char* message); +void send_line(Channel& channel, MsgLevel level, const std::string* message); +void send_line(Channel& channel, MsgLevel level, const std::string& message); void drain_messages(); diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index bc9c561d1..8199695e6 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -136,9 +136,7 @@ void AllChannels::flushRx() { size_t AllChannels::write(uint8_t data) { _mutex_general.lock(); for (auto channel : _channelq) { - if (channel->all_messages()) { - channel->write(data); - } + channel->write(data); } _mutex_general.unlock(); return 1; @@ -169,13 +167,19 @@ void AllChannels::stopJob() { size_t AllChannels::write(const uint8_t* buffer, size_t length) { _mutex_general.lock(); for (auto channel : _channelq) { - if (channel->all_messages()) { - channel->write(buffer, length); - } + channel->write(buffer, length); } _mutex_general.unlock(); return length; } +void AllChannels::print_msg(MsgLevel level, const char* msg) { + _mutex_general.lock(); + for (auto channel : _channelq) { + channel->print_msg(level, msg); + } + _mutex_general.unlock(); +} + Channel* AllChannels::find(const std::string& name) { _mutex_general.lock(); for (auto channel : _channelq) { diff --git a/FluidNC/src/Serial.h b/FluidNC/src/Serial.h index c07d16f3c..1896fbec0 100644 --- a/FluidNC/src/Serial.h +++ b/FluidNC/src/Serial.h @@ -45,6 +45,8 @@ class AllChannels : public Channel { size_t write(uint8_t data) override; size_t write(const uint8_t* buffer, size_t length) override; + void print_msg(MsgLevel level, const char* msg) override; + void flushRx(); void notifyWco(); diff --git a/FluidNC/src/UartChannel.h b/FluidNC/src/UartChannel.h index c6ee99e40..faaebe67f 100644 --- a/FluidNC/src/UartChannel.h +++ b/FluidNC/src/UartChannel.h @@ -43,7 +43,7 @@ class UartChannel : public Channel, public Configuration::Configurable { void group(Configuration::HandlerBase& handler) override { handler.item("report_interval_ms", _report_interval_ms); handler.item("uart_num", _uart_num); - handler.item("all_messages", _all_messages); + handler.item("message_level", _message_level, messageLevels2); } }; From 884576a8bec60324994ea836dcbe64e81897a71e Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 14 Dec 2023 10:52:40 -1000 Subject: [PATCH 191/212] Error checking for uart_channel pins --- FluidNC/src/Pin.cpp | 23 +++++++++++++---------- FluidNC/src/string_util.cpp | 4 ++++ FluidNC/src/string_util.h | 1 + 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index 82c31577e..a47cecbcd 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -15,6 +15,7 @@ #include "string_util.h" #include "Machine/MachineConfig.h" // config #include +#include Pins::PinDetail* Pin::undefinedPin = new Pins::VoidPinDetail(); Pins::PinDetail* Pin::errorPin = new Pins::ErrorPinDetail("unknown"); @@ -81,16 +82,18 @@ const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementa return nullptr; } - if (string_util::equal_ignore_case(prefix, "uart_channel0")) { - pinImplementation = new Pins::ChannelPinDetail(config->_uart_channels[0], pin_number, parser); - return nullptr; - } - if (string_util::equal_ignore_case(prefix, "uart_channel1")) { - pinImplementation = new Pins::ChannelPinDetail(config->_uart_channels[1], pin_number, parser); - return nullptr; - } - if (string_util::equal_ignore_case(prefix, "uart_channel2")) { - pinImplementation = new Pins::ChannelPinDetail(config->_uart_channels[2], pin_number, parser); + if (string_util::starts_with_ignore_case(prefix, "uart_channel")) { + auto num_str = prefix.substr(strlen("uart_channel")); + int channel_num = -1; + std::from_chars(num_str.data(), num_str.data() + num_str.size(), channel_num); + if (channel_num == -1 || channel_num > 2) { + return "Bad uart_channel number"; + } + if (config->_uart_channels[channel_num] == nullptr) { + return "uart_channel is not configured"; + } + + pinImplementation = new Pins::ChannelPinDetail(config->_uart_channels[channel_num], pin_number, parser); return nullptr; } diff --git a/FluidNC/src/string_util.cpp b/FluidNC/src/string_util.cpp index 172105e72..bb4d6aaa6 100644 --- a/FluidNC/src/string_util.cpp +++ b/FluidNC/src/string_util.cpp @@ -13,6 +13,10 @@ namespace string_util { return std::equal(a.begin(), a.end(), b.begin(), b.end(), [](auto a, auto b) { return tolower(a) == tolower(b); }); } + bool starts_with_ignore_case(std::string_view a, std::string_view b) { + return std::equal(a.begin(), a.begin() + b.size(), b.begin(), b.end(), [](auto a, auto b) { return tolower(a) == tolower(b); }); + } + const std::string_view trim(std::string_view s) { auto start = s.find_first_not_of(" \t\n\r\f\v"); if (start == std::string_view::npos) { diff --git a/FluidNC/src/string_util.h b/FluidNC/src/string_util.h index e51c07e4e..e363344c3 100644 --- a/FluidNC/src/string_util.h +++ b/FluidNC/src/string_util.h @@ -5,6 +5,7 @@ namespace string_util { char tolower(char c); bool equal_ignore_case(std::string_view a, std::string_view b); + bool starts_with_ignore_case(std::string_view a, std::string_view b); const std::string_view trim(std::string_view s); bool is_int(std::string_view s, int32_t& value); From 3d3bbc62cd8655af3dc4d7077bdec6fadb9c81bb Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 16 Dec 2023 13:19:25 -0600 Subject: [PATCH 192/212] don't use homing macros when some axes are not homed. ($HX, etc) --- FluidNC/src/ProcessSettings.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 02d85e621..0f0e46c96 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -404,7 +404,9 @@ static Error home(AxisMask axisMask) { protocol_execute_realtime(); } while (sys.state == State::Homing); - config->_macros->_after_homing.run(); + if (!Homing::unhomed_axes()) { + config->_macros->_after_homing.run(); + } return Error::Ok; } From 4bb66f5cce0375d6de51200bc09dfe26c5ebc41e Mon Sep 17 00:00:00 2001 From: bdring Date: Sat, 16 Dec 2023 13:49:34 -0600 Subject: [PATCH 193/212] Don't use homing macros when some axes are not homed. ($HX, etc) --- FluidNC/src/ProcessSettings.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index dbd6d7116..b6ba7077f 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -333,7 +333,9 @@ static Error home(AxisMask axisMask) { protocol_execute_realtime(); } while (sys.state == State::Homing); - config->_macros->_after_homing.run(); + if (!Homing::unhomed_axes()) { + config->_macros->_after_homing.run(); + } return Error::Ok; } From b3d5b0ec3063b2bd14b898fd5789972789953ff7 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sun, 17 Dec 2023 08:20:47 -1000 Subject: [PATCH 194/212] Inferred _homing sections were treated as home-able --- FluidNC/src/Machine/Axis.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Machine/Axis.cpp b/FluidNC/src/Machine/Axis.cpp index 1563d0aac..a87081fc5 100644 --- a/FluidNC/src/Machine/Axis.cpp +++ b/FluidNC/src/Machine/Axis.cpp @@ -29,8 +29,7 @@ namespace Machine { auto maxRate = config->_stepping->maxPulsesPerSec(); Assert(stepRate <= maxRate, "Stepping rate %d steps/sec exceeds the maximum rate %d", stepRate, maxRate); if (_homing == nullptr) { - _homing = new Homing(); - _homing->_cycle = 0; + _homing = new Homing(); } if (_motors[0] == nullptr) { _motors[0] = new Machine::Motor(_axis, 0); @@ -45,7 +44,7 @@ namespace Machine { m->init(); } } - if (_homing && _homing->_cycle != Machine::Homing::set_mpos_only) { + if (_homing && _homing->_cycle != 0) { _homing->init(); set_bitnum(Axes::homingMask, _axis); } From a8bbf76093d5384a9309c8552de8ca1536147975 Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 17 Dec 2023 13:26:31 -0600 Subject: [PATCH 195/212] Added some more failure handling --- FluidNC/src/Channel.cpp | 6 +++++- FluidNC/src/Channel.h | 2 ++ FluidNC/src/Main.cpp | 3 +-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index d5163a869..7080dcd98 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -169,6 +169,7 @@ Channel* Channel::pollLine(char* line) { continue; } if (cmd == PinNAK) { + log_warn("Channel device rejected config"); log_debug("NAK"); _ackwait = false; continue; @@ -207,10 +208,13 @@ void Channel::setAttr(int index, bool* value, const std::string& attrString) { _pin_values[index] = value; } int count = 0; - while (_ackwait && ++count < 2000) { + while (_ackwait && ++count < timeout) { pollLine(NULL); delay_ms(1); } + if (count == timeout) { + log_warn("Device not responding"); + } log_msg_to(*this, attrString); _ackwait = true; log_debug(attrString); diff --git a/FluidNC/src/Channel.h b/FluidNC/src/Channel.h index 0ecd89da3..de573ecfe 100644 --- a/FluidNC/src/Channel.h +++ b/FluidNC/src/Channel.h @@ -41,6 +41,8 @@ class Channel : public Stream { const int PinACK = 0xB2; const int PinNAK = 0xB3; + const int timeout = 2000; + public: static const int maxLine = 255; diff --git a/FluidNC/src/Main.cpp b/FluidNC/src/Main.cpp index 0d2246b37..c9276a25f 100644 --- a/FluidNC/src/Main.cpp +++ b/FluidNC/src/Main.cpp @@ -31,8 +31,7 @@ void setup() { disableCore0WDT(); try { timing_init(); - uartInit(); // Setup serial port - Uart0.println(); // create some white space after ESP32 boot info + uartInit(); // Setup serial port StartupLog::init(); From f9a110cc9e27e35c1c5cc9dbd319127743806f6e Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 17 Dec 2023 14:57:13 -0600 Subject: [PATCH 196/212] Change expander issues from warns to errors. --- FluidNC/src/Channel.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/FluidNC/src/Channel.cpp b/FluidNC/src/Channel.cpp index 7080dcd98..ea664de6e 100644 --- a/FluidNC/src/Channel.cpp +++ b/FluidNC/src/Channel.cpp @@ -169,7 +169,7 @@ Channel* Channel::pollLine(char* line) { continue; } if (cmd == PinNAK) { - log_warn("Channel device rejected config"); + log_error("Channel device rejected config"); log_debug("NAK"); _ackwait = false; continue; @@ -213,7 +213,7 @@ void Channel::setAttr(int index, bool* value, const std::string& attrString) { delay_ms(1); } if (count == timeout) { - log_warn("Device not responding"); + log_error("Device not responding"); } log_msg_to(*this, attrString); _ackwait = true; From 34b4b7adfbd3577b0dae60376a9fc44e47b07172 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 19 Dec 2023 11:39:14 -1000 Subject: [PATCH 197/212] Don't poll a null channel --- FluidNC/src/Serial.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/Serial.cpp b/FluidNC/src/Serial.cpp index 739c38619..92a302da9 100644 --- a/FluidNC/src/Serial.cpp +++ b/FluidNC/src/Serial.cpp @@ -287,7 +287,7 @@ Channel* AllChannels::pollLine(char* line) { for (auto channel : _channelq) { // Skip the last channel in the loop - if (channel != _lastChannel && channel->pollLine(line)) { + if (channel != _lastChannel && channel && channel->pollLine(line)) { _lastChannel = channel; _mutex_pollLine.unlock(); return _lastChannel; From 073135adda272c43c2751d5b58cb34d7fe8549f7 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 19 Dec 2023 11:43:02 -1000 Subject: [PATCH 198/212] Added $SD/ListJSON and $LocalFS/ListJSON for pendants --- FluidNC/src/WebUI/JSONEncoder.cpp | 6 ++-- FluidNC/src/WebUI/WebSettings.cpp | 58 +++++++++++++++++++++++++++++-- 2 files changed, 59 insertions(+), 5 deletions(-) diff --git a/FluidNC/src/WebUI/JSONEncoder.cpp b/FluidNC/src/WebUI/JSONEncoder.cpp index 68db060cc..4ea1f6128 100644 --- a/FluidNC/src/WebUI/JSONEncoder.cpp +++ b/FluidNC/src/WebUI/JSONEncoder.cpp @@ -103,9 +103,9 @@ namespace WebUI { // Private function to implement pretty-printing void JSONencoder::line() { if (_channel) { - // Always pretty print to a channel, because channels - // cannot necessary handle really long lines. - add('\n'); + // log_to() always adds a newline + // We want that for channels because they might not + // be able to handle really long lines. log_to(*_channel, *_str); *_str = ""; indent(); diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index a01a7094f..04ae9b4fd 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -434,6 +434,61 @@ namespace WebUI { return listFilesystem(localfsName, parameter, auth_level, out); } + static Error listFilesystemJSON(const char* fs, const char* value, WebUI::AuthenticationLevel auth_level, Channel& out) { + std::error_code ec; + + FluidPath fpath { value, fs, ec }; + if (ec) { + log_to(out, "No SD card"); + return Error::FsFailedMount; + } + + JSONencoder j(false, &out); + j.begin(); + + auto iter = stdfs::directory_iterator { fpath, ec }; + if (ec) { + log_to(out, "Error: ", ec.message()); + return Error::FsFailedMount; + } + j.begin_array("files"); + for (auto const& dir_entry : iter) { + j.begin_object(); + j.member("name", dir_entry.path().filename()); + j.member("size", dir_entry.is_directory() ? -1 : dir_entry.file_size()); + j.end_object(); + } + j.end_array(); + + auto space = stdfs::space(fpath, ec); + if (ec) { + log_to(out, "Error ", ec.value() << " " << ec.message()); + return Error::FsFailedMount; + } + + auto totalBytes = space.capacity; + auto freeBytes = space.available; + auto usedBytes = totalBytes - freeBytes; + + j.member("path", value); + j.member("total", formatBytes(totalBytes)); + j.member("used", formatBytes(usedBytes + 1)); + + uint32_t percent = totalBytes ? (usedBytes * 100) / totalBytes : 100; + + j.member("occupation", percent); + j.end(); + return Error::Ok; + } + + static Error listSDFilesJSON(char* parameter, AuthenticationLevel auth_level, Channel& out) { // ESP210 + return listFilesystemJSON(sdName, parameter, auth_level, out); + } + + static Error listLocalFilesJSON(char* parameter, AuthenticationLevel auth_level, Channel& out) { // No ESP command + return listFilesystemJSON(localfsName, parameter, auth_level, out); + } + static Error renameObject(const char* fs, char* parameter, AuthenticationLevel auth_level, Channel& out) { auto opath = strchr(parameter, '>'); if (*opath == '\0') { @@ -673,9 +728,7 @@ namespace WebUI { new WebCommand("path", WEBCMD, WU, "ESP701", "LocalFS/Show", showLocalFile); new WebCommand("path", WEBCMD, WU, "ESP700", "LocalFS/Run", runLocalFile); new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/List", listLocalFiles); -#if 0 new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/ListJSON", listLocalFilesJSON); -#endif new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Delete", deleteLocalFile); new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Rename", renameLocalObject); new WebCommand("path", WEBCMD, WU, NULL, "LocalFS/Backup", backupLocalFS); @@ -688,6 +741,7 @@ namespace WebUI { new WebCommand("file_or_directory_path", WEBCMD, WU, "ESP215", "SD/Delete", deleteSDObject); new WebCommand("path", WEBCMD, WU, NULL, "SD/Rename", renameSDObject); new WebCommand(NULL, WEBCMD, WU, "ESP210", "SD/List", listSDFiles); + new WebCommand("path", WEBCMD, WU, NULL, "SD/ListJSON", listSDFilesJSON); new WebCommand(NULL, WEBCMD, WU, "ESP200", "SD/Status", showSDStatus); new WebCommand("ON|OFF", WEBCMD, WA, "ESP115", "Radio/State", setRadioState); From 1af155ba5d08345d19b5c8708193d6111dbdca13 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Thu, 21 Dec 2023 07:13:05 -1000 Subject: [PATCH 199/212] New Refr button in Tablet 2. Permit datetime field omission in file structure 3. Use jog instead of G0 for probe retraction --- FluidNC/data/index.html.gz | Bin 116654 -> 116717 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index dca26bf73aaab9acffb4db6c6483efdf5eba69f6..a408d9687ec89f3f215dfcfd445900997db19fe1 100644 GIT binary patch delta 85225 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 delta 85101 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≺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 Date: Thu, 21 Dec 2023 13:14:27 -0600 Subject: [PATCH 200/212] Moving config file --- example_configs/3axis_v4.yaml | 95 ----- example_configs/6P_extn_XYZ_HBridge.yaml | 121 ------- example_configs/6_Pack_2130_XYZABC.yaml | 314 ----------------- example_configs/6_Pack_OLED.yaml | 42 --- example_configs/6_Pack_solenoid.yaml | 119 ------- example_configs/6_Pack_stepstick_XYZABC.yaml | 236 ------------- example_configs/6_Pack_test.yaml | 328 ------------------ example_configs/6_pack_TMC2130_XYZ.yaml | 200 ----------- example_configs/6_pack_TMC5160.yaml | 195 ----------- example_configs/6_pack_TMC5160_Huanyang.yaml | 194 ----------- example_configs/6_pack_TMC5160_XYYZ.yaml | 219 ------------ example_configs/6_pack_external_huanyang.yaml | 162 --------- example_configs/BlackBox_X32_XYYZ-DOOR.yaml | 131 ------- example_configs/MKS_DLC32_21_XYZ.yaml | 157 --------- example_configs/MKS_DLC32_2_ABC.yaml | 121 ------- example_configs/MKS_DLC32_v21_laser.yaml | 202 ----------- example_configs/MKS_TinyBee_1_XYZAB.yaml | 227 ------------ example_configs/README.md | 4 + example_configs/TMC2130_SPI_Daisy.yaml | 195 ----------- example_configs/TMC2130_pen.yaml | 127 ------- example_configs/TMC2209.yaml | 174 ---------- example_configs/TMC2209_corexy.yaml | 157 --------- example_configs/TMC2209_pen.yaml | 174 ---------- example_configs/TMC2209_pen_SG.yaml | 182 ---------- example_configs/TapDelta_XYZ.yaml | 107 ------ example_configs/WallPlotter.yaml | 110 ------ example_configs/fluidnc_pen_laser.yaml | 136 -------- example_configs/fysetc_corexy.yaml | 154 -------- example_configs/midtbot_stepstick.yaml | 86 ----- example_configs/test_drive_SD.yaml | 55 --- example_configs/tmc2209_10V.yaml | 170 --------- example_configs/tmc2209_BESC.yaml | 175 ---------- example_configs/tmc2209_huanyang.yml | 176 ---------- example_configs/tmc2209_laser.yaml | 242 ------------- example_configs/tmc2209_relay.yaml | 163 --------- 35 files changed, 4 insertions(+), 5646 deletions(-) delete mode 100644 example_configs/3axis_v4.yaml delete mode 100644 example_configs/6P_extn_XYZ_HBridge.yaml delete mode 100644 example_configs/6_Pack_2130_XYZABC.yaml delete mode 100644 example_configs/6_Pack_OLED.yaml delete mode 100644 example_configs/6_Pack_solenoid.yaml delete mode 100644 example_configs/6_Pack_stepstick_XYZABC.yaml delete mode 100644 example_configs/6_Pack_test.yaml delete mode 100644 example_configs/6_pack_TMC2130_XYZ.yaml delete mode 100644 example_configs/6_pack_TMC5160.yaml delete mode 100644 example_configs/6_pack_TMC5160_Huanyang.yaml delete mode 100644 example_configs/6_pack_TMC5160_XYYZ.yaml delete mode 100644 example_configs/6_pack_external_huanyang.yaml delete mode 100644 example_configs/BlackBox_X32_XYYZ-DOOR.yaml delete mode 100644 example_configs/MKS_DLC32_21_XYZ.yaml delete mode 100644 example_configs/MKS_DLC32_2_ABC.yaml delete mode 100644 example_configs/MKS_DLC32_v21_laser.yaml delete mode 100644 example_configs/MKS_TinyBee_1_XYZAB.yaml create mode 100644 example_configs/README.md delete mode 100644 example_configs/TMC2130_SPI_Daisy.yaml delete mode 100644 example_configs/TMC2130_pen.yaml delete mode 100644 example_configs/TMC2209.yaml delete mode 100644 example_configs/TMC2209_corexy.yaml delete mode 100644 example_configs/TMC2209_pen.yaml delete mode 100644 example_configs/TMC2209_pen_SG.yaml delete mode 100644 example_configs/TapDelta_XYZ.yaml delete mode 100644 example_configs/WallPlotter.yaml delete mode 100644 example_configs/fluidnc_pen_laser.yaml delete mode 100644 example_configs/fysetc_corexy.yaml delete mode 100644 example_configs/midtbot_stepstick.yaml delete mode 100644 example_configs/test_drive_SD.yaml delete mode 100644 example_configs/tmc2209_10V.yaml delete mode 100644 example_configs/tmc2209_BESC.yaml delete mode 100644 example_configs/tmc2209_huanyang.yml delete mode 100644 example_configs/tmc2209_laser.yaml delete mode 100644 example_configs/tmc2209_relay.yaml diff --git a/example_configs/3axis_v4.yaml b/example_configs/3axis_v4.yaml deleted file mode 100644 index d859a2f5c..000000000 --- a/example_configs/3axis_v4.yaml +++ /dev/null @@ -1,95 +0,0 @@ -name: "ESP32 Dev Controller V4" -board: "ESP32 Dev Controller V4" - -stepping: - engine: RMT - idle_ms: 250 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: gpio.13:low - - x: - steps_per_mm: 800 - max_rate_mm_per_min: 2000 - acceleration_mm_per_sec2: 25 - max_travel_mm: 1000 - homing: - cycle: 2 - mpos_mm: 10 - positive_direction: false - - motor0: - limit_all_pin: gpio.17:low:pu - stepstick: - direction_pin: gpio.14 - step_pin: gpio.12 - motor1: - null_motor: - - y: - steps_per_mm: 800 - max_rate_mm_per_min: 2000 - acceleration_mm_per_sec2: 25 - max_travel_mm: 1000 - homing: - cycle: 2 - mpos_mm: 10 - positive_direction: false - - motor0: - limit_all_pin: gpio.4:low:pu - stepstick: - direction_pin: gpio.15 - step_pin: gpio.26 - motor1: - null_motor: - - z: - steps_per_mm: 800 - max_rate_mm_per_min: 2000 - acceleration_mm_per_sec2: 25 - max_travel_mm: 1000 - homing: - cycle: 1 - mpos_mm: 10 - positive_direction: true - - motor0: - limit_all_pin: gpio.16:low:pu - stepstick: - direction_pin: gpio.33 - step_pin: gpio.27 - motor1: - null_motor: - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -coolant: - flood_pin: gpio.25 - mist_pin: gpio.21 - - -probe: - pin: gpio.32:low:pu - -PWM: - pwm_hz: 5000 - output_pin: gpio.2 - enable_pin: gpio.22 - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 0 - spindown_ms: 0 - tool_num: 0 - speed_map: 0=0% 10000=100% diff --git a/example_configs/6P_extn_XYZ_HBridge.yaml b/example_configs/6P_extn_XYZ_HBridge.yaml deleted file mode 100644 index ce80144a8..000000000 --- a/example_configs/6P_extn_XYZ_HBridge.yaml +++ /dev/null @@ -1,121 +0,0 @@ -board: 6 Pack -name: 6 Pack External XYZ HBridgeSpindle -meta: - -stepping: - engine: I2S_STREAM - idle_ms: 250 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 100.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - ms3_pin: i2so.3 - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - - y: - steps_per_mm: 100.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 0.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - ms3_pin: i2so.6 - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - - z: - steps_per_mm: 100.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 0.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - standard_stepper: - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -HBridgeSpindle: - pwm_hz: 5000 - output_cw_pin: gpio.4 - output_ccw_pin: gpio.16 - enable_pin: gpio.26 - disable_with_s0: false - spinup_ms: 0 - spindown_ms: 0 - tool_num: 100 - speed_map: 0=0.000% 10000=100.000% - \ No newline at end of file diff --git a/example_configs/6_Pack_2130_XYZABC.yaml b/example_configs/6_Pack_2130_XYZABC.yaml deleted file mode 100644 index 350085087..000000000 --- a/example_configs/6_Pack_2130_XYZABC.yaml +++ /dev/null @@ -1,314 +0,0 @@ -board: 6 Pack -name: 6 Pack tmc_2130 XYZABC -stepping: - engine: I2S_STREAM - idle_ms: 250 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.33 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.3 - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.32 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.6 - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.35 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.11 - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - a: - steps_per_mm: 53.400 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 960.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.34 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - tmc_2130: - cs_pin: i2so.14 - step_pin: I2SO.13 - direction_pin: I2SO.12 - disable_pin: I2SO.15 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - b: - steps_per_mm: 808.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 200.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.2 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - tmc_2130: - cs_pin: i2so.19 - step_pin: I2SO.18 - direction_pin: I2SO.17 - disable_pin: I2SO.16 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - c: - steps_per_mm: 808.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 200.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.25 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - tmc_2130: - cs_pin: i2so.22 - step_pin: I2SO.21 - direction_pin: I2SO.20 - disable_pin: I2SO.23 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: gpio.36 - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -coolant: - flood_pin: i2so.24 - mist_pin: i2so.27 - delay_ms: 0 - -probe: - pin: gpio.39 - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - - -start: - must_home: false - -PWM: - pwm_hz: 5000 - output_pin: gpio.14 - enable_pin: gpio.13 - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 1000 - spindown_ms: 1000 - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% diff --git a/example_configs/6_Pack_OLED.yaml b/example_configs/6_Pack_OLED.yaml deleted file mode 100644 index e42682b9a..000000000 --- a/example_configs/6_Pack_OLED.yaml +++ /dev/null @@ -1,42 +0,0 @@ -board: 6 Pack -name: 6 Pack OLED -stepping: - engine: I2S_STATIC - -i2c0: - sda_pin: gpio.14 - scl_pin: gpio.13 - -oled: - i2c_num: 0 - i2c_address: 60 - width: 128 - height: 64 - radio_delay_ms: 1000 - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -axes: - x: - motor0: - null_motor: - - y: - motor0: - null_motor: - - z: - motor0: - null_motor: diff --git a/example_configs/6_Pack_solenoid.yaml b/example_configs/6_Pack_solenoid.yaml deleted file mode 100644 index a58976e73..000000000 --- a/example_configs/6_Pack_solenoid.yaml +++ /dev/null @@ -1,119 +0,0 @@ -board: 6 Pack -name: 6 Pack StepStick XYZABC -stepping: - engine: I2S_STREAM - idle_ms: 255 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.33 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - ms3_pin: i2so.3 - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.32 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - ms3_pin: i2so.6 - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.35 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - solenoid: - output_pin: gpio.26 - pwm_hz: 5000 - off_percent: 0.000 - pull_percent: 100.000 - hold_percent: 20.000 - pull_ms: 1000 - - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - - - - -start: - must_home: false - - diff --git a/example_configs/6_Pack_stepstick_XYZABC.yaml b/example_configs/6_Pack_stepstick_XYZABC.yaml deleted file mode 100644 index aa0fac064..000000000 --- a/example_configs/6_Pack_stepstick_XYZABC.yaml +++ /dev/null @@ -1,236 +0,0 @@ -board: 6 Pack -name: 6 Pack StepStick XYZABC -stepping: - engine: I2S_STREAM - idle_ms: 250 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.33 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - ms3_pin: i2so.3 - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.32 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - ms3_pin: i2so.6 - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.35 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - ms3_pin: i2so.11 - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - - a: - steps_per_mm: 53.400 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 960.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.34 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - stepstick: - ms3_pin: i2so.14 - step_pin: I2SO.13 - direction_pin: I2SO.12 - disable_pin: I2SO.15 - - b: - steps_per_mm: 808.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 200.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.2 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - stepstick: - ms3_pin: i2so.19 - step_pin: I2SO.18 - direction_pin: I2SO.17 - disable_pin: I2SO.16 - - c: - steps_per_mm: 808.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 200.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.25 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - stepstick: - ms3_pin: i2so.22 - step_pin: I2SO.21 - direction_pin: I2SO.20 - disable_pin: I2SO.23 - - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: gpio.36 - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -coolant: - flood_pin: i2so.24 - mist_pin: i2so.27 - delay_ms: 0 - -probe: - pin: gpio.39 - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - - -start: - must_home: false - -PWM: - pwm_hz: 5000 - output_pin: gpio.14 - enable_pin: gpio.13 - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 1000 - spindown_ms: 1000 - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% diff --git a/example_configs/6_Pack_test.yaml b/example_configs/6_Pack_test.yaml deleted file mode 100644 index 27b6530dd..000000000 --- a/example_configs/6_Pack_test.yaml +++ /dev/null @@ -1,328 +0,0 @@ -board: 6 Pack -name: 6 Pack tmc_2130 XYZABC -stepping: - engine: I2S_STREAM - idle_ms: 250 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.33 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.3 - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.32 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.6 - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.35 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.11 - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - a: - steps_per_mm: 53.400 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 960.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.34 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - tmc_2130: - cs_pin: i2so.14 - step_pin: I2SO.13 - direction_pin: I2SO.12 - disable_pin: I2SO.15 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - b: - steps_per_mm: 808.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 200.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.2 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - tmc_5160: - cs_pin: i2so.19 - step_pin: I2SO.18 - direction_pin: I2SO.17 - disable_pin: I2SO.16 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - c: - steps_per_mm: 808.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 200.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.25 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 3.000 - tmc_5160: - cs_pin: i2so.22 - step_pin: I2SO.21 - direction_pin: I2SO.20 - disable_pin: I2SO.23 - spi_index: -1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: gpio.36 - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -coolant: - flood_pin: i2so.24 - mist_pin: i2so.27 - delay_ms: 0 - -probe: - pin: gpio.39 - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - - -start: - must_home: false - -PWM: - pwm_hz: 5000 - output_pin: gpio.14 - enable_pin: gpio.13 - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 1000 - spindown_ms: 1000 - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% diff --git a/example_configs/6_pack_TMC2130_XYZ.yaml b/example_configs/6_pack_TMC2130_XYZ.yaml deleted file mode 100644 index a2d4a045c..000000000 --- a/example_configs/6_pack_TMC2130_XYZ.yaml +++ /dev/null @@ -1,200 +0,0 @@ -board: 6 Pack -name: 6 Pack StepStick XYZ -stepping: - engine: I2S_STREAM - idle_ms: 255 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.33:pu - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.3 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.750 - microsteps: 8 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: false - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.32:pu - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.6 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.750 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: i2so.11 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.750 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -coolant: - flood_pin: NO_PIN - mist_pin: NO_PIN - delay_ms: 0 - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - -PWM: - pwm_hz: 5000 - output_pin: gpio.26 - enable_pin: gpio.4 - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 1000 - spindown_ms: 1000 - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% diff --git a/example_configs/6_pack_TMC5160.yaml b/example_configs/6_pack_TMC5160.yaml deleted file mode 100644 index 6941bc2e0..000000000 --- a/example_configs/6_pack_TMC5160.yaml +++ /dev/null @@ -1,195 +0,0 @@ -board: 6 Pack -name: 6 Pack TMC5160 XYZ -stepping: - engine: I2S_STREAM - idle_ms: 255 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.33:pu - hard_limits: false - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.3 - r_sense_ohms: 0.075 - run_amps: 1.75 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: false - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.32:pu - hard_limits: false - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.6 - r_sense_ohms: 0.075 - run_amps: 1.75 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.11 - r_sense_ohms: 0.075 - run_amps: 1.750 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - -PWM: - pwm_hz: 5000 - output_pin: gpio.26 - enable_pin: gpio.4 - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 1000 - spindown_ms: 1000 - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% diff --git a/example_configs/6_pack_TMC5160_Huanyang.yaml b/example_configs/6_pack_TMC5160_Huanyang.yaml deleted file mode 100644 index a4e1e04fa..000000000 --- a/example_configs/6_pack_TMC5160_Huanyang.yaml +++ /dev/null @@ -1,194 +0,0 @@ -board: 6 Pack -name: 6 Pack TMC5160 XYZ -stepping: - engine: I2S_STREAM - idle_ms: 255 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.33:pu - hard_limits: false - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.3 - r_sense_ohms: 0.075 - run_amps: 1.75 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: false - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.32:pu - hard_limits: false - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.6 - r_sense_ohms: 0.075 - run_amps: 1.75 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.11 - r_sense_ohms: 0.075 - run_amps: 1.750 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - -uart1: - txd_pin: gpio.26 - rxd_pin: gpio.16 - rts_pin: gpio.4 - baud: 9600 - mode: 8N1 - -Huanyang: - uart_num: 1 - modbus_id: 1 - tool_num: 0 - speed_map: 0=0% 1000=0% 24000=100% - diff --git a/example_configs/6_pack_TMC5160_XYYZ.yaml b/example_configs/6_pack_TMC5160_XYYZ.yaml deleted file mode 100644 index 1d0e5b66e..000000000 --- a/example_configs/6_pack_TMC5160_XYYZ.yaml +++ /dev/null @@ -1,219 +0,0 @@ -board: 6 Pack -name: 6 Pack TMC5160 XYZ -stepping: - engine: I2S_STREAM - idle_ms: 250 - pulse_us: 2 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.33:pu - hard_limits: true - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.3 - r_sense_ohms: 0.075 - run_amps: 0.75 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: false - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.32:pu - hard_limits: true - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.6 - r_sense_ohms: 0.075 - run_amps: 0.75 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - - motor1: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.35 - hard_limits: true - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.11 - r_sense_ohms: 0.075 - run_amps: 0.750 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.34 - hard_limits: true - pulloff_mm: 1.000 - tmc_5160: - cs_pin: i2so.14 - r_sense_ohms: 0.075 - run_amps: 0.750 - hold_amps: 0.50 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: I2SO.13 - direction_pin: I2SO.12 - disable_pin: I2SO.15 - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - -PWM: - pwm_hz: 5000 - output_pin: gpio.26 - enable_pin: gpio.4 - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 1000 - spindown_ms: 1000 - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% diff --git a/example_configs/6_pack_external_huanyang.yaml b/example_configs/6_pack_external_huanyang.yaml deleted file mode 100644 index 7f599a937..000000000 --- a/example_configs/6_pack_external_huanyang.yaml +++ /dev/null @@ -1,162 +0,0 @@ -board: 6 Pack -name: 6 Pack External XYZ Haunyang -stepping: - engine: I2S_STREAM - idle_ms: 250 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - standard_stepper: - step_pin: I2SO.2 - direction_pin: I2SO.1 - disable_pin: I2SO.0 - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.32:pu - hard_limits: false - pulloff_mm: 1.000 - standard_stepper: - step_pin: I2SO.5 - direction_pin: I2SO.4 - disable_pin: I2SO.7 - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - standard_stepper: - step_pin: I2SO.10 - direction_pin: I2SO.9 - disable_pin: I2SO.8 - -i2so: - bck_pin: gpio.22 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -coolant: - flood_pin: NO_PIN - mist_pin: NO_PIN - delay_ms: 0 - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - -uart1: - txd_pin: gpio.26 - rxd_pin: gpio.16 - rts_pin: gpio.4 - baud: 9600 - mode: 8N1 - -Huanyang: - uart_num: 1 - modbus_id: 1 - tool_num: 0 - speed_map: 0=0% 0=25% 6000=25% 24000=100% diff --git a/example_configs/BlackBox_X32_XYYZ-DOOR.yaml b/example_configs/BlackBox_X32_XYYZ-DOOR.yaml deleted file mode 100644 index f81454db3..000000000 --- a/example_configs/BlackBox_X32_XYYZ-DOOR.yaml +++ /dev/null @@ -1,131 +0,0 @@ -board: OpenBuilds BlackBox X32 -name: BlackBox_X32_XYYZ-DOOR -meta: Handcrafted by Shell M Shrader -stepping: - engine: RMT - idle_ms: 255 - pulse_us: 2 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: gpio.17:low - x: - steps_per_mm: 200.000 - max_rate_mm_per_min: 1000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - feed_mm_per_min: 100.000 - seek_mm_per_min: 500.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.35 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - standard_stepper: - step_pin: gpio.12 - direction_pin: gpio.14 - - y: - steps_per_mm: 200.000 - max_rate_mm_per_min: 1000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - feed_mm_per_min: 100.000 - seek_mm_per_min: 500.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.34 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - standard_stepper: - step_pin: gpio.27 - direction_pin: gpio.26 - - motor1: - standard_stepper: - step_pin: gpio.33 - direction_pin: gpio.32 - - z: - steps_per_mm: 200.000 - max_rate_mm_per_min: 300.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 50.000 - soft_limits: false - homing: - cycle: 1 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.39 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - standard_stepper: - step_pin: gpio.15 - direction_pin: gpio.2 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -probe: - pin: gpio.22:low - check_mode_start: true - -control: - safety_door_pin: gpio.16:pu - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -start: - must_home: false - -coolant: - mist_pin: gpio.21 - delay_ms: 0 - -PWM: - pwm_hz: 5000 - output_pin: gpio.25 - enable_pin: gpio.13 - direction_pin: gpio.4 - disable_with_s0: false - s0_with_disable: true - spinup_ms: 30000 - spindown_ms: 10000 - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% \ No newline at end of file diff --git a/example_configs/MKS_DLC32_21_XYZ.yaml b/example_configs/MKS_DLC32_21_XYZ.yaml deleted file mode 100644 index b6774d793..000000000 --- a/example_configs/MKS_DLC32_21_XYZ.yaml +++ /dev/null @@ -1,157 +0,0 @@ -board: MKS-DLC32 V2.1 -name: K40 Laser -meta: (01.01.2022) by Skorpi - -kinematics: - Cartesian: - -stepping: - engine: I2S_STATIC - idle_ms: 0 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 -axes: - shared_stepper_disable_pin: I2SO.0 - x: - steps_per_mm: 157.750 - max_rate_mm_per_min: 18000.000 - acceleration_mm_per_sec2: 1500.000 - max_travel_mm: 325.000 - soft_limits: true - homing: - cycle: 1 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 300.000 - seek_mm_per_min: 5000.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.36 - hard_limits: false - pulloff_mm: 2.000 - stepstick: - step_pin: I2SO.1 - direction_pin: I2SO.2 - - y: - steps_per_mm: 157.750 - max_rate_mm_per_min: 12000.000 - acceleration_mm_per_sec2: 300.000 - max_travel_mm: 220.000 - soft_limits: true - homing: - cycle: 1 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 300.000 - seek_mm_per_min: 5000.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.35 - hard_limits: false - pulloff_mm: 2.000 - stepstick: - step_pin: I2SO.5 - direction_pin: I2SO.6:low - - z: - steps_per_mm: 157.750 - max_rate_mm_per_min: 12000.000 - acceleration_mm_per_sec2: 500.000 - max_travel_mm: 80.000 - soft_limits: true - homing: - cycle: 0 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 300.000 - seek_mm_per_min: 1000.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.34 - hard_limits: false - pulloff_mm: 1.000 - stepstick: - step_pin: I2SO.3 - direction_pin: I2SO.4 - -i2so: - bck_pin: gpio.16 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.12 - mosi_pin: gpio.13 - sck_pin: gpio.14 - -sdcard: - cs_pin: gpio.15 - card_detect_pin: NO_PIN - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: gpio.33:low:pu - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -macros: - startup_line0: - startup_line1: - macro0: $SD/Run=lasertest.gcode - macro1: $SD/Run=home.gcode - macro2: - macro3: - -coolant: - flood_pin: NO_PIN - mist_pin: NO_PIN - delay_ms: 0 - -probe: - pin: gpio.22 - check_mode_start: true - -Laser: - pwm_hz: 5000 - #L on Beeper / IN on TTL - output_pin: gpio.32 - enable_pin: I2SO.7 - disable_with_s0: false - s0_with_disable: false - tool_num: 0 - speed_map: 0=0.000% 0=12.500% 1700=100.000% -# 135=0mA 270=5mA 400=10mA 700=16mA -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - -# 5,18,19,22,23,25,26,27,32,33,39,I2SO.7 -# SDA 0 / SCL 4 diff --git a/example_configs/MKS_DLC32_2_ABC.yaml b/example_configs/MKS_DLC32_2_ABC.yaml deleted file mode 100644 index 4f0899ec3..000000000 --- a/example_configs/MKS_DLC32_2_ABC.yaml +++ /dev/null @@ -1,121 +0,0 @@ -board: MKS DLC32 2.0 -name: MKS DLC32 XYZ -meta: (12/2/2021) B. Dring for diruuu -stepping: - engine: I2S_STREAM - idle_ms: 250 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: i2so.0 - x: - steps_per_mm: 100.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.36 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - step_pin: i2so.1 - direction_pin: I2SO.2 - - y: - steps_per_mm: 100.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 3 - positive_direction: true - mpos_mm: 0.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.35 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - step_pin: I2SO.5 - direction_pin: I2SO.6 - - z: - steps_per_mm: 100.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 0.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.34 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - stepstick: - step_pin: I2SO.3 - direction_pin: I2SO.4 - -i2so: - bck_pin: gpio.16 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.12 - mosi_pin: gpio.13 - sck_pin: gpio.14 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.15 - -probe: - pin: gpio.2 - check_mode_start: true - -start: - must_home: false - -PWM: - pwm_hz: 5000 - output_pin: gpio.22 - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 1000 - spindown_ms: 1000 - tool_num: 0 - speed_map: 0=0.000% 12000=100.000% diff --git a/example_configs/MKS_DLC32_v21_laser.yaml b/example_configs/MKS_DLC32_v21_laser.yaml deleted file mode 100644 index b6d917efa..000000000 --- a/example_configs/MKS_DLC32_v21_laser.yaml +++ /dev/null @@ -1,202 +0,0 @@ -# Basic configuration file for X/Y Laser using GT2 belts 1.8ºNEMA motors -# at 16 microSteps and 16 Tooth pulleys - -board: MKS-DLC32 V2.1 -name: 3dpBurner3 -meta: villamany 30/Jan/2023 - -kinematics: - Cartesian: - -stepping: - engine: I2S_STATIC - idle_ms: 255 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 -axes: - shared_stepper_disable_pin: I2SO.0 - x: - steps_per_mm: 100 - max_rate_mm_per_min: 16000 - acceleration_mm_per_sec2: 1500 - max_travel_mm: 895 - soft_limits: false - homing: - cycle: 0 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 500.000 - seek_mm_per_min: 16000.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.36:low - hard_limits: false - pulloff_mm: 2.000 - stepstick: - step_pin: I2SO.1 - direction_pin: I2SO.2:low - - y: - steps_per_mm: 100 - max_rate_mm_per_min: 16000 - acceleration_mm_per_sec2: 1500 - max_travel_mm: 880 - soft_limits: false - homing: - cycle: 0 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 500.000 - seek_mm_per_min: 16000.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.35:low - hard_limits: false - pulloff_mm: 2.000 - stepstick: - step_pin: I2SO.5 - direction_pin: I2SO.6:high - - z: - steps_per_mm: 80 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 500.000 - max_travel_mm: 80.000 - soft_limits: true - homing: - cycle: 0 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 200.000 - seek_mm_per_min: 500.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.34 - hard_limits: false - pulloff_mm: 1.000 - stepstick: - step_pin: I2SO.3 - direction_pin: I2SO.4 - -i2so: - bck_pin: gpio.16 - data_pin: gpio.21 - ws_pin: gpio.17 - -spi: - miso_pin: gpio.12 - mosi_pin: gpio.13 - sck_pin: gpio.14 - -sdcard: - cs_pin: gpio.15 - card_detect_pin: NO_PIN -# card_detect_pin: gpio.39 - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -coolant: - flood_pin: NO_PIN - mist_pin: NO_PIN - delay_ms: 0 - -#probe: -# pin: gpio.22 -# check_mode_start: true - -Laser: - pwm_hz: 5000 - output_pin: gpio.32 - disable_with_s0: false - s0_with_disable: false - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% -#PWM: -# direction_pin: NO_PIN -# spinup_ms: 1000 -# spindown_ms: 1000 - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - #Beeper connector. Command: "M62 P0" turn beeper On. - #"G4 P0.5" wait for 0.5s. "M63 P0" turn beeper OFF - digital0_pin: I2SO.7 - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - - -#MKS DLC32 v2.1 pinMap - -# X- gpio.36 -# SD_DET gpio.39 -# Z- gpio.34 -# Y- gpio.35 -# SPINDLE PWM gpio.32 -# LCD_RS gpio.33 -# LCD_CS_INV gpio.25 -# LCD_TOUCH_CS_INV gpio.26 -# LCD_RST_INV gpio.27 -# SD_SCK gpio.14 -# SD_DO gpio.12 -# SD_DI gpio.13 -# SD_CS gpio.15 -# I2C_SDA gpio.0 -# I2C_SCL gpio.4 -# I2S_BCK gpio.16 -# I2S_WS gpio.17 -# LCD_EN_INV gpio.5 -# LCD_SCK gpio.18 -# LCD_MISO gpio.19 -# I2S_DATA gpio.21 -# RXD0 gpio.3 -# TXD0 gpio.1 -# Probe gpio.22 -# LCD_MOSI gpio.23 - -# XYZ_EN I2SO.0 -# X_STEP I2SO.1 -# X_DIR I2SO.2 -# Z_STEP I2SO.3 -# Z_DIR I2SO.4 -# Y_STEP I2SO.5 -# Y_DIR I2SO.6 -# BEEPER I2SO.7 - - diff --git a/example_configs/MKS_TinyBee_1_XYZAB.yaml b/example_configs/MKS_TinyBee_1_XYZAB.yaml deleted file mode 100644 index 81818212f..000000000 --- a/example_configs/MKS_TinyBee_1_XYZAB.yaml +++ /dev/null @@ -1,227 +0,0 @@ -board: MKS TinyBee V1.0_001 -name: K40 Laser -meta: (01.02.2022) by Skorpi - -kinematics: - Cartesian: - -stepping: - engine: I2S_STATIC - idle_ms: 0 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - x: - # X - steps_per_mm: 157.750 - max_rate_mm_per_min: 18000.000 - acceleration_mm_per_sec2: 1500.000 - max_travel_mm: 325.000 - soft_limits: true - homing: - cycle: 0 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 300.000 - seek_mm_per_min: 5000.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.33 - hard_limits: false - pulloff_mm: 2.000 - stepstick: - step_pin: I2SO.1 - direction_pin: I2SO.2 - disable_pin: I2SO.0 - - y: - # Y - steps_per_mm: 157.750 - max_rate_mm_per_min: 12000.000 - acceleration_mm_per_sec2: 300.000 - max_travel_mm: 220.000 - soft_limits: true - homing: - cycle: 1 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 300.000 - seek_mm_per_min: 5000.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.32 - hard_limits: false - pulloff_mm: 2.000 - stepstick: - step_pin: I2SO.4 - direction_pin: I2SO.5 - disable_pin: I2SO.3 - - z: - # Z - steps_per_mm: 157.750 - max_rate_mm_per_min: 12000.000 - acceleration_mm_per_sec2: 500.000 - max_travel_mm: 80.000 - soft_limits: true - homing: - cycle: 0 - positive_direction: false - mpos_mm: 0.000 - feed_mm_per_min: 300.000 - seek_mm_per_min: 1000.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.22 - hard_limits: false - pulloff_mm: 1.000 - stepstick: - step_pin: I2SO.7 - direction_pin: I2SO.8 - disable_pin: I2SO.6 - -# a: -# # E0 -# steps_per_mm: 157.750 -# max_rate_mm_per_min: 18000.000 -# acceleration_mm_per_sec2: 1500.000 -# max_travel_mm: 325.000 -# soft_limits: true -# homing: -# cycle: 1 -# positive_direction: false -# mpos_mm: 0.000 -# feed_mm_per_min: 300.000 -# seek_mm_per_min: 5000.000 -# settle_ms: 500 -# seek_scaler: 1.100 -# feed_scaler: 1.100 -# -# motor0: -# limit_neg_pin: gpio.35 -# hard_limits: false -# pulloff_mm: 2.000 -# stepstick: -# step_pin: I2SO.10 -# direction_pin: I2SO.11:low -# disable_pin: I2SO.9 - -# b: -# # E1 -# steps_per_mm: 157.750 -# max_rate_mm_per_min: 12000.000 -# acceleration_mm_per_sec2: 500.000 -# max_travel_mm: 80.000 -# soft_limits: true -# homing: -# cycle: 0 -# positive_direction: false -# mpos_mm: 0.000 -# feed_mm_per_min: 300.000 -# seek_mm_per_min: 1000.000 -# settle_ms: 500 -# seek_scaler: 1.100 -# feed_scaler: 1.100 -# -# motor0: -# limit_neg_pin: gpio.2 -# hard_limits: false -# pulloff_mm: 1.000 -# stepstick: -# step_pin: I2SO.13 -# direction_pin: I2SO.14 -# disable_pin: I2SO.12 - -i2so: - bck_pin: gpio.25 - data_pin: gpio.27 - ws_pin: gpio.26 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - # EXP1 BTN_ENC - macro0_pin: gpio.4:low:pu - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -macros: - startup_line0: - startup_line1: - macro0: $SD/Run=lasertest.gcode - macro1: $SD/Run=home.gcode - macro2: - macro3: - -coolant: - flood_pin: NO_PIN - mist_pin: NO_PIN - delay_ms: 0 - -#probe: -# pin: gpio.2 -# check_mode_start: true - -Laser: - pwm_hz: 5000 - # EXP1 BTN_ENC - output_pin: gpio.13 - # FAN1 - enable_pin: I2SO.16 - disable_with_s0: false - s0_with_disable: false - tool_num: 0 - speed_map: 0=0.000% 0=12.500% 1700=100.000% -# 135=0mA 270=5mA 400=10mA 700=16mA -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - - # USB TX0(1) RX0(3) - # J3-> TX2(17) RX2(16) - # J1-> I2SO.23 I2SO.22 - # TH1(36) TH2(34) THB(39) - # HE0(I2SO.17) HE1(I2SO.18) HBED(I2SO.16) - # FAN1(I2SO.19) FAN2(I2SO.20) - # EXP1 EXP2 - #(BEEPER) I2SO.21 | 1 2 | 13 (BTN_ENC) (SPI MISO) 19 | 1 2 | 18 (SPI SCK) - # (LCD_EN) 21 | 3 4 | 4 (LCD_RS) (BTN_EN1) 14 | 3 4 | 5 (SPI CS) - # (LCD_D4) 0 | 5 6 16 (LCD_D5) (BTN_EN2) 12 | 5 6 23 (SPI MOSI) - # (LCD_D6) 15 | 7 8 | 17 (LCD_D7) (SPI_DET) 34 | 7 8 | RESET - # GND | 9 10 | 5V GND | 9 10 | 3.3V diff --git a/example_configs/README.md b/example_configs/README.md new file mode 100644 index 000000000..58e4183a3 --- /dev/null +++ b/example_configs/README.md @@ -0,0 +1,4 @@ +### The config files have moved to their own GitHub repo + +[See this GitHub repo](https://github.com/bdring/fluidnc-config-files). + diff --git a/example_configs/TMC2130_SPI_Daisy.yaml b/example_configs/TMC2130_SPI_Daisy.yaml deleted file mode 100644 index 8d244d381..000000000 --- a/example_configs/TMC2130_SPI_Daisy.yaml +++ /dev/null @@ -1,195 +0,0 @@ -board: 4 Axis SPI Daisy -name: 4 Axis SPI Daisy Test -stepping: - engine: RMT - idle_ms: 255 - pulse_us: 2 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - cs_pin: gpio.17 - spi_index: 1 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.750 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: true - step_pin: gpio.12 - direction_pin: gpio.14 - disable_pin: NO_PIN - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - spi_index: 2 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.750 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: true - step_pin: gpio.27 - direction_pin: gpio.26 - disable_pin: NO_PIN - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - spi_index: 3 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.750 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: true - step_pin: gpio.15 - direction_pin: gpio.2 - disable_pin: NO_PIN - - a: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2130: - spi_index: 4 - r_sense_ohms: 0.110 - run_amps: 0.750 - hold_amps: 0.750 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: true - step_pin: gpio.33 - direction_pin: gpio.32 - disable_pin: NO_PIN - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -start: - must_home: false diff --git a/example_configs/TMC2130_pen.yaml b/example_configs/TMC2130_pen.yaml deleted file mode 100644 index 074293340..000000000 --- a/example_configs/TMC2130_pen.yaml +++ /dev/null @@ -1,127 +0,0 @@ -name: "TMC2130 Pen/Laser" -board: "TMC2130 Pen/Laser" - -stepping: - engine: RMT - idle_ms: 255 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: gpio.13:high - - x: - steps_per_mm: 800 - max_rate_mm_per_min: 2000 - acceleration_mm_per_sec2: 25 - max_travel_mm: 1000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_all_pin: gpio.32:low:pu - tmc_2130: - direction_pin: gpio.26 - step_pin: gpio.12 - cs_pin: gpio.17 - r_sense_ohms: 0.110 - run_amps: 0.250 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - motor1: - null_motor: - - y: - steps_per_mm: 800 - max_rate_mm_per_min: 2000 - acceleration_mm_per_sec2: 25 - max_travel_mm: 1000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_all_pin: NO_PIN - tmc_2130: - direction_pin: gpio.25 - step_pin: gpio.14 - cs_pin: gpio.16 - r_sense_ohms: 0.110 - run_amps: 0.250 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - motor1: - null_motor: - - z: - steps_per_mm: 400 - max_rate_mm_per_min: 1000 - acceleration_mm_per_sec2: 50 - max_travel_mm: 5.00 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 5 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - rc_servo: - pwm_hz: 50 - output_pin: gpio.27 - min_pulse_us: 2100 - max_pulse_us: 1000 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -coolant: - flood_pin: NO_PIN - mist_pin: NO_PIN - -probe: - pin: NO_PIN - - diff --git a/example_configs/TMC2209.yaml b/example_configs/TMC2209.yaml deleted file mode 100644 index 37a9510cb..000000000 --- a/example_configs/TMC2209.yaml +++ /dev/null @@ -1,174 +0,0 @@ -board: TMC2209 4X -name: TMC2209 XYZA -stepping: - engine: RMT - idle_ms: 255 - pulse_us: 2 - dir_delay_us: 1 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: gpio.25 - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - step_pin: gpio.26 - direction_pin: gpio.27 - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.34 - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - step_pin: gpio.33 - direction_pin: gpio.32 - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: gpio.39 - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - step_pin: gpio.2 - direction_pin: gpio.14 - -a: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - step_pin: gpio.16 - direction_pin: gpio.15 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - must_home: false - -PWM: - pwm_hz: 5000 - output_pin: gpio.4 - enable_pin: gpio.13 - direction_pin: gpio.17 - disable_with_s0: false - s0_with_disable: true - spinup_ms: 1000 - spindown_ms: 1000 - tool_num: 0 - speed_map: 0=0.000% 1000=100.000% diff --git a/example_configs/TMC2209_corexy.yaml b/example_configs/TMC2209_corexy.yaml deleted file mode 100644 index 97eb3916c..000000000 --- a/example_configs/TMC2209_corexy.yaml +++ /dev/null @@ -1,157 +0,0 @@ -board: TMC2209 4X -name: TMC2209 XYZA -meta: "update for 3.6.8" - -stepping: - engine: RMT - idle_ms: 255 - pulse_us: 2 - dir_delay_us: 1 - disable_delay_us: 0 - -kinematics: - corexy: - -uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -axes: - shared_stepper_disable_pin: gpio.25:high - - x: - steps_per_mm: 100 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 80 - soft_limits: true - homing: - cycle: 1 - mpos_mm: 78 - positive_direction: true - feed_mm_per_min: 400.000 - seek_mm_per_min: 1200.000 - settle_ms: 200 - - motor0: - limit_pos_pin: gpio.35:low - hard_limits: false - pulloff_mm: 2.000 - tmc_2209: - uart_num: 1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.250 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.26 - direction_pin: gpio.27:low - disable_pin: NO_PIN - - motor1: - null_motor: - - y: - steps_per_mm: 100 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 105 - - homing: - cycle: 2 - mpos_mm: 103 - positive_direction: true - feed_mm_per_min: 400.000 - seek_mm_per_min: 1200.000 - settle_ms: 200 - - motor0: - limit_pos_pin: gpio.34:low - hard_limits: false - pulloff_mm: 2.00 - tmc_2209: - uart_num: 1 - addr: 1 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.250 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.33 - direction_pin: gpio.32 - disable_pin: NO_PIN - motor1: - null_motor: - - z: - steps_per_mm: 100 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 50 - max_travel_mm: 25 - - homing: - cycle: 0 - mpos_mm: 23 - positive_direction: true - feed_mm_per_min: 400.000 - seek_mm_per_min: 800.000 - settle_ms: 500 - - motor0: - limit_pos_pin: gpio.39:low - hard_limits: false - pulloff_mm: 4.00 - tmc_2209: - uart_num: 1 - addr: 2 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.200 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.2 - direction_pin: gpio.14 - disable_pin: NO_PIN - - motor1: - null_motor: - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - - -start: - must_home: false - diff --git a/example_configs/TMC2209_pen.yaml b/example_configs/TMC2209_pen.yaml deleted file mode 100644 index 6059dbdec..000000000 --- a/example_configs/TMC2209_pen.yaml +++ /dev/null @@ -1,174 +0,0 @@ -board: TMC2209 Pen -name: TMC2209 Pen -meta: "update for 3.6.8" - -stepping: - engine: RMT - idle_ms: 250 - pulse_us: 2 - dir_delay_us: 1 - disable_delay_us: 0 - -uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -axes: - shared_stepper_disable_pin: gpio.13 - x: - steps_per_mm: 80.000 - max_rate_mm_per_min: 30000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.33 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.500 - microsteps: 4 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: false - step_pin: gpio.12 - direction_pin: gpio.26 - disable_pin: NO_PIN - - motor1: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - null_motor: - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.32 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 1 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.500 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.14 - direction_pin: gpio.25 - disable_pin: NO_PIN - - z: - steps_per_mm: 320.000 - max_rate_mm_per_min: 1000.000 - acceleration_mm_per_sec2: 25.000 - max_travel_mm: 200.000 - soft_limits: false - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - check_limits: true - -Laser: - pwm_hz: 5000 - output_pin: gpio.27 - enable_pin: gpio.17 - disable_with_s0: false - s0_with_disable: true - tool_num: 100 - speed_map: 0=0.000% 255=100.000% diff --git a/example_configs/TMC2209_pen_SG.yaml b/example_configs/TMC2209_pen_SG.yaml deleted file mode 100644 index 66f8641b1..000000000 --- a/example_configs/TMC2209_pen_SG.yaml +++ /dev/null @@ -1,182 +0,0 @@ -board: TMC2209 Pen -name: TMC2209 Pen -meta: "update for 3.6.8" - -stepping: - engine: RMT - idle_ms: 250 - pulse_us: 2 - dir_delay_us: 1 - disable_delay_us: 0 - -uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -axes: - shared_stepper_disable_pin: gpio.13 - x: - steps_per_mm: 80.000 - max_rate_mm_per_min: 30000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.4 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 1.00 - hold_amps: 0.500 - microsteps: 4 - stallguard: 30 - stallguard_debug: true - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StallGuard - use_enable: false - step_pin: gpio.12 - direction_pin: gpio.26 - disable_pin: NO_PIN - - motor1: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - null_motor: - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.15 - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 1 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.500 - microsteps: 16 - stallguard: 10 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StallGuard - use_enable: false - step_pin: gpio.14 - direction_pin: gpio.25 - disable_pin: NO_PIN - - motor1: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - null_motor: - - z: - steps_per_mm: 320.000 - max_rate_mm_per_min: 1000.000 - acceleration_mm_per_sec2: 25.000 - max_travel_mm: 200.000 - soft_limits: false - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -control: - safety_door_pin: NO_PIN - reset_pin: NO_PIN - feed_hold_pin: NO_PIN - cycle_start_pin: NO_PIN - macro0_pin: NO_PIN - macro1_pin: NO_PIN - macro2_pin: NO_PIN - macro3_pin: NO_PIN - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -user_outputs: - analog0_pin: NO_PIN - analog1_pin: NO_PIN - analog2_pin: NO_PIN - analog3_pin: NO_PIN - analog0_hz: 5000 - analog1_hz: 5000 - analog2_hz: 5000 - analog3_hz: 5000 - digital0_pin: NO_PIN - digital1_pin: NO_PIN - digital2_pin: NO_PIN - digital3_pin: NO_PIN - -start: - check_limits: true - -Laser: - pwm_hz: 5000 - output_pin: gpio.27 - enable_pin: gpio.17 - disable_with_s0: false - s0_with_disable: true - tool_num: 100 - speed_map: 0=0.000% 255=100.000% diff --git a/example_configs/TapDelta_XYZ.yaml b/example_configs/TapDelta_XYZ.yaml deleted file mode 100644 index cc6eb568e..000000000 --- a/example_configs/TapDelta_XYZ.yaml +++ /dev/null @@ -1,107 +0,0 @@ -# This config defines an arm motion range from 30 deg up to 90 deg down -# 30 deg is pi/6 or 0.524 Radians -# 90 deg is pi/2 or 1.571 radians -# Max travel = 2.094 -# 2048 is the 0 point on the dynamixel in this design and the total is 4096 -# Up is 2048-341 = 1707 -# Down is 2048 + 1024 = 3072 - -board: Tap Delta -name: Tapster3 +30-90 -meta: B. Dring for Tapster -stepping: - engine: RMT - idle_ms: 2000 - pulse_us: 4 - dir_delay_us: 1 - disable_delay_us: 0 - -kinematics: - parallel_delta: - crank_mm: 70.000 - base_triangle_mm: 179.437 - linkage_mm: 133.50 - end_effector_triangle_mm: 86.603 - kinematic_segment_len_mm: 0.500 - homing_mpos_radians: 0.0 - soft_limits: true - max_z_mm: -90.0 - -start: - must_home: true - deactivate_parking: false - check_limits: false - -uart1: - txd_pin: gpio.4 - rxd_pin: gpio.13 - rts_pin: gpio.17 - baud: 1000000 - mode: 8N1 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 100.000 - max_rate_mm_per_min: 8000 - acceleration_mm_per_sec2: 300.000 - max_travel_mm: 2.094 - soft_limits: false - homing: - cycle: -1 - positive_direction: false - mpos_mm: -0.524 - - motor0: - dynamixel2: - uart_num: 1 - id: 1 - count_min: 1707 - count_max: 3072 - timer_ms: 30 - - y: - steps_per_mm: 100.000 - max_rate_mm_per_min: 8000 - acceleration_mm_per_sec2: 300.000 - max_travel_mm: 2.094 - soft_limits: false - homing: - cycle: -1 - positive_direction: false - mpos_mm: -0.524 - - motor0: - dynamixel2: - uart_num: 1 - id: 2 - count_min: 1707 - count_max: 3072 - timer_ms: 30 - z: - steps_per_mm: 100.000 - max_rate_mm_per_min: 8000 - acceleration_mm_per_sec2: 300.000 - max_travel_mm: 2.094 - soft_limits: false - homing: - cycle: -1 - positive_direction: false - mpos_mm: -0.524 - - motor0: - dynamixel2: - uart_num: 1 - id: 3 - count_min: 1707 - count_max: 3072 - timer_ms: 30 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 \ No newline at end of file diff --git a/example_configs/WallPlotter.yaml b/example_configs/WallPlotter.yaml deleted file mode 100644 index 82452986c..000000000 --- a/example_configs/WallPlotter.yaml +++ /dev/null @@ -1,110 +0,0 @@ -name: "ESP32 Dev Controller V4" -board: "WallPlotter ArduinoCNC Shield" - -kinematics: - WallPlotter: - left_axis: 0 - left_anchor_x: -428.000 - left_anchor_y: 520.00 - right_axis: 1 - right_anchor_x: 428.000 - right_anchor_y: 520.00 - segment_length: 2.0 - -stepping: - engine: RMT - idle_ms: 250 - dir_delay_us: 1 - pulse_us: 10 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: gpio.13 - - x: - steps_per_mm: 8.250 - max_rate_mm_per_min: 4000 - acceleration_mm_per_sec2: 400 - max_travel_mm: 4000 - homing: - cycle: 0 - mpos_mm: 0 - positive_direction: false - - motor0: - stepstick: - direction_pin: gpio.25 - step_pin: gpio.15 - - y: - steps_per_mm: 8.250 - max_rate_mm_per_min: 4000 - acceleration_mm_per_sec2: 400 - max_travel_mm: 4000 - homing: - cycle: 0 - mpos_mm: 0 - positive_direction: false - - motor0: - limit_all_pin: NO_PIN - stepstick: - direction_pin: gpio.26 - step_pin: gpio.2 - - # z: - # steps_per_mm: 2000 - # max_rate_mm_per_min: 500 - # acceleration_mm_per_sec2: 100 - # max_travel_mm: 5 - # homing: - # cycle: 0 - # mpos_mm: 0 - # positive_direction: false - - # motor0: - # rc_servo: - # pwm_hz: 50 - # output_pin: gpio.27 - # min_pulse_us: 700 - # max_pulse_us: 2200 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -coolant: - flood_pin: NO_PIN - mist_pin: NO_PIN - -probe: - pin: gpio.32:low:pu - -# Control pen up/down using a servo that is configured to look like a spindle -# A cheap blue 9g chinese servo was used. -# Different min_pulse_us and max_pulse_us may need to be used for other brands... -# -# As configured the servo will then respond as follows -# M3 S0 is pen up from paper -# M3 S255 is pen down on paper -# If you need to invert motion of servo, invert the values for min_pulse_us and max_pulse_us -besc: - pwm_hz: 50 - output_pin: gpio.21 - enable_pin: NO_PIN - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 2000 - spindown_ms: 2000 - tool_num: 100 - speed_map: 0=0.000% 255=100.000% - min_pulse_us: 700 - max_pulse_us: 2200 - - diff --git a/example_configs/fluidnc_pen_laser.yaml b/example_configs/fluidnc_pen_laser.yaml deleted file mode 100644 index e490914af..000000000 --- a/example_configs/fluidnc_pen_laser.yaml +++ /dev/null @@ -1,136 +0,0 @@ -name: "TMC2130 XY Servo Laser" -board: "FluidNC Pen/Laser" - -stepping: - engine: RMT - idle_ms: 255 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: gpio.13:high - - x: - steps_per_mm: 800 - max_rate_mm_per_min: 2000 - acceleration_mm_per_sec2: 25 - max_travel_mm: 1000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.39:low - tmc_2130: - direction_pin: gpio.12 - step_pin: gpio.14 - cs_pin: gpio.16 - r_sense_ohms: 0.110 - run_amps: 0.250 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - motor1: - null_motor: - - y: - steps_per_mm: 800 - max_rate_mm_per_min: 2000 - acceleration_mm_per_sec2: 25 - max_travel_mm: 1000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: gpio.36:low - tmc_2130: - direction_pin: gpio.26 - step_pin: gpio.25 - cs_pin: gpio.17 - r_sense_ohms: 0.110 - run_amps: 0.250 - hold_amps: 0.250 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - motor1: - null_motor: - - z: - steps_per_mm: 100 - max_rate_mm_per_min: 1000 - acceleration_mm_per_sec2: 50 - max_travel_mm: 5.00 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 5 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - rc_servo: - pwm_hz: 50 - output_pin: gpio.22 - min_pulse_us: 1000 - max_pulse_us: 2100 - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -coolant: - flood_pin: NO_PIN - mist_pin: gpio.21 - -probe: - pin: gpio.32:low:pu - -Laser: - pwm_hz: 5000 - output_pin: gpio.27 - enable_pin: gpio.2 - disable_with_s0: false - s0_with_disable: true - tool_num: 0 - speed_map: 0=0.000% 255=100.000% - - diff --git a/example_configs/fysetc_corexy.yaml b/example_configs/fysetc_corexy.yaml deleted file mode 100644 index b9c4e72ee..000000000 --- a/example_configs/fysetc_corexy.yaml +++ /dev/null @@ -1,154 +0,0 @@ -name: "Fysetc Ant CoreXY" -board: "Fysetc E4" - -stepping: - engine: RMT - idle_ms: 255 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -kinematics: - corexy: - -axes: - shared_stepper_disable_pin: gpio.25:high - - x: - steps_per_mm: 100.000 - max_rate_mm_per_min: 4000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 200.000 - seek_mm_per_min: 400.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_all_pin: gpio.34:low - hard_limits: true - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 1 - r_sense_ohms: 0.110 - run_amps: 1.500 - hold_amps: 0.500 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: false - step_pin: gpio.27 - direction_pin: gpio.26 - disable_pin: NO_PIN - - y: - steps_per_mm: 100.000 - max_rate_mm_per_min: 4000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: true - mpos_mm: 150.000 - feed_mm_per_min: 200.000 - seek_mm_per_min: 400.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_all_pin: gpio.35:low - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 3 - r_sense_ohms: 0.110 - run_amps: 1.5200 - hold_amps: 0.500 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: CoolStep - homing_mode: CoolStep - use_enable: false - step_pin: gpio.33 - direction_pin: gpio.32:low - disable_pin: NO_PIN - - z: - steps_per_mm: 100.000 - max_rate_mm_per_min: 4000.000 - acceleration_mm_per_sec2: 50.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 0 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_all_pin: gpio.15:low - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 1.200 - hold_amps: 0.500 - microsteps: 16 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StallGuard - homing_mode: StallGuard - use_enable: false - step_pin: gpio.14 - direction_pin: gpio.12 - disable_pin: NO_PIN - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -start: - must_home: false - deactivate_parking: false - check_limits: false diff --git a/example_configs/midtbot_stepstick.yaml b/example_configs/midtbot_stepstick.yaml deleted file mode 100644 index 9addf8c24..000000000 --- a/example_configs/midtbot_stepstick.yaml +++ /dev/null @@ -1,86 +0,0 @@ -name: "midtbot stepstick" -board: "midtbot" - -kinematics: - midtbot: - -stepping: - engine: RMT - idle_ms: 250 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: gpio.13:high - - x: - steps_per_mm: 100 - max_rate_mm_per_min: 8000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 1000 - homing: - cycle: 3 - mpos_mm: 5 - feed_mm_per_min: 500.000 - seek_mm_per_min: 2000.000 - positive_direction: false - - motor0: - limit_all_pin: gpio.2:low:pu - pulloff_mm: 1.000 - stepstick: - direction_pin: gpio.26:high - step_pin: gpio.12 - motor1: - null_motor: - - y: - steps_per_mm: 100 - max_rate_mm_per_min: 8000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 1000 - homing: - cycle: 2 - mpos_mm: 100 - feed_mm_per_min: 500.000 - seek_mm_per_min: 2000.000 - positive_direction: true - - motor0: - limit_all_pin: gpio.4:low:pu - pulloff_mm: 1.000 - stepstick: - direction_pin: gpio.25:low - step_pin: gpio.14 - motor1: - null_motor: - - z: - steps_per_mm: 100 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 5 - homing: - cycle: 1 - mpos_mm: 0 - positive_direction: true - - motor0: - rc_servo: - pwm_hz: 50 - output_pin: gpio.27 - min_pulse_us: 1000 - max_pulse_us: 2000 - - motor1: - null_motor: - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN diff --git a/example_configs/test_drive_SD.yaml b/example_configs/test_drive_SD.yaml deleted file mode 100644 index f08eb4b26..000000000 --- a/example_configs/test_drive_SD.yaml +++ /dev/null @@ -1,55 +0,0 @@ -board: None -name: Default (Test Drive) -stepping: - engine: RMT - idle_ms: 255 - pulse_us: 4 - dir_delay_us: 0 - disable_delay_us: 0 - -axes: - shared_stepper_disable_pin: NO_PIN - x: - steps_per_mm: 320.000 - max_rate_mm_per_min: 1000.000 - acceleration_mm_per_sec2: 25.000 - max_travel_mm: 200.000 - soft_limits: false - - y: - steps_per_mm: 320.000 - max_rate_mm_per_min: 1000.000 - acceleration_mm_per_sec2: 25.000 - max_travel_mm: 200.000 - soft_limits: false - - z: - steps_per_mm: 320.000 - max_rate_mm_per_min: 1000.000 - acceleration_mm_per_sec2: 25.000 - max_travel_mm: 200.000 - soft_limits: false - -spi: - miso_pin: NO_PIN - mosi_pin: NO_PIN - sck_pin: NO_PIN - - -probe: - pin: NO_PIN - check_mode_start: true - -macros: - startup_line0: - startup_line1: - macro0: - macro1: - macro2: - macro3: - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -NoSpindle: diff --git a/example_configs/tmc2209_10V.yaml b/example_configs/tmc2209_10V.yaml deleted file mode 100644 index 19bf960e0..000000000 --- a/example_configs/tmc2209_10V.yaml +++ /dev/null @@ -1,170 +0,0 @@ -name: "ESP32 Dev Controller V4" -board: "ESP32 Dev Controller V4" -meta: "update for 3.6.8" - -stepping: - engine: RMT - idle_ms: 250 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -axes: - shared_stepper_disable_pin: gpio.25:high - - x: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - homing: - cycle: 1 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_pos_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.500 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.26 - direction_pin: gpio.27 - disable_pin: NO_PIN - - motor1: - null_motor: - - y: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.34 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.33 - direction_pin: gpio.32 - microsteps: 16 - uart_num: 1 - addr: 1 - - motor1: - null_motor: - - z: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.39 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.2 - direction_pin: gpio.14 - uart_num: 1 - addr: 2 - - motor1: - null_motor: - - - a: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.36 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.16 - direction_pin: gpio.15 - uart_num: 1 - addr: 3 - - motor1: - null_motor: - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -probe: - pin: NO_PIN - -10V: - output_pin: gpio.4 - forward_pin: gpio.13 - reverse_pin: gpio.17 - spinup_ms: 0 - spindown_ms: 0 - tool_num: 0 - speed_map: 0=0% 1000=0% 24000=100% diff --git a/example_configs/tmc2209_BESC.yaml b/example_configs/tmc2209_BESC.yaml deleted file mode 100644 index a638d4246..000000000 --- a/example_configs/tmc2209_BESC.yaml +++ /dev/null @@ -1,175 +0,0 @@ -name: "ESP32 Dev Controller V4" -board: "ESP32 Dev Controller V4" -meta: "update for 3.6.8" - -stepping: - engine: RMT - idle_ms: 250 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -axes: - shared_stepper_disable_pin: gpio.25:high - - x: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - homing: - cycle: 1 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_pos_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.500 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.26 - direction_pin: gpio.27 - disable_pin: NO_PIN - - motor1: - null_motor: - - y: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.34 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.33 - direction_pin: gpio.32 - microsteps: 16 - uart_num: 1 - addr: 1 - - motor1: - null_motor: - - z: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.39 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.2 - direction_pin: gpio.14 - uart_num: 1 - addr: 2 - - motor1: - null_motor: - - - a: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.36 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.16 - direction_pin: gpio.15 - uart_num: 1 - addr: 3 - - motor1: - null_motor: - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -probe: - pin: NO_PIN - -besc: - pwm_hz: 50 - output_pin: gpio.4 - enable_pin: NO_PIN - direction_pin: NO_PIN - disable_with_s0: false - s0_with_disable: true - spinup_ms: 0 - spindown_ms: 0 - tool_num: 100 - speed_map: 0=0.000% 0=20.000% 4000=20.000% 20000=100.000% - min_pulse_us: 900 - max_pulse_us: 2200 diff --git a/example_configs/tmc2209_huanyang.yml b/example_configs/tmc2209_huanyang.yml deleted file mode 100644 index 8ba2e126d..000000000 --- a/example_configs/tmc2209_huanyang.yml +++ /dev/null @@ -1,176 +0,0 @@ -name: "TMC2209 XYZA PWM Spindle" -board: "TMC2209 4x" -meta: "update for 3.6.8" - -stepping: - engine: RMT - idle_ms: 250 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -homing_init_lock: true - -uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -axes: - shared_stepper_disable_pin: gpio.25:high - - x: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - homing: - cycle: 1 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_pos_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart: - txd_pin: gpio.22 - rxd_pin: gpio.21 - baud: 115200 - mode: 8N1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.500 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.26 - direction_pin: gpio.27 - disable_pin: NO_PIN - - motor1: - null_motor: - - y: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.34 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.33 - direction_pin: gpio.32 - addr: 1 - - motor1: - null_motor: - - z: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.39 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.2 - direction_pin: gpio.14 - addr: 2 - - motor1: - null_motor: - - - a: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.36 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.16 - direction_pin: gpio.15 - addr: 3 - - motor1: - null_motor: - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -probe: - pin: NO_PIN - -uart1: - txd_pin: gpio.4 - rxd_pin: gpio.13 - rts_pin: gpio.17 - baud: 9600 - mode: 8N1 - -Huanyang: - uart_num: 1 - modbus_id: 1 - tool_num: 0 - speed_map: 0=0% 1000=0% 24000=100% diff --git a/example_configs/tmc2209_laser.yaml b/example_configs/tmc2209_laser.yaml deleted file mode 100644 index f72dc9127..000000000 --- a/example_configs/tmc2209_laser.yaml +++ /dev/null @@ -1,242 +0,0 @@ -name: "TMC2209 XYYZ Laser" -board: "TMC2209 4x DK" -meta: "update for 3.6.8" - -stepping: - engine: RMT - idle_ms: 255 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - -uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -axes: - shared_stepper_disable_pin: gpio.25:high - - x: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 1 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.35 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 1.200 - hold_amps: 0.500 - microsteps: 8 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.26 - direction_pin: gpio.27 - disable_pin: NO_PIN - - motor1: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - null_motor: - - y: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.34 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 1 - r_sense_ohms: 0.110 - run_amps: 1.200 - hold_amps: 0.500 - microsteps: 8 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.33 - direction_pin: gpio.32 - disable_pin: NO_PIN - - motor1: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - null_motor: - - z: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.39 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 2 - r_sense_ohms: 0.110 - run_amps: 1.200 - hold_amps: 0.500 - microsteps: 8 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.2 - direction_pin: gpio.14 - disable_pin: NO_PIN - - motor1: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - null_motor: - - a: - steps_per_mm: 800.000 - max_rate_mm_per_min: 5000.000 - acceleration_mm_per_sec2: 100.000 - max_travel_mm: 300.000 - soft_limits: false - homing: - cycle: 2 - positive_direction: false - mpos_mm: 150.000 - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - seek_scaler: 1.100 - feed_scaler: 1.100 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.36 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 3 - r_sense_ohms: 0.110 - run_amps: 1.200 - hold_amps: 0.500 - microsteps: 8 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.16 - direction_pin: gpio.15 - disable_pin: NO_PIN - - motor1: - limit_neg_pin: NO_PIN - limit_pos_pin: NO_PIN - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.000 - null_motor: - - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - card_detect_pin: NO_PIN - cs_pin: gpio.5 - -probe: - pin: NO_PIN - -start: - must_home: false - -Laser: - pwm_hz: 5000 - output_pin: gpio.4 - enable_pin: gpio.12 - disable_with_s0: false - s0_with_disable: true - tool_num: 100 - speed_map: 0=0.000% 255=100.000% diff --git a/example_configs/tmc2209_relay.yaml b/example_configs/tmc2209_relay.yaml deleted file mode 100644 index 8c1f06f8b..000000000 --- a/example_configs/tmc2209_relay.yaml +++ /dev/null @@ -1,163 +0,0 @@ -name: "TMC2209 XYYZ Laser" -board: "TMC2209 4x DK" -meta: "update for 3.6.8" - -stepping: - engine: RMT - idle_ms: 250 - dir_delay_us: 1 - pulse_us: 2 - disable_delay_us: 0 - - uart1: - txd_pin: gpio.22 - rxd_pin: gpio.21 - rts_pin: NO_PIN - cts_pin: NO_PIN - baud: 115200 - mode: 8N1 - -axes: - shared_stepper_disable_pin: gpio.25:high - - x: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - homing: - cycle: 1 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_pos_pin: gpio.35 - hard_limits: false - pulloff_mm: 1.000 - tmc_2209: - uart_num: 1 - addr: 0 - r_sense_ohms: 0.110 - run_amps: 0.500 - hold_amps: 0.500 - microsteps: 32 - stallguard: 0 - stallguard_debug: false - toff_disable: 0 - toff_stealthchop: 5 - toff_coolstep: 3 - run_mode: StealthChop - homing_mode: StealthChop - use_enable: false - step_pin: gpio.26 - direction_pin: gpio.27 - disable_pin: NO_PIN - - motor1: - null_motor: - - y: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.34 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.33 - direction_pin: gpio.32 - microsteps: 16 - uart_num: 1 - addr: 1 - - motor1: - null_motor: - - z: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.39 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.2 - direction_pin: gpio.14 - uart_num: 1 - addr: 2 - - motor1: - null_motor: - - - a: - steps_per_mm: 800 - max_rate_mm_per_min: 5000 - acceleration_mm_per_sec2: 100 - max_travel_mm: 300 - - homing: - cycle: 2 - mpos_mm: 150 - positive_direction: false - feed_mm_per_min: 100.000 - seek_mm_per_min: 200.000 - settle_ms: 500 - - motor0: - limit_neg_pin: NO_PIN - limit_pos_pin: gpio.36 - limit_all_pin: NO_PIN - hard_limits: false - pulloff_mm: 1.00 - tmc_2209: - step_pin: gpio.16 - direction_pin: gpio.15 - addr: 3 - - motor1: - null_motor: - -spi: - miso_pin: gpio.19 - mosi_pin: gpio.23 - sck_pin: gpio.18 - -sdcard: - cs_pin: gpio.5 - card_detect_pin: NO_PIN - -probe: - pin: NO_PIN - -Relay: - output_pin: gpio.4 From 30730adbf9949d1ed09d1c249f98baf8249ddcac Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 22 Dec 2023 10:12:15 -1000 Subject: [PATCH 201/212] Removed debug messages for file hashing as no longer necessary --- FluidNC/src/HashFS.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/FluidNC/src/HashFS.cpp b/FluidNC/src/HashFS.cpp index 9c780c412..1786b793f 100644 --- a/FluidNC/src/HashFS.cpp +++ b/FluidNC/src/HashFS.cpp @@ -45,7 +45,6 @@ static Error hashFile(const std::filesystem::path& ipath, std::string& str) { / void HashFS::delete_file(const std::filesystem::path& path) { localFsHashes.erase(path.filename()); - log_debug("Deleting hash for " << path.filename()); } bool HashFS::file_is_hashed(const std::filesystem::path& path) { @@ -70,7 +69,6 @@ void HashFS::rehash_file(const std::filesystem::path& path) { delete_file(path); } else { localFsHashes[path.filename()] = hash; - log_debug(path.filename() << " hash " << hash); } } } From 14e818e3604f58cfa36396935e679823b6745984 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 22 Dec 2023 11:31:29 -1000 Subject: [PATCH 202/212] Report filesystem changes so UIs can auto-refresh file lists --- FluidNC/src/HashFS.cpp | 22 ++++++++++++++++++---- FluidNC/src/HashFS.h | 11 +++++++---- FluidNC/src/WebUI/WebServer.cpp | 5 +++-- FluidNC/src/WebUI/WebSettings.cpp | 9 +++++++++ 4 files changed, 37 insertions(+), 10 deletions(-) diff --git a/FluidNC/src/HashFS.cpp b/FluidNC/src/HashFS.cpp index 1786b793f..1c2b8e729 100644 --- a/FluidNC/src/HashFS.cpp +++ b/FluidNC/src/HashFS.cpp @@ -43,8 +43,15 @@ static Error hashFile(const std::filesystem::path& ipath, std::string& str) { / return Error::Ok; } -void HashFS::delete_file(const std::filesystem::path& path) { +void HashFS::report_change() { + log_msg("Files changed"); +} + +void HashFS::delete_file(const std::filesystem::path& path, bool report) { localFsHashes.erase(path.filename()); + if (report) { + report_change(); + } } bool HashFS::file_is_hashed(const std::filesystem::path& path) { @@ -62,15 +69,22 @@ bool HashFS::file_is_hashed(const std::filesystem::path& path) { return fsname == "littlefs" || fsname == "spiffs" || fsname == "localfs"; } -void HashFS::rehash_file(const std::filesystem::path& path) { +void HashFS::rehash_file(const std::filesystem::path& path, bool report) { if (file_is_hashed(path)) { std::string hash; if (hashFile(path, hash) != Error::Ok) { - delete_file(path); + delete_file(path, false); } else { localFsHashes[path.filename()] = hash; } } + if (report) { + report_change(); + } +} +void HashFS::rename_file(const std::filesystem::path& ipath, const std::filesystem::path& opath, bool report) { + delete_file(ipath, false); + rehash_file(opath, report); } void HashFS::hash_all() { @@ -89,7 +103,7 @@ void HashFS::hash_all() { } for (auto const& dir_entry : iter) { if (!dir_entry.is_directory()) { - rehash_file(dir_entry); + rehash_file(dir_entry, false); } } } diff --git a/FluidNC/src/HashFS.h b/FluidNC/src/HashFS.h index 0094279e8..24ff294f4 100644 --- a/FluidNC/src/HashFS.h +++ b/FluidNC/src/HashFS.h @@ -7,10 +7,13 @@ class HashFS { public: static std::map localFsHashes; - static bool file_is_hashed(const std::filesystem::path& path); - static void delete_file(const std::filesystem::path& path); - static void rehash_file(const std::filesystem::path& path); - static void hash_all(); + static bool file_is_hashed(const std::filesystem::path& path); + static void delete_file(const std::filesystem::path& path, bool report = true); + static void rehash_file(const std::filesystem::path& path, bool report = true); + static void rename_file(const std::filesystem::path& ipath, const std::filesystem::path& opath, bool report = true); + static void hash_all(); + static void report_change(); + static std::string hash(const std::filesystem::path& path); private: diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index e72e533e8..af0434c86 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -917,11 +917,9 @@ namespace WebUI { std::string action(_webserver->arg("action").c_str()); std::string filename = std::string(_webserver->arg("filename").c_str()); if (action == "delete") { - log_debug("Deleting " << fpath << " / " << filename); if (stdfs::remove(fpath / filename, ec)) { sstatus = filename + " deleted"; HashFS::delete_file(fpath / filename); - } else { sstatus = "Cannot delete "; sstatus += filename + " " + ec.message(); @@ -932,6 +930,7 @@ namespace WebUI { int count = stdfs::remove_all(dirpath, ec); if (count > 0) { sstatus = filename + " deleted"; + HashFS::report_change(); } else { log_debug("remove_all returned " << count); sstatus = "Cannot delete "; @@ -940,6 +939,7 @@ namespace WebUI { } else if (action == "createdir") { if (stdfs::create_directory(fpath / filename, ec)) { sstatus = filename + " created"; + HashFS::report_change(); } else { sstatus = "Cannot create "; sstatus += filename + " " + ec.message(); @@ -955,6 +955,7 @@ namespace WebUI { sstatus += filename + " " + ec.message(); } else { sstatus = filename + " renamed to " + newname; + HashFS::rename_file(fpath / filename, fpath / newname); } } } diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index a01a7094f..6c1132278 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -351,6 +351,11 @@ namespace WebUI { static Error deleteObject(const char* fs, char* name, Channel& out) { std::error_code ec; + if (!name || !*name || (strcmp(name, "/") == 0)) { + // Disallow deleting everything + log_error_to(out, "Will not delete everything"); + return Error::InvalidValue; + } FluidPath fpath { name, fs, ec }; if (ec) { log_to(out, "No SD"); @@ -435,6 +440,9 @@ namespace WebUI { } static Error renameObject(const char* fs, char* parameter, AuthenticationLevel auth_level, Channel& out) { + if (!parameter || *parameter == '\0') { + return Error::InvalidValue; + } auto opath = strchr(parameter, '>'); if (*opath == '\0') { return Error::InvalidValue; @@ -445,6 +453,7 @@ namespace WebUI { FluidPath inPath { ipath, fs }; FluidPath outPath { opath, fs }; std::filesystem::rename(inPath, outPath); + HashFS::rename_file(inPath, outPath, true); } catch (const Error err) { log_error_to(out, "Cannot rename " << ipath << " to " << opath); return Error::FsFailedRenameFile; From 2f5208b2dfa02c86188128f48132244a1bd76ecc Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 22 Dec 2023 11:33:11 -1000 Subject: [PATCH 203/212] WebUI auto-refresh after file change --- FluidNC/data/index.html.gz | Bin 116654 -> 116731 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index dca26bf73aaab9acffb4db6c6483efdf5eba69f6..f48937f2b4681deb9f37e96da319d246bef3453a 100644 GIT binary patch delta 113926 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

    &cZPY9d)_|oyd)QE9QW*{yMCOvoE8VfJe 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 Date: Thu, 8 Jun 2023 09:24:24 -1000 Subject: [PATCH 025/212] Replace ESP-IDF coredump routines to suppress error messages --- FluidNC/esp32/coredump.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 FluidNC/esp32/coredump.c diff --git a/FluidNC/esp32/coredump.c b/FluidNC/esp32/coredump.c new file mode 100644 index 000000000..ccfd44446 --- /dev/null +++ b/FluidNC/esp32/coredump.c @@ -0,0 +1,35 @@ +// Copyright 2022 Mitch Bradley +// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. +// +// Noop replacements for ESP-IDF coredump routines. +// This suppresses complaints about not being able to find a coredump partition. +// We don't want to waste space for such a partition, and the Arduino Framework +// enables coredumps. We override that by stubbing out these routines. + +#include +#include "esp_err.h" +#include "esp_private/panic_internal.h" +#include "esp_core_dump_summary_port.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void esp_core_dump_init(void) {} + +void esp_core_dump_flash_init(void) {} +void esp_core_dump_to_flash(void* info) {} + +esp_err_t esp_core_dump_image_check(void) { + return ESP_ERR_NOT_FOUND; +} +esp_err_t esp_core_dump_image_get(size_t* out_addr, size_t* out_size) { + return ESP_ERR_NOT_FOUND; +} +esp_err_t esp_core_dump_image_erase(void) { + return ESP_OK; +} + +#ifdef __cplusplus +} +#endif From 50f55884e02efc92e7d2347f8740e1a18afdac6d Mon Sep 17 00:00:00 2001 From: bdring Date: Thu, 8 Jun 2023 14:28:42 -0500 Subject: [PATCH 026/212] Remove dev note --- FluidNC/src/Probe.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/FluidNC/src/Probe.h b/FluidNC/src/Probe.h index f83d83a95..cfa32681d 100644 --- a/FluidNC/src/Probe.h +++ b/FluidNC/src/Probe.h @@ -32,8 +32,7 @@ class Probe : public Configuration::Configurable { Probe() = default; - bool exists() const { return _probePin.defined() || _toolsetter_Pin.defined(); } // TODO - + bool exists() const { return _probePin.defined() || _toolsetter_Pin.defined(); } // Probe pin initialization routine. void init(); From f573ad9a4568ad914df4dc31afc6c178c9974e01 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 9 Jun 2023 11:04:34 -1000 Subject: [PATCH 027/212] Deploy to bdring/fluidnc.github.io instead of MitchBradley/... --- .github/workflows/manual.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 182a4c14c..6e47bbabb 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -51,7 +51,7 @@ jobs: uses: JamesIves/github-pages-deploy-action@v4 with: folder: release/current - repository-name: MitchBradley/MitchBradley.github.io + repository-name: bdring/fluidnc.github.io ssh-key: ${{ secrets.GHP_DEPLOY_KEY }} target-folder: releases/${{ github.event.inputs.tag }} # - name: Upload mac bundle From b0e07d7d2b8ccac1bac04c6c557e4df303ce2def Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 10 Jun 2023 07:16:33 -1000 Subject: [PATCH 028/212] Test action --- .github/workflows/test.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 000000000..28440f653 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,10 @@ +name: Test + +on: + workflow_dispatch: + +jobs: + test: + steps: + - name: Show secret + - run: echo ${{ secrets.JUNK }} From e83fd2533f54cac143ab9b769177d0b30a69cecb Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 10 Jun 2023 09:09:17 -1000 Subject: [PATCH 029/212] Deploy to releases branch, not gh-pages --- .github/workflows/manual.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index 6e47bbabb..f980ed92f 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -50,6 +50,7 @@ jobs: - name: Deploy to GitHub Pages uses: JamesIves/github-pages-deploy-action@v4 with: + branch: releases folder: release/current repository-name: bdring/fluidnc.github.io ssh-key: ${{ secrets.GHP_DEPLOY_KEY }} From 82bf5bcfedfde57e06c6682d392ed9eb88c90412 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 10 Jun 2023 09:12:03 -1000 Subject: [PATCH 030/212] Deleted junk file --- .github/workflows/test.yml | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml deleted file mode 100644 index 28440f653..000000000 --- a/.github/workflows/test.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: Test - -on: - workflow_dispatch: - -jobs: - test: - steps: - - name: Show secret - - run: echo ${{ secrets.JUNK }} From db6f00fee996310a6d3a5ccac6093d101ac4320f Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 13 Jun 2023 09:11:00 -1000 Subject: [PATCH 031/212] Removed bufsize in build-release.py to suppress warnings --- build-release.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build-release.py b/build-release.py index 97dd45959..e1095603d 100644 --- a/build-release.py +++ b/build-release.py @@ -24,7 +24,7 @@ def buildEnv(pioEnv, verbose=True, extraArgs=None): if verbose: app = subprocess.Popen(cmd, env=environ) else: - app = subprocess.Popen(cmd, env=environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1) + app = subprocess.Popen(cmd, env=environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in app.stdout: line = line.decode('utf8') if "Took" in line or 'Uploading' in line or ("error" in line.lower() and "Compiling" not in line): @@ -41,7 +41,7 @@ def buildFs(pioEnv, verbose=verbose, extraArgs=None): if verbose: app = subprocess.Popen(cmd, env=environ) else: - app = subprocess.Popen(cmd, env=environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, bufsize=1) + app = subprocess.Popen(cmd, env=environ, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for line in app.stdout: line = line.decode('utf8') if "Took" in line or 'Uploading' in line or ("error" in line.lower() and "Compiling" not in line): From 55e4c961062679b4f69f9417b0be3ed698f3d668 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 13 Jun 2023 09:12:03 -1000 Subject: [PATCH 032/212] Fix #919 - cannot xmodem upload in alarm state --- FluidNC/src/ProcessSettings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 80793d7fb..08b27a2dd 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -764,7 +764,7 @@ void make_user_commands() { new UserCommand("CI", "Channel/Info", showChannelInfo, anyState); new UserCommand("XR", "Xmodem/Receive", xmodem_receive, notIdleOrAlarm); - new UserCommand("XS", "Xmodem/Send", xmodem_send, notIdleOrJog); + new UserCommand("XS", "Xmodem/Send", xmodem_send, notIdleOrAlarm); new UserCommand("CD", "Config/Dump", dump_config, anyState); new UserCommand("", "Help", show_help, anyState); new UserCommand("T", "State", showState, anyState); From 214a5e67afeed273f07d829a74a1f68f508e606b Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Tue, 13 Jun 2023 10:43:05 -1000 Subject: [PATCH 033/212] Release artifacts to bdring/fluidnc-releases --- .github/workflows/manual.yml | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/.github/workflows/manual.yml b/.github/workflows/manual.yml index f980ed92f..2630c03b6 100644 --- a/.github/workflows/manual.yml +++ b/.github/workflows/manual.yml @@ -47,14 +47,18 @@ jobs: release/*.zip release/*.elf draft: True - - name: Deploy to GitHub Pages - uses: JamesIves/github-pages-deploy-action@v4 + - name: Deploy to fluidnc-releases + uses: datalbry/copy_folder_to_another_repo_action@1.0.0 + env: + API_TOKEN_GITHUB: ${{ secrets.RELEASE_COPY_TOKEN }} with: - branch: releases - folder: release/current - repository-name: bdring/fluidnc.github.io - ssh-key: ${{ secrets.GHP_DEPLOY_KEY }} - target-folder: releases/${{ github.event.inputs.tag }} + source_folder: 'release/current' + destination_repo: 'bdring/fluidnc-releases' + destination_branch: 'main' + destination_folder: releases/${{ github.event.inputs.tag }} + user_email: bdring@buildlog.net + user_name: 'Bart Dring' + commit_msg: Release ${{ github.event.inputs.tag }} # - name: Upload mac bundle # uses: actions/upload-artifact@v2 # with: From 393092984b5f10d3c893df659e3027212ec20ecd Mon Sep 17 00:00:00 2001 From: alex <1678423+alex-codelab@users.noreply.github.com> Date: Thu, 15 Jun 2023 12:19:34 +0200 Subject: [PATCH 034/212] revert change. #923 --- fluidterm/fluidterm.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/fluidterm/fluidterm.py b/fluidterm/fluidterm.py index 093c571f6..e0613db7c 100644 --- a/fluidterm/fluidterm.py +++ b/fluidterm/fluidterm.py @@ -328,11 +328,13 @@ def rx(self, text): class NoControls(NoTerminal): """Remove all control codes, incl. CR+LF""" - REPLACEMENT_MAP = {x: 0x2400 + x for x in range(32)} | { - 0x20: 0x2423, # visual space - 0x7F: 0x2421, # DEL - 0x9B: 0x2425, # CSI - } + REPLACEMENT_MAP = dict((x, 0x2400 + x) for x in range(32)) + REPLACEMENT_MAP.update( + { + 0x20: 0x2423, # visual space + 0x7F: 0x2421, # DEL + 0x9B: 0x2425, # CSI + }) class Printable(Transform): From 98de9720a42ecd2ef76891378f216efb8e8db686 Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 16 Jun 2023 11:33:15 -0500 Subject: [PATCH 035/212] Update fysetc_corexy.yaml --- example_configs/fysetc_corexy.yaml | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/example_configs/fysetc_corexy.yaml b/example_configs/fysetc_corexy.yaml index eada3667d..b9c4e72ee 100644 --- a/example_configs/fysetc_corexy.yaml +++ b/example_configs/fysetc_corexy.yaml @@ -8,6 +8,14 @@ stepping: pulse_us: 2 disable_delay_us: 0 +uart1: + txd_pin: gpio.22 + rxd_pin: gpio.21 + rts_pin: NO_PIN + cts_pin: NO_PIN + baud: 115200 + mode: 8N1 + kinematics: corexy: @@ -35,11 +43,7 @@ axes: hard_limits: true pulloff_mm: 1.000 tmc_2209: - uart: - txd_pin: gpio.22 - rxd_pin: gpio.21 - baud: 115200 - mode: 8N1 + uart_num: 1 addr: 1 r_sense_ohms: 0.110 run_amps: 1.500 @@ -78,6 +82,7 @@ axes: hard_limits: false pulloff_mm: 1.000 tmc_2209: + uart_num: 1 addr: 3 r_sense_ohms: 0.110 run_amps: 1.5200 @@ -116,6 +121,7 @@ axes: hard_limits: false pulloff_mm: 1.000 tmc_2209: + uart_num: 1 addr: 0 r_sense_ohms: 0.110 run_amps: 1.200 From de5171cba4969d15f54418a91d2f72a8dcc5f644 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Sat, 17 Jun 2023 10:30:57 -1000 Subject: [PATCH 036/212] Allow 8-bit characters in SSIDs --- FluidNC/src/WebUI/WifiConfig.cpp | 34 +++----------------------------- FluidNC/src/WebUI/WifiConfig.h | 1 - 2 files changed, 3 insertions(+), 32 deletions(-) diff --git a/FluidNC/src/WebUI/WifiConfig.cpp b/FluidNC/src/WebUI/WifiConfig.cpp index dd589533e..e4992bbf1 100644 --- a/FluidNC/src/WebUI/WifiConfig.cpp +++ b/FluidNC/src/WebUI/WifiConfig.cpp @@ -337,8 +337,7 @@ namespace WebUI { MIN_PASSWORD_LENGTH, 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, (bool (*)(char*))WiFiConfig::isSSIDValid); + 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_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); @@ -356,15 +355,8 @@ namespace WebUI { MIN_PASSWORD_LENGTH, MAX_PASSWORD_LENGTH, (bool (*)(char*))WiFiConfig::isPasswordValid); - wifi_sta_ssid = new StringSetting("Station SSID", - WEBSET, - WA, - "ESP100", - "Sta/SSID", - DEFAULT_STA_SSID, - MIN_SSID_LENGTH, - MAX_SSID_LENGTH, - (bool (*)(char*))WiFiConfig::isSSIDValid); + wifi_sta_ssid = + new StringSetting("Station SSID", WEBSET, WA, "ESP100", "Sta/SSID", DEFAULT_STA_SSID, MIN_SSID_LENGTH, MAX_SSID_LENGTH, NULL); wifi_mode = new EnumSetting("WiFi mode", WEBSET, WA, "ESP116", "WiFi/Mode", WiFiFallback, &wifiModeOptions, NULL); @@ -469,26 +461,6 @@ namespace WebUI { return true; } - /** - * Check if SSID string is valid - */ - - bool WiFiConfig::isSSIDValid(const char* ssid) { - //limited size - //char c; - // length is checked automatically by string setting - //only printable - if (!ssid) { - return true; - } - for (int i = 0; i < strlen(ssid); i++) { - if (!isPrintable(ssid[i])) { - return false; - } - } - return true; - } - /** * Check if password string is valid */ diff --git a/FluidNC/src/WebUI/WifiConfig.h b/FluidNC/src/WebUI/WifiConfig.h index 3fe426eea..ad818e294 100644 --- a/FluidNC/src/WebUI/WifiConfig.h +++ b/FluidNC/src/WebUI/WifiConfig.h @@ -83,7 +83,6 @@ namespace WebUI { static bool isValidIP(const char* string); static bool isPasswordValid(const char* password); - static bool isSSIDValid(const char* ssid); static bool isHostnameValid(const char* hostname); static std::string Hostname() { return _hostname; } From 98b0950507bebd25200a1ff0f9b9d392c65cddf6 Mon Sep 17 00:00:00 2001 From: bdring Date: Sun, 18 Jun 2023 15:00:52 -0500 Subject: [PATCH 037/212] Basic test code Needs refactoring --- FluidNC/src/Motors/TMC2209Driver.cpp | 23 +++++++++++++++++++++++ FluidNC/src/Motors/TMC2209Driver.h | 3 +++ FluidNC/src/Motors/TrinamicUartDriver.h | 2 +- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/FluidNC/src/Motors/TMC2209Driver.cpp b/FluidNC/src/Motors/TMC2209Driver.cpp index 6ca5ee117..365e2bf12 100644 --- a/FluidNC/src/Motors/TMC2209Driver.cpp +++ b/FluidNC/src/Motors/TMC2209Driver.cpp @@ -23,12 +23,18 @@ namespace MotorDrivers { tmc2209 = new TMC2209Stepper(_uart, _r_sense, _addr); + _cs_pin.setAttr(Pin::Attr::Output); + + log_info(" UART CS:" << _cs_pin.name()); + registration(); } void TMC2209Driver::config_motor() { + _cs_pin.synchronousWrite(true); tmc2209->begin(); TrinamicBase::config_motor(); + _cs_pin.synchronousWrite(false); } void TMC2209Driver::set_registers(bool isHoming) { @@ -42,6 +48,9 @@ namespace MotorDrivers { // but the TMCStepper library expresses run current as (uint16_t) mA // and hold current as (float) fraction of run current. uint16_t run_i = (uint16_t)(_run_current * 1000.0); + + _cs_pin.synchronousWrite(true); + tmc2209->I_scale_analog(false); // do not scale via pot tmc2209->rms_current(run_i, TrinamicBase::holdPercent()); @@ -82,6 +91,8 @@ namespace MotorDrivers { log_debug("GCONF: 0x" << to_hex(tmc2209->GCONF())); log_debug("PWMCONF: 0x" << to_hex(tmc2209->PWMCONF())); log_debug("IHOLD_IRUN: 0x" << to_hex(tmc2209->IHOLD_IRUN())); + + _cs_pin.synchronousWrite(false); } void TMC2209Driver::debug_message() { @@ -89,9 +100,12 @@ namespace MotorDrivers { return; } + _cs_pin.synchronousWrite(true); + uint32_t tstep = tmc2209->TSTEP(); if (tstep == 0xFFFFF || tstep < 1) { // if axis is not moving return + _cs_pin.synchronousWrite(false); return; } float feedrate = Stepper::get_realtime_rate(); //* settings.microsteps[axis_index] / 60.0 ; // convert mm/min to Hz @@ -99,28 +113,37 @@ namespace MotorDrivers { if (tmc2209) { log_info(axisName() << " SG_Val: " << tmc2209->SG_RESULT() << " Rate: " << feedrate << " mm/min SG_Setting:" << _stallguard); } + + _cs_pin.synchronousWrite(false); } void TMC2209Driver::set_disable(bool disable) { + _cs_pin.synchronousWrite(true); if (TrinamicUartDriver::startDisable(disable)) { if (_use_enable) { tmc2209->toff(TrinamicUartDriver::toffValue()); } } + _cs_pin.synchronousWrite(false); } bool TMC2209Driver::test() { + _cs_pin.synchronousWrite(true); if (!checkVersion(0x21, tmc2209->version())) { + _cs_pin.synchronousWrite(false); return false; } + uint8_t ifcnt_before = tmc2209->IFCNT(); tmc2209->GSTAT(0); // clear GSTAT to increase ifcnt uint8_t ifcnt_after = tmc2209->IFCNT(); bool okay = ((ifcnt_before + 1) & 0xff) == ifcnt_after; if (!okay) { TrinamicBase::reportCommsFailure(); + _cs_pin.synchronousWrite(false); return false; } + _cs_pin.synchronousWrite(false); return true; } diff --git a/FluidNC/src/Motors/TMC2209Driver.h b/FluidNC/src/Motors/TMC2209Driver.h index c6c38e4a4..0a7277c97 100644 --- a/FluidNC/src/Motors/TMC2209Driver.h +++ b/FluidNC/src/Motors/TMC2209Driver.h @@ -30,6 +30,7 @@ namespace MotorDrivers { handler.item("stallguard", _stallguard, 0, 255); handler.item("stallguard_debug", _stallguardDebugMode); handler.item("toff_coolstep", _toff_coolstep, 2, 15); + handler.item("cs_pin", _cs_pin); } // Name of the configurable. Must match the name registered in the cpp file. @@ -38,6 +39,8 @@ namespace MotorDrivers { private: TMC2209Stepper* tmc2209 = nullptr; + Pin _cs_pin; + bool test(); void set_registers(bool isHoming); }; diff --git a/FluidNC/src/Motors/TrinamicUartDriver.h b/FluidNC/src/Motors/TrinamicUartDriver.h index 081755763..d5b69d5ea 100644 --- a/FluidNC/src/Motors/TrinamicUartDriver.h +++ b/FluidNC/src/Motors/TrinamicUartDriver.h @@ -43,7 +43,7 @@ namespace MotorDrivers { protected: Uart* _uart = nullptr; - + int _uart_num = -1; static bool _uart_started; From 673640a349974a63507be0bda593058697816b5f Mon Sep 17 00:00:00 2001 From: bdring Date: Fri, 23 Jun 2023 08:57:55 -0500 Subject: [PATCH 038/212] Allow jog out of soft limit area. The resolution may round a jog position to a fraction of a step outside of the valid range. --- FluidNC/src/Limits.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/FluidNC/src/Limits.cpp b/FluidNC/src/Limits.cpp index b6b1b05b8..526429bc4 100644 --- a/FluidNC/src/Limits.cpp +++ b/FluidNC/src/Limits.cpp @@ -12,7 +12,7 @@ #include #include -#include // fence +#include // fence xQueueHandle limit_sw_queue; // used by limit switch debouncing @@ -67,7 +67,9 @@ void constrainToSoftLimits(float* cartesian) { // If the axis is moving from the current location and soft limits are on. if (axisSetting->_softLimits && cartesian[axis] != current_position[axis]) { // When outside the axis range, only small nudges to clear switches are allowed - if (current_position[axis] < limitsMinPosition(axis) || current_position[axis] > limitsMaxPosition(axis)) { + bool move_positive = cartesian[axis] > current_position[axis]; + if ((!move_positive && (current_position[axis] < limitsMinPosition(axis))) || + (move_positive && (current_position[axis] > limitsMaxPosition(axis)))) { // only allow a nudge if a switch is active if (bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 0)) && bitnum_is_false(lim_pin_state, Machine::Axes::motor_bit(axis, 1))) { @@ -83,7 +85,7 @@ void constrainToSoftLimits(float* cartesian) { // if jog is positive and only the positive switch is active, then kill the move // if jog is negative and only the negative switch is active, then kill the move - if (posLimited != negLimited) { // XOR, because ambiguous (both) is OK + if (posLimited != negLimited) { // XOR, because ambiguous (both) is OK if ((negLimited && (jog_dist < 0)) || (posLimited && (jog_dist > 0))) { cartesian[axis] = current_position[axis]; // cancel the move on this axis log_debug("Jog into active switch blocked on " << Machine::Axes::_names[axis]); From ffb4c1586f04847576cfe3c69b318d74ca5717e6 Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Thu, 22 Jun 2023 19:28:19 -0700 Subject: [PATCH 039/212] Use std::string_view over start/end char ptr --- FluidNC/src/Configuration/Parser.cpp | 32 +++++++------ FluidNC/src/Configuration/Parser.h | 3 +- FluidNC/src/Configuration/Tokenizer.cpp | 59 +++++++++++------------ FluidNC/src/Configuration/Tokenizer.h | 63 ++++++++++--------------- FluidNC/src/Machine/MachineConfig.cpp | 2 +- FluidNC/src/MyIOStream.h | 10 +++- FluidNC/src/StringRange.h | 2 +- 7 files changed, 86 insertions(+), 85 deletions(-) diff --git a/FluidNC/src/Configuration/Parser.cpp b/FluidNC/src/Configuration/Parser.cpp index 074fd4245..601a40291 100644 --- a/FluidNC/src/Configuration/Parser.cpp +++ b/FluidNC/src/Configuration/Parser.cpp @@ -1,4 +1,5 @@ // Copyright (c) 2021 - Stefan de Bruijn +// Copyright (c) 2023 - Dylan Knutson // Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. #include "Parser.h" @@ -10,13 +11,14 @@ #include #include // round +#include namespace Configuration { - Parser::Parser(const char* start, const char* end) : Tokenizer(start, end) {} + Parser::Parser(std::string_view yaml_string) : Tokenizer(yaml_string) {} void Parser::parseError(const char* description) const { // Attempt to use the correct position in the parser: - if (token_.keyEnd_) { + if (!token_.key_.empty()) { throw ParseException(line_, description); } else { Tokenizer::ParseError(description); @@ -24,14 +26,14 @@ namespace Configuration { } bool Parser::is(const char* expected) { - if (token_.state != TokenState::Matching || token_.keyStart_ == nullptr) { + if (token_.state != TokenState::Matching || token_.key_.empty()) { return false; } auto len = strlen(expected); - if (len != (token_.keyEnd_ - token_.keyStart_)) { + if (len != token_.key_.size()) { return false; } - bool result = !strncasecmp(expected, token_.keyStart_, len); + bool result = !strncasecmp(expected, token_.key_.cbegin(), len); if (result) { token_.state = TokenState::Matched; } @@ -39,15 +41,15 @@ namespace Configuration { } // String values might have meaningful leading and trailing spaces so we avoid trimming the string (false) - StringRange Parser::stringValue() const { return StringRange(token_.sValueStart_, token_.sValueEnd_, false); } + StringRange Parser::stringValue() const { return StringRange(token_.value_.cbegin(), token_.value_.cend(), false); } bool Parser::boolValue() const { - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); return str.equals("true"); } int Parser::intValue() const { - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); int32_t value; if (str.isInteger(value)) { return value; @@ -61,7 +63,7 @@ namespace Configuration { } uint32_t Parser::uintValue() const { - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); uint32_t value; if (str.isUnsignedInteger(value)) { return value; @@ -75,7 +77,7 @@ namespace Configuration { } float Parser::floatValue() const { - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); float value; if (!str.isFloat(value)) { parseError("Expected a float value like 123.456"); @@ -84,7 +86,7 @@ namespace Configuration { } std::vector Parser::speedEntryValue() const { - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); std::vector value; StringRange entryStr; @@ -110,13 +112,13 @@ namespace Configuration { } Pin Parser::pinValue() const { - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); return Pin::create(str); } IPAddress Parser::ipValue() const { IPAddress ip; - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); if (!ip.fromString(str.str().c_str())) { parseError("Expected an IP address like 192.168.0.100"); } @@ -124,7 +126,7 @@ namespace Configuration { } int Parser::enumValue(EnumItem* e) const { - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); for (; e->name; ++e) { if (str.equals(e->name)) { break; @@ -134,7 +136,7 @@ namespace Configuration { } void Parser::uartMode(UartData& wordLength, UartParity& parity, UartStop& stopBits) const { - auto str = StringRange(token_.sValueStart_, token_.sValueEnd_); + auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); if (str.length() == 5 || str.length() == 3) { int32_t wordLenInt; if (!str.substr(0, 1).isInteger(wordLenInt)) { diff --git a/FluidNC/src/Configuration/Parser.h b/FluidNC/src/Configuration/Parser.h index 4c9956830..be84f0139 100644 --- a/FluidNC/src/Configuration/Parser.h +++ b/FluidNC/src/Configuration/Parser.h @@ -1,4 +1,5 @@ // Copyright (c) 2021 - Stefan de Bruijn +// Copyright (c) 2023 - Dylan Knutson // Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. #pragma once @@ -19,7 +20,7 @@ namespace Configuration { void parseError(const char* description) const; public: - Parser(const char* start, const char* end); + Parser(std::string_view yaml_string); bool is(const char* expected); diff --git a/FluidNC/src/Configuration/Tokenizer.cpp b/FluidNC/src/Configuration/Tokenizer.cpp index eb1d4a150..918519d6e 100644 --- a/FluidNC/src/Configuration/Tokenizer.cpp +++ b/FluidNC/src/Configuration/Tokenizer.cpp @@ -1,4 +1,5 @@ // Copyright (c) 2021 - Stefan de Bruijn +// Copyright (c) 2023 - Dylan Knutson // Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. #include "Tokenizer.h" @@ -7,6 +8,14 @@ #include +static constexpr bool verbose_debugging = false; +#define log_parser_verbose(x) \ + do { \ + if (verbose_debugging) { \ + log_debug(x); \ + } \ + } while (0) + namespace Configuration { void Tokenizer::skipToEol() { @@ -16,17 +25,17 @@ namespace Configuration { Inc(); } - Tokenizer::Tokenizer(const char* start, const char* end) : current_(start), end_(end), start_(start), line_(0), token_() {} + Tokenizer::Tokenizer(std::string_view yaml_string) : current_(yaml_string), line_(0), token_() {} void Tokenizer::ParseError(const char* description) const { throw ParseException(line_, description); } void Tokenizer::Tokenize() { + const char* tok_start = nullptr; + // Release a held token if (token_.state == TokenState::Held) { token_.state = TokenState::Matching; -#ifdef DEBUG_VERBOSE_YAML_TOKENIZER - log_debug("Releasing " << key().str()); -#endif + log_parser_verbose("Releasing " << key().str()); return; } @@ -47,9 +56,9 @@ namespace Configuration { token_.indent_ = indent; if (Eof()) { - token_.state = TokenState::Eof; - token_.indent_ = -1; - token_.keyStart_ = token_.keyEnd_ = current_; + token_.state = TokenState::Eof; + token_.indent_ = -1; + token_.key_ = {}; return; } switch (Current()) { @@ -80,12 +89,12 @@ namespace Configuration { ParseError("Invalid character"); } - token_.keyStart_ = current_; + tok_start = current_.cbegin(); Inc(); while (!Eof() && IsIdentifierChar()) { Inc(); } - token_.keyEnd_ = current_; + token_.key_ = { tok_start, current_.cbegin() - tok_start }; // Skip whitespaces: while (IsWhiteSpace()) { @@ -94,7 +103,7 @@ namespace Configuration { if (Current() != ':') { std::string err = "Key "; - err += StringRange(token_.keyStart_, token_.keyEnd_).str().c_str(); + err += token_.key_; err += " must be followed by ':'"; ParseError(err.c_str()); } @@ -107,45 +116,37 @@ namespace Configuration { // token_.indent_ = indent; if (IsEndLine()) { -#ifdef DEBUG_VERBOSE_YAML_TOKENIZER - log_debug("Section " << StringRange(token_.keyStart_, token_.keyEnd_).str()); -#endif + log_parser_verbose("Section " << token_.key_); // A key with nothing else is not necessarily a section - it could // be an item whose value is the empty string - token_.sValueStart_ = current_; - token_.sValueEnd_ = current_; + token_.value_ = {}; Inc(); } else { if (Current() == '"' || Current() == '\'') { auto delimiter = Current(); Inc(); - token_.sValueStart_ = current_; + tok_start = current_.cbegin(); while (!Eof() && Current() != delimiter && !IsEndLine()) { Inc(); } - token_.sValueEnd_ = current_; + token_.value_ = { tok_start, current_.cbegin() - tok_start }; if (Current() != delimiter) { ParseError("Did not find matching delimiter"); } Inc(); -#ifdef DEBUG_VERBOSE_YAML_TOKENIZER - log_debug("StringQ " << StringRange(token_.keyStart_, token_.keyEnd_).str() << " " - << StringRange(token_.sValueStart_, token_.sValueEnd_).str()); -#endif + log_parser_verbose("StringQ " << token_.key_ << " " << token_.value_); } else { - token_.sValueStart_ = current_; + tok_start = current_.cbegin(); while (!IsEndLine()) { Inc(); } - token_.sValueEnd_ = current_; - if (token_.sValueEnd_ != token_.sValueStart_ && token_.sValueEnd_[-1] == '\r') { - --token_.sValueEnd_; + auto& value_tok = token_.value_; + value_tok = { tok_start, current_.cbegin() - tok_start }; + if (!value_tok.empty() && value_tok[value_tok.size() - 1] == '\r') { + value_tok.remove_suffix(1); } -#ifdef DEBUG_VERBOSE_YAML_TOKENIZER - log_debug("String " << StringRange(token_.keyStart_, token_.keyEnd_).str() << " " - << StringRange(token_.sValueStart_, token_.sValueEnd_).str()); -#endif + log_parser_verbose("String " << token_.key_ << " " << token_.value_); } skipToEol(); } diff --git a/FluidNC/src/Configuration/Tokenizer.h b/FluidNC/src/Configuration/Tokenizer.h index 8ae4254a8..021cb4d98 100644 --- a/FluidNC/src/Configuration/Tokenizer.h +++ b/FluidNC/src/Configuration/Tokenizer.h @@ -1,34 +1,35 @@ // Copyright (c) 2021 - Stefan de Bruijn +// Copyright (c) 2023 - Dylan Knutson // Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. #pragma once #include "TokenState.h" #include "../Config.h" +#include namespace Configuration { class Tokenizer { - const char* current_; - const char* end_; + std::string_view current_; void skipToEol(); - inline void Inc() { - if (current_ != end_) { - ++current_; + void Inc() { + if (current_.size() > 0) { + current_ = current_.substr(1); } } - inline char Current() const { return Eof() ? '\0' : (*current_); } + char Current() const { return Eof() ? '\0' : current_[0]; } - inline bool IsAlpha() { + bool IsAlpha() { char c = Current(); return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); } - inline bool IsSpace() { return Current() == ' '; } + bool IsSpace() { return Current() == ' '; } - inline bool IsWhiteSpace() { + bool IsWhiteSpace() { if (Eof()) { return false; } @@ -36,59 +37,47 @@ namespace Configuration { return c == ' ' || c == '\t' || c == '\f' || c == '\r'; } - inline bool IsIdentifierChar() { return IsAlpha() || IsDigit() || Current() == '_'; } + bool IsIdentifierChar() { return IsAlpha() || IsDigit() || Current() == '_'; } - inline bool IsEndLine() { return Eof() || Current() == '\n'; } + bool IsEndLine() { return Eof() || Current() == '\n'; } - inline bool IsDigit() { + bool IsDigit() { char c = Current(); return (c >= '0' && c <= '9'); } - inline char ToLower(char c) { return (c >= 'A' && c <= 'Z') ? (char)(c + 32) : c; } + static char ToLower(char c) { return (c >= 'A' && c <= 'Z') ? (char)(c + 32) : c; } - inline bool EqualsCaseInsensitive(const char* input) { - const char* tmp = current_; - while (ToLower(*input) == ToLower(Current()) && *input != '\0') { - Inc(); - ++input; - } - - bool isSame = *input == '\0'; // Everything till the end of the input string is the same - current_ = tmp; // Restore situation - return isSame; + bool EqualsCaseInsensitive(const char* input) { + std::string_view other { input }; + return std::equal( + current_.begin(), current_.end(), other.begin(), other.end(), [](auto a, auto b) { return ToLower(a) == ToLower(b); }); } public: - const char* start_; - int line_; + int line_; // Results: struct TokenData { // The initial value for indent is -1, so when ParserHandler::enterSection() // is called to handle the top level of the YAML config file, tokens at // indent 0 will be processed. - TokenData() : - keyStart_(nullptr), keyEnd_(nullptr), indent_(-1), state(TokenState::Bof), sValueStart_(nullptr), sValueEnd_(nullptr) {} - - const char* keyStart_; - const char* keyEnd_; - int indent_; + TokenData() : key_({}), value_({}), indent_(-1), state(TokenState::Bof) {} + std::string_view key_; + std::string_view value_; + int indent_; TokenState state = TokenState::Bof; - - const char* sValueStart_; - const char* sValueEnd_; } token_; void ParseError(const char* description) const; - inline bool Eof() const { return current_ == end_; } + inline bool Eof() const { return current_.size() == 0; } public: - Tokenizer(const char* start, const char* end); + Tokenizer(std::string_view yaml_string); void Tokenize(); - inline StringRange key() const { return StringRange(token_.keyStart_, token_.keyEnd_); } + inline StringRange key() const { return StringRange(token_.key_.cbegin(), token_.key_.cend()); } }; } diff --git a/FluidNC/src/Machine/MachineConfig.cpp b/FluidNC/src/Machine/MachineConfig.cpp index 6efa24e87..76525ec8a 100644 --- a/FluidNC/src/Machine/MachineConfig.cpp +++ b/FluidNC/src/Machine/MachineConfig.cpp @@ -200,7 +200,7 @@ namespace Machine { bool MachineConfig::load(StringRange* input) { bool successful = false; try { - Configuration::Parser parser(input->begin(), input->end()); + Configuration::Parser parser(std::string_view { input->begin(), input->length() }); Configuration::ParserHandler handler(parser); // instance() is by reference, so we can just get rid of an old instance and diff --git a/FluidNC/src/MyIOStream.h b/FluidNC/src/MyIOStream.h index 157bc6045..cc0724ab6 100644 --- a/FluidNC/src/MyIOStream.h +++ b/FluidNC/src/MyIOStream.h @@ -6,6 +6,7 @@ #include #include #include +#include #include "Pin.h" #include "StringRange.h" @@ -29,7 +30,14 @@ inline Print& operator<<(Print& lhs, const StringRange& s) { return lhs; } -inline Print& operator<<(Print& lhs, std::string v) { +inline Print& operator<<(Print& lhs, const std::string_view& v) { + for (const char* p = v.cbegin(); p < v.cend(); ++p) { + lhs.print(*p); + } + return lhs; +} + +inline Print& operator<<(Print& lhs, const std::string& v) { lhs.print(v.c_str()); return lhs; } diff --git a/FluidNC/src/StringRange.h b/FluidNC/src/StringRange.h index de105d084..47a90b713 100644 --- a/FluidNC/src/StringRange.h +++ b/FluidNC/src/StringRange.h @@ -107,7 +107,7 @@ class StringRange { return c == end_ && *oc == '\0'; } - int length() const { return end_ - start_; } + std::size_t length() const { return end_ - start_; } // Iterator support: const char* begin() const { return start_; } From a946d60c13cffd3f6ffcce3529d10b51a664f37d Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Thu, 22 Jun 2023 22:09:44 -0700 Subject: [PATCH 040/212] Remove remaining StringRange references --- FluidNC/src/Configuration/Parser.cpp | 127 ++++++++++------- FluidNC/src/Configuration/Parser.h | 3 +- FluidNC/src/Configuration/ParserHandler.h | 36 ++--- FluidNC/src/Configuration/Tokenizer.cpp | 11 +- FluidNC/src/Configuration/Tokenizer.h | 13 +- FluidNC/src/Configuration/parser_logging.h | 9 ++ FluidNC/src/Machine/MachineConfig.cpp | 24 ++-- FluidNC/src/Machine/MachineConfig.h | 6 +- FluidNC/src/MyIOStream.h | 8 -- FluidNC/src/Pin.cpp | 95 ++++++------- FluidNC/src/Pin.h | 9 +- FluidNC/src/Pins/ErrorPinDetail.cpp | 2 +- FluidNC/src/Pins/ErrorPinDetail.h | 3 +- FluidNC/src/StringRange.h | 154 --------------------- FluidNC/src/StringStream.h | 3 - FluidNC/src/string_util.cpp | 45 ++++++ FluidNC/src/string_util.h | 13 ++ 17 files changed, 223 insertions(+), 338 deletions(-) create mode 100644 FluidNC/src/Configuration/parser_logging.h delete mode 100644 FluidNC/src/StringRange.h create mode 100644 FluidNC/src/string_util.cpp create mode 100644 FluidNC/src/string_util.h diff --git a/FluidNC/src/Configuration/Parser.cpp b/FluidNC/src/Configuration/Parser.cpp index 601a40291..a0c6b25f1 100644 --- a/FluidNC/src/Configuration/Parser.cpp +++ b/FluidNC/src/Configuration/Parser.cpp @@ -8,6 +8,7 @@ #include "../EnumItem.h" #include "../Config.h" +#include "../string_util.h" #include #include // round @@ -41,94 +42,114 @@ namespace Configuration { } // String values might have meaningful leading and trailing spaces so we avoid trimming the string (false) - StringRange Parser::stringValue() const { return StringRange(token_.value_.cbegin(), token_.value_.cend(), false); } + std::string_view Parser::stringValue() const { + return token_.value_; + } bool Parser::boolValue() const { - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); - return str.equals("true"); + return string_util::equal_ignore_case(string_util::trim(token_.value_), "true"); } int Parser::intValue() const { - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); - int32_t value; - if (str.isInteger(value)) { - return value; + auto value_token = string_util::trim(token_.value_); + int32_t int_value; + if (string_util::is_int(value_token, int_value)) { + return int_value; } - float fvalue; - if (str.isFloat(fvalue)) { - return lroundf(fvalue); + + // TODO(dymk) - is there a situation where we want to round a float + // to an int, rather than throwing? + float float_value; + if (string_util::is_float(value_token, float_value)) { + return lroundf(float_value); } + parseError("Expected an integer value"); return 0; } uint32_t Parser::uintValue() const { - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); - uint32_t value; - if (str.isUnsignedInteger(value)) { - return value; + auto token = string_util::trim(token_.value_); + uint32_t uint_value; + if (string_util::is_uint(token, uint_value)) { + return uint_value; } - float fvalue; - if (str.isFloat(fvalue)) { - return lroundf(fvalue); + + float float_value; + if (string_util::is_float(token, float_value)) { + return lroundf(float_value); } + parseError("Expected an integer value"); return 0; } float Parser::floatValue() const { - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); - float value; - if (!str.isFloat(value)) { - parseError("Expected a float value like 123.456"); + auto token = string_util::trim(token_.value_); + float float_value; + if (string_util::is_float(token, float_value)) { + return float_value; } - return value; + parseError("Expected a float value like 123.456"); + return NAN; } std::vector Parser::speedEntryValue() const { - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); - - std::vector value; - StringRange entryStr; - for (entryStr = str.nextWord(); entryStr.length(); entryStr = str.nextWord()) { - speedEntry entry; - StringRange speed = entryStr.nextWord('='); - if (!speed.length() || !speed.isUInteger(entry.speed)) { - log_error("Bad speed number " << speed.str()); - value.clear(); - break; + auto str = string_util::trim(token_.value_); + + std::vector speed_entries; + + while (!str.empty()) { + auto next_ws_delim = str.find(' '); + auto entry_str = string_util::trim(str.substr(0, next_ws_delim)); + if (next_ws_delim == std::string::npos) { + next_ws_delim = str.length(); + } else { + next_ws_delim += 1; } - StringRange percent = entryStr.nextWord('%'); - if (!percent.length() || !percent.isFloat(entry.percent)) { - log_error("Bad speed percent " << percent.str()); - value.clear(); - break; + str.remove_prefix(next_ws_delim); + + speedEntry entry; + auto next_eq_delim = entry_str.find('='); + auto speed_str = string_util::trim(entry_str.substr(0, next_eq_delim)); + if (!string_util::is_uint(speed_str, entry.speed)) { + log_error("Bad speed number " << speed_str); + return {}; + } + entry_str.remove_prefix(next_eq_delim + 1); + + auto next_pct_delim = entry_str.find('%'); + auto percent_str = string_util::trim(entry_str.substr(0, next_pct_delim)); + if (!string_util::is_float(percent_str, entry.percent)) { + log_error("Bad speed percent " << percent_str); + return {}; } - value.push_back(entry); + entry_str.remove_prefix(next_pct_delim + 1); } - if (!value.size()) + + if (!speed_entries.size()) { log_info("Using default speed map"); - return value; + } + + return speed_entries; } Pin Parser::pinValue() const { - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); - return Pin::create(str); + return Pin::create(string_util::trim(token_.value_)); } IPAddress Parser::ipValue() const { IPAddress ip; - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); - if (!ip.fromString(str.str().c_str())) { + if (!ip.fromString(std::string(string_util::trim(token_.value_)).c_str())) { parseError("Expected an IP address like 192.168.0.100"); } return ip; } int Parser::enumValue(EnumItem* e) const { - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); + auto token = string_util::trim(token_.value_); for (; e->name; ++e) { - if (str.equals(e->name)) { + if (string_util::equal_ignore_case(token, e->name)) { break; } } @@ -136,17 +157,17 @@ namespace Configuration { } void Parser::uartMode(UartData& wordLength, UartParity& parity, UartStop& stopBits) const { - auto str = StringRange(token_.value_.cbegin(), token_.value_.cend()); + auto str = string_util::trim(token_.value_); if (str.length() == 5 || str.length() == 3) { int32_t wordLenInt; - if (!str.substr(0, 1).isInteger(wordLenInt)) { + if (!string_util::is_int(str.substr(0, 1), wordLenInt)) { parseError("Uart mode should be specified as [Bits Parity Stopbits] like [8N1]"); } else if (wordLenInt < 5 || wordLenInt > 8) { parseError("Number of data bits for uart is out of range. Expected format like [8N1]."); } wordLength = UartData(int(UartData::Bits5) + (wordLenInt - 5)); - switch (str.begin()[1]) { + switch (str[1]) { case 'N': case 'n': parity = UartParity::None; @@ -165,11 +186,11 @@ namespace Configuration { } auto stop = str.substr(2, str.length() - 2); - if (stop.equals("1")) { + if (stop == "1") { stopBits = UartStop::Bits1; - } else if (stop.equals("1.5")) { + } else if (stop == "1.5") { stopBits = UartStop::Bits1_5; - } else if (stop.equals("2")) { + } else if (stop == "2") { stopBits = UartStop::Bits2; } else { parseError("Uart stopbits can only be 1, 1.5 or 2. Syntax is [8N1]"); diff --git a/FluidNC/src/Configuration/Parser.h b/FluidNC/src/Configuration/Parser.h index be84f0139..c3c6a4016 100644 --- a/FluidNC/src/Configuration/Parser.h +++ b/FluidNC/src/Configuration/Parser.h @@ -6,7 +6,6 @@ #include "Tokenizer.h" #include "../Pin.h" -#include "../StringRange.h" #include "../EnumItem.h" #include "../UartTypes.h" #include "HandlerBase.h" @@ -24,7 +23,7 @@ namespace Configuration { bool is(const char* expected); - StringRange stringValue() const; + std::string_view stringValue() const; bool boolValue() const; int intValue() const; uint32_t uintValue() const; diff --git a/FluidNC/src/Configuration/ParserHandler.h b/FluidNC/src/Configuration/ParserHandler.h index 2fb46e7a7..73c4e2c93 100644 --- a/FluidNC/src/Configuration/ParserHandler.h +++ b/FluidNC/src/Configuration/ParserHandler.h @@ -7,11 +7,10 @@ #include "Parser.h" #include "Configurable.h" #include "../System.h" +#include "parser_logging.h" #include -// #define DEBUG_VERBOSE_YAML_PARSER -// #define DEBUG_CHATTY_YAML_PARSER namespace Configuration { class ParserHandler : public Configuration::HandlerBase { private: @@ -25,17 +24,13 @@ namespace Configuration { // On entry, the token is for the section that invoked us. // We will handle following nodes with indents greater than entryIndent int entryIndent = _parser.token_.indent_; -#ifdef DEBUG_CHATTY_YAML_PARSER - log_debug("Entered section " << name << " at indent " << entryIndent); -#endif + log_parser_verbose("Entered section " << name << " at indent " << entryIndent); // The next token controls what we do next. If thisIndent is greater // than entryIndent, there are some subordinate tokens. _parser.Tokenize(); int thisIndent = _parser.token_.indent_; -#ifdef DEBUG_VERBOSE_YAML_PARSER - log_debug("thisIndent " << _parser.key().str() << " " << thisIndent); -#endif + log_parser_verbose("thisIndent " << _parser.key() << " " << thisIndent); // If thisIndent <= entryIndent, the section is empty - there are // no more-deeply-indented subordinate tokens. @@ -44,17 +39,12 @@ namespace Configuration { // If thisIndent > entryIndent, the new token is the first token within // this section so we process tokens at the same level as thisIndent. for (; _parser.token_.indent_ >= thisIndent; _parser.Tokenize()) { -#ifdef DEBUG_VERBOSE_YAML_PARSER - log_debug(" KEY " << _parser.key().str() << " state " << int(_parser.token_.state) << " indent " - << _parser.token_.indent_); -#endif + log_parser_verbose(" KEY " << _parser.key() << " state " << int(_parser.token_.state) << " indent " + << _parser.token_.indent_); if (_parser.token_.indent_ > thisIndent) { - log_error("Skipping key " << _parser.key().str() << " indent " << _parser.token_.indent_ << " this indent " - << thisIndent); + log_error("Skipping key " << _parser.key() << " indent " << _parser.token_.indent_ << " this indent " << thisIndent); } else { -#ifdef DEBUG_VERBOSE_YAML_PARSER - log_debug("Parsing key " << _parser.key().str()); -#endif + log_parser_verbose("Parsing key " << _parser.key()); try { section->group(*this); } catch (const AssertionFailed& ex) { @@ -66,13 +56,11 @@ namespace Configuration { } if (_parser.token_.state == TokenState::Matching) { - log_warn("Ignored key " << _parser.key().str()); + log_warn("Ignored key " << _parser.key()); } -#ifdef DEBUG_CHATTY_YAML_PARSER if (_parser.token_.state == Configuration::TokenState::Matched) { - log_debug("Handled key " << _parser.key().str()); + log_parser_verbose("Handled key " << _parser.key()); } -#endif } } } @@ -85,9 +73,7 @@ namespace Configuration { // _parser.token_.held = true; _parser.token_.state = TokenState::Held; -#ifdef DEBUG_CHATTY_YAML_PARSER - log_debug("Left section at indent " << entryIndent << " holding " << _parser.key().str()); -#endif + log_parser_verbose("Left section at indent " << entryIndent << " holding " << _parser.key()); _path.erase(_path.begin() + (_path.size() - 1)); } @@ -144,7 +130,7 @@ namespace Configuration { void item(const char* name, std::string& value, int minLength, int maxLength) override { if (_parser.is(name)) { - value = _parser.stringValue().str().c_str(); + value = _parser.stringValue(); } } diff --git a/FluidNC/src/Configuration/Tokenizer.cpp b/FluidNC/src/Configuration/Tokenizer.cpp index 918519d6e..5bf3b6fa7 100644 --- a/FluidNC/src/Configuration/Tokenizer.cpp +++ b/FluidNC/src/Configuration/Tokenizer.cpp @@ -5,17 +5,10 @@ #include "Tokenizer.h" #include "ParseException.h" +#include "parser_logging.h" #include -static constexpr bool verbose_debugging = false; -#define log_parser_verbose(x) \ - do { \ - if (verbose_debugging) { \ - log_debug(x); \ - } \ - } while (0) - namespace Configuration { void Tokenizer::skipToEol() { @@ -35,7 +28,7 @@ namespace Configuration { // Release a held token if (token_.state == TokenState::Held) { token_.state = TokenState::Matching; - log_parser_verbose("Releasing " << key().str()); + log_parser_verbose("Releasing " << key()); return; } diff --git a/FluidNC/src/Configuration/Tokenizer.h b/FluidNC/src/Configuration/Tokenizer.h index 021cb4d98..2fa85f9db 100644 --- a/FluidNC/src/Configuration/Tokenizer.h +++ b/FluidNC/src/Configuration/Tokenizer.h @@ -46,14 +46,6 @@ namespace Configuration { return (c >= '0' && c <= '9'); } - static char ToLower(char c) { return (c >= 'A' && c <= 'Z') ? (char)(c + 32) : c; } - - bool EqualsCaseInsensitive(const char* input) { - std::string_view other { input }; - return std::equal( - current_.begin(), current_.end(), other.begin(), other.end(), [](auto a, auto b) { return ToLower(a) == ToLower(b); }); - } - public: int line_; @@ -76,8 +68,7 @@ namespace Configuration { public: Tokenizer(std::string_view yaml_string); - void Tokenize(); - - inline StringRange key() const { return StringRange(token_.key_.cbegin(), token_.key_.cend()); } + void Tokenize(); + inline std::string_view key() const { return token_.key_; } }; } diff --git a/FluidNC/src/Configuration/parser_logging.h b/FluidNC/src/Configuration/parser_logging.h new file mode 100644 index 000000000..8aba3283a --- /dev/null +++ b/FluidNC/src/Configuration/parser_logging.h @@ -0,0 +1,9 @@ +#pragma once + +static constexpr bool verbose_debugging = false; +#define log_parser_verbose(x) \ + do { \ + if (verbose_debugging) { \ + log_debug(x); \ + } \ + } while (0) diff --git a/FluidNC/src/Machine/MachineConfig.cpp b/FluidNC/src/Machine/MachineConfig.cpp index 76525ec8a..170030ddb 100644 --- a/FluidNC/src/Machine/MachineConfig.cpp +++ b/FluidNC/src/Machine/MachineConfig.cpp @@ -25,6 +25,7 @@ #include #include #include +#include Machine::MachineConfig* config; @@ -147,7 +148,7 @@ namespace Machine { } } - char defaultConfig[] = "name: Default (Test Drive)\nboard: None\n"; + const char defaultConfig[] = "name: Default (Test Drive)\nboard: None\n"; bool MachineConfig::load() { bool configOkay; @@ -158,20 +159,20 @@ namespace Machine { log_error("Skipping configuration file due to panic"); configOkay = false; } else { - configOkay = load(config_filename->get()); + configOkay = load_file(config_filename->get()); } if (!configOkay) { log_info("Using default configuration"); - configOkay = load(new StringRange(defaultConfig)); + configOkay = load_yaml(defaultConfig); } return configOkay; } - bool MachineConfig::load(const char* filename) { + bool MachineConfig::load_file(const std::string_view filename) { try { - FileStream file(filename, "r", ""); + FileStream file(std::string { filename }, "r", ""); auto filesize = file.size(); if (filesize <= 0) { @@ -179,28 +180,26 @@ namespace Machine { return false; } - char* buffer = new char[filesize + 1]; + auto buffer = std::make_unique(filesize + 1); buffer[filesize] = '\0'; - auto actual = file.read(buffer, filesize); + auto actual = file.read(buffer.get(), filesize); if (actual != filesize) { log_info("Configuration file:" << filename << " read error"); return false; } log_info("Configuration file:" << filename); // Trimming the overall config file could influence indentation, hence false - bool retval = load(new StringRange(buffer, buffer + filesize, false)); - delete[] buffer; - return retval; + return load_yaml(std::string_view { buffer.get(), filesize }); } catch (...) { log_warn("Cannot open configuration file:" << filename); return false; } } - bool MachineConfig::load(StringRange* input) { + bool MachineConfig::load_yaml(std::string_view input) { bool successful = false; try { - Configuration::Parser parser(std::string_view { input->begin(), input->length() }); + Configuration::Parser parser(input); Configuration::ParserHandler handler(parser); // instance() is by reference, so we can just get rid of an old instance and @@ -256,7 +255,6 @@ namespace Machine { // Get rid of buffer and return log_error("Unknown error while processing config file"); } - delete[] input; std::atomic_thread_fence(std::memory_order::memory_order_seq_cst); diff --git a/FluidNC/src/Machine/MachineConfig.h b/FluidNC/src/Machine/MachineConfig.h index 8f5ff270c..9541141bc 100644 --- a/FluidNC/src/Machine/MachineConfig.h +++ b/FluidNC/src/Machine/MachineConfig.h @@ -27,6 +27,8 @@ #include "UserOutputs.h" #include "Macros.h" +#include + namespace Machine { using ::Kinematics::Kinematics; @@ -107,8 +109,8 @@ namespace Machine { void group(Configuration::HandlerBase& handler) override; static bool load(); - static bool load(const char* file); - static bool load(StringRange* input); + static bool load_file(std::string_view file); + static bool load_yaml(std::string_view yaml_string); ~MachineConfig(); }; diff --git a/FluidNC/src/MyIOStream.h b/FluidNC/src/MyIOStream.h index cc0724ab6..8e155391d 100644 --- a/FluidNC/src/MyIOStream.h +++ b/FluidNC/src/MyIOStream.h @@ -9,7 +9,6 @@ #include #include "Pin.h" -#include "StringRange.h" std::string IP_string(uint32_t ipaddr); @@ -23,13 +22,6 @@ inline Print& operator<<(Print& lhs, const char* v) { return lhs; } -inline Print& operator<<(Print& lhs, const StringRange& s) { - for (const char* p = s.begin(); p < s.end(); ++p) { - lhs.print(*p); - } - return lhs; -} - inline Print& operator<<(Print& lhs, const std::string_view& v) { for (const char* p = v.cbegin(); p < v.cend(); ++p) { lhs.print(*p); diff --git a/FluidNC/src/Pin.cpp b/FluidNC/src/Pin.cpp index 4cd075d61..2ce039798 100644 --- a/FluidNC/src/Pin.cpp +++ b/FluidNC/src/Pin.cpp @@ -1,4 +1,5 @@ // Copyright (c) 2021 - Stefan de Bruijn +// Copyright (c) 2023 - Dylan Knutson // Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. #include "Pin.h" @@ -10,76 +11,76 @@ #include "Pins/VoidPinDetail.h" #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"); -const char* Pin::parse(StringRange tmp, Pins::PinDetail*& pinImplementation) { - // Initialize pinImplementation first! Callers might want to delete it, and we don't want a random pointer. - pinImplementation = nullptr; +static constexpr bool verbose_debugging = false; - // Parse the definition: [GPIO].[pinNumber]:[attributes] +const char* Pin::parse(std::string_view pin_str, Pins::PinDetail*& pinImplementation) { + if (verbose_debugging) { + log_info("Parsing pin string: " << pin_str); + } - const char* end = tmp.end(); + // Initialize pinImplementation first! Callers might want to delete it, and we don't want a random pointer. + pinImplementation = nullptr; // Skip whitespaces at the start - auto nameStart = tmp.begin(); - for (; nameStart != end && ::isspace(*nameStart); ++nameStart) {} + pin_str = string_util::trim(pin_str); - if (nameStart == end) { + if (pin_str.empty()) { // Re-use undefined pins happens in 'create': pinImplementation = new Pins::VoidPinDetail(); return nullptr; } - auto idx = nameStart; - for (; idx != end && *idx != '.' && *idx != ':'; ++idx) {} - - StringRange prefix(tmp.begin(), idx); - - if (idx != end) { // skip '.' - ++idx; + auto dot_idx = pin_str.find('.'); + std::string_view prefix = pin_str.substr(0, dot_idx); + if (dot_idx != std::string::npos) { + dot_idx += 1; } + pin_str.remove_prefix(dot_idx); - int pinNumber = 0; - if (prefix != "") { - if (idx != end) { - for (int n = 0; idx != end && n <= 4 && *idx >= '0' && *idx <= '9'; ++idx, ++n) { - pinNumber = pinNumber * 10 + int(*idx - '0'); - } - } + if (verbose_debugging) { + log_info("Parsed pin prefix: " << prefix << ", rest: " << pin_str); } - while (idx != end && ::isspace(*idx)) { - ++idx; + char* pin_number_end = nullptr; + uint32_t pin_number = std::strtoul(pin_str.cbegin(), &pin_number_end, 10); + pin_str.remove_prefix(pin_number_end - pin_str.cbegin()); + + if (verbose_debugging) { + log_info("Parsed pin number: " << pin_number << ", rest: " << pin_str); } - if (idx != end) { - if (*idx != ':') { - // Pin definition attributes or EOF expected. - return "Pin attributes (':') were expected."; + if (!pin_str.empty() && pin_str[0] == ':') { + pin_str.remove_prefix(1); + if (pin_str.empty()) { + return "Pin attributes after ':' were expected."; } - ++idx; + } + + if (verbose_debugging) { + log_info("Remaining pin options: " << pin_str); } // Build an options parser: - Pins::PinOptionsParser parser(idx, end); + Pins::PinOptionsParser parser(pin_str.cbegin(), pin_str.cend()); // Build this pin: - if (prefix == "gpio") { - pinImplementation = new Pins::GPIOPinDetail(pinnum_t(pinNumber), parser); + if (string_util::equal_ignore_case(prefix, "gpio")) { + pinImplementation = new Pins::GPIOPinDetail(static_cast(pin_number), parser); } -#ifdef ESP32 - if (prefix == "i2so") { - pinImplementation = new Pins::I2SOPinDetail(pinnum_t(pinNumber), parser); + if (string_util::equal_ignore_case(prefix, "i2so")) { + pinImplementation = new Pins::I2SOPinDetail(static_cast(pin_number), parser); } -#endif - if (prefix == "no_pin") { + if (string_util::equal_ignore_case(prefix, "no_pin")) { pinImplementation = undefinedPin; } - if (prefix == "void") { + if (string_util::equal_ignore_case(prefix, "void")) { // Note: having multiple void pins has its uses for debugging. pinImplementation = new Pins::VoidPinDetail(); } @@ -96,7 +97,7 @@ const char* Pin::parse(StringRange tmp, Pins::PinDetail*& pinImplementation) { } } -Pin Pin::create(const StringRange& str) { +Pin Pin::create(std::string_view str) { Pins::PinDetail* pinImplementation = nullptr; try { const char* err = parse(str, pinImplementation); @@ -105,23 +106,17 @@ Pin Pin::create(const StringRange& str) { delete pinImplementation; } - log_error("Setting up pin:" << str.str() << " failed:" << err); - return Pin(new Pins::ErrorPinDetail(str.str().c_str())); + log_error("Setting up pin: " << str << " failed:" << err); + return Pin(new Pins::ErrorPinDetail(str)); } else { return Pin(pinImplementation); } } 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.str().c_str(), ex.what()); - + snprintf(buf, 255, "ERR: %s - %s", str, ex.what()); Assert(false, buf); - - /* - log_error("ERR: " << str.str() << " - " << ex.what()); - - return Pin(new Pins::ErrorPinDetail(str.str())); - */ + // return Pin(new Pins::ErrorPinDetail(str.str())); } } diff --git a/FluidNC/src/Pin.h b/FluidNC/src/Pin.h index e40e38d4e..bfe4c0762 100644 --- a/FluidNC/src/Pin.h +++ b/FluidNC/src/Pin.h @@ -6,13 +6,13 @@ #include "Pins/PinDetail.h" #include "Pins/PinCapabilities.h" #include "Pins/PinAttributes.h" -#include "StringRange.h" #include // IRAM_ATTR #include #include #include #include +#include #include "Assert.h" // #define DEBUG_PIN_DUMP // Pin debugging. WILL spam you with a lot of data! @@ -77,7 +77,7 @@ class Pin { // Implementation details of this pin. Pins::PinDetail* _detail; - static const char* parse(StringRange str, Pins::PinDetail*& detail); + static const char* parse(std::string_view str, Pins::PinDetail*& detail); inline Pin(Pins::PinDetail* detail) : _detail(detail) {} @@ -99,10 +99,7 @@ class Pin { static const int ASSERTING = 0x10; static const int DEASSERTING = 0x11; - // inline static Pins::PinDetail* create(const char* str) { return create(StringRange(str)); }; - - static Pin create(const char* str) { return create(StringRange(str)); } // ensure it's not ambiguous - static Pin create(const StringRange& str); + static Pin create(std::string_view str); static bool validate(const char* str); // We delete the copy constructor, and implement the move constructor. The move constructor is required to support diff --git a/FluidNC/src/Pins/ErrorPinDetail.cpp b/FluidNC/src/Pins/ErrorPinDetail.cpp index 996ebe342..32a390c43 100644 --- a/FluidNC/src/Pins/ErrorPinDetail.cpp +++ b/FluidNC/src/Pins/ErrorPinDetail.cpp @@ -6,7 +6,7 @@ #include "../Assert.h" namespace Pins { - ErrorPinDetail::ErrorPinDetail(const char* descr) : PinDetail(0), _description(descr) {} + ErrorPinDetail::ErrorPinDetail(std::string_view descr) : PinDetail(0), _description(descr) {} PinCapabilities ErrorPinDetail::capabilities() const { return PinCapabilities::Error; } diff --git a/FluidNC/src/Pins/ErrorPinDetail.h b/FluidNC/src/Pins/ErrorPinDetail.h index 68eea1cc0..6697531b2 100644 --- a/FluidNC/src/Pins/ErrorPinDetail.h +++ b/FluidNC/src/Pins/ErrorPinDetail.h @@ -5,13 +5,14 @@ #include "PinDetail.h" #include "PinOptionsParser.h" +#include namespace Pins { class ErrorPinDetail : public PinDetail { std::string _description; public: - ErrorPinDetail(const char* descr); + ErrorPinDetail(std::string_view descr); PinCapabilities capabilities() const override; diff --git a/FluidNC/src/StringRange.h b/FluidNC/src/StringRange.h deleted file mode 100644 index 47a90b713..000000000 --- a/FluidNC/src/StringRange.h +++ /dev/null @@ -1,154 +0,0 @@ -// Copyright (c) 2021 Stefan de Bruijn -// Use of this source code is governed by a GPLv3 license that can be found in the LICENSE file. - -#pragma once - -#include - -class StringRange { - const char* start_; - const char* end_; - -public: - StringRange() : start_(nullptr), end_(nullptr) {} - - StringRange(const char* str) : start_(str), end_(str + strlen(str)) {} - - // We usually want to ignore leading and trailing blanks, so we default to trim=true - StringRange(const char* start, const char* end, bool trim = true) : start_(start), end_(end) { - if (trim) { - while (start_ != end_ && isspace(*start_)) { - ++start_; - } - while (end_ != start_ && isspace(*(end_ - 1))) { - --end_; - } - } - } - - StringRange(const StringRange& o) = default; - StringRange(StringRange&& o) = default; - - StringRange& operator=(const StringRange& o) = default; - StringRange& operator=(StringRange&& o) = default; - inline bool operator==(const char* s) { - const char* p = start_; - while (p != end_ && *s) { - if (::tolower(*p++) != ::tolower(*s++)) { - return false; - } - } - return !*s && p == end_; - } - inline bool operator!=(const char* s) { - const char* p = start_; - while (p != end_ && *s) { - if (::tolower(*p++) != ::tolower(*s++)) { - return true; - } - } - return *s || p != end_; - } - - int find(char c) const { - const char* s = start_; - for (; s != end_ && *s != c; ++s) {} - return (*s) ? (s - start_) : -1; - } - - StringRange substr(int index, int length) const { - const char* s = start_ + index; - if (s > end_) { - s = end_; - } - const char* e = s + length; - if (e > end_) { - e = end_; - } - return StringRange(s, e); - } - - // Blank-delimited word - StringRange nextWord() { - while (start_ != end_ && *start_ == ' ') { - ++start_; - } - const char* s = start_; - while (start_ != end_ && *start_ != ' ') { - ++start_; - } - return StringRange(s, start_); - } - - // Character-delimited word - StringRange nextWord(char c) { - const char* s = start_; - // Scan to delimiter or end of string - while (start_ != end_ && *start_ != c) { - ++start_; - } - const char* e = start_; - // Skip the delimiter if present - if (start_ != end_) { - ++start_; - } - return StringRange(s, e); - } - - bool equals(const StringRange& o) const { - auto l = length(); - return l == o.length() && !strncasecmp(start_, o.start_, l); - } - - bool equals(const char* o) const { - const char* c = start_; - const char* oc = o; - for (; c != end_ && *oc != '\0' && tolower(*c) == tolower(*oc); ++c, ++oc) {} - return c == end_ && *oc == '\0'; - } - - std::size_t length() const { return end_ - start_; } - - // Iterator support: - const char* begin() const { return start_; } - const char* end() const { return end_; } - - std::string str() const { - // TODO: Check if we can eliminate this function. I'm pretty sure we can. - auto len = length(); - if (len == 0) { - return std::string(); - } else { - char* buf = new char[len + 1]; - memcpy(buf, begin(), len); - buf[len] = 0; - std::string tmp(buf); - delete[] buf; - return tmp; - } - } - - inline bool isUInteger(uint32_t& intval) { - char* intEnd; - intval = strtol(start_, &intEnd, 10); - return intEnd == end_; - } - - inline bool isInteger(int32_t& intval) { - char* intEnd; - intval = strtol(start_, &intEnd, 10); - return intEnd == end_; - } - - inline bool isUnsignedInteger(uint32_t& intval) { - char* intEnd; - intval = strtoul(start_, &intEnd, 10); - return intEnd == end_; - } - - inline bool isFloat(float& floatval) { - char* floatEnd; - floatval = float(strtod(start_, &floatEnd)); - return floatEnd == end_; - } -}; diff --git a/FluidNC/src/StringStream.h b/FluidNC/src/StringStream.h index 61a00161c..302f93c1f 100644 --- a/FluidNC/src/StringStream.h +++ b/FluidNC/src/StringStream.h @@ -4,7 +4,6 @@ #pragma once #include "Print.h" -#include "StringRange.h" #include @@ -16,6 +15,4 @@ class StringStream : public Print { data_.push_back(c); return 1; } - - // StringRange str() const { return StringRange(data_.data(), data_.data() + data_.size()); } }; diff --git a/FluidNC/src/string_util.cpp b/FluidNC/src/string_util.cpp new file mode 100644 index 000000000..172105e72 --- /dev/null +++ b/FluidNC/src/string_util.cpp @@ -0,0 +1,45 @@ +#include "string_util.h" +#include + +namespace string_util { + char tolower(char c) { + if (c >= 'A' && c <= 'Z') { + return c + ('a' - 'A'); + } + return c; + } + + bool equal_ignore_case(std::string_view a, std::string_view b) { + return std::equal(a.begin(), a.end(), b.begin(), b.end(), [](auto a, auto b) { return tolower(a) == tolower(b); }); + } + + const std::string_view trim(std::string_view s) { + auto start = s.find_first_not_of(" \t\n\r\f\v"); + if (start == std::string_view::npos) { + return ""; + } + auto end = s.find_last_not_of(" \t\n\r\f\v"); + if (end == std::string_view::npos) { + return s.substr(start); + } + return s.substr(start, end - start + 1); + } + + bool is_int(std::string_view s, int32_t& value) { + char* end; + value = std::strtol(s.cbegin(), &end, 10); + return end == s.cend(); + } + + bool is_uint(std::string_view s, uint32_t& value) { + char* end; + value = std::strtoul(s.cbegin(), &end, 10); + return end == s.cend(); + } + + bool is_float(std::string_view s, float& value) { + char* end; + value = std::strtof(s.cbegin(), &end); + return end == s.cend(); + } +} diff --git a/FluidNC/src/string_util.h b/FluidNC/src/string_util.h new file mode 100644 index 000000000..e51c07e4e --- /dev/null +++ b/FluidNC/src/string_util.h @@ -0,0 +1,13 @@ +#pragma once + +#include + +namespace string_util { + char tolower(char c); + bool equal_ignore_case(std::string_view a, std::string_view b); + const std::string_view trim(std::string_view s); + + bool is_int(std::string_view s, int32_t& value); + bool is_uint(std::string_view s, uint32_t& value); + bool is_float(std::string_view s, float& value); +} From 27ffe0c98e10adbd7c46152c5bae14c1a61bcca4 Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Thu, 22 Jun 2023 07:37:40 -0700 Subject: [PATCH 041/212] Create build-only CI workflow This CI workflow triggers a Github action to: - Install PlatformIO at a known version (modulo minor revision) - Runs against Windows, Linux, and MacOS - Builds a number of PlatformIO environments The PlatformIO environments built are initially noradio, wifi, and bt. It is easy to include additional environments, but in the spirit of having a CI which balances speed with catching true-positive failures, we select only these three. In addition, there is support for additional "_s2", "_s3" variants, but for this initial CI pipeline, they are not built, as they greatly increase CI time. --- .github/workflows/ci.yml | 39 +++++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + 2 files changed, 40 insertions(+) create mode 100644 .github/workflows/ci.yml create mode 100644 requirements.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 000000000..ebc536525 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,39 @@ +name: FluidNC Continuous Integration (Build Only) +on: [push, pull_request] +jobs: + build: + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + pio_env: + - noradio + - wifi + - bt + # - wifibt + # - debug + pio_env_variant: + - "" + # - "_s2" + # - "_s3" + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: "3.9" + cache: "pip" + - name: Install PlatformIO + run: | + python -m pip install --upgrade pip + pip install -r requirements.txt + - name: Cache PlatformIO + uses: actions/cache@v3 + with: + path: ~/.platformio + key: platformio-${{ runner.os }} + - name: Build target ${{ matrix.pio_env }}${{ matrix.pio_env_variant }} + run: pio run -e ${{ matrix.pio_env }}${{ matrix.pio_env_variant }} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 000000000..4b723d7bc --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +platformio == 6.1.* From 36af919ed111a05afda9240cb630f9ef4d00120c Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 23 Jun 2023 08:57:55 -1000 Subject: [PATCH 042/212] Hash after closing volume to ensure changes have been committed --- FluidNC/src/HashFS.cpp | 23 ++++- FluidNC/src/HashFS.h | 3 + FluidNC/src/ProcessSettings.cpp | 5 +- FluidNC/src/WebUI/WebServer.cpp | 150 ++++++++++++++++-------------- FluidNC/src/WebUI/WebSettings.cpp | 51 +++++----- 5 files changed, 134 insertions(+), 98 deletions(-) diff --git a/FluidNC/src/HashFS.cpp b/FluidNC/src/HashFS.cpp index 4a8b67235..c5c7d2b54 100644 --- a/FluidNC/src/HashFS.cpp +++ b/FluidNC/src/HashFS.cpp @@ -44,17 +44,29 @@ static Error hashFile(const char* ipath, std::string& str) { // No ESP command } void HashFS::rehash() { - const char* iDir = "/localfs"; + rehash_file("/localfs"); +} + +void HashFS::rehash_fs(const std::filesystem::path& path) { + auto it = path.begin(); + std::string fsname = "/"; + fsname += *++it; + if (fsname != "/littlefs" && fsname != "/spiffs" && fsname != "/localfs") { + return; + } + std::error_code ec; localFsHashes.clear(); - FluidPath fpath { iDir, "", ec }; + FluidPath fpath { fsname, "", ec }; if (ec) { - log_error("Cannot open " << iDir); + log_error("Cannot open " << fsname); return; } + log_debug("Rehashing " << fsname); + auto iter = stdfs::directory_iterator { fpath, ec }; if (ec) { log_error(fpath << " " << ec.message()); @@ -63,9 +75,9 @@ void HashFS::rehash() { Error err = Error::Ok; for (auto const& dir_entry : iter) { if (dir_entry.is_directory()) { - log_error("Not handling localfs subdirectories"); + log_debug("Not hashing localfs subdirectories"); } else { - std::string ipath(iDir); + std::string ipath(fsname); ipath += "/"; ipath += dir_entry.path().filename(); std::string hash; @@ -76,6 +88,7 @@ void HashFS::rehash() { std::string filename("/"); filename += dir_entry.path().filename(); localFsHashes[filename] = hash; + log_debug(filename << " hash " << hash); } } } diff --git a/FluidNC/src/HashFS.h b/FluidNC/src/HashFS.h index 93d47e8a7..1a442a004 100644 --- a/FluidNC/src/HashFS.h +++ b/FluidNC/src/HashFS.h @@ -1,10 +1,13 @@ #pragma once #include #include +#include + class HashFS { public: static std::map localFsHashes; + static void rehash_file(const std::filesystem::path& path); static void rehash(); static std::string hash(std::string name); diff --git a/FluidNC/src/ProcessSettings.cpp b/FluidNC/src/ProcessSettings.cpp index 08b27a2dd..bdd5e448d 100644 --- a/FluidNC/src/ProcessSettings.cpp +++ b/FluidNC/src/ProcessSettings.cpp @@ -25,6 +25,7 @@ #include "Driver/fluidnc_gpio.h" // gpio_dump() #include "FluidPath.h" +#include "HashFS.h" #include #include @@ -634,8 +635,10 @@ static Error xmodem_receive(const char* value, WebUI::AuthenticationLevel auth_l } else { log_info("Reception failed or was canceled"); } - outfile->fpath().rehash_fs(); + std::filesystem::path fname = outfile->fpath(); delete outfile; + HashFS::rehash_file(fname); + return size < 0 ? Error::UploadFailed : Error::Ok; } diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 5acd7a346..9867be327 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -900,81 +900,88 @@ namespace WebUI { } } - FluidPath fpath { path, fs, ec }; - if (ec) { - sendJSON(200, "{\"status\":\"No SD card\"}"); - return; - } + std::filesystem::path filepath; // Initially empty - // Handle deletions and directory creation - if (_webserver->hasArg("action") && _webserver->hasArg("filename")) { - std::string action(_webserver->arg("action").c_str()); - std::string filename = std::string(_webserver->arg("filename").c_str()); - if (action == "delete") { - log_debug("Deleting " << fpath << " / " << filename); - if (stdfs::remove(fpath / filename, ec)) { - fpath.rehash_fs(); - sstatus = filename + " deleted"; - } else { - sstatus = "Cannot delete "; - sstatus += filename + " " + ec.message(); - } - } else if (action == "deletedir") { - if (stdfs::remove_all(fpath / filename.c_str(), ec)) { - sstatus = filename + " deleted"; - } else { - sstatus = "Cannot delete "; - sstatus += filename + " " + ec.message(); - } - } else if (action == "createdir") { - if (stdfs::create_directory(fpath / filename, ec)) { - sstatus = filename + " created"; - } else { - sstatus = "Cannot create "; - sstatus += filename + " " + ec.message(); - } + { // Scope for fpath; we need it to go out of scope for later rehash + FluidPath fpath { path, fs, ec }; + if (ec) { + sendJSON(200, "{\"status\":\"No SD card\"}"); + return; } - } - //check if no need build file list - if (_webserver->hasArg("dontlist") && _webserver->arg("dontlist") == "yes") { - list_files = false; - } + // Handle deletions and directory creation + if (_webserver->hasArg("action") && _webserver->hasArg("filename")) { + std::string action(_webserver->arg("action").c_str()); + std::string filename = std::string(_webserver->arg("filename").c_str()); + if (action == "delete") { + log_debug("Deleting " << fpath << " / " << filename); + if (stdfs::remove(fpath / filename, ec)) { + filepath = fpath; + sstatus = filename + " deleted"; + } else { + sstatus = "Cannot delete "; + sstatus += filename + " " + ec.message(); + } + } else if (action == "deletedir") { + if (stdfs::remove_all(fpath / filename.c_str(), ec)) { + sstatus = filename + " deleted"; + } else { + sstatus = "Cannot delete "; + sstatus += filename + " " + ec.message(); + } + } else if (action == "createdir") { + if (stdfs::create_directory(fpath / filename, ec)) { + sstatus = filename + " created"; + } else { + sstatus = "Cannot create "; + sstatus += filename + " " + ec.message(); + } + } + } - std::string s; - WebUI::JSONencoder j(false, &s); - j.begin(); + //check if no need build file list + if (_webserver->hasArg("dontlist") && _webserver->arg("dontlist") == "yes") { + list_files = false; + } - if (list_files) { - auto iter = stdfs::directory_iterator { fpath, ec }; - if (!ec) { - j.begin_array("files"); - for (auto const& dir_entry : iter) { - j.begin_object(); - j.member("name", dir_entry.path().filename()); - j.member("shortname", dir_entry.path().filename()); - j.member("size", dir_entry.is_directory() ? -1 : dir_entry.file_size()); - j.member("datetime", ""); - j.end_object(); + std::string s; + WebUI::JSONencoder j(false, &s); + j.begin(); + + if (list_files) { + auto iter = stdfs::directory_iterator { fpath, ec }; + if (!ec) { + j.begin_array("files"); + for (auto const& dir_entry : iter) { + j.begin_object(); + j.member("name", dir_entry.path().filename()); + j.member("shortname", dir_entry.path().filename()); + j.member("size", dir_entry.is_directory() ? -1 : dir_entry.file_size()); + j.member("datetime", ""); + j.end_object(); + } + j.end_array(); } - j.end_array(); } - } - auto space = stdfs::space(fpath, ec); - totalspace = space.capacity; - usedspace = totalspace - space.available; + auto space = stdfs::space(fpath, ec); + totalspace = space.capacity; + usedspace = totalspace - space.available; - j.member("path", path.c_str()); - j.member("total", formatBytes(totalspace)); - j.member("used", formatBytes(usedspace + 1)); + j.member("path", path.c_str()); + j.member("total", formatBytes(totalspace)); + j.member("used", formatBytes(usedspace + 1)); - uint32_t percent = totalspace ? (usedspace * 100) / totalspace : 100; + uint32_t percent = totalspace ? (usedspace * 100) / totalspace : 100; - j.member("occupation", percent); - j.member("status", sstatus); - j.end(); - sendJSON(200, s); + j.member("occupation", percent); + j.member("status", sstatus); + j.end(); + sendJSON(200, s); + } + if (!filepath.empty()) { + HashFS::rehash_file(filepath); + } } void Web_Server::handle_direct_SDFileList() { handleFileOps(sdName); } @@ -1041,16 +1048,16 @@ namespace WebUI { // delete _uploadFile; // _uploadFile = nullptr; - auto fpath = _uploadFile->fpath(); - fpath.rehash_fs(); + std::filesystem::path filepath = _uploadFile->fpath(); delete _uploadFile; _uploadFile = nullptr; + HashFS::rehash_file(filepath); // Check size if (filesize) { uint32_t actual_size; try { - actual_size = stdfs::file_size(fpath); + actual_size = stdfs::file_size(filepath); } catch (const Error err) { actual_size = 0; } if (filesize != actual_size) { @@ -1075,9 +1082,10 @@ namespace WebUI { _upload_status = UploadStatus::FAILED; log_info("Upload cancelled"); if (_uploadFile) { - _uploadFile->fpath().rehash_fs(); + std::filesystem::path filepath = _uploadFile->fpath(); delete _uploadFile; _uploadFile = nullptr; + HashFS::rehash_file(filepath); } } void Web_Server::uploadCheck() { @@ -1085,11 +1093,11 @@ namespace WebUI { if (_upload_status == UploadStatus::FAILED) { cancelUpload(); if (_uploadFile) { - auto fpath = _uploadFile->fpath(); + std::filesystem::path filepath = _uploadFile->fpath(); delete _uploadFile; _uploadFile = nullptr; - stdfs::remove(fpath, error_code); - fpath.rehash_fs(); + stdfs::remove(filepath, error_code); + HashFS::rehash_file(filepath); } } } diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index aa3806f5c..4fc54bd6e 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -353,32 +353,38 @@ namespace WebUI { static Error deleteObject(const char* fs, char* name, Channel& out) { std::error_code ec; - FluidPath fpath { name, fs, ec }; - if (ec) { - log_to(out, "No SD"); - return Error::FsFailedMount; - } - auto isDir = stdfs::is_directory(fpath, ec); - if (ec) { - log_to(out, "Delete failed: ", ec.message()); - return Error::FsFileNotFound; - } - if (isDir) { - stdfs::remove_all(fpath, ec); - fpath.rehash_fs(); + std::filesystem::path filepath; + { + FluidPath fpath { name, fs, ec }; if (ec) { - log_to(out, "Delete Directory failed: ", ec.message()); - return Error::FsFailedDelDir; + log_to(out, "No SD"); + return Error::FsFailedMount; } - } else { - stdfs::remove(fpath, ec); - fpath.rehash_fs(); + auto isDir = stdfs::is_directory(fpath, ec); if (ec) { - log_to(out, "Delete File failed: ", ec.message()); - return Error::FsFailedDelFile; + log_to(out, "Delete failed: ", ec.message()); + return Error::FsFileNotFound; } + if (isDir) { + stdfs::remove_all(fpath, ec); + if (ec) { + log_to(out, "Delete Directory failed: ", ec.message()); + return Error::FsFailedDelDir; + } + } else { + stdfs::remove(fpath, ec); + if (ec) { + log_to(out, "Delete File failed: ", ec.message()); + return Error::FsFailedDelFile; + } + } + // We want fpath to go out of scope so that any volume writes + // are committed before we recompute the hash. + filepath = fpath; } + HashFS::rehash_file(filepath); + return Error::Ok; } @@ -438,6 +444,7 @@ namespace WebUI { } static Error copyFile(const char* ipath, const char* opath, Channel& out) { // No ESP command + std::filesystem::path filepath; try { FileStream outFile { opath, "w" }; FileStream inFile { ipath, "r" }; @@ -446,11 +453,13 @@ namespace WebUI { while ((len = inFile.read(buf, 512)) > 0) { outFile.write(buf, len); } - outFile.fpath().rehash_fs(); + filepath = outFile.fpath(); } catch (const Error err) { log_error("Cannot create file " << opath); return Error::FsFailedCreateFile; } + // Rehash after outFile goes out of scope + HashFS::rehash_file(filepath); return Error::Ok; } static Error copyDir(const char* iDir, const char* oDir, Channel& out) { // No ESP command From eeb842f181e287ba0c42bb348a3dffdad1e917da Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 23 Jun 2023 13:59:11 -1000 Subject: [PATCH 043/212] Rehash only changed files, not the whole file system --- FluidNC/src/FileStream.cpp | 1 - FluidNC/src/FluidPath.cpp | 7 -- FluidNC/src/FluidPath.h | 3 +- FluidNC/src/HashFS.cpp | 83 ++++++++------- FluidNC/src/HashFS.h | 6 +- FluidNC/src/WebUI/WebServer.cpp | 168 ++++++++++++++++-------------- FluidNC/src/WebUI/WebSettings.cpp | 47 ++++----- FluidNC/stdfs/std-ops.cpp | 6 +- 8 files changed, 158 insertions(+), 163 deletions(-) diff --git a/FluidNC/src/FileStream.cpp b/FluidNC/src/FileStream.cpp index 4d5cfcbed..4ac48e3a6 100644 --- a/FluidNC/src/FileStream.cpp +++ b/FluidNC/src/FileStream.cpp @@ -3,7 +3,6 @@ #include "FileStream.h" #include "Machine/MachineConfig.h" // config-> -#include "Driver/localfs.h" std::string FileStream::path() { return _fpath.c_str(); diff --git a/FluidNC/src/FluidPath.cpp b/FluidNC/src/FluidPath.cpp index ffe743cee..8748339af 100644 --- a/FluidNC/src/FluidPath.cpp +++ b/FluidNC/src/FluidPath.cpp @@ -3,7 +3,6 @@ #include "FluidPath.h" #include "Driver/sdspi.h" -#include "Driver/localfs.h" #include "Config.h" #include "Error.h" #include "HashFS.h" @@ -70,9 +69,3 @@ FluidPath::~FluidPath() { sd_unmount(); } } - -void FluidPath::rehash_fs() { - if (!_isSD) { - HashFS::rehash(); - } -} diff --git a/FluidNC/src/FluidPath.h b/FluidNC/src/FluidPath.h index 134493c31..3bdf1ce3d 100644 --- a/FluidNC/src/FluidPath.h +++ b/FluidNC/src/FluidPath.h @@ -3,6 +3,7 @@ #include #include #include +#include "Driver/localfs.h" namespace stdfs = std::filesystem; @@ -26,8 +27,6 @@ class FluidPath : public stdfs::path { // /localfs/foo -> true, /localfs -> false bool hasTail() { return ++(++begin()) != end(); } - void rehash_fs(); - private: FluidPath(const char* name, const char* fs, std::error_code*); diff --git a/FluidNC/src/HashFS.cpp b/FluidNC/src/HashFS.cpp index c5c7d2b54..9c780c412 100644 --- a/FluidNC/src/HashFS.cpp +++ b/FluidNC/src/HashFS.cpp @@ -9,7 +9,7 @@ static char hexNibble(int i) { return "0123456789ABCDEF"[i & 0xf]; } -static Error hashFile(const char* ipath, std::string& str) { // No ESP command +static Error hashFile(const std::filesystem::path& ipath, std::string& str) { // No ESP command mbedtls_md_context_t ctx; uint8_t shaResult[32]; @@ -28,7 +28,7 @@ static Error hashFile(const char* ipath, std::string& str) { // No ESP command mbedtls_md_finish(&ctx, shaResult); mbedtls_md_free(&ctx); } catch (const Error err) { - log_error("Cannot open file " << ipath); + log_debug("Cannot hash file " << ipath); return Error::FsFailedOpenFile; } @@ -43,62 +43,65 @@ static Error hashFile(const char* ipath, std::string& str) { // No ESP command return Error::Ok; } -void HashFS::rehash() { - rehash_file("/localfs"); +void HashFS::delete_file(const std::filesystem::path& path) { + localFsHashes.erase(path.filename()); + log_debug("Deleting hash for " << path.filename()); } -void HashFS::rehash_fs(const std::filesystem::path& path) { - auto it = path.begin(); - std::string fsname = "/"; - fsname += *++it; - if (fsname != "/littlefs" && fsname != "/spiffs" && fsname != "/localfs") { - return; +bool HashFS::file_is_hashed(const std::filesystem::path& path) { + int count = 0; + for (auto it = path.begin(); it != path.end(); ++it) { + ++count; + } + // The first component is "/", then e.g. "littlefs", then + // the filename. If there are more components, there is + // a subdirectory and we do not hash it. + if (count != 3) { + return false; } + auto fsname = *++path.begin(); + return fsname == "littlefs" || fsname == "spiffs" || fsname == "localfs"; +} - std::error_code ec; +void HashFS::rehash_file(const std::filesystem::path& path) { + if (file_is_hashed(path)) { + std::string hash; + if (hashFile(path, hash) != Error::Ok) { + delete_file(path); + } else { + localFsHashes[path.filename()] = hash; + log_debug(path.filename() << " hash " << hash); + } + } +} +void HashFS::hash_all() { localFsHashes.clear(); - FluidPath fpath { fsname, "", ec }; + std::error_code ec; + FluidPath lfspath { "", localfsName, ec }; if (ec) { - log_error("Cannot open " << fsname); return; } - log_debug("Rehashing " << fsname); - - auto iter = stdfs::directory_iterator { fpath, ec }; + auto iter = stdfs::directory_iterator { lfspath, ec }; if (ec) { - log_error(fpath << " " << ec.message()); + log_error(lfspath << " " << ec.message()); return; } - Error err = Error::Ok; for (auto const& dir_entry : iter) { - if (dir_entry.is_directory()) { - log_debug("Not hashing localfs subdirectories"); - } else { - std::string ipath(fsname); - ipath += "/"; - ipath += dir_entry.path().filename(); - std::string hash; - auto err1 = hashFile(ipath.c_str(), hash); - if (err1 != Error::Ok) { - err = err1; - } else { - std::string filename("/"); - filename += dir_entry.path().filename(); - localFsHashes[filename] = hash; - log_debug(filename << " hash " << hash); - } + if (!dir_entry.is_directory()) { + rehash_file(dir_entry); } } } -std::string HashFS::hash(std::string name) { - std::map::iterator it; - - it = localFsHashes.find(name); - if (it != localFsHashes.end()) { - return it->second; +std::string HashFS::hash(const std::filesystem::path& path) { + if (file_is_hashed(path)) { + std::map::iterator it; + it = localFsHashes.find(path.filename()); + if (it != localFsHashes.end()) { + return it->second; + } } return std::string(); } diff --git a/FluidNC/src/HashFS.h b/FluidNC/src/HashFS.h index 1a442a004..0094279e8 100644 --- a/FluidNC/src/HashFS.h +++ b/FluidNC/src/HashFS.h @@ -7,9 +7,11 @@ class HashFS { public: static std::map localFsHashes; + static bool file_is_hashed(const std::filesystem::path& path); + static void delete_file(const std::filesystem::path& path); static void rehash_file(const std::filesystem::path& path); - static void rehash(); - static std::string hash(std::string name); + static void hash_all(); + static std::string hash(const std::filesystem::path& path); private: }; diff --git a/FluidNC/src/WebUI/WebServer.cpp b/FluidNC/src/WebUI/WebServer.cpp index 9867be327..6256b0b76 100644 --- a/FluidNC/src/WebUI/WebServer.cpp +++ b/FluidNC/src/WebUI/WebServer.cpp @@ -32,7 +32,6 @@ # include "src/Protocol.h" // protocol_send_event # include "src/FluidPath.h" # include "src/WebUI/JSONEncoder.h" -# include "Driver/localfs.h" # include "src/HashFS.h" # include @@ -190,7 +189,7 @@ namespace WebUI { MDNS.addService("http", "tcp", _port); } - HashFS::rehash(); + HashFS::hash_all(); _setupdone = true; return no_error; @@ -226,13 +225,20 @@ namespace WebUI { // Send a file, either the specified path or path.gz bool Web_Server::myStreamFile(const char* path, bool download) { - std::string spath(path); + std::error_code ec; + FluidPath fpath { path, localfsName, ec }; + if (ec) { + return false; + } + std::string hash; // Check for brower cache match - hash = HashFS::hash(spath); + hash = HashFS::hash(fpath); if (!hash.length()) { - hash = HashFS::hash(spath + ".gz"); + std::filesystem::path gzpath(fpath); + gzpath += ".gz"; + hash = HashFS::hash(gzpath); } if (hash.length() && std::string(_webserver->header("If-None-Match").c_str()) == hash) { @@ -255,17 +261,19 @@ namespace WebUI { bool isGzip = false; FileStream* file; try { - file = new FileStream(spath, "r", ""); + file = new FileStream(path, "r", ""); } catch (const Error err) { try { - file = new FileStream(spath + ".gz", "r", ""); + std::filesystem::path gzpath(fpath); + gzpath += ".gz"; + file = new FileStream(gzpath, "r", ""); isGzip = true; } catch (const Error err) { - log_debug(spath << " not found"); + log_debug(path << " not found"); return false; } } - log_debug(spath << " found"); + log_debug(path << " found"); if (download) { _webserver->sendHeader("Content-Disposition", "attachment"); } @@ -325,7 +333,7 @@ namespace WebUI { void Web_Server::handle_root() { if (!(_webserver->hasArg("forcefallback") && _webserver->arg("forcefallback") == "yes")) { - if (myStreamFile("/index.html")) { + if (myStreamFile("index.html")) { return; } } @@ -364,7 +372,7 @@ namespace WebUI { // This lets the user customize the not-found page by // putting a "404.htm" file on the local filesystem - if (myStreamFile("/404.htm")) { + if (myStreamFile("404.htm")) { return; } @@ -900,88 +908,86 @@ namespace WebUI { } } - std::filesystem::path filepath; // Initially empty + FluidPath fpath { path, fs, ec }; + if (ec) { + sendJSON(200, "{\"status\":\"No SD card\"}"); + return; + } - { // Scope for fpath; we need it to go out of scope for later rehash - FluidPath fpath { path, fs, ec }; - if (ec) { - sendJSON(200, "{\"status\":\"No SD card\"}"); - return; - } + // Handle deletions and directory creation + if (_webserver->hasArg("action") && _webserver->hasArg("filename")) { + std::string action(_webserver->arg("action").c_str()); + std::string filename = std::string(_webserver->arg("filename").c_str()); + if (action == "delete") { + log_debug("Deleting " << fpath << " / " << filename); + if (stdfs::remove(fpath / filename, ec)) { + sstatus = filename + " deleted"; + HashFS::delete_file(fpath / filename); - // Handle deletions and directory creation - if (_webserver->hasArg("action") && _webserver->hasArg("filename")) { - std::string action(_webserver->arg("action").c_str()); - std::string filename = std::string(_webserver->arg("filename").c_str()); - if (action == "delete") { - log_debug("Deleting " << fpath << " / " << filename); - if (stdfs::remove(fpath / filename, ec)) { - filepath = fpath; - sstatus = filename + " deleted"; - } else { - sstatus = "Cannot delete "; - sstatus += filename + " " + ec.message(); - } - } else if (action == "deletedir") { - if (stdfs::remove_all(fpath / filename.c_str(), ec)) { - sstatus = filename + " deleted"; - } else { - sstatus = "Cannot delete "; - sstatus += filename + " " + ec.message(); - } - } else if (action == "createdir") { - if (stdfs::create_directory(fpath / filename, ec)) { - sstatus = filename + " created"; - } else { - sstatus = "Cannot create "; - sstatus += filename + " " + ec.message(); - } + } else { + sstatus = "Cannot delete "; + sstatus += filename + " " + ec.message(); + } + } else if (action == "deletedir") { + stdfs::path dirpath { fpath / filename }; + log_debug("Deleting directory " << dirpath); + int count = stdfs::remove_all(dirpath, ec); + if (count > 0) { + sstatus = filename + " deleted"; + } else { + log_debug("remove_all returned " << count); + sstatus = "Cannot delete "; + sstatus += filename + " " + ec.message(); + } + } else if (action == "createdir") { + if (stdfs::create_directory(fpath / filename, ec)) { + sstatus = filename + " created"; + } else { + sstatus = "Cannot create "; + sstatus += filename + " " + ec.message(); } } + } - //check if no need build file list - if (_webserver->hasArg("dontlist") && _webserver->arg("dontlist") == "yes") { - list_files = false; - } + //check if no need build file list + if (_webserver->hasArg("dontlist") && _webserver->arg("dontlist") == "yes") { + list_files = false; + } - std::string s; - WebUI::JSONencoder j(false, &s); - j.begin(); - - if (list_files) { - auto iter = stdfs::directory_iterator { fpath, ec }; - if (!ec) { - j.begin_array("files"); - for (auto const& dir_entry : iter) { - j.begin_object(); - j.member("name", dir_entry.path().filename()); - j.member("shortname", dir_entry.path().filename()); - j.member("size", dir_entry.is_directory() ? -1 : dir_entry.file_size()); - j.member("datetime", ""); - j.end_object(); - } - j.end_array(); + std::string s; + WebUI::JSONencoder j(false, &s); + j.begin(); + + if (list_files) { + auto iter = stdfs::directory_iterator { fpath, ec }; + if (!ec) { + j.begin_array("files"); + for (auto const& dir_entry : iter) { + j.begin_object(); + j.member("name", dir_entry.path().filename()); + j.member("shortname", dir_entry.path().filename()); + j.member("size", dir_entry.is_directory() ? -1 : dir_entry.file_size()); + j.member("datetime", ""); + j.end_object(); } + j.end_array(); } + } - auto space = stdfs::space(fpath, ec); - totalspace = space.capacity; - usedspace = totalspace - space.available; + auto space = stdfs::space(fpath, ec); + totalspace = space.capacity; + usedspace = totalspace - space.available; - j.member("path", path.c_str()); - j.member("total", formatBytes(totalspace)); - j.member("used", formatBytes(usedspace + 1)); + j.member("path", path.c_str()); + j.member("total", formatBytes(totalspace)); + j.member("used", formatBytes(usedspace + 1)); - uint32_t percent = totalspace ? (usedspace * 100) / totalspace : 100; + uint32_t percent = totalspace ? (usedspace * 100) / totalspace : 100; - j.member("occupation", percent); - j.member("status", sstatus); - j.end(); - sendJSON(200, s); - } - if (!filepath.empty()) { - HashFS::rehash_file(filepath); - } + j.member("occupation", percent); + j.member("status", sstatus); + j.end(); + sendJSON(200, s); } void Web_Server::handle_direct_SDFileList() { handleFileOps(sdName); } diff --git a/FluidNC/src/WebUI/WebSettings.cpp b/FluidNC/src/WebUI/WebSettings.cpp index 4fc54bd6e..504b8b917 100644 --- a/FluidNC/src/WebUI/WebSettings.cpp +++ b/FluidNC/src/WebUI/WebSettings.cpp @@ -17,8 +17,6 @@ #include "../Report.h" // git_info #include "../InputFile.h" // InputFile -#include "Driver/localfs.h" // localfs_format - #include "Commands.h" // COMMANDS::restart_MCU(); #include "WifiConfig.h" @@ -353,37 +351,30 @@ namespace WebUI { static Error deleteObject(const char* fs, char* name, Channel& out) { std::error_code ec; - std::filesystem::path filepath; - { - FluidPath fpath { name, fs, ec }; + FluidPath fpath { name, fs, ec }; + if (ec) { + log_to(out, "No SD"); + return Error::FsFailedMount; + } + auto isDir = stdfs::is_directory(fpath, ec); + if (ec) { + log_to(out, "Delete failed: ", ec.message()); + return Error::FsFileNotFound; + } + if (isDir) { + stdfs::remove_all(fpath, ec); if (ec) { - log_to(out, "No SD"); - return Error::FsFailedMount; + log_to(out, "Delete Directory failed: ", ec.message()); + return Error::FsFailedDelDir; } - auto isDir = stdfs::is_directory(fpath, ec); + } else { + stdfs::remove(fpath, ec); if (ec) { - log_to(out, "Delete failed: ", ec.message()); - return Error::FsFileNotFound; + log_to(out, "Delete File failed: ", ec.message()); + return Error::FsFailedDelFile; } - if (isDir) { - stdfs::remove_all(fpath, ec); - if (ec) { - log_to(out, "Delete Directory failed: ", ec.message()); - return Error::FsFailedDelDir; - } - } else { - stdfs::remove(fpath, ec); - if (ec) { - log_to(out, "Delete File failed: ", ec.message()); - return Error::FsFailedDelFile; - } - } - // We want fpath to go out of scope so that any volume writes - // are committed before we recompute the hash. - filepath = fpath; } - - HashFS::rehash_file(filepath); + HashFS::delete_file(fpath); return Error::Ok; } diff --git a/FluidNC/stdfs/std-ops.cpp b/FluidNC/stdfs/std-ops.cpp index c5eea3959..746a6b433 100644 --- a/FluidNC/stdfs/std-ops.cpp +++ b/FluidNC/stdfs/std-ops.cpp @@ -907,8 +907,10 @@ bool fs::remove(const path& p) { return result; } bool fs::remove(const path& p, error_code& ec) noexcept { - if (exists(symlink_status(p, ec))) { - if (::remove(p.c_str()) == 0) { + auto fs = symlink_status(p, ec); + if (exists(fs)) { + int res = fs.type() == file_type::directory ? ::rmdir(p.c_str()) : ::remove(p.c_str()); + if (res == 0) { ec.clear(); return true; } else From e7b78ba49b12ae1e01cfeee437142a34d59b6e73 Mon Sep 17 00:00:00 2001 From: Mitch Bradley Date: Fri, 23 Jun 2023 14:07:23 -1000 Subject: [PATCH 044/212] Visualizer bounding box fix, allow auto-report to be configured off ... by setting the auto-report interval to 0 in preferences. --- FluidNC/data/index.html.gz | Bin 116063 -> 116243 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/FluidNC/data/index.html.gz b/FluidNC/data/index.html.gz index 30ddf3446f51d533a2b27c95f27150b5ee08aa33..9e405e166bc63417c0c24574f4c402626a49d4c4 100644 GIT binary patch delta 86215 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ӿ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 delta 86059 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