diff --git a/command.sh b/command.sh index 8b1d0d4f..ee83119c 100644 --- a/command.sh +++ b/command.sh @@ -79,7 +79,9 @@ function build_sketch() sed -i "s/#define FILESYSTEM_FEATURE ESP_LITTLEFS_FILESYSTEM/#define FILESYSTEM_FEATURE ESP_SPIFFS_FILESYSTEM/g" $TRAVIS_BUILD_DIR/esp3d/configuration.h rm -fr $HOME/arduino_ide rm -fr $HOME/.arduino15 - platformio run + platformio run -e esp32dev + sed -i "s/#define FILESYSTEM_FEATURE ESP_SPIFFS_FILESYSTEM/#define FILESYSTEM_FEATURE ESP_LITTLEFS_FILESYSTEM/g" $TRAVIS_BUILD_DIR/esp3d/configuration.h + platformio run -e esp8266dev fi } diff --git a/docs/Commands.txt b/docs/Commands.txt index 3b58e95e..4e655c04 100644 --- a/docs/Commands.txt +++ b/docs/Commands.txt @@ -122,7 +122,7 @@ ESP_BUZZER 119 //1 byte = flag ESP_INTERNET_TIME 120 //1 byte = flag ESP_HTTP_PORT 121 //4 bytes = int ESP_TELNET_PORT 125 //4 bytes = int -ESP_OUTPUT_FLAG 129 //1 bytes = flag +ESP_SERIAL_FLAG 129 //1 bytes = flag ESP_HOSTNAME 130 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese ESP_SENSOR_INTERVAL 164 //4 bytes = int ESP_SETTINGS_VERSION 168 //8 bytes = 7+1 = string ESP3D + 2 digits @@ -131,8 +131,8 @@ ESP_USER_PWD 197 //21 bytes 20+1 = string ; warning does not su ESP_AP_SSID 218 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese ESP_AP_PASSWORD 251 //65 bytes 64 +1 = string ;warning does not support multibyte char like chinese ESP_AP_IP_VALUE 316 //4 bytes xxx.xxx.xxx.xxx -ESP_BOOT_DELAY 320 //4 bytes xxx.xxx.xxx.xxx -ESP_WEBSOCKET_PORT 324 //4 bytes xxx.xxx.xxx.xxx +ESP_BOOT_DELAY 320 //4 bytes = int +ESP_WEBSOCKET_PORT 324 //4 bytes= int ESP_HTTP_ON 328 //1 byte = flag ESP_TELNET_ON 329 //1 byte = flag ESP_WEBSOCKET_ON 330 //1 byte = flag @@ -146,10 +146,10 @@ ESP_TIME_IS_DST 463 //1 bytes = flag ESP_TIME_SERVER1 464 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese ESP_TIME_SERVER2 593 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese ESP_TIME_SERVER3 722 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese -ESP_SD_DEVICE_TYPE 851 //1 bytes = flag +ESP_PRINTER_LCD 851 //1 bytes = flag ESP_SD_MOUNT 852 //1 bytes = flag ESP_SESSION_TIMEOUT 853 //1 bytes = flag -ESP_DIRECT_SD_CHECK 854 //1 bytes = flag +ESP_WEBSOCKET_FLAG 854 //1 bytes = flag ESP_SD_CHECK_UPDATE_AT_BOOT 855//1 bytes = flag ESP_NOTIFICATION_SETTINGS 856 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese ESP_CALIBRATION_1 985 //4 bytes = int @@ -157,13 +157,19 @@ ESP_CALIBRATION_2 989 //4 bytes = int ESP_CALIBRATION_3 993 //4 bytes = int ESP_CALIBRATION_4 997 //4 bytes = int ESP_CALIBRATION_5 1001 //4 bytes = int -ESP_FREE_ENTRY 1005 //4 bytes = int +ESP_SETUP 1005 //1 byte = flag +ESP_TELNET_FLAG 1006 //1 byte = flag +ESP_BT_FLAG 1007 //1 byte = flag +ESP_LCD_FLAG 1008 //1 byte = flag ESP_FTP_CTRL_PORT 1009 //4 bytes = int ESP_FTP_DATA_ACTIVE_PORT 1013 //4 bytes = int ESP_FTP_DATA_PASSIVE_PORT 1017 //4 bytes = int ESP_FTP_ON 1021 //1 byte = flag ESP_AUTO_NOTIFICATION 1022 //1 byte = flag +* Get/Set Check update at boot state which can be ON, OFF +[ESP402]pwd= + *Get available AP list (limited to 30) output is JSON or plain text according parameter [ESP410] @@ -217,3 +223,6 @@ rmdir / remove / mkdir / exists / create * Get state / Set Enable / Disable buzzer [ESP910][pwd=] + +*Get state / Set state of output message clients +[ESP910]=[pwd=] \ No newline at end of file diff --git a/docs/espconf.ini b/docs/espconf.ini new file mode 100644 index 00000000..521e3446 --- /dev/null +++ b/docs/espconf.ini @@ -0,0 +1,141 @@ +[network] +#Hostname string of 32 chars max +hostname = myesp + +#Radio mode BT, WIFI-STA, WIFI-AP, ETH-STA, OFF +radio_mode = WIFI-STA + +#STA SSID string of 32 chars max +STA_SSID = myssid + +#STA Password string of 64 chars max, minimum 0 or 8 chars +STA_Password = ******* + +#STA IP Mode DHCP / STATIC +STA_IP_mode = DHCP + +#STA static IP +STA_IP = 192.168.0.2 + +#STA static gateway +STA_GW = 192.168.0.1 + +#STA static mask +STA_MSK = 255.255.255.0 + +#AP SSID string of 32 chars max +AP_SSID = myssid + +#AP Password string of 64 chars max, minimum 0 or 8 chars +AP_Password = 12345678 + +#AP static IP +AP_IP = 192.168.0.1 + +#AP channel 1~14 +AP_channel = 11 + +[services] +#Active or not HTTP Yes / No +HTTP_active = Yes + +#HTTP Port +HTTP_Port = 80 + +#Active or not Telnet Yes / No +TELNET_active = Yes + +#Telnet Port +TELNET_Port = 23 + +#Active or not WebSocket Yes / No +WebSocket_active = Yes + +#WebSocket Port +WebSocket_Port = 8282 + +#Active or not FTP Yes / No +FTP_active = Yes + +#FTP control Port +FTP_Control_Port = 21 + +#FTP active Port +FTP_Active_Port = 20 + +#FTP passive Port +FTP_Passive_Port = 55600 + +#Auto notification +AUTONOTIFICATION = Yes + +#Notification type None / PushOver / Line / Email / Telegram +NOTIF_TYPE = None + +#Notification token 1 string of 64 chars max +NOTIF_TOKEN1 = + +#Notification token 2 string of 64 chars max +NOTIF_TOKEN2 = + +#Notification settings string of 127 chars max +NOTIF_TOKEN_Settings= + +#SD card Speed factor 1 2 4 6 8 16 32 +SD_SPEED = 4 + +#Check update from SD Yes / No +CHECK_FOR_UPDATE = Yes + +#Enable Buzzer Yes / No +Active_buzzer = yes + +#Active Internet time Yes / No +Active_Internet_time = yes + +#Time servers string of 127 chars max +Time_server1 = 1.pool.ntp.org +Time_server2 = 2.pool.ntp.org +Time_server3 = 3.pool.ntp.org + +#time zone -12~12 +Time_zone = 2 +#is DST Yes/No +Time_DST = No + +#Authentication passwords string of 20 chars max +ADMIN_PASSWORD = xxxxxxx +USER_PASSWORD = xxxxxxx +#session time out in min +Sesion_timeout = 3 + +#Sensor type if enabled None / DHT11 / DHT22 / ANALOG / BMP280 / BME280 +SENSOR_TYPE = NONE +#sensor poiling interval in ms +SENSOR_INTERVAL = 30000 + + +[system] +#Target Firmware Marlin / Repetier / MarlinKimbra / Smoothieware / GRBL +TargetFW=Marlin + +#Baud Rate +Baud_rate = 115200 + +#Boot delay in ms +Boot_delay = 5000 + +#Outputs +#printer LCD +Active_Printer_LCD = Yes +#esp3d lcd +Active_ESP3D_LCD = Yes +#ESP3D Serial +Active_Serial = Yes +#Websocket +Active_WebSocket = Yes +#Telnet +Active_Telnet = Yes +#Bluetooth[ESP] +Active_BT = Yes + diff --git a/esp3d/configuration.h b/esp3d/configuration.h index a663fd6b..5a724d73 100644 --- a/esp3d/configuration.h +++ b/esp3d/configuration.h @@ -126,7 +126,7 @@ //ESP_SD_NATIVE 1 //esp32 / esp8266 //ESP_SDIO 2 //esp32 only //ESP_SDFAT 3 //esp8266 (same as native) / esp32 -//#define SD_DEVICE ESP_SDIO +#define SD_DEVICE ESP_SD_NATIVE //SDIO mode #define SD_ONE_BIT_MODE true @@ -139,15 +139,17 @@ //pin if reader has insert detection feature //let -1 or comment if none -//#define ESP_SD_DETECT_PIN -1 +//#define ESP_SD_DETECT_PIN 4 //value expected for ESP_SD_DETECT_PIN (0 or 1) -#define ESP_SD_DETECT_VALUE 1 +#define ESP_SD_DETECT_VALUE 0 + +//#define ESP_SD_CS_PIN 5 //FILESYSTEM_FEATURE: to host some files on flash //ESP_SPIFFS_FILESYSTEM 0 //ESP_FAT_FILESYSTEM 1 //ESP_LITTLEFS_FILESYSTEM 2 -#define FILESYSTEM_FEATURE ESP_SPIFFS_FILESYSTEM +#define FILESYSTEM_FEATURE ESP_LITTLEFS_FILESYSTEM //Allows to mount /FS and /SD under / for FTP server #define GLOBAL_FILESYSTEM_FEATURE @@ -188,6 +190,9 @@ //WEB_UPDATE_FEATURE: allow to flash fw using web UI #define WEB_UPDATE_FEATURE +//SD_UPDATE_FEATURE: allow to flash/configure fw using SD +#define SD_UPDATE_FEATURE + //NOTIFICATION_FEATURE : allow to push notifications #define NOTIFICATION_FEATURE @@ -242,7 +247,7 @@ //DEBUG_OUTPUT_SERIAL2 3 //DEBUG_OUTPUT_TELNET 4 //DEBUG_OUTPUT_WEBSOCKET 5 -//#define ESP_DEBUG_FEATURE DEBUG_OUTPUT_SERIAL2 +//#define ESP_DEBUG_FEATURE DEBUG_OUTPUT_SERIAL0 #ifdef ESP_DEBUG_FEATURE #define DEBUG_BAUDRATE 115200 diff --git a/esp3d/src/core/commands.cpp b/esp3d/src/core/commands.cpp index e4e0fc77..afa59ec6 100644 --- a/esp3d/src/core/commands.cpp +++ b/esp3d/src/core/commands.cpp @@ -414,6 +414,13 @@ bool Commands::execute_internal_command (int cmd, const char* cmd_params, level_ case 200: response = ESP200(cmd_params, auth_type, output); break; +#ifdef SD_UPDATE_FEATURE + //Get/Set SD Check at boot state which can be ON, OFF + //[ESP402]pwd= + case 402: + response = ESP402(cmd_params, auth_type, output); + break; +#endif //#ifdef SD_UPDATE_FEATURE #endif //SD_DEVICE #ifdef DIRECT_PIN_FEATURE //Get/Set pin value @@ -596,6 +603,11 @@ bool Commands::execute_internal_command (int cmd, const char* cmd_params, level_ response = ESP910(cmd_params, auth_type, output); break; #endif //BUZZER_DEVICE + case 920: + //Get state / Set state of output message clients + //[ESP910]=[pwd=] + response = ESP920(cmd_params, auth_type, output); + break; default: output->printERROR ("Invalid Command"); response = false; diff --git a/esp3d/src/core/commands.h b/esp3d/src/core/commands.h index e785fa2a..cedde69b 100644 --- a/esp3d/src/core/commands.h +++ b/esp3d/src/core/commands.h @@ -86,6 +86,9 @@ public: #endif //FTP_FEATURE #if defined (SD_DEVICE) bool ESP200(const char* cmd_params, level_authenticate_type auth_level, ESP3DOutput * output); +#ifdef SD_UPDATE_FEATURE + bool ESP402(const char* cmd_params, level_authenticate_type auth_level, ESP3DOutput * output); +#endif //SD_UPDATE_FEATURE #endif //SD_DEVICE #ifdef DIRECT_PIN_FEATURE bool ESP201(const char* cmd_params, level_authenticate_type auth_level, ESP3DOutput * output); @@ -137,6 +140,7 @@ public: #endif //GLOBAL_FILESYSTEM_FEATURE bool ESP800(const char* cmd_params, level_authenticate_type auth_level, ESP3DOutput * output); bool ESP900(const char* cmd_params, level_authenticate_type auth_level, ESP3DOutput * output); + bool ESP920(const char* cmd_params, level_authenticate_type auth_level, ESP3DOutput * output); #ifdef BUZZER_DEVICE bool ESP910(const char* cmd_params, level_authenticate_type auth_level, ESP3DOutput * output); bool ESP250(const char* cmd_params, level_authenticate_type auth_level, ESP3DOutput * output); diff --git a/esp3d/src/core/esp3d.cpp b/esp3d/src/core/esp3d.cpp index 3781216a..13e87e84 100644 --- a/esp3d/src/core/esp3d.cpp +++ b/esp3d/src/core/esp3d.cpp @@ -46,6 +46,9 @@ #ifdef ESP_LUA_INTERPRETER_FEATURE #include "../modules/lua_interpreter/lua_interpreter_service.h" #endif //#ifdef +#ifdef SD_UPDATE_FEATURE +#include "../modules/update/update_service.h" +#endif // SD_UPDATE_FEATURE #include "esp3doutput.h" #include "../modules/boot_delay/boot_delay.h" @@ -81,6 +84,13 @@ bool Esp3D::begin() #endif //CONNECTED_DEVICES_FEATURE //delay to avoid to disturb printer bd.begin(); +#ifdef SD_UPDATE_FEATURE + if (update_service.begin()) { + log_esp3d("Need restart due to update"); + //no need to continue as there was an update + restart_now(); + } +#endif // SD_UPDATE_FEATURE log_esp3d("Mode %d", WiFi.getMode()); if (!Settings_ESP3D::begin()) { log_esp3d("Need reset settings"); diff --git a/esp3d/src/core/esp3doutput.cpp b/esp3d/src/core/esp3doutput.cpp index 02f6e0f3..0fd22455 100644 --- a/esp3d/src/core/esp3doutput.cpp +++ b/esp3d/src/core/esp3doutput.cpp @@ -31,7 +31,12 @@ #if defined (TELNET_FEATURE) #include "../modules/telnet/telnet_server.h" #endif //TELNET_FEATURE -uint8_t ESP3DOutput::_outputflags = ESP_ALL_CLIENTS; +uint8_t ESP3DOutput::_serialoutputflags = DEFAULT_SERIAL_OUTPUT_FLAG; +uint8_t ESP3DOutput::_printerlcdoutputflags = DEFAULT_PRINTER_LCD_FLAG; +uint8_t ESP3DOutput::_websocketoutputflags = DEFAULT_WEBSOCKET_FLAG; +uint8_t ESP3DOutput::_telnetoutputflags = DEFAULT_TELNET_FLAG; +uint8_t ESP3DOutput::_lcdoutputflags = DEFAULT_LCD_FLAG; +uint8_t ESP3DOutput::_BToutputflags = DEFAULT_BT_FLAG; #if defined (HTTP_FEATURE) #if defined (ARDUINO_ARCH_ESP32) #include @@ -95,10 +100,29 @@ ESP3DOutput::~ESP3DOutput() bool ESP3DOutput::isOutput(uint8_t flag, bool fromsettings) { if(fromsettings) { - _outputflags = Settings_ESP3D::read_byte (ESP_OUTPUT_FLAG); + _serialoutputflags= Settings_ESP3D::read_byte (ESP_SERIAL_FLAG); + _printerlcdoutputflags= Settings_ESP3D::read_byte (ESP_PRINTER_LCD_FLAG); + _websocketoutputflags= Settings_ESP3D::read_byte (ESP_WEBSOCKET_FLAG); + _telnetoutputflags= Settings_ESP3D::read_byte (ESP_TELNET_FLAG); + _lcdoutputflags= Settings_ESP3D::read_byte (ESP_LCD_FLAG); + _BToutputflags= Settings_ESP3D::read_byte (ESP_BT_FLAG); + } + switch(flag) { + case ESP_SERIAL_CLIENT: + return _serialoutputflags; + case ESP_PRINTER_LCD_CLIENT: + return _printerlcdoutputflags; + case ESP_WEBSOCKET_CLIENT: + return _websocketoutputflags; + case ESP_TELNET_CLIENT: + return _telnetoutputflags; + case ESP_SCREEN_CLIENT: + return _lcdoutputflags; + case ESP_BT_CLIENT: + return _BToutputflags; + default: + return true; } - return ((_outputflags & flag) == flag); - } size_t ESP3DOutput::dispatch (uint8_t * sbuf, size_t len) @@ -251,7 +275,6 @@ size_t ESP3DOutput::printMSG(const char * s, bool withNL) display = "M117 "; display += s; break; - case REPETIER4DV: case SMOOTHIEWARE: case REPETIER: default: @@ -303,7 +326,6 @@ size_t ESP3DOutput::printERROR(const char * s, int code_error) display = "error: "; display += s; break; - case REPETIER4DV: case SMOOTHIEWARE: case REPETIER: default: diff --git a/esp3d/src/core/esp3doutput.h b/esp3d/src/core/esp3doutput.h index ca689e8c..f71aacbe 100644 --- a/esp3d/src/core/esp3doutput.h +++ b/esp3d/src/core/esp3doutput.h @@ -97,7 +97,12 @@ private: bool _footerSent; WEBSERVER * _webserver; #endif //HTTP_FEATURE - static uint8_t _outputflags; + static uint8_t _serialoutputflags; + static uint8_t _printerlcdoutputflags; + static uint8_t _websocketoutputflags; + static uint8_t _telnetoutputflags; + static uint8_t _lcdoutputflags; + static uint8_t _BToutputflags; }; class ESP3DGlobalOutput diff --git a/esp3d/src/core/espcmd/ESP0.cpp b/esp3d/src/core/espcmd/ESP0.cpp index 1a80fbd7..0b6c9d57 100644 --- a/esp3d/src/core/espcmd/ESP0.cpp +++ b/esp3d/src/core/espcmd/ESP0.cpp @@ -94,6 +94,9 @@ const char * help[]= {"[ESP] - display this help", "[ESP290](delay in ms) - do a pause", "[ESP400] - display ESP3D settings in JSON", "[ESP401]P=(position) T=(type) V=(value) - Set specific setting", +#ifdef SD_UPDATE_FEATURE + "[ESP402](State) - display/set check update at boot from SD which can be ON, OFF", +#endif //SD_UPDATE_FEATURE #if defined (WIFI_FEATURE) "[ESP410](plain) - display available AP list (limited to 30) in plain/JSON", #endif //WIFI_FEATURE @@ -133,6 +136,7 @@ const char * help[]= {"[ESP] - display this help", #ifdef BUZZER_DEVICE "[ESP910](ENABLE/DISABLE) - display/set buzzer state", #endif //BUZZER_DEVICE + "[ESP920](client)=(ON/OFF) - display/set SERIAL / LCD / PRINTER_LCD/ WEBSOCKET / TELNET /BT / ALL client state", "" }; const uint cmdlist[]= {0, diff --git a/esp3d/src/core/espcmd/ESP400.cpp b/esp3d/src/core/espcmd/ESP400.cpp index fc5cecc0..5e47f80e 100644 --- a/esp3d/src/core/espcmd/ESP400.cpp +++ b/esp3d/src/core/espcmd/ESP400.cpp @@ -462,6 +462,14 @@ bool Commands::ESP400(const char* cmd_params, level_authenticate_type auth_type, output->print("\",\"T\":\"B\",\"V\":\""); output->print (Settings_ESP3D::read_byte(ESP_SD_SPEED_DIV)); output->print("\",\"H\":\"speedx\",\"O\":[{\"1\":\"1\"},{\"2\":\"2\"},{\"3\":\"3\"},{\"4\":\"4\"},{\"6\":\"6\"},{\"8\":\"8\"},{\"16\":\"16\"},{\"32\":\"32\"}]}"); +#ifdef SD_UPDATE_FEATURE + //SD CHECK UPDATE AT BOOT feature + output->print(",{\"F\":\"device/sd\",\"P\":\""); + output->print(ESP_SD_CHECK_UPDATE_AT_BOOT); + output->print("\",\"T\":\"B\",\"V\":\""); + output->print (Settings_ESP3D::read_byte(ESP_SD_CHECK_UPDATE_AT_BOOT)); + output->print("\",\"H\":\"SD updater\",\"O\":[{\"no\":\"0\"},{\"yes\":\"1\"}]}"); +#endif //SD_UPDATE_FEATURE #endif //SD_DEVICE //Target FW output->print (",{\"F\":\"system/system\",\"P\":\""); @@ -470,8 +478,6 @@ bool Commands::ESP400(const char* cmd_params, level_authenticate_type auth_type, output->print (Settings_ESP3D::read_byte(ESP_TARGET_FW)); output->print ("\",\"H\":\"targetfw\",\"O\":[{\"repetier\":\""); output->print (REPETIER); - output->print ("\"},{\"repetier4davinci\":\""); - output->print (REPETIER4DV); output->print ("\"},{\"marlin\":\""); output->print (MARLIN); output->print ("\"},{\"marlinkimbra\":\""); @@ -509,25 +515,51 @@ bool Commands::ESP400(const char* cmd_params, level_authenticate_type auth_type, output->print (Settings_ESP3D::get_min_int32_value(ESP_BOOT_DELAY)); output->print ("\"}"); //Output flag - output->print (",{\"F\":\"system/system\",\"P\":\""); - output->print (ESP_OUTPUT_FLAG); - output->print ("\",\"T\":\"F\",\"V\":\""); - output->print (Settings_ESP3D::read_byte(ESP_OUTPUT_FLAG)); - output->printf ("\",\"H\":\"outputmsg\",\"O\":[{\"M117\":\"%d\"}", ESP_PRINTER_LCD_CLIENT); + //Serial + output->print (",{\"F\":\"system/outputmsg\",\"P\":\""); + output->print (ESP_SERIAL_FLAG); + output->print ("\",\"T\":\"B\",\"V\":\""); + output->print (Settings_ESP3D::read_byte(ESP_SERIAL_FLAG)); + output->print ("\",\"H\":\"serial\",\"O\":[{\"no\":\"0\"},{\"yes\":\"1\"}]}"); + + //Printer LCD + output->print (",{\"F\":\"system/outputmsg\",\"P\":\""); + output->print (ESP_PRINTER_LCD_FLAG); + output->print ("\",\"T\":\"B\",\"V\":\""); + output->print (Settings_ESP3D::read_byte(ESP_PRINTER_LCD_FLAG)); + output->print ("\",\"H\":\"M117\",\"O\":[{\"no\":\"0\"},{\"yes\":\"1\"}]}"); #ifdef DISPLAY_DEVICE - output->printf (",{\"screen\":\"%d\"}", ESP_SCREEN_CLIENT); + //ESP LCD + output->print (",{\"F\":\"system/outputmsg\",\"P\":\""); + output->print (ESP_LCD_FLAG); + output->print ("\",\"T\":\"B\",\"V\":\""); + output->print (Settings_ESP3D::read_byte(ESP_LCD_FLAG)); + output->print ("\",\"H\":\"M117\",\"O\":[{\"no\":\"0\"},{\"yes\":\"1\"}]}"); #endif //DISPLAY_DEVICE - output->printf (",{\"serial\":\"%d\"}", ESP_SERIAL_CLIENT); #ifdef WS_DATA_FEATURE - output->printf (",{\"ws\":\"%d\"}", ESP_WEBSOCKET_CLIENT); + //Websocket + output->print (",{\"F\":\"system/outputmsg\",\"P\":\""); + output->print (ESP_WEBSOCKET_FLAG); + output->print ("\",\"T\":\"B\",\"V\":\""); + output->print (Settings_ESP3D::read_byte(ESP_WEBSOCKET_FLAG)); + output->print ("\",\"H\":\"ws\",\"O\":[{\"no\":\"0\"},{\"yes\":\"1\"}]}"); #endif //WS_DATA_FEATURE #ifdef BLUETOOTH_FEATURE - output->printf (",{\"bt\":\"%d\"}", ESP_BT_CLIENT); + //BT + output->print (",{\"F\":\"system/outputmsg\",\"P\":\""); + output->print (ESP_BT_FLAG); + output->print ("\",\"T\":\"B\",\"V\":\""); + output->print (Settings_ESP3D::read_byte(ESP_BT_FLAG)); + output->print ("\",\"H\":\"BT\",\"O\":[{\"no\":\"0\"},{\"yes\":\"1\"}]}"); #endif //BLUETOOTH_FEATURE #ifdef TELNET_FEATURE - output->printf (",{\"telnet\":\"%d\"}", ESP_TELNET_CLIENT); + //Telnet + output->print (",{\"F\":\"system/outputmsg\",\"P\":\""); + output->print (ESP_TELNET_FLAG); + output->print ("\",\"T\":\"B\",\"V\":\""); + output->print (Settings_ESP3D::read_byte(ESP_TELNET_FLAG)); + output->print ("\",\"H\":\"telnet\",\"O\":[{\"no\":\"0\"},{\"yes\":\"1\"}]}"); #endif //TELNET_FEATURE - output->print ("]}"); output->print ("]}"); return true; diff --git a/esp3d/src/core/espcmd/ESP401.cpp b/esp3d/src/core/espcmd/ESP401.cpp index 7cb125f7..0d130b0d 100644 --- a/esp3d/src/core/espcmd/ESP401.cpp +++ b/esp3d/src/core/espcmd/ESP401.cpp @@ -70,6 +70,14 @@ bool Commands::ESP401(const char* cmd_params, level_authenticate_type auth_type, } else { //dynamique refresh is better than restart the boards switch(spos.toInt()) { + case ESP_SERIAL_FLAG: + case ESP_PRINTER_LCD_FLAG: + case ESP_WEBSOCKET_FLAG: + case ESP_TELNET_FLAG: + case ESP_LCD_FLAG: + case ESP_BT_FLAG: + ESP3DOutput::isOutput(ESP_ALL_CLIENTS,true); + break; case ESP_TARGET_FW: Settings_ESP3D::GetFirmwareTarget(true); break; diff --git a/esp3d/src/core/espcmd/ESP402.cpp b/esp3d/src/core/espcmd/ESP402.cpp new file mode 100644 index 00000000..55b907f6 --- /dev/null +++ b/esp3d/src/core/espcmd/ESP402.cpp @@ -0,0 +1,67 @@ +/* + ESP402.cpp - ESP3D command class + + Copyright (c) 2014 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with This code; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#include "../../include/esp3d_config.h" +#if defined (SD_UPDATE_FEATURE) +#include "../commands.h" +#include "../esp3doutput.h" +#include "../settings_esp3d.h" +#include "../../modules/authentication/authentication_service.h" +//Set SD Check at boot state which can be ON, OFF +//[ESP402]pwd= +bool Commands::ESP402(const char* cmd_params, level_authenticate_type auth_type, ESP3DOutput * output) +{ + bool response = true; + String parameter; +#ifdef AUTHENTICATION_FEATURE + if (auth_type == LEVEL_GUEST) { + output->printERROR("Wrong authentication!", 401); + return false; + } +#else + (void)auth_type; +#endif //AUTHENTICATION_FEATURE + parameter = get_param (cmd_params, ""); + //get + if (parameter.length() == 0) { + output->printMSG((Settings_ESP3D::read_byte(ESP_SD_CHECK_UPDATE_AT_BOOT) == 0)?"OFF":"ON"); + } else { //set +#ifdef AUTHENTICATION_FEATURE + if (auth_type != LEVEL_ADMIN) { + output->printERROR("Wrong authentication!", 401); + return false; + } +#endif //AUTHENTICATION_FEATURE + parameter.toUpperCase(); + if (!((parameter == "ON") || (parameter == "OFF"))) { + output->printERROR("Only ON or OFF mode supported!"); + return false; + } else { + if (!Settings_ESP3D::write_byte (ESP_SD_CHECK_UPDATE_AT_BOOT, (parameter == "ON")?1:0)) { + output->printERROR ("Set failed!"); + response = false; + } + + output->printMSG ("ok"); + } + } + return response; +} + +#endif //SD_UPDATE_FEATURE diff --git a/esp3d/src/core/espcmd/ESP420.cpp b/esp3d/src/core/espcmd/ESP420.cpp index 6b688f49..d1f46f1e 100644 --- a/esp3d/src/core/espcmd/ESP420.cpp +++ b/esp3d/src/core/espcmd/ESP420.cpp @@ -333,7 +333,7 @@ bool Commands::ESP420(const char* cmd_params, level_authenticate_type auth_type, } else { output->print (": "); } - output->print ((bt_service.started())?"ONN":"OFF"); + output->print ((bt_service.started())?"ON":"OFF"); if (!plain) { output->print ("\"}"); } else { @@ -1185,6 +1185,24 @@ bool Commands::ESP420(const char* cmd_params, level_authenticate_type auth_type, } else { output->printLN(""); } +#ifdef SD_UPDATE_FEATURE + if (!plain) { + output->print (",{\"id\":\""); + } + output->print ("SD updater"); + if (!plain) { + output->print ("\",\"value\":\""); + } else { + output->print (": "); + } + output->print (Settings_ESP3D::read_byte (ESP_SD_CHECK_UPDATE_AT_BOOT)!=0?"ON":"OFF"); + if (!plain) { + output->print ("\"}"); + } else { + output->printLN(""); + } +#endif //SD_UPDATE_FEATURE + #endif //SD_DEVICE #if defined (SENSOR_DEVICE) if (!plain) { diff --git a/esp3d/src/core/espcmd/ESP800.cpp b/esp3d/src/core/espcmd/ESP800.cpp index 51859a10..79ff56e0 100644 --- a/esp3d/src/core/espcmd/ESP800.cpp +++ b/esp3d/src/core/espcmd/ESP800.cpp @@ -100,6 +100,18 @@ bool Commands::ESP800(const char* cmd_params, level_authenticate_type auth_type, } else { output->print("\""); } + //FW ID + if (plain) { + output->print("FW ID:"); + } else { + output->print(",\"FWTargetID\":\""); + } + output->print(Settings_ESP3D::GetFirmwareTarget()); + if(plain) { + output->printLN(""); + } else { + output->print("\""); + } //Setup done if (plain) { output->print("Setup:"); diff --git a/esp3d/src/core/espcmd/ESP920.cpp b/esp3d/src/core/espcmd/ESP920.cpp new file mode 100644 index 00000000..7a9fe409 --- /dev/null +++ b/esp3d/src/core/espcmd/ESP920.cpp @@ -0,0 +1,189 @@ +/* + ESP910.cpp - ESP3D command class + + Copyright (c) 2014 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with This code; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ +#include "../../include/esp3d_config.h" +#include "../commands.h" +#include "../esp3doutput.h" +#include "../settings_esp3d.h" +#include "../../modules/authentication/authentication_service.h" +//Get state / Set state of output message clients +//[ESP920]=[pwd=] +bool Commands::ESP920(const char* cmd_params, level_authenticate_type auth_type, ESP3DOutput * output) +{ + bool response = true; + String parameter; +#ifdef AUTHENTICATION_FEATURE + if (auth_type == LEVEL_GUEST) { + output->printERROR("Wrong authentication!", 401); + return false; + } +#else + (void)auth_type; +#endif //AUTHENTICATION_FEATURE + parameter = get_param (cmd_params, ""); + //get + if (parameter.length() == 0) { + String s = "SERIAL="; + s += ESP3DOutput::isOutput(ESP_SERIAL_CLIENT)?"ON":"OFF"; + s += " PRINTER_LCD="; + s += ESP3DOutput::isOutput(ESP_PRINTER_LCD_CLIENT)?"ON":"OFF"; +#ifdef DISPLAY_DEVICE + s += " LCD="; + s += ESP3DOutput::isOutput(ESP_SCREEN_CLIENT)?"ON":"OFF"; +#endif //DISPLAY_DEVICE +#ifdef WS_DATA_FEATURE + s += " WEBSOCKET="; + s += ESP3DOutput::isOutput(ESP_WEBSOCKET_CLIENT)?"ON":"OFF"; +#endif //WS_DATA_FEATURE +#ifdef BLUETOOTH_FEATURE + s += " BT="; + s += ESP3DOutput::isOutput(ESP_BT_CLIENT)?"ON":"OFF"; +#endif //BLUETOOTH_FEATURE +#ifdef TELNET_FEATURE + s += " TELNET="; + s += ESP3DOutput::isOutput(ESP_TELNET_CLIENT)?"ON":"OFF"; +#endif //TELNET_FEATURE + output->printMSG(s.c_str()); + return true; + + } else { //set + response = false; + parameter = get_param (cmd_params, "SERIAL="); + if (parameter.length() != 0) { + if ((parameter == "ON")|| (parameter == "OFF")) { + if (!Settings_ESP3D::write_byte (ESP_SERIAL_FLAG, (parameter == "ON")?1:0)) { + output->printERROR ("Set failed!"); + return false; + } + } else { + output->printERROR ("Incorrect command!"); + return false; + } + response = true; + } + parameter = get_param (cmd_params, "PRINTER_LCD="); + if (parameter.length() != 0) { + if ((parameter == "ON")|| (parameter == "OFF")) { + if (!Settings_ESP3D::write_byte (ESP_PRINTER_LCD_FLAG, (parameter == "ON")?1:0)) { + output->printERROR ("Set failed!"); + return false; + } + } else { + output->printERROR ("Incorrect command!"); + return false; + } + response = true; + } + parameter = get_param (cmd_params, "ALL="); + if (parameter.length() != 0) { + if ((parameter == "ON")|| (parameter == "OFF")) { + if (!Settings_ESP3D::write_byte (ESP_SERIAL_FLAG, (parameter == "ON")?1:0)|| +#ifdef DISPLAY_DEVICE + !Settings_ESP3D::write_byte (ESP_LCD_FLAG, (parameter == "ON")?1:0)|| +#endif //DISPLAY_DEVICE +#ifdef WS_DATA_FEATURE + !Settings_ESP3D::write_byte (ESP_WEBSOCKET_FLAG, (parameter == "ON")?1:0)|| +#endif //WS_DATA_FEATURE +#ifdef BLUETOOTH_FEATURE + !Settings_ESP3D::write_byte (ESP_BT_FLAG, (parameter == "ON")?1:0)|| +#endif //BLUETOOTH_FEATURE +#ifdef TELNET_FEATURE + !Settings_ESP3D::write_byte (ESP_TELNET_FLAG, (parameter == "ON")?1:0)|| +#endif //TELNET_FEATURE + !Settings_ESP3D::write_byte (ESP_PRINTER_LCD_FLAG, (parameter == "ON")?1:0)) { + output->printERROR ("Set failed!"); + return false; + } + } else { + output->printERROR ("Incorrect command!"); + return false; + } + response = true; + } +#ifdef DISPLAY_DEVICE + parameter = get_param (cmd_params, "LCD="); + if (parameter.length() != 0) { + if ((parameter == "ON")|| (parameter == "OFF")) { + if (!Settings_ESP3D::write_byte (ESP_LCD_FLAG, (parameter == "ON")?1:0)) { + output->printERROR ("Set failed!"); + return false; + } + } else { + output->printERROR ("Incorrect command!"); + return false; + } + response = true; + } +#endif //DISPLAY_DEVICE +#ifdef WS_DATA_FEATURE + parameter = get_param (cmd_params, "WEBSOCKET="); + if (parameter.length() != 0) { + if ((parameter == "ON")|| (parameter == "OFF")) { + if (!Settings_ESP3D::write_byte (ESP_WEBSOCKET_FLAG, (parameter == "ON")?1:0)) { + output->printERROR ("Set failed!"); + return false; + } + } else { + output->printERROR ("Incorrect command!"); + return false; + } + response = true; + } +#endif //WS_DATA_FEATURE +#ifdef BLUETOOTH_FEATURE + parameter = get_param (cmd_params, "BT="); + if (parameter.length() != 0) { + if ((parameter == "ON")|| (parameter == "OFF")) { + if (!Settings_ESP3D::write_byte (ESP_BT_FLAG, (parameter == "ON")?1:0)) { + output->printERROR ("Set failed!"); + return false; + } + } else { + output->printERROR ("Incorrect command!"); + return false; + } + response = true; + } +#endif //BLUETOOTH_FEATURE +#ifdef TELNET_FEATURE + parameter = get_param (cmd_params, "TELNET="); + if (parameter.length() != 0) { + if ((parameter == "ON")|| (parameter == "OFF")) { + if (!Settings_ESP3D::write_byte (ESP_TELNET_FLAG, (parameter == "ON")?1:0)) { + output->printERROR ("Set failed!"); + return false; + } + } else { + output->printERROR ("Incorrect command!"); + return false; + } + response = true; + } +#endif //TELNET_FEATURE + //all ok we do the hot change + if(response) { + ESP3DOutput::isOutput(ESP_ALL_CLIENTS,true); + output->printMSG ("ok"); + return true; + } + + } + output->printERROR ("Incorrect command!"); + return false; +} diff --git a/esp3d/src/core/settings_esp3d.cpp b/esp3d/src/core/settings_esp3d.cpp index caf7b3f4..9374e8f0 100644 --- a/esp3d/src/core/settings_esp3d.cpp +++ b/esp3d/src/core/settings_esp3d.cpp @@ -86,6 +86,7 @@ #define DEFAULT_INTERNET_TIME 0 #endif //TIMESTAMP_FEATURE + #define DEFAULT_SETUP 0 #define DEFAULT_ESP_BYTE 0 @@ -104,14 +105,8 @@ #define DEFAULT_TIME_ZONE 0 #define DEFAULT_TIME_DST 0 #define DEFAULT_SD_MOUNT ESP_SD_ROOT -#define DEFAULT_DIRECT_SD_CHECK 0 #define DEFAULT_SD_CHECK_UPDATE_AT_BOOT 1 #define DEFAULT_SENSOR_TYPE NO_SENSOR_DEVICE -#ifdef SD_DEVICE -#define DEFAULT_SD_DEVICE_TYPE SD_DEVICE_CONNECTION -#else -#define DEFAULT_SD_DEVICE_TYPE ESP_NO_SD -#endif //SD_DEVICE #define DEFAULT_HTTP_ON 1 #define DEFAULT_FTP_ON 1 #define DEFAULT_TELNET_ON 1 @@ -205,9 +200,7 @@ uint8_t Settings_ESP3D::GetSDDevice() const char* Settings_ESP3D::GetFirmwareTargetShortName() { static String response; - if ( _FirmwareTarget == REPETIER4DV) { - response = F ("repetier4davinci"); - } else if ( _FirmwareTarget == REPETIER) { + if ( _FirmwareTarget == REPETIER) { response = F ("repetier"); } else if ( _FirmwareTarget == MARLIN) { response = F ("marlin"); @@ -280,8 +273,23 @@ uint8_t Settings_ESP3D::get_default_byte_value(int pos) // res = DEFAULT_SSID_VISIBLE; // break; #endif //WIFI_FEATURE - case ESP_OUTPUT_FLAG: - res = DEFAULT_OUTPUT_FLAG; + case ESP_SERIAL_FLAG: + res = DEFAULT_SERIAL_OUTPUT_FLAG; + break; + case ESP_PRINTER_LCD_FLAG: + res = DEFAULT_PRINTER_LCD_FLAG; + break; + case ESP_WEBSOCKET_FLAG: + res = DEFAULT_WEBSOCKET_FLAG; + break; + case ESP_TELNET_FLAG: + res = DEFAULT_TELNET_FLAG; + break; + case ESP_BT_FLAG: + res = DEFAULT_BT_FLAG; + break; + case ESP_LCD_FLAG: + res = DEFAULT_LCD_FLAG; break; #ifdef FTP_FEATURE case ESP_FTP_ON: @@ -310,15 +318,9 @@ uint8_t Settings_ESP3D::get_default_byte_value(int pos) case ESP_SD_MOUNT: res = DEFAULT_SD_MOUNT; break; - case ESP_DIRECT_SD_CHECK: - res = DEFAULT_DIRECT_SD_CHECK; - break; case ESP_SD_CHECK_UPDATE_AT_BOOT: res = DEFAULT_SD_CHECK_UPDATE_AT_BOOT; break; - case ESP_SD_DEVICE_TYPE: - res = DEFAULT_SD_DEVICE_TYPE; - break; #endif //SD_DEVICE case ESP_TARGET_FW: res = DEFAULT_FW; @@ -1134,13 +1136,20 @@ bool Settings_ESP3D::reset() #endif //AUTHENTICATION_FEATURE //Target FW Settings_ESP3D::write_byte(ESP_TARGET_FW,Settings_ESP3D::get_default_byte_value(ESP_TARGET_FW)); - //Output flag - Settings_ESP3D::write_byte(ESP_OUTPUT_FLAG,Settings_ESP3D::get_default_byte_value(ESP_OUTPUT_FLAG)); + //Output flags + Settings_ESP3D::write_byte(ESP_SERIAL_FLAG,Settings_ESP3D::get_default_byte_value(ESP_SERIAL_FLAG)); + Settings_ESP3D::write_byte(ESP_PRINTER_LCD_FLAG,Settings_ESP3D::get_default_byte_value(ESP_PRINTER_LCD_FLAG)); + Settings_ESP3D::write_byte(ESP_WEBSOCKET_FLAG,Settings_ESP3D::get_default_byte_value(ESP_WEBSOCKET_FLAG)); + Settings_ESP3D::write_byte(ESP_TELNET_FLAG,Settings_ESP3D::get_default_byte_value(ESP_TELNET_FLAG)); + Settings_ESP3D::write_byte(ESP_BT_FLAG,Settings_ESP3D::get_default_byte_value(ESP_BT_FLAG)); + Settings_ESP3D::write_byte(ESP_LCD_FLAG,Settings_ESP3D::get_default_byte_value(ESP_LCD_FLAG)); #ifdef SD_DEVICE - //Direct SD - Settings_ESP3D::write_byte(ESP_SD_DEVICE_TYPE,Settings_ESP3D::get_default_byte_value(ESP_SD_DEVICE_TYPE)); //SPI SD Divider Settings_ESP3D::write_byte(ESP_SD_SPEED_DIV,Settings_ESP3D::get_default_byte_value(ESP_SD_SPEED_DIV)); +#ifdef SD_UPDATE_FEATURE + //SD Update feature + Settings_ESP3D::write_byte(ESP_SD_CHECK_UPDATE_AT_BOOT,Settings_ESP3D::get_default_byte_value(ESP_SD_CHECK_UPDATE_AT_BOOT)); +#endif //SD_UPDATE_FEATURE #endif //SD_DEVICE #ifdef TIMESTAMP_FEATURE diff --git a/esp3d/src/core/settings_esp3d.h b/esp3d/src/core/settings_esp3d.h index 40a1cd40..d79b9c8c 100644 --- a/esp3d/src/core/settings_esp3d.h +++ b/esp3d/src/core/settings_esp3d.h @@ -26,13 +26,19 @@ //Supported FW ///////////////////////////////////////////////////////////// #define UNKNOWN_FW 0 -#define REPETIER4DV 1 -#define MARLIN 2 -#define MARLINKIMBRA 3 -#define SMOOTHIEWARE 4 -#define REPETIER 5 -#define GRBL 6 -#define MAX_FW_ID 6 +#define GRBL 10 +#define MARLIN 20 +#define MARLINKIMBRA 35 +#define SMOOTHIEWARE 40 +#define REPETIER 50 + +//Default flags +#define DEFAULT_SERIAL_OUTPUT_FLAG 1 +#define DEFAULT_PRINTER_LCD_FLAG 1 +#define DEFAULT_WEBSOCKET_FLAG 1 +#define DEFAULT_TELNET_FLAG 1 +#define DEFAULT_BT_FLAG 1 +#define DEFAULT_LCD_FLAG 1 #define NO_NETWORK 0 //position in EEPROM / preferences will use `P_` + to make a string : P_0 for 0 @@ -51,7 +57,7 @@ #define ESP_INTERNET_TIME 120 //1 byte = flag #define ESP_HTTP_PORT 121 //4 bytes = int #define ESP_TELNET_PORT 125 //4 bytes = int -#define ESP_OUTPUT_FLAG 129 //1 bytes = flag +#define ESP_SERIAL_FLAG 129 //1 bytes = flag #define ESP_HOSTNAME 130 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese #define ESP_SENSOR_INTERVAL 164 //4 bytes = int #define ESP_SETTINGS_VERSION 168 //8 bytes = 7+1 = string ESP3D + 2 digits @@ -60,8 +66,8 @@ #define ESP_AP_SSID 218 //33 bytes 32+1 = string ; warning does not support multibyte char like chinese #define ESP_AP_PASSWORD 251 //65 bytes 64 +1 = string ;warning does not support multibyte char like chinese #define ESP_AP_IP_VALUE 316 //4 bytes xxx.xxx.xxx.xxx -#define ESP_BOOT_DELAY 320 //4 bytes xxx.xxx.xxx.xxx -#define ESP_WEBSOCKET_PORT 324 //4 bytes xxx.xxx.xxx.xxx +#define ESP_BOOT_DELAY 320 //4 bytes = int +#define ESP_WEBSOCKET_PORT 324 //4 bytes= int #define ESP_HTTP_ON 328 //1 byte = flag #define ESP_TELNET_ON 329 //1 byte = flag #define ESP_WEBSOCKET_ON 330 //1 byte = flag @@ -75,10 +81,10 @@ #define ESP_TIME_SERVER1 464 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese #define ESP_TIME_SERVER2 593 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese #define ESP_TIME_SERVER3 722 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese -#define ESP_SD_DEVICE_TYPE 851 //1 bytes = flag +#define ESP_PRINTER_LCD_FLAG 851 //1 bytes = flag #define ESP_SD_MOUNT 852 //1 bytes = flag #define ESP_SESSION_TIMEOUT 853 //1 bytes = flag -#define ESP_DIRECT_SD_CHECK 854 //1 bytes = flag +#define ESP_WEBSOCKET_FLAG 854 //1 bytes = flag #define ESP_SD_CHECK_UPDATE_AT_BOOT 855//1 bytes = flag #define ESP_NOTIFICATION_SETTINGS 856 //129 bytes 128+1 = string ; warning does not support multibyte char like chinese #define ESP_CALIBRATION_1 985 //4 bytes = int @@ -87,7 +93,9 @@ #define ESP_CALIBRATION_4 997 //4 bytes = int #define ESP_CALIBRATION_5 1001 //4 bytes = int #define ESP_SETUP 1005 //1 byte = flag -#define ESP_FREE_ENTRY 1006 //3 bytes +#define ESP_TELNET_FLAG 1006 //1 byte = flag +#define ESP_BT_FLAG 1007 //1 byte = flag +#define ESP_LCD_FLAG 1008 //1 byte = flag #define ESP_FTP_CTRL_PORT 1009 //4 bytes = int #define ESP_FTP_DATA_ACTIVE_PORT 1013 //4 bytes = int #define ESP_FTP_DATA_PASSIVE_PORT 1017 //4 bytes = int diff --git a/esp3d/src/include/defines.h b/esp3d/src/include/defines.h index 54b293a2..8f5ff38b 100644 --- a/esp3d/src/include/defines.h +++ b/esp3d/src/include/defines.h @@ -63,7 +63,17 @@ #define ESP_UPLOAD_FAST_SERIAL_USB 5 #define ESP_UPLOAD_DIRECT_USB 6 +//IP mode +#define DHCP_MODE 1 +#define STATIC_IP_MODE 0 +//Network Mode +#define ESP_RADIO_OFF 0 +#define ESP_WIFI_STA 1 +#define ESP_WIFI_AP 2 +#define ESP_BT 3 +#define ESP_ETH_STA 4 +//#define ESP_ETH_SRV 5 //SD mount point #define ESP_SD_ROOT 1 @@ -92,6 +102,7 @@ #define ESP_SDCARD_BUSY 2 //Notifications +#define ESP_NO_NOTIFICATION 0 #define ESP_PUSHOVER_NOTIFICATION 1 #define ESP_EMAIL_NOTIFICATION 2 #define ESP_LINE_NOTIFICATION 3 diff --git a/esp3d/src/include/sanity_esp3d.h b/esp3d/src/include/sanity_esp3d.h index fb618552..e54ab0b6 100644 --- a/esp3d/src/include/sanity_esp3d.h +++ b/esp3d/src/include/sanity_esp3d.h @@ -136,4 +136,11 @@ #endif #endif +/************************** + * Update + * ***********************/ +#if defined(SD_UPDATE_FEATURE) && !defined(SD_DEVICE) +#error SD_UPDATE_FEATURE is not available because SD_DEVICE is not enabled +#endif + #endif //SANITY_ESP3D_H diff --git a/esp3d/src/include/version.h b/esp3d/src/include/version.h index 207c49d4..eb58f601 100644 --- a/esp3d/src/include/version.h +++ b/esp3d/src/include/version.h @@ -22,7 +22,7 @@ #define _VERSION_ESP3D_H //version and sources location -#define FW_VERSION "3.0.0.a70" +#define FW_VERSION "3.0.0.a71" #define REPOSITORY "https://github.com/luc-github/ESP3D/tree/3.0" #endif //_VERSION_ESP3D_H diff --git a/esp3d/src/modules/camera/camera.cpp b/esp3d/src/modules/camera/camera.cpp index e4015a25..de524e5d 100644 --- a/esp3d/src/modules/camera/camera.cpp +++ b/esp3d/src/modules/camera/camera.cpp @@ -32,14 +32,11 @@ #define DEFAULT_FRAME_SIZE FRAMESIZE_SVGA -#define PART_BUFFER_SIZE 64 #define JPEG_COMPRESSION 80 #define MIN_WIDTH_COMPRESSION 400 -#define PART_BOUNDARY "123456789000000000000987654321" Camera esp3d_camera; - void Camera::handle_snap(WebServer * webserver) { log_esp3d("Camera stream reached"); @@ -70,7 +67,6 @@ void Camera::handle_snap(WebServer * webserver) bool res_error = false; size_t _jpg_buf_len = 0; uint8_t * _jpg_buf = NULL; - char * part_buf[PART_BUFFER_SIZE]; dl_matrix3du_t *image_matrix = NULL; webserver->sendHeader(String(F("Content-Type")), String(F("image/jpeg")),true); webserver->sendHeader(String(F("Content-Disposition")), String(F("inline; filename=capture.jpg")),true); diff --git a/esp3d/src/modules/filesystem/sd/sd_native_esp8266.cpp b/esp3d/src/modules/filesystem/sd/sd_native_esp8266.cpp index 18c8920e..4e449399 100644 --- a/esp3d/src/modules/filesystem/sd/sd_native_esp8266.cpp +++ b/esp3d/src/modules/filesystem/sd/sd_native_esp8266.cpp @@ -44,6 +44,7 @@ void dateTime (uint16_t* date, uint16_t* dtime) time_t getDateTimeFile(sdfat::File & filehandle) { static time_t dt = 0; +#ifdef SD_TIMESTAMP_FEATURE struct tm timefile; dir_t d; if(filehandle) { @@ -65,6 +66,7 @@ time_t getDateTimeFile(sdfat::File & filehandle) } else { log_esp3d("check file for stat failed"); } +#endif //SD_TIMESTAMP_FEATURE return dt; } @@ -637,13 +639,16 @@ bool ESP_SD::exists(const char* path) if (strcmp(path, "/") == 0) { return _started; } + log_esp3d("%s exists ?", path); res = SD.exists(path); if (!res) { + log_esp3d("Seems not - trying open it"); ESP_SDFile root = ESP_SD::open(path, ESP_FILE_READ); if (root) { res = root.isDirectory(); } } + log_esp3d("Seems %s", res?"yes":"no"); return res; } diff --git a/esp3d/src/modules/gcode_host/gcode_host.cpp b/esp3d/src/modules/gcode_host/gcode_host.cpp index bcfee131..2027d494 100644 --- a/esp3d/src/modules/gcode_host/gcode_host.cpp +++ b/esp3d/src/modules/gcode_host/gcode_host.cpp @@ -249,7 +249,7 @@ bool GcodeHost::purge(uint32_t timeout) size_t len = serial_service.readBytes (buf, 50); buf[len] = '\0'; log_esp3d("**\n%s\n", (const char *)buf); - if ( (Settings_ESP3D::GetFirmwareTarget() == REPETIER4DV) || (Settings_ESP3D::GetFirmwareTarget() == REPETIER) || _waitwhenidle) { + if ( (Settings_ESP3D::GetFirmwareTarget() == REPETIER) || _waitwhenidle) { String s = (const char *)buf; //repetier never stop sending data so no need to wait if have 'wait' or 'busy' if((s.indexOf ("wait") > -1) || (s.indexOf ("busy") > -1)) { diff --git a/esp3d/src/modules/host/host_services.cpp b/esp3d/src/modules/host/host_services.cpp index 9c1045c9..ef454abc 100644 --- a/esp3d/src/modules/host/host_services.cpp +++ b/esp3d/src/modules/host/host_services.cpp @@ -74,7 +74,7 @@ bool HostServices::purge_serial() size_t len = serial_service.readBytes (buf, 50); buf[len] = '\0'; log_esp3d ("Purge: %s",(const char *)buf); - if ( (Settings_ESP3D::GetFirmwareTarget() == REPETIER4DV) || (Settings_ESP3D::GetFirmwareTarget() == REPETIER) ) { + if ((Settings_ESP3D::GetFirmwareTarget() == REPETIER) ) { String s = (const char *)buf; //repetier never stop sending data so no need to wait if have 'wait' or 'busy' if((s.indexOf ("wait") > -1) || (s.indexOf ("busy") > -1)) { diff --git a/esp3d/src/modules/network/netconfig.h b/esp3d/src/modules/network/netconfig.h index aff5b8c6..03b7434a 100644 --- a/esp3d/src/modules/network/netconfig.h +++ b/esp3d/src/modules/network/netconfig.h @@ -32,17 +32,7 @@ #define MAX_HOSTNAME_LENGTH 32 #define MIN_HOSTNAME_LENGTH 1 -//IP mode -#define DHCP_MODE 1 -#define STATIC_IP_MODE 0 -//Network Mode -#define ESP_RADIO_OFF 0 -#define ESP_WIFI_STA 1 -#define ESP_WIFI_AP 2 -#define ESP_BT 3 -#define ESP_ETH_STA 4 -//#define ESP_ETH_SRV 5 #ifdef ARDUINO_ARCH_ESP32 #include diff --git a/esp3d/src/modules/update/esp_config_file.cpp b/esp3d/src/modules/update/esp_config_file.cpp new file mode 100644 index 00000000..dcf29fc4 --- /dev/null +++ b/esp3d/src/modules/update/esp_config_file.cpp @@ -0,0 +1,279 @@ +/* + esp_config_file.cpp - ESP3D configuration file support class + + Copyright (c) 2014 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with This code; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "../../include/esp3d_config.h" + +#ifdef SD_UPDATE_FEATURE +#include "esp_config_file.h" +#include "../filesystem/esp_sd.h" + +#define LINE_MAX_SIZE 255 +#define SECTION_MAX_SIZE 10 +#define KEY_MAX_SIZE 30 +#define VALUE_MAX_SIZE 128 + +const char * protectedkeys[] = {"NOTIF_TOKEN1","NOTIF_TOKEN2","AP_Password","STA_Password","ADMIN_PASSWORD","USER_PASSWORD"} ; + +ESP_ConfigFile::ESP_ConfigFile(const char * path, TProcessingFunction fn) +{ + _filename = (char *)malloc(strlen(path)+1); + strcpy(_filename, path); + _pfunction = fn; +} + +bool ESP_ConfigFile::processFile() +{ + bool res = true; + if (ESP_SD::getState(true) != ESP_SDCARD_IDLE) { + log_esp3d("No SD"); + return false; + } + if (!ESP_SD::exists(_filename)) { + log_esp3d("No ini file"); + return false; + } + ESP_SDFile rFile = ESP_SD::open(_filename); + if (rFile) { + bool processing = true; + char line[LINE_MAX_SIZE+1]; + char section[SECTION_MAX_SIZE+1]; //system / network / services + char key[KEY_MAX_SIZE+1]; + uint8_t pos = 0; + line[0] = '\0'; + section[0]='\0'; + while (processing) { + //to handle file without endline + processing = rFile.available(); + char c = '\0'; + if (processing) { + c = (char)rFile.read(); + if (!((c =='\n') || (c =='\r')) && (pos<(LINE_MAX_SIZE-1))) { + line[pos] = c; + pos++; + } + } + if ((c =='\n') || (c =='\r') || !processing || (pos==(LINE_MAX_SIZE-1))) { + line[pos] = '\0'; + char * stmp = trimSpaces(line); + if(strlen(stmp)>0) { + //is comment ? + if (!isComment(stmp)) { + //is section ? + if(isSection(stmp)) { + strcpy(section,getSectionName(stmp)); + } else { + //is key + value? + if (isValue(stmp) && strlen(section)>0) { + strcpy(key,getKeyName(stmp)); + if(_pfunction) { + if(!_pfunction(section, key, getValue(stmp))) { + res=false; + } + } + } + } + } + } + pos = 0; + line[pos] = '\0'; + } + } + rFile.close(); + return res; + } + log_esp3d("Cannot open ini file"); + return false; +} + +bool ESP_ConfigFile::isComment(char * line) +{ + if (strlen(line) > 0) { + if((line[0]==';') || (line[0]=='#')) { + return true; + } + } + return false; +} + +bool ESP_ConfigFile::isSection(char * line) +{ + if (strlen(line) > 0) { + if((line[0]=='[') && (line[strlen(line)-1]==']')) { + return true; + } + } + return false; +} + +bool ESP_ConfigFile::isValue(char * line) +{ + if (strlen(line) > 3) { + for(uint8_t i = 1; i < strlen(line)-2; i++) { + if(line[i]=='=') { + return true; + } + } + } + return false; +} + +char * ESP_ConfigFile::getSectionName(char * line) +{ + line[strlen(line)-1]='\0'; + return trimSpaces(&line[1],SECTION_MAX_SIZE); +} + +char * ESP_ConfigFile::getKeyName(char * line) +{ + for(uint8_t i = 0; i < strlen(line); i++) { + if (line[i]=='=') { + line[i]='\0'; + return trimSpaces(line,KEY_MAX_SIZE); + } + } + return NULL; +} + +char * ESP_ConfigFile::getValue(char * line) +{ + char * startptr = line + strlen(line)+1; + while ( * startptr == '\0') { + startptr++; + } + return trimSpaces(startptr,VALUE_MAX_SIZE); +} + +char * ESP_ConfigFile::trimSpaces(char * line, uint8_t maxsize) +{ + char *endptr = line + strlen(line) - 1; + char * startptr = line; + while (endptr >= line && isspace(*endptr)) { + *endptr-- = '\0'; + } + endptr = line + strlen(line) - 1; + while (endptr != startptr && isspace(*startptr)) { + startptr++; + } + if((maxsize>0) && (strlen(startptr)> maxsize)) { + startptr[maxsize]='\0'; + } + return startptr; +} + +ESP_ConfigFile::~ESP_ConfigFile() +{ + free(_filename); +} + +bool ESP_ConfigFile::isScrambleKey(const char *key, const char * str) +{ + if (strlen(key)>strlen(str)) { + return false; + } + for(uint8_t p = 0; p< strlen(str) ; p++) { + if (p 0 ) { + if(sizeof(protectedkeys) > 0) { + bool foundscramble = false; + uint8_t size = sizeof(protectedkeys)/sizeof(char*); + for(uint8_t i = 0; (i < size) && !foundscramble; i++) { + if (isScrambleKey(protectedkeys[i],stmp)) { + strcpy(line, protectedkeys[i]); + strcat(line, "=********"); + stmp = line; + foundscramble = true; + } + } + } + wFile.write((const uint8_t *)stmp, strlen(stmp)); + wFile.write('\r'); + wFile.write('\n'); + } + pos = 0; + line[pos] = '\0'; + } + } + wFile.close(); + rFile.close(); + ESP_SD::remove(_filename); + return true; + } + log_esp3d("Cannot open / create revoked file"); + if (wFile ) { + wFile.close(); + } + if (rFile ) { + rFile.close(); + } + return false; +} + +#endif //SD_UPDATE_FEATURE diff --git a/esp3d/src/modules/update/esp_config_file.h b/esp3d/src/modules/update/esp_config_file.h new file mode 100644 index 00000000..7cfd8069 --- /dev/null +++ b/esp3d/src/modules/update/esp_config_file.h @@ -0,0 +1,46 @@ +/* + esp_config_file.h - ESP3D configuration file support class + + Copyright (c) 2014 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with This code; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _ESP_CONFIG_FILE_H +#define _ESP_CONFIG_FILE_H +#include +typedef std::function TProcessingFunction; + +class ESP_ConfigFile +{ +public: + ESP_ConfigFile(const char * path, TProcessingFunction fn); + ~ESP_ConfigFile(); + char * trimSpaces(char * line, uint8_t maxsize=0); + bool isComment(char * line); + bool isSection(char * line); + bool isValue(char * line); + char * getSectionName(char * line); + char * getKeyName(char * line); + char * getValue(char * line); + bool processFile(); + bool revokeFile(); +private: + bool isScrambleKey(const char *key, const char * str); + char * _filename; + TProcessingFunction _pfunction; +}; + +#endif //_ESP_CONFIG_FILE_H diff --git a/esp3d/src/modules/update/update_service.cpp b/esp3d/src/modules/update/update_service.cpp new file mode 100644 index 00000000..79a8e0ab --- /dev/null +++ b/esp3d/src/modules/update/update_service.cpp @@ -0,0 +1,451 @@ +/* + update_service.cpp - update services functions class + + Copyright (c) 2014 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with This code; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "../../include/esp3d_config.h" +#ifdef SD_UPDATE_FEATURE +#include "update_service.h" +#include "../../core/settings_esp3d.h" +#include "../../core/esp3doutput.h" +#include "../../core/commands.h" +#include "esp_config_file.h" + +UpdateService update_service; +#define CONFIG_FILE "/espconf.ini" +const char * NetstringKeysVal[] = {"hostname", + "STA_SSID", + "STA_Password", + "AP_SSID", + "AP_Password" + } ; + +const uint16_t NetstringKeysPos[] = {ESP_HOSTNAME, + ESP_STA_SSID, + ESP_STA_PASSWORD, + ESP_AP_SSID, + ESP_AP_PASSWORD + } ; + +const char * ServstringKeysVal[] = { + "Time_server1", + "Time_server2", + "Time_server3", + "ADMIN_PASSWORD", + "USER_PASSWORD", + "NOTIF_TOKEN1", + "NOTIF_TOKEN2", + "NOTIF_TOKEN_Settings" +} ; + +const uint16_t ServstringKeysPos[] = { + ESP_TIME_SERVER1, + ESP_TIME_SERVER2, + ESP_TIME_SERVER3, + ESP_ADMIN_PWD, + ESP_USER_PWD, + ESP_NOTIFICATION_TOKEN1, + ESP_NOTIFICATION_TOKEN2, + ESP_NOTIFICATION_SETTINGS +} ; + +const char * IPKeysVal[] = {"STA_IP", + "STA_GW", + "STA_MSK", + "AP_IP" + } ; + +const uint16_t IPKeysPos[] = {ESP_STA_IP_VALUE, + ESP_STA_MASK_VALUE, + ESP_STA_GATEWAY_VALUE, + ESP_AP_IP_VALUE + } ; + +const char * ServintKeysVal[] = { + "HTTP_Port", + "TELNET_Port", + "SENSOR_INTERVAL", + "WebSocket_Port", + "FTP_Control_Port", + "FTP_Active_Port ", + "FTP_Passive_Port" +} ; + +const uint16_t ServintKeysPos[] = { + ESP_HTTP_PORT, + ESP_TELNET_PORT, + ESP_SENSOR_INTERVAL, + ESP_WEBSOCKET_PORT, + ESP_FTP_CTRL_PORT, + ESP_FTP_DATA_ACTIVE_PORT, + ESP_FTP_DATA_PASSIVE_PORT +} ; + +const char * SysintKeysVal[] = {"Baud_rate", + "Boot_delay" + } ; + +const uint16_t SysintKeysPos[] = {ESP_BAUD_RATE, + ESP_BOOT_DELAY + } ; + +const char * ServboolKeysVal[] = {"HTTP_active", + "TELNET_active", + "WebSocket_active", + "Time_DST", + "CHECK_FOR_UPDATE", + "Active_buzzer", + "Active_Internet_time" + } ; + +const uint16_t ServboolKeysPos[] = {ESP_HTTP_ON, + ESP_TELNET_ON, + ESP_WEBSOCKET_ON, + ESP_TIME_IS_DST, + ESP_SD_CHECK_UPDATE_AT_BOOT, + ESP_BUZZER, + ESP_INTERNET_TIME + } ; + +const char * SysboolKeysVal[] = {"Active_Printer_LCD", + "Active_ESP3D_LCD", + "Active_Serial ", + "Active_WebSocket", + "Active_Telnet", + "Active_BT" + } ; + +const uint16_t SysboolKeysPos[] = {ESP_PRINTER_LCD_FLAG, + ESP_LCD_FLAG, + ESP_SERIAL_FLAG, + ESP_WEBSOCKET_FLAG, + ESP_TELNET_FLAG, + ESP_BT_FLAG + } ; + +const char * NetbyteKeysVal[] = { + "AP_channel" +} ; + +const uint16_t NetbyteKeysPos[] = { + ESP_AP_CHANNEL +} ; +const char * ServbyteKeysVal[] = {"Time_zone", + "Sesion_timeout", + "SD_SPEED", + "Time_DST" + } ; + +const uint16_t ServbyteKeysPos[] = {ESP_TIMEZONE, + ESP_SESSION_TIMEOUT, + ESP_SD_SPEED_DIV + } ; + + +//Parsing all entries of file once is faster that checking all possible parameters for each line of file +bool processingFileFunction (const char * section, const char * key, const char * value) +{ + bool res = true; + char T = '\0'; + int P = -1; + uint32_t v = 0; + byte b = 0; + bool done=false; + uint8_t size = 0; + log_esp3d("[%s]%s=%s",section, key,value); + //network / services / system sections + if (strcasecmp("network",section)==0) { + size = sizeof(NetstringKeysVal)/sizeof(char*); + //Look in string entries + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(NetstringKeysVal[i],key)==0) { + //if it is a previouly saved scrambled password ignore it + if (strcasecmp(value,"********")!=0) { + T='S'; + P=NetstringKeysPos[i]; + done=true; + } + } + } + + if (!done) { + size = sizeof(IPKeysVal)/sizeof(char*); + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(IPKeysVal[i],key)==0) { + T='A'; + P=IPKeysPos[i]; + v=String(value).toInt(); + done=true; + } + } + } + if (!done) { + size = sizeof(NetbyteKeysVal)/sizeof(char*); + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(NetbyteKeysVal[i],key)==0) { + T='B'; + P=NetbyteKeysPos[i]; + b=String(value).toInt(); + done=true; + } + } + } + //Radio mode BT, WIFI-STA, WIFI-AP, ETH-STA, OFF + if (!done) { + if (strcasecmp("radio_mode",key)==0) { + T='B'; + P=ESP_RADIO_MODE; + done = true; + if (strcasecmp("BT",value)==0) { + b=ESP_BT; + } else if (strcasecmp("WIFI-STA",value)==0) { + b=ESP_WIFI_STA; + } else if (strcasecmp("WIFI-AP",value)==0) { + b=ESP_WIFI_AP; + } else if (strcasecmp("ETH-STA",value)==0) { + b=ESP_ETH_STA; + } else if (strcasecmp("OFF",value)==0) { + b=ESP_RADIO_OFF; + } else { + P=-1; //invalide value + } + } + } + + //STA IP Mode DHCP / STATIC + if (!done) { + if (strcasecmp("STA_IP_mode",key)==0) { + T='B'; + P=ESP_STA_IP_MODE; + done = true; + if (strcasecmp("DHCP",value)==0) { + b=DHCP_MODE; + } else if (strcasecmp("STATIC",key)==0) { + b=STATIC_IP_MODE; + } else { + P=-1; //invalide value + } + } + } + } else if (strcasecmp("services",section)==0) { + size = sizeof(ServstringKeysVal)/sizeof(char*); + //Look in string entries + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(ServstringKeysVal[i],key)==0) { + //if it is a previouly saved scrambled password ignore it + if (strcasecmp(value,"********")!=0) { + T='S'; + P=ServstringKeysPos[i]; + done=true; + } + } + } + if (!done) { + size = sizeof(ServintKeysVal)/sizeof(char*); + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(ServintKeysVal[i],key)==0) { + T='I'; + P=ServintKeysPos[i]; + done=true; + } + } + } + if (!done) { + size = sizeof(ServboolKeysVal)/sizeof(char*); + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(ServboolKeysVal[i],key)==0) { + T='B'; + P=ServboolKeysPos[i]; + if ((strcasecmp("yes",value)==0)||(strcasecmp("true", value)==0)||(strcasecmp("1", value)==0) ) { + b = 1; + } else if ((strcasecmp("no", value)==0)||(strcasecmp("false", value)==0)||(strcasecmp("0", value)==0) ) { + b = 0; + } else { + P=-1; + } + done=true; + } + } + } + if (!done) { + size = sizeof(ServbyteKeysVal)/sizeof(char*); + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(ServbyteKeysVal[i],key)==0) { + T='B'; + P=ServbyteKeysPos[i]; + b=String(value).toInt(); + done=true; + } + } + } + //Notification type None / PushOver / Line / Email / Telegram + if (!done) { + if (strcasecmp("NOTIF_TYPE",key)==0) { + T='B'; + P=ESP_NOTIFICATION_TYPE; + done = true; + if (strcasecmp("None",value)==0) { + b=ESP_NO_NOTIFICATION; + } else if (strcasecmp("PushOver",value)==0) { + b=ESP_PUSHOVER_NOTIFICATION; + } else if (strcasecmp("Line",value)==0) { + b=ESP_LINE_NOTIFICATION; + } else if (strcasecmp("Email",value)==0) { + b=ESP_EMAIL_NOTIFICATION; + } else if (strcasecmp("Telegram",value)==0) { + b=ESP_TELEGRAM_NOTIFICATION; + } else { + P=-1; //invalide value + } + } + } + + //Sensor type if enabled None / DHT11 / DHT22 / ANALOG / BMP280 / BME280 + if (!done) { + if (strcasecmp("SENSOR_TYPE",key)==0) { + T='B'; + P=ESP_SENSOR_TYPE; + done = true; + if (strcasecmp("None",value)==0) { + b=NO_SENSOR_DEVICE; + } else if (strcasecmp("DHT11",key)==0) { + b=DHT11_DEVICE; + } else if (strcasecmp("DHT22",key)==0) { + b=DHT22_DEVICE; + } else if (strcasecmp("ANALOG",key)==0) { + b=ANALOG_DEVICE; + } else if (strcasecmp("BMP280",key)==0) { + b=BMP280_DEVICE; + } else if (strcasecmp("BME280",key)==0) { + b=BME280_DEVICE; + } else { + P=-1; //invalide value + } + } + } + } + if (strcasecmp("system",section)==0) { + if (!done) { + size = sizeof(SysintKeysVal)/sizeof(char*); + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(SysintKeysVal[i],key)==0) { + T='I'; + P=SysintKeysPos[i]; + done=true; + } + } + } + if (!done) { + size = sizeof(SysboolKeysVal)/sizeof(char*); + for(uint i=0; i< size && !done; i++) { + if (strcasecmp(SysboolKeysVal[i],key)==0) { + T='B'; + P=SysboolKeysPos[i]; + if ((strcasecmp("yes",value)==0)||(strcasecmp("true", value)==0)||(strcasecmp("1", value)==0) ) { + b = 1; + } else if ((strcasecmp("no", value)==0)||(strcasecmp("false", value)==0)||(strcasecmp("0", value)==0) ) { + b = 0; + } else { + P=-1; + } + done=true; + } + } + } + //Target Firmware None / Marlin / Repetier / MarlinKimbra / Smoothieware / GRBL + if (!done) { + if (strcasecmp("TargetFW",key)==0) { + T='B'; + P=ESP_TARGET_FW; + done = true; + if (strcasecmp("None",value)==0) { + b=UNKNOWN_FW; + } else if (strcasecmp("MARLIN",value)==0) { + b=MARLIN; + } else if (strcasecmp("MARLINKIMBRA",value)==0) { + b=MARLINKIMBRA; + } else if (strcasecmp("GRBL",value)==0) { + b=GRBL; + } else if (strcasecmp("REPETIER",value)==0) { + b=REPETIER; + } else if (strcasecmp("SMOOTHIEWARE",value)==0) { + b=SMOOTHIEWARE; + } else { + P=-1; //invalide value + } + } + } + } + + //now we save -handle saving status + //if setting is not recognized it is not a problem + //but if save is fail - that is a problem - so report it + if(P!=-1) { + switch(T) { + case 'S': + log_esp3d("Saving setting to ESP3D"); + res = Settings_ESP3D::write_string (P, value); + break; + case 'B': + case 'F': + res = Settings_ESP3D::write_byte (P, b); + break; + case 'I': + res = Settings_ESP3D::write_uint32 (P, v); + break; + case 'A': + res = Settings_ESP3D::write_IP_String (P, value); + break; + default: + log_esp3d("Unknown flag"); + } + } + return res; +} + +UpdateService::UpdateService() {} +UpdateService::~UpdateService() {} +bool UpdateService::begin() +{ + if(Settings_ESP3D::read_byte(ESP_SD_CHECK_UPDATE_AT_BOOT)!=0) { + log_esp3d("Update SD for update requestest"); + ESP_ConfigFile updateConfig(CONFIG_FILE, processingFileFunction); + if (updateConfig.processFile()) { + log_esp3d("Processing ini file done"); + if(updateConfig.revokeFile()) { + log_esp3d("Revoking ini file done"); + return true; + } else { + log_esp3d("Revoking ini file failed"); + } + } else { + log_esp3d("Processing ini file done"); + } + log_esp3d("Update failed"); + return false; + } + log_esp3d("No need to check for update"); + return false; +} +void UpdateService::end() +{ +} + +void UpdateService::handle() {} + +#endif //SD_UPDATE_FEATURE \ No newline at end of file diff --git a/esp3d/src/modules/update/update_service.h b/esp3d/src/modules/update/update_service.h new file mode 100644 index 00000000..55f07ca3 --- /dev/null +++ b/esp3d/src/modules/update/update_service.h @@ -0,0 +1,40 @@ +/* + update_service.h - update services functions class + + Copyright (c) 2014 Luc Lebosse. All rights reserved. + + This code is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This code is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with This code; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#ifndef _UPDATE_SERVICES_H +#define _UPDATE_SERVICES_H + + +class UpdateService +{ +public: + UpdateService(); + ~UpdateService(); + void handle(); + bool begin(); + void end(); + +private: +}; + +extern UpdateService update_service; + +#endif //_UPDATE_SERVICES_H +