From 449bb07b5889d4be313447240fb926759729eb1d Mon Sep 17 00:00:00 2001 From: Miroslav Pivovarsky Date: Fri, 10 May 2024 23:29:55 +0200 Subject: [PATCH] Fixed memory utilization issue. Utilized F() macro for moving strings from RAM to PROGMEM. --- .../ESP32_PrusaConnectCam.ino | 34 +-- ESP32_PrusaConnectCam/camera.cpp | 24 +-- ESP32_PrusaConnectCam/cfg.cpp | 24 +-- ESP32_PrusaConnectCam/connect.cpp | 198 +++++++++--------- ESP32_PrusaConnectCam/connect.h | 5 +- ESP32_PrusaConnectCam/log.cpp | 16 +- ESP32_PrusaConnectCam/mcu_cfg.h | 10 +- ESP32_PrusaConnectCam/micro_sd.cpp | 40 ++-- ESP32_PrusaConnectCam/serial_cfg.cpp | 34 +-- ESP32_PrusaConnectCam/server.cpp | 171 +++++++-------- ESP32_PrusaConnectCam/stream.cpp | 4 +- ESP32_PrusaConnectCam/system.cpp | 99 +++++---- ESP32_PrusaConnectCam/wifi_mngt.cpp | 122 +++++------ README.md | 2 +- 14 files changed, 388 insertions(+), 395 deletions(-) diff --git a/ESP32_PrusaConnectCam/ESP32_PrusaConnectCam.ino b/ESP32_PrusaConnectCam/ESP32_PrusaConnectCam.ino index afba124..57fc881 100644 --- a/ESP32_PrusaConnectCam/ESP32_PrusaConnectCam.ino +++ b/ESP32_PrusaConnectCam/ESP32_PrusaConnectCam.ino @@ -4,7 +4,7 @@ It's neccesary install support for ESP32 board to the arduino IDE. In the board manager we need add next link https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json Then we can install "ESP32 by Espressif Systems" board in the board manager. - ESP32 lib version: 2.0.15 (ESP-IDF v4.4.7) by Espressif Systems + ESP32 lib version: 2.0.16 (ESP-IDF v4.4.7) by Espressif Systems This project uses other libraries. It is necessary to install them in the arduino IDE. - Library - License - Version - Link @@ -12,7 +12,7 @@ - AsyncTCP - LGPL 3.0 - 1.1.4 - https://github.com/dvarrel/ESPAsyncTCP - ArduinoJson - MIT - 7.0.4 - https://github.com/bblanchon/ArduinoJson - ArduinoUniqueID - MIT - 1.3.0 - https://github.com/ricaun/ArduinoUniqueID - - ESP32 - LGPL 2.1 - 2.0.15 - https://github.com/espressif/arduino-esp32 + - ESP32 - LGPL 2.1 - 2.0.16 - https://github.com/espressif/arduino-esp32 Board configuration in the arduino IDE 2.3.2 Tools -> Board -> ESP32 Arduino -> AI Thinker ESP32 @@ -64,12 +64,12 @@ void setup() { /* Serial port for debugging purposes */ Serial.begin(SERIAL_PORT_SPEED); - Serial.println("----------------------------------------------------------------"); - Serial.println("Start MCU!"); - Serial.println("Prusa ESP32-cam https://prusa3d.cz"); - Serial.print("SW Version: "); + Serial.println(F("----------------------------------------------------------------")); + Serial.println(F("Start MCU!")); + Serial.println(F("Prusa ESP32-cam https://prusa3d.cz")); + Serial.print(F("SW Version: ")); Serial.println(SW_VERSION); - Serial.print("Build: "); + Serial.print(F("Build: ")); Serial.println(SW_BUILD); #if (CONSOLE_VERBOSE_DEBUG == true) Serial.setDebugOutput(true); @@ -111,18 +111,18 @@ void setup() { Connect.Init(); /* init tasks */ - SystemLog.AddEvent(LogLevel_Info, "Start tasks"); + SystemLog.AddEvent(LogLevel_Info, F("Start tasks")); xTaskCreatePinnedToCore(System_TaskMain, "SystemNtpOtaUpdate", 8000, NULL, 1, &Task_SystemMain, 0); /*function, description, stack size, parameters, priority, task handle, core*/ - xTaskCreatePinnedToCore(System_TaskCaptureAndSendPhoto, "CaptureAndSendPhoto", 10000, NULL, 2, &Task_CapturePhotoAndSend, 0); /*function, description, stack size, parameters, priority, task handle, core*/ - xTaskCreatePinnedToCore(System_TaskWifiManagement, "WiFiManagement", 6000, NULL, 3, &Task_WiFiManagement, 0); /*function, description, stack size, parameters, priority, task handle, core*/ - xTaskCreatePinnedToCore(System_TaskSdCardCheck, "CheckMicroSdCard", 5000, NULL, 4, &Task_SdCardCheck, 0); /*function, description, stack size, parameters, priority, task handle, core*/ - xTaskCreatePinnedToCore(System_TaskSerialCfg, "CheckSerialConfiguration", 3000, NULL, 5, &Task_SerialCfg, 0); /*function, description, stack size, parameters, priority, task handle, core*/ - xTaskCreatePinnedToCore(System_TaskStreamTelemetry, "PrintStreamTelemetry", 3000, NULL, 6, &Task_StreamTelemetry, 0); /*function, description, stack size, parameters, priority, task handle, core*/ - xTaskCreatePinnedToCore(System_TaskSysLed, "SystemLed", 3000, NULL, 7, &Task_SysLed, 0); /*function, description, stack size, parameters, priority, task handle, core*/ - xTaskCreatePinnedToCore(System_TaskWiFiWatchdog, "WiFiWatchdog", 3000, NULL, 8, &Task_WiFiWatchdog, 0); /*function, description, stack size, parameters, priority, task handle, core*/ + xTaskCreatePinnedToCore(System_TaskCaptureAndSendPhoto, "CaptureAndSendPhoto", 6000, NULL, 2, &Task_CapturePhotoAndSend, 0); /*function, description, stack size, parameters, priority, task handle, core*/ + xTaskCreatePinnedToCore(System_TaskWifiManagement, "WiFiManagement", 2500, NULL, 3, &Task_WiFiManagement, 0); /*function, description, stack size, parameters, priority, task handle, core*/ + xTaskCreatePinnedToCore(System_TaskSdCardCheck, "CheckMicroSdCard", 2200, NULL, 4, &Task_SdCardCheck, 0); /*function, description, stack size, parameters, priority, task handle, core*/ + xTaskCreatePinnedToCore(System_TaskSerialCfg, "CheckSerialConfiguration", 2500, NULL, 5, &Task_SerialCfg, 0); /*function, description, stack size, parameters, priority, task handle, core*/ + xTaskCreatePinnedToCore(System_TaskStreamTelemetry, "PrintStreamTelemetry", 2500, NULL, 6, &Task_StreamTelemetry, 0); /*function, description, stack size, parameters, priority, task handle, core*/ + xTaskCreatePinnedToCore(System_TaskSysLed, "SystemLed", 2000, NULL, 7, &Task_SysLed, 0); /*function, description, stack size, parameters, priority, task handle, core*/ + xTaskCreatePinnedToCore(System_TaskWiFiWatchdog, "WiFiWatchdog", 2200, NULL, 8, &Task_WiFiWatchdog, 0); /*function, description, stack size, parameters, priority, task handle, core*/ /* init wdg */ - SystemLog.AddEvent(LogLevel_Info, "Init WDG"); + SystemLog.AddEvent(LogLevel_Info, F("Init WDG")); esp_task_wdt_init(WDG_TIMEOUT, true); /* enable panic so ESP32 restarts */ esp_task_wdt_add(NULL); /* add current thread to WDT watch */ esp_task_wdt_add(Task_CapturePhotoAndSend); @@ -135,7 +135,7 @@ void setup() { esp_task_wdt_add(Task_WiFiWatchdog); esp_task_wdt_reset(); /* reset wdg */ - SystemLog.AddEvent(LogLevel_Info, "MCU configuration done"); + SystemLog.AddEvent(LogLevel_Info, F("MCU configuration done")); } void loop() { diff --git a/ESP32_PrusaConnectCam/camera.cpp b/ESP32_PrusaConnectCam/camera.cpp index 764666b..8cf76b6 100644 --- a/ESP32_PrusaConnectCam/camera.cpp +++ b/ESP32_PrusaConnectCam/camera.cpp @@ -33,9 +33,9 @@ Camera::Camera(Configuration* i_conf, Logs* i_log, uint8_t i_FlashPin) { @return none */ void Camera::Init() { - log->AddEvent(LogLevel_Info, "Init camera lib"); + log->AddEvent(LogLevel_Info, F("Init camera lib")); - log->AddEvent(LogLevel_Info, "Init GPIO"); + log->AddEvent(LogLevel_Info, F("Init GPIO")); ledcSetup(FLASH_PWM_CHANNEL, FLASH_PWM_FREQ, FLASH_PWM_RESOLUTION); ledcAttachPin(FLASH_GPIO_NUM, FLASH_PWM_CHANNEL); ledcWrite(FLASH_PWM_CHANNEL, FLASH_OFF_STATUS); @@ -50,7 +50,7 @@ void Camera::Init() { @return none */ void Camera::InitCameraModule() { - log->AddEvent(LogLevel_Info, "Init camera module"); + log->AddEvent(LogLevel_Info, F("Init camera module")); /* Turn-off the 'brownout detector' */ WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0); esp_err_t err; @@ -92,18 +92,18 @@ void Camera::InitCameraModule() { CameraConfig.grab_mode = CAMERA_GRAB_LATEST; /* CAMERA_GRAB_WHEN_EMPTY or CAMERA_GRAB_LATEST */ if (CameraConfig.fb_location == CAMERA_FB_IN_DRAM) { - log->AddEvent(LogLevel_Verbose, "Camera frame buffer location: DRAM"); + log->AddEvent(LogLevel_Verbose, F("Camera frame buffer location: DRAM")); } else if (CameraConfig.fb_location == CAMERA_FB_IN_PSRAM) { - log->AddEvent(LogLevel_Verbose, "Camera frame buffer location: PSRAM"); + log->AddEvent(LogLevel_Verbose, F("Camera frame buffer location: PSRAM")); } else { - log->AddEvent(LogLevel_Verbose, "Camera frame buffer location: Unknown"); + log->AddEvent(LogLevel_Verbose, F("Camera frame buffer location: Unknown")); } /* Camera init */ err = esp_camera_init(&CameraConfig); if (err != ESP_OK) { log->AddEvent(LogLevel_Warning, "Camera init failed. Error: " + String(err, HEX)); - log->AddEvent(LogLevel_Warning, "Reset ESP32-cam!"); + log->AddEvent(LogLevel_Warning, F("Reset ESP32-cam!")); ESP.restart(); } } @@ -114,7 +114,7 @@ void Camera::InitCameraModule() { @return none */ void Camera::LoadCameraCfgFromEeprom() { - log->AddEvent(LogLevel_Info, "Load camera CFG from EEPROM"); + log->AddEvent(LogLevel_Info, F("Load camera CFG from EEPROM")); PhotoQuality = config->LoadPhotoQuality(); FrameSize = config->LoadFrameSize(); TFrameSize = TransformFrameSizeDataType(config->LoadFrameSize()); @@ -212,7 +212,7 @@ bool Camera::GetFlashStatus() { @return none */ void Camera::ApplyCameraCfg() { - log->AddEvent(LogLevel_Info, "Set camera CFG"); + log->AddEvent(LogLevel_Info, F("Set camera CFG")); /* sensor configuration */ sensor_t* sensor = esp_camera_sensor_get(); @@ -274,12 +274,12 @@ void Camera::CapturePhoto() { esp_camera_fb_return(FrameBuffer); do { - log->AddEvent(LogLevel_Info, "Taking photo..."); + log->AddEvent(LogLevel_Info, F("Taking photo...")); /* capture final photo */ FrameBuffer = esp_camera_fb_get(); if (!FrameBuffer) { - log->AddEvent(LogLevel_Error, "Camera capture failed! photo"); + log->AddEvent(LogLevel_Error, F("Camera capture failed! photo")); return; } else { @@ -325,7 +325,7 @@ void Camera::CaptureStream(camera_fb_t* i_buf) { /* capture final photo */ FrameBuffer = esp_camera_fb_get(); if (!FrameBuffer) { - log->AddEvent(LogLevel_Error, "Camera capture failed! stream"); + log->AddEvent(LogLevel_Error, F("Camera capture failed! stream")); i_buf = NULL; return; } diff --git a/ESP32_PrusaConnectCam/cfg.cpp b/ESP32_PrusaConnectCam/cfg.cpp index 71dc883..e63d6db 100644 --- a/ESP32_PrusaConnectCam/cfg.cpp +++ b/ESP32_PrusaConnectCam/cfg.cpp @@ -34,7 +34,7 @@ void Configuration::Init() { /* check, when it is first MCU start. If yes, then set default CFG */ if (CheckFirstMcuStart() == true) { - Log->AddEvent(LogLevel_Warning, "First MCU start! Set factory cfg"); + Log->AddEvent(LogLevel_Warning, F("First MCU start! Set factory cfg")); DefaultCfg(); SaveFirstMcuStartFlag(CFG_FIRST_MCU_START_NAK); Log->SetLogLevel(LoadLogLevel()); @@ -50,7 +50,7 @@ void Configuration::Init() { @return none */ void Configuration::ReadCfg() { - Log->AddEvent(LogLevel_Info, "Load CFG from EEPROM"); + Log->AddEvent(LogLevel_Info, F("Load CFG from EEPROM")); LoadRefreshInterval(); LoadToken(); LoadFingerprint(); @@ -84,7 +84,7 @@ void Configuration::ReadCfg() { LoadAgcGain(); LoadPrusaConnectHostname(); Log->AddEvent(LogLevel_Info, "Active WiFi client cfg: " + String(CheckActifeWifiCfgFlag() ? "true" : "false")); - Log->AddEvent(LogLevel_Info, "Load CFG from EEPROM done"); + Log->AddEvent(LogLevel_Info, F("Load CFG from EEPROM done")); } /** @@ -93,7 +93,7 @@ void Configuration::ReadCfg() { @return bool - status */ bool Configuration::CheckFirstMcuStart() { - Log->AddEvent(LogLevel_Info, "Read FirstMcuStart: "); + Log->AddEvent(LogLevel_Info, F("Read FirstMcuStart: ")); uint8_t flag = EEPROM.read(EEPROM_ADDR_FIRST_MCU_START_FLAG_START); if (CFG_FIRST_MCU_START_NAK == flag) { @@ -123,8 +123,8 @@ void Configuration::SaveFirstMcuStartFlag(uint8_t i_data) { @return none */ void Configuration::DefaultCfg() { - Log->AddEvent(LogLevel_Warning, "+++++++++++++++++++++++++++"); - Log->AddEvent(LogLevel_Warning, "Start set factory cfg!"); + Log->AddEvent(LogLevel_Warning, F("+++++++++++++++++++++++++++")); + Log->AddEvent(LogLevel_Warning, F("Start set factory cfg!")); SaveRefreshInterval(FACTORY_CFG_PHOTO_REFRESH_INTERVAL); SaveToken(""); @@ -160,7 +160,7 @@ void Configuration::DefaultCfg() { SaveAgcGain(FACTORY_CFG_AGC_GAIN); SaveLogLevel(LogLevel_Info); SavePrusaConnectHostname(FACTORY_CFG_HOSTNAME); - Log->AddEvent(LogLevel_Warning, "+++++++++++++++++++++++++++"); + Log->AddEvent(LogLevel_Warning, F("+++++++++++++++++++++++++++")); } /** @@ -187,7 +187,7 @@ bool Configuration::CheckActifeWifiCfgFlag() { @return none */ void Configuration::CheckResetCfg() { - Log->AddEvent(LogLevel_Verbose, "Check reset MCU cfg"); + Log->AddEvent(LogLevel_Verbose, F("Check reset MCU cfg")); bool ResetPinStatus = digitalRead(CFG_RESET_PIN); /* wait 10s to pressed reset pin */ @@ -204,7 +204,7 @@ void Configuration::CheckResetCfg() { /* check if is reset pin grounded more at 10s */ if (i == (CFG_RESET_TIME_WAIT / CFG_RESET_LOOP_DELAY)) { - Log->AddEvent(LogLevel_Warning, "Reset MCU to factory CFG!"); + Log->AddEvent(LogLevel_Warning, F("Reset MCU to factory CFG!")); /* wait for ungrounded reset pin, and binking led */ while (digitalRead(CFG_RESET_PIN) == LOW) { @@ -220,7 +220,7 @@ void Configuration::CheckResetCfg() { ESP.restart(); } else { - Log->AddEvent(LogLevel_Verbose, "Reset MCU cfg false"); + Log->AddEvent(LogLevel_Verbose, F("Reset MCU cfg false")); } } @@ -306,9 +306,9 @@ void Configuration::SaveString(uint16_t address, uint16_t max_length, String dat EEPROM.write(i, data.charAt(j)); } EEPROM.commit(); - Log->AddEvent(LogLevel_Verbose, "Write string done"); + Log->AddEvent(LogLevel_Verbose, F("Write string done")); } else { - Log->AddEvent(LogLevel_Verbose, "Skip write string"); + Log->AddEvent(LogLevel_Verbose, F("Skip write string")); } } /** diff --git a/ESP32_PrusaConnectCam/connect.cpp b/ESP32_PrusaConnectCam/connect.cpp index 4d1f466..1077fd4 100644 --- a/ESP32_PrusaConnectCam/connect.cpp +++ b/ESP32_PrusaConnectCam/connect.cpp @@ -35,7 +35,7 @@ PrusaConnect::PrusaConnect(Configuration *i_conf, Logs *i_log, Camera *i_camera) * @return none */ void PrusaConnect::Init() { - log->AddEvent(LogLevel_Info, "Init PrusaConnect lib"); + log->AddEvent(LogLevel_Info, F("Init PrusaConnect lib")); TakePicture(); } @@ -46,7 +46,7 @@ void PrusaConnect::Init() { * @return none */ void PrusaConnect::LoadCfgFromEeprom() { - log->AddEvent(LogLevel_Info, "Load PrusaConnect CFG from EEPROM"); + log->AddEvent(LogLevel_Info, F("Load PrusaConnect CFG from EEPROM")); Token = config->LoadToken(); Fingerprint = config->LoadFingerprint(); RefreshInterval = config->LoadRefreshInterval(); @@ -74,9 +74,8 @@ void PrusaConnect::TakePicture() { * @return true - if data was sent successfully * @return false - if data was not sent successfully */ -bool PrusaConnect::SendDataToBackend(String *i_data, int i_data_length, String i_content_type, String i_type, String i_url_path, SendDataToBackendType i_data_type) { +bool PrusaConnect::SendDataToBackend(String *i_data, int i_data_length, String i_content_type, String i_type, String i_url_path, SendDataToBackendType i_data_type) { WiFiClientSecure client; - Server_pause(); BackendReceivedStatus = ""; bool ret = false; log->AddEvent(LogLevel_Info, "Sending " + i_type + " to PrusaConnect"); @@ -85,7 +84,7 @@ bool PrusaConnect::SendDataToBackend(String *i_data, int i_data_length, String i if ((Fingerprint.length() > 0) && (Token.length() > 0)) { client.setCACert(root_CAs); client.setTimeout(1000); - log->AddEvent(LogLevel_Verbose, "Connecting to server..."); + log->AddEvent(LogLevel_Verbose, F("Connecting to server...")); /* connecting to server */ if (!client.connect(PrusaConnectHostname.c_str(), 443)) { @@ -102,7 +101,7 @@ bool PrusaConnect::SendDataToBackend(String *i_data, int i_data_length, String i } else { /* send data to server */ - log->AddEvent(LogLevel_Verbose, "Connected to server!"); + log->AddEvent(LogLevel_Verbose, F("Connected to server!")); client.println("PUT https://" + PrusaConnectHostname + i_url_path + " HTTP/1.0"); client.println("Host: " + PrusaConnectHostname); client.println("User-Agent: ESP32-CAM"); @@ -111,14 +110,14 @@ bool PrusaConnect::SendDataToBackend(String *i_data, int i_data_length, String i client.println("Content-Type: " + i_content_type); client.println("fingerprint: " + Fingerprint); client.println("token: " + Token); - client.print("Content-Length: "); - client.println(i_data_length); + client.println("Content-Length: " + String(i_data_length)); client.println(); esp_task_wdt_reset(); + /* sending photo */ if (SendPhoto == i_data_type) { - log->AddEvent(LogLevel_Verbose, "Send data photo"); - int index; + log->AddEvent(LogLevel_Verbose, F("Send data photo")); + int index = 0; /* send data in fragments */ for (index = 0; index < i_data_length; index = index + PHOTO_FRAGMENT_SIZE) { camera->CopyPhoto(i_data, index, index + PHOTO_FRAGMENT_SIZE); @@ -128,14 +127,15 @@ bool PrusaConnect::SendDataToBackend(String *i_data, int i_data_length, String i /* send rest of data */ index -= PHOTO_FRAGMENT_SIZE; - if((i_data_length > index) && ((i_data_length - index) > 0)) { + if ((i_data_length > index) && ((i_data_length - index) > 0)) { camera->CopyPhoto(i_data, index, i_data_length); client.print(*i_data); log->AddEvent(LogLevel_Verbose, String(i_data_length) + "/" + String(i_data_length)); } + /* sending device information */ } else if (SendInfo == i_data_type) { - log->AddEvent(LogLevel_Verbose, "Send data info"); + log->AddEvent(LogLevel_Verbose, F("Send data info")); client.print(*i_data); } @@ -163,26 +163,25 @@ bool PrusaConnect::SendDataToBackend(String *i_data, int i_data_length, String i } } } - log->AddEvent(LogLevel_Verbose, "Full response: " + fullResponse); + log->AddEvent(LogLevel_Verbose, "Full response: " + fullResponse); BackendAvailability = BackendAvailable; client.stop(); } } else { /* err message */ - log->AddEvent(LogLevel_Verbose, "ERROR SEND DATA TO SERVER! INVALID DATA!"); + log->AddEvent(LogLevel_Verbose, F("ERROR SEND DATA TO SERVER! INVALID DATA!")); log->AddEvent(LogLevel_Verbose, "Fingerprint: " + Fingerprint); log->AddEvent(LogLevel_Verbose, "Token: " + Token); if (Fingerprint.length() == 0) { - BackendReceivedStatus = "Missing fingerprint"; + BackendReceivedStatus = F("Missing fingerprint"); } else if (Token.length() == 0) { - BackendReceivedStatus = "Missing token"; + BackendReceivedStatus = F("Missing token"); } } log->AddEvent(LogLevel_Info, "Upload done. Response code: " + BackendReceivedStatus + " ,BA:" + CovertBackendAvailabilitStatusToString(BackendAvailability)); - Server_resume(); return ret; } @@ -193,7 +192,8 @@ bool PrusaConnect::SendDataToBackend(String *i_data, int i_data_length, String i * @return none */ void PrusaConnect::SendPhotoToBackend() { - log->AddEvent(LogLevel_Info, "Start sending photo to prusaconnect"); + log->AddEvent(LogLevel_Info, F("Start sending photo to prusaconnect")); + String Photo = ""; SendDataToBackend(&Photo, camera->GetPhotoSize(), "image/jpg", "Photo", HOST_URL_CAM_PATH, SendPhoto); SystemLog.AddEvent(LogLevel_Info, "Free RAM: " + String(ESP.getFreeHeap()) + " bytes"); } @@ -207,7 +207,7 @@ void PrusaConnect::SendInfoToBackend() { return; } else { - log->AddEvent(LogLevel_Info, "Start sending device information to prusaconnect"); + log->AddEvent(LogLevel_Info, F("Start sending device information to prusaconnect")); JsonDocument json_data; String json_string = ""; @@ -253,40 +253,40 @@ void PrusaConnect::TakePictureAndSendToBackend() { String PrusaConnect::ProcessHttpResponseCode(int code) { String ret = ""; switch (code) { - case 200: - ret = "200 - OK"; - break; - case 201: - ret = "201 - OK entry created"; - break; - case 204: - ret = "204 - Upload OK"; - break; - case 304: - ret = "304 - Response has not been modified"; - break; - case 400: - ret = "400 - Some data received is not valid"; - break; - case 401: - ret = "401 - Missing security toker or it is not valid"; - break; - case 403: - ret = "403 - Security toke is not valid or is outdated"; - break; - case 404: - ret = "404 - Entity not found or invalid auth token"; - break; - case 409: - ret = "409 - Conflict with the state of target resource (user error)"; - break; - case 503: - ret += "503 - Service is unavailable at this moment. Try again later"; - break; - default: - ret = String(code); - ret += " - unknown error code"; - break; + case 200: + ret = F("200 - OK"); + break; + case 201: + ret = F("201 - OK entry created"); + break; + case 204: + ret = F("204 - Upload OK"); + break; + case 304: + ret = F("304 - Response has not been modified"); + break; + case 400: + ret = F("400 - Some data received is not valid"); + break; + case 401: + ret = F("401 - Missing security toker or it is not valid"); + break; + case 403: + ret = F("403 - Security toke is not valid or is outdated"); + break; + case 404: + ret = F("404 - Entity not found or invalid auth token"); + break; + case 409: + ret = F("409 - Conflict with the state of target resource (user error)"); + break; + case 503: + ret += F("503 - Service is unavailable at this moment. Try again later"); + break; + default: + ret = String(code); + ret += F(" - unknown error code"); + break; } return ret; @@ -301,39 +301,39 @@ String PrusaConnect::ProcessHttpResponseCode(int code) { bool PrusaConnect::ProcessHttpResponseCodeBool(int code) { bool ret = false; switch (code) { - case 200: - ret = true; - break; - case 201: - ret = true; - break; - case 204: - ret = true; - break; - case 304: - ret = false; - break; - case 400: - ret = false; - break; - case 401: - ret = false; - break; - case 403: - ret = false; - break; - case 404: - ret = false; - break; - case 409: - ret = false; - break; - case 503: - ret = false; - break; - default: - ret = false; - break; + case 200: + ret = true; + break; + case 201: + ret = true; + break; + case 204: + ret = true; + break; + case 304: + ret = false; + break; + case 400: + ret = false; + break; + case 401: + ret = false; + break; + case 403: + ret = false; + break; + case 404: + ret = false; + break; + case 409: + ret = false; + break; + case 503: + ret = false; + break; + default: + ret = false; + break; } return ret; @@ -458,18 +458,18 @@ BackendAvailabilitStatus PrusaConnect::GetBackendAvailabilitStatus() { String PrusaConnect::CovertBackendAvailabilitStatusToString(BackendAvailabilitStatus i_data) { String ret = ""; switch (i_data) { - case WaitForFirstConnection: - ret = "Wait for first connection"; - break; - case BackendAvailable: - ret = "Backend available"; - break; - case BackendUnavailable: - ret = "Backend unavailable"; - break; - default: - ret = "Unknown"; - break; + case WaitForFirstConnection: + ret = F("Wait for first connection"); + break; + case BackendAvailable: + ret = F("Backend available"); + break; + case BackendUnavailable: + ret = F("Backend unavailable"); + break; + default: + ret = F("Unknown"); + break; } return ret; @@ -491,7 +491,7 @@ void PrusaConnect::IncreaseSendingIntervalCounter() { * @param uint8_t i_data - counter * @return none */ -void PrusaConnect::SetSendingIntervalCounter(uint8_t i_data) { +void PrusaConnect::SetSendingIntervalCounter(uint8_t i_data) { SendingIntervalCounter = i_data; } diff --git a/ESP32_PrusaConnectCam/connect.h b/ESP32_PrusaConnectCam/connect.h index 8cd7312..0e0ac70 100644 --- a/ESP32_PrusaConnectCam/connect.h +++ b/ESP32_PrusaConnectCam/connect.h @@ -51,12 +51,11 @@ private: uint8_t RefreshInterval; ///< interval for sending photo to backend String BackendReceivedStatus; ///< status of backend response BackendAvailabilitStatus BackendAvailability; ///< status of backend availability - bool SendDeviceInformationToBackend; ///< flag for sending device information to backend + bool SendDeviceInformationToBackend; ///< flag for sending device information to backend uint8_t SendingIntervalCounter; ///< counter for sending interval, represents seconds String Token; ///< token for backend communication - String Fingerprint; ///< fingerprint for backend communication - String Photo; ///< photo for sending to backend + String Fingerprint; ///< fingerprint for backend communication String PrusaConnectHostname; ///< hostname of prusa connect backend Configuration *config; ///< pointer to configuration object diff --git a/ESP32_PrusaConnectCam/log.cpp b/ESP32_PrusaConnectCam/log.cpp index 4d195ab..3a46ea7 100644 --- a/ESP32_PrusaConnectCam/log.cpp +++ b/ESP32_PrusaConnectCam/log.cpp @@ -93,8 +93,8 @@ Logs::Logs(LogLevel_enum i_LogLevel, String i_FilePath, String i_FileName, uint1 @return none */ void Logs::Init() { - Serial.println("----------------------------------------------------------------"); - Serial.println("Init Logs library"); + Serial.println(F("----------------------------------------------------------------")); + Serial.println(F("Init Logs library")); /* init micro SD card */ InitSdCard(); @@ -110,22 +110,22 @@ void Logs::Init() { } /* added first message to log file after start MCU */ - String msg = "----------------------------------------------------------------\n"; - msg += "Start MCU!\nSW Version: "; + String msg = F("----------------------------------------------------------------\n"); + msg += F("Start MCU!\nSW Version: "); msg += String(SW_VERSION); - msg += " ,Build: "; + msg += F(" ,Build: "); msg += String(SW_BUILD); msg += "\n"; - msg += "Verbose mode: "; + msg += F("Verbose mode: "); msg += (true == CONSOLE_VERBOSE_DEBUG) ? "true" : "false"; msg += "\n"; - msg += "Log level: "; + msg += F("Log level: "); msg += String(LogLevel); msg += "\n"; AppendFile(SD_MMC, FilePath + FileName, msg); } else { - Serial.println("Micro-SD card not found! Disable logs"); + Serial.println(F("Micro-SD card not found! Disable logs")); } } diff --git a/ESP32_PrusaConnectCam/mcu_cfg.h b/ESP32_PrusaConnectCam/mcu_cfg.h index 53a8626..7df537c 100644 --- a/ESP32_PrusaConnectCam/mcu_cfg.h +++ b/ESP32_PrusaConnectCam/mcu_cfg.h @@ -14,7 +14,7 @@ #define _MCU_CFG_H_ /* ---------------- BASIC MCU CFG --------------*/ -#define SW_VERSION "1.0.1" ///< SW version +#define SW_VERSION "1.0.2-beta" ///< SW version #define SW_BUILD __DATE__ " " __TIME__ ///< build number #define CONSOLE_VERBOSE_DEBUG false ///< enable/disable verbose debug log level for console #define DEVICE_HOSTNAME "Prusa-ESP32cam" ///< device hostname @@ -22,7 +22,7 @@ /* ------------ PRUSA BACKEND CFG --------------*/ #define HOST_URL_CAM_PATH "/c/snapshot" ///< path for sending photo to prusa connect #define HOST_URL_INFO_PATH "/c/info" ///< path for sending info to prusa connect -#define REFRESH_INTERVAL_MIN 5 ///< minimum refresh interval for sending photo to prusa connect [s] +#define REFRESH_INTERVAL_MIN 10 ///< minimum refresh interval for sending photo to prusa connect [s] #define REFRESH_INTERVAL_MAX 240 ///< maximum refresh interval for sending photo to prusa connect [s] /* --------------- FLASH LED CFG ---------------*/ @@ -90,6 +90,12 @@ /* ----------------- WiFi CFG -------------------*/ #define WIFI_STA_WDG_TIMEOUT 60000 ///< STA watchdog timeout [ms] +/* ----------------- NTP CFG --------------------*/ +#define NTP_SERVER_1 "pool.ntp.org" ///< NTP server +#define NTP_SERVER_2 "time.nist.gov" ///< NTP server +#define NTP_GTM_OFFSET_SEC 0 ///< GMT offset in seconds. 0 = UTC. 3600 = GMT+1 +#define NTP_DAYLIGHT_OFFSET_SEC 0 ///< daylight offset in seconds. 0 = no daylight saving time. 3600 = +1 hour + /* ---------------- FACTORY CFG ----------------*/ #define FACTORY_CFG_PHOTO_REFRESH_INTERVAL 30 ///< in the second #define FACTORY_CFG_PHOTO_QUALITY 10 ///< 10-63, lower is better diff --git a/ESP32_PrusaConnectCam/micro_sd.cpp b/ESP32_PrusaConnectCam/micro_sd.cpp index 0fc867d..dbdd067 100644 --- a/ESP32_PrusaConnectCam/micro_sd.cpp +++ b/ESP32_PrusaConnectCam/micro_sd.cpp @@ -28,11 +28,11 @@ MicroSd::MicroSd() { @return none */ void MicroSd::ReinitCard() { - Serial.println("Reinit micro SD card!"); - Serial.println("Deinit micro SD card"); + Serial.println(F("Reinit micro SD card!")); + Serial.println(F("Deinit micro SD card")); SD_MMC.end(); delay(50); - Serial.println("Init micro SD card"); + Serial.println(F("Init micro SD card")); InitSdCard(); } @@ -43,12 +43,12 @@ void MicroSd::ReinitCard() { */ void MicroSd::InitSdCard() { /* Start INIT Micro SD card */ - Serial.println("Start init micro-SD Card"); + Serial.println(F("Start init micro-SD Card")); /* set SD card to 1-line/1-bit mode. GPIO 4 is used for LED and for microSD card. But communication is slower. */ /* https://github.com/espressif/arduino-esp32/blob/master/libraries/SD_MMC/src/SD_MMC.h */ if (!SD_MMC.begin("/sdcard", true)) { - Serial.println("SD Card Mount Failed"); + Serial.println(F("SD Card Mount Failed")); CardDetected = false; CardSize = 0; //DetectAfterBoot = false; @@ -58,7 +58,7 @@ void MicroSd::InitSdCard() { /* check microSD card and card type */ uint8_t cardType = SD_MMC.cardType(); if (cardType == CARD_NONE) { - Serial.println("No SD_MMC card attached"); + Serial.println(F("No SD_MMC card attached")); CardDetected = false; CardSize = 0; //DetectAfterBoot = false; @@ -66,15 +66,15 @@ void MicroSd::InitSdCard() { } /* print card type */ - Serial.print("Found card. Card Type: "); + Serial.print(F("Found card. Card Type: ")); if (cardType == CARD_MMC) { - Serial.print("MMC"); + Serial.print(F("MMC")); } else if (cardType == CARD_SD) { - Serial.print("SDSC"); + Serial.print(F("SDSC")); } else if (cardType == CARD_SDHC) { - Serial.print("SDHC"); + Serial.print(F("SDHC")); } else { - Serial.print("UNKNOWN"); + Serial.print(F("UNKNOWN")); } /* calculation card size */ @@ -97,26 +97,26 @@ void MicroSd::ListDir(fs::FS &fs, String DirName, uint8_t levels) { File root = fs.open(DirName.c_str()); if (!root) { - Serial.println("Failed to open directory"); + Serial.println(F("Failed to open directory")); return; } if (!root.isDirectory()) { - Serial.println("Not a directory"); + Serial.println(F("Not a directory")); return; } File file = root.openNextFile(); while (file) { if (file.isDirectory()) { - Serial.print(" DIR : "); + Serial.print(F(" DIR : ")); Serial.println(file.name()); if (levels) { ListDir(fs, file.path(), levels - 1); } } else { - Serial.print(" FILE: "); + Serial.print(F(" FILE: ")); Serial.print(file.name()); - Serial.print(" SIZE: "); + Serial.print(F(" SIZE: ")); Serial.println(file.size()); } file = root.openNextFile(); @@ -184,11 +184,11 @@ void MicroSd::ReadFileConsole(fs::FS &fs, String path) { File file = fs.open(path.c_str()); if (!file) { - Serial.println("Failed to open file for reading"); + Serial.println(F("Failed to open file for reading")); return; } - Serial.print("Read from file: "); + Serial.print(F("Read from file: ")); while (file.available()) { Serial.write(file.read()); } @@ -355,11 +355,11 @@ uint16_t MicroSd::FileCount(fs::FS &fs, String DirName, String FileName) { File root = fs.open(DirName.c_str()); if (!root) { - Serial.println("Failed to open directory"); + Serial.println(F("Failed to open directory")); return 0; } if (!root.isDirectory()) { - Serial.println("Not a directory"); + Serial.println(F("Not a directory")); return 0; } diff --git a/ESP32_PrusaConnectCam/serial_cfg.cpp b/ESP32_PrusaConnectCam/serial_cfg.cpp index c0258fc..b938167 100644 --- a/ESP32_PrusaConnectCam/serial_cfg.cpp +++ b/ESP32_PrusaConnectCam/serial_cfg.cpp @@ -90,27 +90,27 @@ String lastTwoChars = command.substring(command.length() - 2); connect->SetToken(auth_token); } else if (command.startsWith("wificonnect") && command.endsWith(";")) { - log->AddEvent(LogLevel_Info, "--> Console connecting to wifi..."); + log->AddEvent(LogLevel_Info, F("--> Console connecting to wifi...")); wifim->ConnectToSta(); } else if (command.startsWith("getwifimode") && command.endsWith(";")) { - log->AddEvent(LogLevel_Info, "--> Console print WiFi mode..."); + log->AddEvent(LogLevel_Info, F("--> Console print WiFi mode...")); Serial.print("wifimode:" + wifim->GetWiFiMode() + ";"); } else if (command.startsWith("getwifistastatus") && command.endsWith(";")) { - log->AddEvent(LogLevel_Info, "--> Console print STA status..."); + log->AddEvent(LogLevel_Info, F("--> Console print STA status...")); Serial.print("wifistastatus:" + wifim->GetStaStatus() + ";"); } else if (command.startsWith("getwifistaip") && command.endsWith(";")) { - log->AddEvent(LogLevel_Info, "--> Console print STA IP..."); + log->AddEvent(LogLevel_Info, F("--> Console print STA IP...")); Serial.print("wifistaip:" + wifim->GetStaIp() + ";"); } else if (command.startsWith("getserviceapssid") && command.endsWith(";")) { - log->AddEvent(LogLevel_Info, "--> Console print service WiFi AP SSID..."); + log->AddEvent(LogLevel_Info, F("--> Console print service WiFi AP SSID...")); Serial.print("getserviceapssid:" + wifim->GetServiceApSsid() + ";"); } else if (command.startsWith("mcureboot") && command.endsWith(";")) { - log->AddEvent(LogLevel_Warning, "--> Reboot MCU!"); + log->AddEvent(LogLevel_Warning, F("--> Reboot MCU!")); ESP.restart(); } else if (command.startsWith("commandslist") && command.endsWith(";")) { @@ -130,17 +130,17 @@ String lastTwoChars = command.substring(command.length() - 2); @return none */ void SerialCfg::PrintAvailableCommands() { - Serial.println("Available commands: "); - Serial.println("setwifissid:SSID; - set WiFi SSID"); - Serial.println("setwifipass:PASS; - set WiFi password"); - Serial.println("setauthtoken:TOKEN; - set auth TOKEN for backend"); - Serial.println("wificonnect; - connect to WiFi network"); - Serial.println("getwifimode; - get WiFi mode (AP/STA)"); - Serial.println("getwifistastatus; - get STA status (connected/disconnected)"); - Serial.println("getwifistaip; - get STA IP address"); - Serial.println("getserviceapssid;- get service WiFi AP SSID"); - Serial.println("mcureboot; - reboot MCU"); - Serial.println("commandslist; - print available commands"); + Serial.println(F("Available commands: ")); + Serial.println(F("setwifissid:SSID; - set WiFi SSID")); + Serial.println(F("setwifipass:PASS; - set WiFi password")); + Serial.println(F("setauthtoken:TOKEN; - set auth TOKEN for backend")); + Serial.println(F("wificonnect; - connect to WiFi network")); + Serial.println(F("getwifimode; - get WiFi mode (AP/STA)")); + Serial.println(F("getwifistastatus; - get STA status (connected/disconnected)")); + Serial.println(F("getwifistaip; - get STA IP address")); + Serial.println(F("getserviceapssid;- get service WiFi AP SSID")); + Serial.println(F("mcureboot; - reboot MCU")); + Serial.println(F("commandslist; - print available commands")); } /* EOF */ \ No newline at end of file diff --git a/ESP32_PrusaConnectCam/server.cpp b/ESP32_PrusaConnectCam/server.cpp index cea17d5..1641a15 100644 --- a/ESP32_PrusaConnectCam/server.cpp +++ b/ESP32_PrusaConnectCam/server.cpp @@ -32,11 +32,11 @@ void Server_LoadCfg() { @return none */ void Server_InitWebServer() { - SystemLog.AddEvent(LogLevel_Info, "Starting init WEB server"); + SystemLog.AddEvent(LogLevel_Info, F("Starting init WEB server")); /* route for get last capture photo */ server.on("/saved-photo.jpg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: get photo"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: get photo")); if (Server_CheckBasicAuth(request) == false) return; @@ -45,7 +45,7 @@ void Server_InitWebServer() { /* route to jquery */ server.on("/jquery-3.7.0.min.js", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get jquery-3.7.0.min.js"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get jquery-3.7.0.min.js")); if (Server_CheckBasicAuth(request) == false) return; @@ -75,7 +75,7 @@ void Server_InitWebServer() { void Server_InitWebServer_JsonData() { /* route for json with cfg parameters */ server.on("/json_input", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: get json_input"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: get json_input")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, F("text/plain"), Server_GetJsonData().c_str()); @@ -83,7 +83,7 @@ void Server_InitWebServer_JsonData() { /* route for json with wifi networks */ server.on("/json_wifi", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: get json_wifi"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: get json_wifi")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, F("text/plain"), SystemWifiMngt.GetAvailableWifiNetworks().c_str()); @@ -91,7 +91,7 @@ void Server_InitWebServer_JsonData() { /* route for san wi-fi networks */ server.on("/wifi_scan", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: scan WI-FI networks"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: scan WI-FI networks")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, F("text/html"), MSG_SCANNING); @@ -123,7 +123,7 @@ void Server_InitWebServer_JsonData() { void Server_InitWebServer_WebPages() { /* Route for root / web page */ server.on("/", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get index.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get index.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -132,7 +132,7 @@ void Server_InitWebServer_WebPages() { /* Route for styles */ server.on("/styles.css", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get styles.css"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get styles.css")); if (Server_CheckBasicAuth(request) == false) return; @@ -141,7 +141,7 @@ void Server_InitWebServer_WebPages() { /* Route for java scripts */ server.on("/scripts.js", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get scripts.js"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get scripts.js")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, "application/javascript", scripts_js); @@ -150,7 +150,7 @@ void Server_InitWebServer_WebPages() { /* Route for config web page */ server.on("/page_config.html", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get page_config.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get page_config.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -159,7 +159,7 @@ void Server_InitWebServer_WebPages() { /* Route for wifi web page */ server.on("/page_wifi.html", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get page_wifi.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get page_wifi.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -168,7 +168,7 @@ void Server_InitWebServer_WebPages() { /* Route for auth web page */ server.on("/page_auth.html", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get page_auth.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get page_auth.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -177,7 +177,7 @@ void Server_InitWebServer_WebPages() { /* Route for system web page */ server.on("/page_system.html", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get page_system.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get page_system.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -186,7 +186,7 @@ void Server_InitWebServer_WebPages() { /* route to license page */ server.on("/license.html", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get license.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get license.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -195,7 +195,7 @@ void Server_InitWebServer_WebPages() { /* route to gtac page */ server.on("/gtac.html", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get gtac.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get gtac.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -204,7 +204,7 @@ void Server_InitWebServer_WebPages() { /* route to privacy policy page */ server.on("/privacypolicy.html", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get privacypolicy.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get privacypolicy.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -213,7 +213,7 @@ void Server_InitWebServer_WebPages() { /* route to cookie page */ server.on("/cookie.html", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get cookie.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get cookie.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -222,7 +222,7 @@ void Server_InitWebServer_WebPages() { /* route to logs page */ server.on("/get_logs", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get get_logs.html"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get get_logs.html")); if (Server_CheckBasicAuth(request) == false) return; @@ -242,7 +242,7 @@ void Server_InitWebServer_WebPages() { void Server_InitWebServer_Icons() { /* route to logo */ server.on("/esp32_cam.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get esp32_cam.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get esp32_cam.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -251,7 +251,7 @@ void Server_InitWebServer_Icons() { /* route to github icon */ server.on("/github-icon.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get github-icon.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get github-icon.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -260,7 +260,7 @@ void Server_InitWebServer_Icons() { /* route to light on icon */ server.on("/light-on-icon.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get light-icon.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get light-icon.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -269,7 +269,7 @@ void Server_InitWebServer_Icons() { /* route to light off icon */ server.on("/light-off-icon.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get light-icon.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get light-icon.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -278,7 +278,7 @@ void Server_InitWebServer_Icons() { /* route to refresh icon */ server.on("/refresh-icon.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get refresh-icon.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get refresh-icon.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -287,7 +287,7 @@ void Server_InitWebServer_Icons() { /* route to reboot icon */ server.on("/reboot-icon.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get reboot-icon.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get reboot-icon.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -296,7 +296,7 @@ void Server_InitWebServer_Icons() { /* route to wifi icon */ server.on("/wifi-icon-1.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get wifi-icon-1.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get wifi-icon-1.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -305,7 +305,7 @@ void Server_InitWebServer_Icons() { /* route to wifi icon */ server.on("/wifi-icon-2.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get wifi-icon-2.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get wifi-icon-2.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -314,7 +314,7 @@ void Server_InitWebServer_Icons() { /* route to wifi icon */ server.on("/wifi-icon-3.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get wifi-icon-3.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get wifi-icon-3.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -323,7 +323,7 @@ void Server_InitWebServer_Icons() { /* route to wifi icon */ server.on("/wifi-icon-4.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get wifi-icon-4.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get wifi-icon-4.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -332,7 +332,7 @@ void Server_InitWebServer_Icons() { /* route to wifi icon */ server.on("/wifi-icon-0.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get wifi-icon-0.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get wifi-icon-0.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -341,7 +341,7 @@ void Server_InitWebServer_Icons() { /* route to eye icon */ server.on("/eye.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get eye.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get eye.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -350,7 +350,7 @@ void Server_InitWebServer_Icons() { /* route to eye-slash icon */ server.on("/eye-slash.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get eye-slash.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get eye-slash.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -359,7 +359,7 @@ void Server_InitWebServer_Icons() { /* route to favicon */ server.on("/favicon.svg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: Get favicon.svg"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: Get favicon.svg")); if (Server_CheckBasicAuth(request) == false) return; @@ -375,7 +375,7 @@ void Server_InitWebServer_Icons() { void Server_InitWebServer_Actions() { /*route for capture photo */ server.on("/action_capture", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /action_capture Take photo"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /action_capture Take photo")); if (Server_CheckBasicAuth(request) == false) return; SystemCamera.CapturePhoto(); @@ -384,7 +384,7 @@ void Server_InitWebServer_Actions() { /* route for send photo to prusa backend */ server.on("/action_send", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /action_send send photo to cloud"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /action_send send photo to cloud")); if (Server_CheckBasicAuth(request) == false) return; Connect.SetSendingIntervalExpired(); @@ -393,7 +393,7 @@ void Server_InitWebServer_Actions() { /* route for change LED status */ server.on("/action_led", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /action_led Change LED status"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /action_led Change LED status")); if (Server_CheckBasicAuth(request) == false) return; @@ -405,7 +405,7 @@ void Server_InitWebServer_Actions() { /* reboot MCU */ server.on("/action_reboot", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /action_reboo reboot MCU!"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /action_reboo reboot MCU!")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, F("text/html"), MSG_REBOOT_MCU); @@ -422,7 +422,7 @@ void Server_InitWebServer_Actions() { void Server_InitWebServer_Sets() { /* route to set integer value */ server.on("/set_int", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /set_int"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /set_int")); if (Server_CheckBasicAuth(request) == false) return; @@ -431,24 +431,20 @@ void Server_InitWebServer_Sets() { /* set refresh interval */ if (request->hasParam("refresh")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set refresh interval"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set refresh interval")); uint8_t value = request->getParam("refresh")->value().toInt(); if ((value >= REFRESH_INTERVAL_MIN) && (value <= REFRESH_INTERVAL_MAX)) { Connect.SetRefreshInterval(value); response_msg = MSG_SAVE_OK; } else { - response_msg = "ERROR! Bad value. Minimum is "; - response_msg += String(REFRESH_INTERVAL_MIN); - response_msg += ", maximum "; - response_msg += String(REFRESH_INTERVAL_MAX); - response_msg += " second"; + response_msg = "ERROR! Bad value. Minimum is " + String(REFRESH_INTERVAL_MIN) + ", maximum " + String(REFRESH_INTERVAL_MAX) + " second"; } response = true; } /* set saturation */ if (request->hasParam("saturation")) { - SystemLog.AddEvent(LogLevel_Verbose, "set saturation"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set saturation")); SystemCamera.SetSaturation(request->getParam("saturation")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -456,7 +452,7 @@ void Server_InitWebServer_Sets() { /* set contrast */ if (request->hasParam("contrast")) { - SystemLog.AddEvent(LogLevel_Verbose, "set contrast"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set contrast")); SystemCamera.SetContrast(request->getParam("contrast")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -464,7 +460,7 @@ void Server_InitWebServer_Sets() { /* set brightness */ if (request->hasParam("brightness")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set brightness"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set brightness")); SystemCamera.SetBrightness(request->getParam("brightness")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -472,7 +468,7 @@ void Server_InitWebServer_Sets() { /* set frame size */ if (request->hasParam("framesize")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set framesize"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set framesize")); SystemCamera.SetFrameSize(request->getParam("framesize")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -480,7 +476,7 @@ void Server_InitWebServer_Sets() { /* set photo quality */ if (request->hasParam("photo_quality")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set photo_quality"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set photo_quality")); SystemCamera.SetPhotoQuality(73 - request->getParam("photo_quality")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -488,7 +484,7 @@ void Server_InitWebServer_Sets() { /* set flash time */ if (request->hasParam("flash_time")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set flash_time"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set flash_time")); SystemCamera.SetCameraFlashTime(request->getParam("flash_time")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -496,7 +492,7 @@ void Server_InitWebServer_Sets() { /* set white balancing mode */ if (request->hasParam("wb_mode")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set wb_mode"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set wb_mode")); SystemCamera.SetAwbMode(request->getParam("wb_mode")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -504,7 +500,7 @@ void Server_InitWebServer_Sets() { /* set auto exposition level */ if (request->hasParam("ae_level")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set ae_level"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set ae_level")); SystemCamera.SetAeLevel(request->getParam("ae_level")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -512,7 +508,7 @@ void Server_InitWebServer_Sets() { /* set auto exposition controll value */ if (request->hasParam("aec_value")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set aec_value"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set aec_value")); SystemCamera.SetAecValue(request->getParam("aec_value")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -520,7 +516,7 @@ void Server_InitWebServer_Sets() { /* set auto gain correction value */ if (request->hasParam("agc_gain")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set agc_gain"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set agc_gain")); SystemCamera.SetAgcGain(request->getParam("agc_gain")->value().toInt()); response_msg = MSG_SAVE_OK; response = true; @@ -528,7 +524,7 @@ void Server_InitWebServer_Sets() { /* set log level /set_int?log_level=2 */ if (request->hasParam("log_level")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set log_level"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set log_level")); LogLevel_enum level = (LogLevel_enum)request->getParam("log_level")->value().toInt(); if ((level >= LogLevel_Error) && (level <= LogLevel_Verbose)) { SystemConfig.SaveLogLevel(level); @@ -548,7 +544,7 @@ void Server_InitWebServer_Sets() { /* route to set bool value */ server.on("/set_bool", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /set_bool"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /set_bool")); if (Server_CheckBasicAuth(request) == false) return; @@ -556,84 +552,84 @@ void Server_InitWebServer_Sets() { /* check cfg for hmirror */ if (request->hasParam("hmirror")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set hmirror"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set hmirror")); SystemCamera.SetHMirror(Server_TransfeStringToBool(request->getParam("hmirror")->value())); response = true; } /* set vertical flip */ if (request->hasParam("vflip")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set hmirror"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set hmirror")); SystemCamera.SetVFlip(Server_TransfeStringToBool(request->getParam("vflip")->value())); response = true; } /* set lens correction */ if (request->hasParam("lenc")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set lensc"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set lensc")); SystemCamera.SetLensC(Server_TransfeStringToBool(request->getParam("lenc")->value())); response = true; } /* set exposure controll */ if (request->hasParam("exposure_ctrl")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set exposure ctrl"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set exposure ctrl")); SystemCamera.SetExposureCtrl(Server_TransfeStringToBool(request->getParam("exposure_ctrl")->value())); response = true; } /* set auto white balancing */ if (request->hasParam("awb")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set awb"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set awb")); SystemCamera.SetAwb(Server_TransfeStringToBool(request->getParam("awb")->value())); response = true; } /* set auto white balancing gain */ if (request->hasParam("awb_gain")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set awb_gain"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set awb_gain")); SystemCamera.SetAwbGain(Server_TransfeStringToBool(request->getParam("awb_gain")->value())); response = true; } /* set bad pixel correction */ if (request->hasParam("bpc")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set bpc"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set bpc")); SystemCamera.SetBpc(Server_TransfeStringToBool(request->getParam("bpc")->value())); response = true; } /* set white pixel correction */ if (request->hasParam("wpc")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set wpc"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set wpc")); SystemCamera.SetWpc(Server_TransfeStringToBool(request->getParam("wpc")->value())); response = true; } /* set raw gama correction */ if (request->hasParam("raw_gama")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set raw_gama"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set raw_gama")); SystemCamera.SetRawGama(Server_TransfeStringToBool(request->getParam("raw_gama")->value())); response = true; } /* set automatic exposure correction */ if (request->hasParam("aec2")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set aec2"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set aec2")); SystemCamera.SetAec2(Server_TransfeStringToBool(request->getParam("aec2")->value())); response = true; } /* set gain controll */ if (request->hasParam("gain_ctrl")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set gain_ctrl"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set gain_ctrl")); SystemCamera.SetGainCtrl(Server_TransfeStringToBool(request->getParam("gain_ctrl")->value())); response = true; } /* set flash */ if (request->hasParam("flash")) { - SystemLog.AddEvent(LogLevel_Verbose, "Set flash"); + SystemLog.AddEvent(LogLevel_Verbose, F("Set flash")); SystemCamera.SetCameraFlashEnable(Server_TransfeStringToBool(request->getParam("flash")->value())); SystemCamera.SetFlashStatus(false); response = true; @@ -646,7 +642,7 @@ void Server_InitWebServer_Sets() { /* route for set token for authentification to prusa backend*/ server.on("/set_token", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /set_token"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /set_token")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, F("text/html"), MSG_SAVE_OK); @@ -658,7 +654,7 @@ void Server_InitWebServer_Sets() { /* route for set prusa connect hostname */ server.on("/set_hostname", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /set_hostname"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /set_hostname")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, F("text/html"), MSG_SAVE_OK); @@ -670,7 +666,7 @@ void Server_InitWebServer_Sets() { /* route for set WI-FI credentials */ server.on("/wifi_cfg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: set WI-FI credentials"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: set WI-FI credentials")); if (Server_CheckBasicAuth(request) == false) return; @@ -702,7 +698,7 @@ void Server_InitWebServer_Sets() { /* route for set basic auth */ server.on("/basicauth_cfg", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: set basic auth user name and password"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: set basic auth user name and password")); bool ret = false; String ret_msg = ""; @@ -719,8 +715,7 @@ void Server_InitWebServer_Sets() { ret = true; } else { ret = false; - ret_msg = "Maximum username length: "; - ret_msg += String(EEPROM_ADDR_BASIC_AUTH_USERNAME_LENGTH); + ret_msg = "Maximum username length: " + String(EEPROM_ADDR_BASIC_AUTH_USERNAME_LENGTH); } } @@ -734,8 +729,7 @@ void Server_InitWebServer_Sets() { ret = true; } else { ret = false; - ret_msg = "Maximum password length: "; - ret_msg += String(EEPROM_ADDR_BASIC_AUTH_PASSWORD_LENGTH); + ret_msg = "Maximum password length: " + String(EEPROM_ADDR_BASIC_AUTH_PASSWORD_LENGTH); } } @@ -752,15 +746,14 @@ void Server_InitWebServer_Sets() { } else { String msg = MSG_SAVE_NOTOK; - msg += " "; - msg += ret_msg; + msg += " " + ret_msg; request->send_P(200, F("text/html"), msg.c_str()); } }); /* route for set firmware size */ server.on("/set_firmware_size", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Info, "WEB server: /set_firmware_size"); + SystemLog.AddEvent(LogLevel_Info, F("WEB server: /set_firmware_size")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, F("text/html"), MSG_SAVE_OK); @@ -774,7 +767,7 @@ void Server_InitWebServer_Sets() { /* route for set firmware size */ server.on("/set_mdns", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /set_mdns"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /set_mdns")); if (Server_CheckBasicAuth(request) == false) return; @@ -843,7 +836,7 @@ void Server_InitWebServer_Update() { FirmwareUpdate.Processing = false; if (Update.end(true)) { FirmwareUpdate.UpdatingStatus = String(SYSTEM_MSG_UPDATE_DONE); - SystemLog.AddEvent(LogLevel_Info, "Update FW from file done. Reboot MCU"); + SystemLog.AddEvent(LogLevel_Info, F("Update FW from file done. Reboot MCU")); } else { Update.printError(Serial); SystemLog.AddEvent(LogLevel_Error, String(SYSTEM_MSG_UPDATE_FAIL)); @@ -854,7 +847,7 @@ void Server_InitWebServer_Update() { /* route for start web OTA update from server */ server.on("/web_ota_update", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Info, "WEB server: /web_ota_update"); + SystemLog.AddEvent(LogLevel_Info, F("WEB server: /web_ota_update")); if (Server_CheckBasicAuth(request) == false) return; request->send_P(200, F("text/html"), MSG_UPDATE_START); @@ -873,7 +866,7 @@ void Server_InitWebServer_Update() { /* get OTA FW version on the server */ server.on("/check_web_ota_update", HTTP_GET, [](AsyncWebServerRequest* request) { - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: /check_web_ota_update"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: /check_web_ota_update")); if (Server_CheckBasicAuth(request) == false) return; @@ -898,7 +891,7 @@ void Server_InitWebServer_Stream() { */ void Server_pause() { server.end(); - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: pause"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: pause")); } /** @@ -908,7 +901,7 @@ void Server_pause() { */ void Server_resume() { server.begin(); - SystemLog.AddEvent(LogLevel_Verbose, "WEB server: resume"); + SystemLog.AddEvent(LogLevel_Verbose, F("WEB server: resume")); } /** @@ -932,13 +925,9 @@ void Server_handleCacheRequest(AsyncWebServerRequest* request, const char* conte void Server_handleNotFound(AsyncWebServerRequest* request) { String message = "URL not Found\n\n"; - message += "URI: "; - message += request->url(); - message += "\nMethod: "; + message += "URI: " + request->url() + "\nMethod: "; message += (request->method() == HTTP_GET) ? "GET" : "POST"; - message += "\nArguments: "; - message += request->args(); - message += "\n"; + message += "\nArguments: " + String(request->args()) + "\n"; for (uint8_t i = 0; i < request->args(); i++) { message += " " + request->argName(i) + ": " + request->arg(i) + "\n"; @@ -1017,7 +1006,7 @@ String Server_GetJsonData() { */ bool Server_CheckBasicAuth(AsyncWebServerRequest* request) { if ((!request->authenticate(WebBasicAuth.UserName.c_str(), WebBasicAuth.Password.c_str())) && (true == WebBasicAuth.EnableAuth)) { - SystemLog.AddEvent(LogLevel_Verbose, "Unauthorized! Sending longin request"); + SystemLog.AddEvent(LogLevel_Verbose, F("Unauthorized! Sending longin request")); request->requestAuthentication(); return false; } diff --git a/ESP32_PrusaConnectCam/stream.cpp b/ESP32_PrusaConnectCam/stream.cpp index 6e9a122..44f14c2 100644 --- a/ESP32_PrusaConnectCam/stream.cpp +++ b/ESP32_PrusaConnectCam/stream.cpp @@ -236,7 +236,7 @@ size_t AsyncJpegStreamResponse::_content(uint8_t *buffer, size_t maxLen, size_t /* check space for headers */ if (maxLen < (strlen(STREAM_BOUNDARY) + strlen(STREAM_PART) + strlen(JPG_CONTENT_TYPE) + 8)) { - log->AddEvent(LogLevel_Error, "Stream Not space for headers"); + log->AddEvent(LogLevel_Error, F("Stream Not space for headers")); return RESPONSE_TRY_AGAIN; } @@ -246,7 +246,7 @@ size_t AsyncJpegStreamResponse::_content(uint8_t *buffer, size_t maxLen, size_t _frame.fb = &_dframe; if (_frame.fb == NULL) { - log->AddEvent(LogLevel_Error, "Stream capture frame failed"); + log->AddEvent(LogLevel_Error, F("Stream capture frame failed")); return 0; } diff --git a/ESP32_PrusaConnectCam/system.cpp b/ESP32_PrusaConnectCam/system.cpp index bccb5c7..218e710 100644 --- a/ESP32_PrusaConnectCam/system.cpp +++ b/ESP32_PrusaConnectCam/system.cpp @@ -17,7 +17,7 @@ @return none */ void System_Init() { - SystemLog.AddEvent(LogLevel_Info, "Init system lib"); + SystemLog.AddEvent(LogLevel_Info, F("Init system lib")); /* show last reset status */ String reason_simple = System_printMcuResetReasonSimple(); SystemLog.AddEvent(LogLevel_Warning, "CPU reset reason: " + reason_simple); @@ -51,21 +51,21 @@ void System_LoadCfg() { */ void System_CheckIfPsramIsUsed() { if (psramFound()) { - SystemLog.AddEvent(LogLevel_Info, "PSRAM is used."); + SystemLog.AddEvent(LogLevel_Info, F("PSRAM is used.")); void *ptr = malloc(100); if (ptr != NULL) { if (esp_ptr_external_ram(ptr)) { - SystemLog.AddEvent(LogLevel_Info, "malloc/new is using SPIRAM"); + SystemLog.AddEvent(LogLevel_Info, F("malloc/new is using SPIRAM")); } else { - SystemLog.AddEvent(LogLevel_Info, "malloc/new is not using SPIRAM"); + SystemLog.AddEvent(LogLevel_Info, F("malloc/new is not using SPIRAM")); } free(ptr); } else { - SystemLog.AddEvent(LogLevel_Info, "Failed to allocate memory"); + SystemLog.AddEvent(LogLevel_Info, F("Failed to allocate memory")); } } else { - SystemLog.AddEvent(LogLevel_Info, "PSRAM is not used."); + SystemLog.AddEvent(LogLevel_Info, F("PSRAM is not used.")); } } @@ -95,9 +95,7 @@ void System_UpdateInit() { void System_Main() { /* check new FW version */ if (false == FirmwareUpdate.CheckNewVersionAfterBoot) { - Server_pause(); System_CheckNewVersion(); - Server_resume(); } /* task for download and flash FW from server */ @@ -114,7 +112,7 @@ void System_Main() { */ void System_CheckNewVersion() { if (WL_CONNECTED == WiFi.status()) { - SystemLog.AddEvent(LogLevel_Info, "Check new FW version from OTA"); + SystemLog.AddEvent(LogLevel_Info, F("Check new FW version from OTA")); FirmwareUpdate.CheckNewVersionAfterBoot = true; WiFiClientSecure client; client.setCACert(root_CAs_ota); @@ -130,7 +128,7 @@ void System_CheckNewVersion() { SystemLog.AddEvent(LogLevel_Info, FirmwareUpdate.CheckNewVersionFwStatus); } else { - SystemLog.AddEvent(LogLevel_Verbose, "Connected to server!"); + SystemLog.AddEvent(LogLevel_Verbose, F("Connected to server!")); client.println("GET https://" + String(OTA_UPDATE_API_SERVER) + String(OTA_UPDATE_API_URL) + " HTTP/1.0"); client.println("Host: " + String(OTA_UPDATE_API_SERVER)); client.println("User-Agent: " + String(DEVICE_HOSTNAME)); @@ -162,14 +160,14 @@ void System_CheckNewVersion() { DeserializationError error = deserializeJson(jsonDoc, Data); if (error) { - FirmwareUpdate.CheckNewVersionFwStatus = "Failed to parse JSON from OTA server!"; + FirmwareUpdate.CheckNewVersionFwStatus = F("Failed to parse JSON from OTA server!"); SystemLog.AddEvent(LogLevel_Warning, FirmwareUpdate.CheckNewVersionFwStatus); SystemLog.AddEvent(LogLevel_Warning, Data); } else { const char *firmwareVersion = jsonDoc["tag_name"]; if (firmwareVersion) { - FirmwareUpdate.CheckNewVersionFwStatus = "Download successful"; + FirmwareUpdate.CheckNewVersionFwStatus = F("Download successful"); FirmwareUpdate.NewVersionFw = firmwareVersion; SystemLog.AddEvent(LogLevel_Info, "Available OTA firmware: " + FirmwareUpdate.NewVersionFw); @@ -192,7 +190,7 @@ void System_CheckNewVersion() { } } } else { - FirmwareUpdate.CheckNewVersionFwStatus = "JSON key 'tag_name' from OTA server not found!"; + FirmwareUpdate.CheckNewVersionFwStatus = F("JSON key 'tag_name' from OTA server not found!"); SystemLog.AddEvent(LogLevel_Warning, FirmwareUpdate.CheckNewVersionFwStatus); } } @@ -209,9 +207,9 @@ void System_OtaCloudUpdate() { if (true == FirmwareUpdate.StartOtaUpdate) { FirmwareUpdate.Processing = true; FirmwareUpdate.StartOtaUpdate = false; - FirmwareUpdate.UpdatingStatus = "Sync NTP time..."; + FirmwareUpdate.UpdatingStatus = F("Sync NTP time..."); SystemWifiMngt.SyncNtpTime(); - FirmwareUpdate.UpdatingStatus = "Start updating"; + FirmwareUpdate.UpdatingStatus = F("Start updating"); System_OtaUpdateStart(); } } @@ -269,7 +267,7 @@ bool System_OtaUpdateStart() { break; case HTTP_UPDATE_NO_UPDATES: - FirmwareUpdate.UpdatingStatus = "No updates"; + FirmwareUpdate.UpdatingStatus = F("No updates"); break; case HTTP_UPDATE_OK: @@ -303,7 +301,7 @@ void System_OtaUpdateProgressCB(int cur, int total) { @return none */ void System_OtaUpdateStartCB() { - SystemLog.AddEvent(LogLevel_Info, "Start OTA update"); + SystemLog.AddEvent(LogLevel_Info, F("Start OTA update")); } /** @@ -312,7 +310,7 @@ void System_OtaUpdateStartCB() { @return none */ void System_OtaUpdateEndCB() { - SystemLog.AddEvent(LogLevel_Info, "OTA update done"); + SystemLog.AddEvent(LogLevel_Info, F("OTA update done")); } /** @@ -333,52 +331,52 @@ String System_PrintMcuResetReason(int reason) { String ret = ""; switch (reason) { case 1: /**<1, Vbat power on reset*/ - ret = "POWERON_RESET"; + ret = F("POWERON_RESET"); break; case 3: /**<3, Software reset digital core*/ - ret = "SW_RESET"; + ret = F("SW_RESET"); break; case 4: /**<4, Legacy watch dog reset digital core*/ - ret = "OWDT_RESET"; + ret = F("OWDT_RESET"); break; case 5: /**<5, Deep Sleep reset digital core*/ - ret = "DEEPSLEEP_RESET"; + ret = F("DEEPSLEEP_RESET"); break; case 6: /**<6, Reset by SLC module, reset digital core*/ - ret = "SDIO_RESET"; + ret = F("SDIO_RESET"); break; case 7: /**<7, Timer Group0 Watch dog reset digital core*/ - ret = "TG0WDT_SYS_RESET"; + ret = F("TG0WDT_SYS_RESET"); break; case 8: /**<8, Timer Group1 Watch dog reset digital core*/ - ret = "TG1WDT_SYS_RESET"; + ret = F("TG1WDT_SYS_RESET"); break; case 9: /**<9, RTC Watch dog Reset digital core*/ - ret = "RTCWDT_SYS_RESET"; + ret = F("RTCWDT_SYS_RESET"); break; case 10: /**<10, Instrusion tested to reset CPU*/ - ret = "INTRUSION_RESET"; + ret = F("INTRUSION_RESET"); break; case 11: /**<11, Time Group reset CPU*/ - ret = "TGWDT_CPU_RESET"; + ret = F("TGWDT_CPU_RESET"); break; case 12: /**<12, Software reset CPU*/ - ret = "SW_CPU_RESET"; + ret = F("SW_CPU_RESET"); break; case 13: /**<13, RTC Watch dog Reset CPU*/ - ret = "RTCWDT_CPU_RESET"; + ret = F("RTCWDT_CPU_RESET"); break; case 14: /**<14, for APP CPU, reseted by PRO CPU*/ - ret = "EXT_CPU_RESET"; + ret = F("EXT_CPU_RESET"); break; case 15: /**<15, Reset when the vdd voltage is not stable*/ - ret = "RTCWDT_BROWN_OUT_RESET"; + ret = F("RTCWDT_BROWN_OUT_RESET"); break; case 16: /**<16, RTC Watch dog reset digital core and rtc module*/ - ret = "RTCWDT_RTC_RESET"; + ret = F("RTCWDT_RTC_RESET"); break; default: - ret = "NO_MEAN"; + ret = F("NO_MEAN"); } return ret; @@ -395,40 +393,40 @@ String System_printMcuResetReasonSimple() { switch (reason) { case ESP_RST_UNKNOWN: - ret = "Reset reason can not be determined"; + ret = F("Reset reason can not be determined"); break; case ESP_RST_POWERON: - ret = "Reset due to power-on event"; + ret = F("Reset due to power-on event"); break; case ESP_RST_EXT: - ret = "Reset by external pin (not applicable for ESP32)"; + ret = F("Reset by external pin (not applicable for ESP32)"); break; case ESP_RST_SW: - ret = "Software reset via esp_restart"; + ret = F("Software reset via esp_restart"); break; case ESP_RST_PANIC: - ret = "Software reset due to exception/panic"; + ret = F("Software reset due to exception/panic"); break; case ESP_RST_INT_WDT: - ret = "Reset (software or hardware) due to interrupt watchdog"; + ret = F("Reset (software or hardware) due to interrupt watchdog"); break; case ESP_RST_TASK_WDT: - ret = "Reset due to task watchdog"; + ret = F("Reset due to task watchdog"); break; case ESP_RST_WDT: - ret = "Reset due to other watchdogs"; + ret = F("Reset due to other watchdogs"); break; case ESP_RST_DEEPSLEEP: - ret = "Reset after exiting deep sleep mode"; + ret = F("Reset after exiting deep sleep mode"); break; case ESP_RST_BROWNOUT: - ret = "Brownout reset (software or hardware)"; + ret = F("Brownout reset (software or hardware)"); break; case ESP_RST_SDIO: - ret = "Reset over SDIO"; + ret = F("Reset over SDIO"); break; default: - ret = "N/A"; + ret = F("N/A"); break; } @@ -451,9 +449,6 @@ void System_TaskWifiManagement(void *pvParameters) { /* wifi reconnect after signal lost */ SystemWifiMngt.WiFiReconnect(); - SystemLog.AddEvent(LogLevel_Info, "Free RAM: " + String(ESP.getFreeHeap()) + " bytes"); - SystemLog.AddEvent(LogLevel_Info, "Free SPIRAM: " + String(ESP.getFreePsram()) + " bytes"); - SystemLog.AddEvent(LogLevel_Info, "Temperature: " + String(temperatureRead()) + " *C"); SystemLog.AddEvent(LogLevel_Verbose, "WiFiManagement task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* reset wdg */ @@ -478,6 +473,9 @@ void System_TaskMain(void *pvParameters) { /* for ota update */ esp_task_wdt_reset(); System_Main(); + SystemLog.AddEvent(LogLevel_Info, "Free RAM: " + String(ESP.getFreeHeap()) + " bytes"); + SystemLog.AddEvent(LogLevel_Info, "Free SPIRAM: " + String(ESP.getFreePsram()) + " bytes"); + SystemLog.AddEvent(LogLevel_Info, "Temperature: " + String(temperatureRead()) + " *C"); SystemLog.AddEvent(LogLevel_Verbose, "System task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* reset wdg */ @@ -543,7 +541,7 @@ void System_TaskSdCardCheck(void *pvParameters) { /* check micro SD card */ if ((true == SystemLog.GetCardDetectAfterBoot()) && (false == SystemLog.GetCardDetectedStatus())) { SystemLog.ReinitCard(); - SystemLog.AddEvent(LogLevel_Warning, "Reinit micro SD card done!"); + SystemLog.AddEvent(LogLevel_Warning, F("Reinit micro SD card done!")); } SystemLog.AddEvent(LogLevel_Verbose, "MicroSdCard task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); @@ -620,6 +618,7 @@ void System_TaskSysLed(void *pvParameters) { system_led.toggle(); /* reset wdg */ esp_task_wdt_reset(); + SystemLog.AddEvent(LogLevel_Verbose, "SystemLed task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* next start task */ vTaskDelayUntil(&xLastWakeTime, system_led.getTimer() / portTICK_PERIOD_MS); diff --git a/ESP32_PrusaConnectCam/wifi_mngt.cpp b/ESP32_PrusaConnectCam/wifi_mngt.cpp index 2d89702..10c9327 100644 --- a/ESP32_PrusaConnectCam/wifi_mngt.cpp +++ b/ESP32_PrusaConnectCam/wifi_mngt.cpp @@ -59,7 +59,7 @@ void WiFiMngt::Init() { /* Set Wi-Fi networks */ SetWifiEvents(); CreateApSsid(); - log->AddEvent(LogLevel_Warning, "Set WiFi AP mode"); + log->AddEvent(LogLevel_Warning, F("Set WiFi AP mode")); WiFi.mode(WIFI_AP_STA); esp_wifi_set_ps(WIFI_PS_NONE); WiFi.softAPConfig(Service_LocalIp, Service_Gateway, Service_Subnet); @@ -96,9 +96,9 @@ void WiFiMngt::Init() { /* Init MDNS record */ log->AddEvent(LogLevel_Info, "Starting mDNS record: http://" + mDNS_record + ".local"); if (!MDNS.begin(mDNS_record)) { - log->AddEvent(LogLevel_Error, "Error starting mDNS"); + log->AddEvent(LogLevel_Error, F("Error starting mDNS")); } else { - log->AddEvent(LogLevel_Info, "Starting mDNS OK"); + log->AddEvent(LogLevel_Info, F("Starting mDNS OK")); } MDNS.addService("http", "tcp", 80); } @@ -116,7 +116,7 @@ void WiFiMngt::WifiManagement() { if ((true == config->CheckActifeWifiCfgFlag()) && (true == ServiceMode) && (WL_CONNECTED == WiFi.status()) && (false == FirmwareUpdate.Processing) && (false == cam->GetStreamStatus())) { if (WiFi.softAPgetStationNum() == 0) { - log->AddEvent(LogLevel_Info, "Disable service AP mode"); + log->AddEvent(LogLevel_Info, F("Disable service AP mode")); WiFi.mode(WIFI_STA); esp_wifi_set_ps(WIFI_PS_NONE); WiFiStaConnect(); @@ -151,11 +151,11 @@ void WiFiMngt::WifiManagement() { */ void WiFiMngt::WiFiReconnect() { if ((WiFi.status() != WL_CONNECTED) && (FirstConnected == true)) { - log->AddEvent(LogLevel_Warning, "Reconnecting to WiFi. STA"); + log->AddEvent(LogLevel_Warning, F("Reconnecting to WiFi. STA")); WiFi.disconnect(); - log->AddEvent(LogLevel_Warning, "Disconnect from WiFi"); + log->AddEvent(LogLevel_Warning, F("Disconnect from WiFi")); WiFi.reconnect(); - log->AddEvent(LogLevel_Warning, "Reconnecting to WiFi. STA"); + log->AddEvent(LogLevel_Warning, F("Reconnecting to WiFi. STA")); } else if (WiFi.status() == WL_CONNECTED) { char cstr[150]; sprintf(cstr, "Wifi connected. SSID: %s, BSSID: %s, RSSI: %d dBm, IP: %s, TX power: %s", WiFi.SSID().c_str(), WiFi.BSSIDstr().c_str(), WiFi.RSSI(), WiFi.localIP().toString().c_str(), TranslateTxPower(WiFi.getTxPower()).c_str()); //print 3 digits @@ -163,7 +163,7 @@ void WiFiMngt::WiFiReconnect() { } if (Connect.GetBackendAvailabilitStatus() == BackendUnavailable) { - log->AddEvent(LogLevel_Warning, "Reconnecting to WiFi. STA. Problem with connecting to backend!"); + log->AddEvent(LogLevel_Warning, F("Reconnecting to WiFi. STA. Problem with connecting to backend!")); WiFi.disconnect(); WiFi.reconnect(); Connect.SetBackendAvailabilitStatus(WaitForFirstConnection); @@ -202,10 +202,10 @@ void WiFiMngt::WiFiStaConnect() { system_led.setTimer(STATUS_LED_STA_CONNECTING); if (false == WiFiStaMultipleNetwork) { WiFi.begin(WifiSsid, WifiPassword); - log->AddEvent(LogLevel_Info, "Connecting to STA SSID"); + log->AddEvent(LogLevel_Info, F("Connecting to STA SSID")); } else if (true == WiFiStaMultipleNetwork) { WiFi.begin(WifiSsid, WifiPassword, 0, WiFiStaNetworkBssid); - log->AddEvent(LogLevel_Info, "Connecting to STA BSSID"); + log->AddEvent(LogLevel_Info, F("Connecting to STA BSSID")); } WiFi.setAutoReconnect(true); } @@ -219,8 +219,8 @@ void WiFiMngt::WiFiStaConnect() { void WiFiMngt::SyncNtpTime() { if (WL_CONNECTED == WiFi.status()) { /* configure NTP server and timezone to UTC */ - configTime(0, 0, "pool.ntp.org", "time.nist.gov"); // UTC - log->AddEvent(LogLevel_Info, "Waiting for NTP time sync: "); + configTime(NTP_GTM_OFFSET_SEC, NTP_DAYLIGHT_OFFSET_SEC, NTP_SERVER_1, NTP_SERVER_2); // UTC + log->AddEvent(LogLevel_Info, F("Waiting for NTP time sync: ")); log->SetNtpTimeSynced(false); /* wait maximum 10s for time sync */ @@ -237,10 +237,10 @@ void WiFiMngt::SyncNtpTime() { /* report sync status */ if (true == log->GetNtpTimeSynced()) { - log->AddEvent(LogLevel_Info, "Sync NTP time done. Set UTC timezone"); + log->AddEvent(LogLevel_Info, F("Sync NTP time done. Set UTC timezone")); NtpFirstSync = true; } else { - log->AddEvent(LogLevel_Info, "Sync NTP time fail"); + log->AddEvent(LogLevel_Info, F("Sync NTP time fail")); } } } @@ -260,7 +260,7 @@ void WiFiMngt::ScanWiFiNetwork() { @return uint8_t - count of found wifi networks with same SSID */ uint8_t WiFiMngt::ScanWifiNetwork(String ssid) { - log->AddEvent(LogLevel_Info, "Scan WI-FI networks"); + log->AddEvent(LogLevel_Info, F("Scan WI-FI networks")); log->AddEvent(LogLevel_Info, "Check available WI-FI network: " + ssid); uint8_t ret = 0; ///< total wifi network count int bestSignal = -100; ///< wifi network with best signal (when is available multiple networks with same SSID) @@ -268,17 +268,17 @@ uint8_t WiFiMngt::ScanWifiNetwork(String ssid) { /* scan WI-FI networks */ int n = WiFi.scanNetworks(); - log->AddEvent(LogLevel_Verbose, "Scan done"); + log->AddEvent(LogLevel_Verbose, F("Scan done")); JsonDocument doc_json; JsonArray wifiArray = doc_json.to(); WifiScanJson = ""; /* make json with each found WI-FI networks */ if (n == 0) { - log->AddEvent(LogLevel_Info, "No networks found!"); + log->AddEvent(LogLevel_Info, F("No networks found!")); } else { log->AddEvent(LogLevel_Info, String(n) + " networks found"); - log->AddEvent(LogLevel_Info, "Nr | SSID | RSSI | CH | BSSID | Encryption"); + log->AddEvent(LogLevel_Info, F("Nr | SSID | RSSI | CH | BSSID | Encryption")); for (int i = 0; i < n; ++i) { /* check available wifi network */ @@ -375,24 +375,24 @@ void WiFiMngt::WiFiWatchdog() { /* when is enabled wifi configuration, and is not connected to wifi network, and is available at least one wifi network */ if ((true == config->CheckActifeWifiCfgFlag()) && (WL_CONNECTED != WiFi.status()) && (true == GetFirstConnection())) { - log->AddEvent(LogLevel_Warning, "WiFi WDG. STA connection lost."); + log->AddEvent(LogLevel_Warning, F("WiFi WDG. STA connection lost.")); unsigned long currentMillis = millis(); if (false == StartStaWdg) { if (ScanWifiNetwork(WifiSsid) >= 1) { StartStaWdg = true; TaskWdg_previousMillis = currentMillis; - log->AddEvent(LogLevel_Warning, "WiFi STA connection lost. Start watchdog timer!"); + log->AddEvent(LogLevel_Warning, F("WiFi STA connection lost. Start watchdog timer!")); } } if ((true == StartStaWdg) && (currentMillis - TaskWdg_previousMillis >= WIFI_STA_WDG_TIMEOUT)) { - log->AddEvent(LogLevel_Warning, "WiFi STA connection lost. WDG timer expired. Restart MCU!"); + log->AddEvent(LogLevel_Warning, F("WiFi STA connection lost. WDG timer expired. Restart MCU!")); /* restart MCU, or disconnect and connect to WiFi again ? From my point of view, and testing, restart MCU is better */ ESP.restart(); } } else if (true == StartStaWdg) { - log->AddEvent(LogLevel_Info, "WiFi STA connection OK. Stop watchdog timer!"); + log->AddEvent(LogLevel_Info, F("WiFi STA connection OK. Stop watchdog timer!")); StartStaWdg = false; TaskWdg_previousMillis = millis(); } @@ -427,40 +427,40 @@ String WiFiMngt::TranslateTxPower(wifi_power_t data) { String ret = ""; switch (data) { case WIFI_POWER_MINUS_1dBm: - ret = "-1dBm"; + ret = F("-1dBm"); break; case WIFI_POWER_2dBm: - ret = "2dBm"; + ret = F("2dBm"); break; case WIFI_POWER_5dBm: - ret = "5dBm"; + ret = F("5dBm"); break; case WIFI_POWER_7dBm: - ret = "7dBm"; + ret = F("7dBm"); break; case WIFI_POWER_8_5dBm: - ret = "8.5dBm"; + ret = F("8.5dBm"); break; case WIFI_POWER_11dBm: - ret = "11dBm"; + ret = F("11dBm"); break; case WIFI_POWER_13dBm: - ret = "13dBm"; + ret = F("13dBm"); break; case WIFI_POWER_15dBm: - ret = "15dBm"; + ret = F("15dBm"); break; case WIFI_POWER_17dBm: - ret = "17dBm"; + ret = F("17dBm"); break; case WIFI_POWER_18_5dBm: - ret = "18.5dBm"; + ret = F("18.5dBm"); break; case WIFI_POWER_19dBm: - ret = "19dBm"; + ret = F("19dBm"); break; case WIFI_POWER_19_5dBm: - ret = "19.5dBm"; + ret = F("19.5dBm"); break; } @@ -477,31 +477,31 @@ String WiFiMngt::TranslateWiFiStatus(wl_status_t i_wifi_status) { String ret = ""; switch (i_wifi_status) { case WL_IDLE_STATUS: - ret = "Idle"; + ret = F("Idle"); break; case WL_NO_SSID_AVAIL: - ret = "No SSID available"; + ret = F("No SSID available"); break; case WL_SCAN_COMPLETED: - ret = "Scan completed"; + ret = F("Scan completed"); break; case WL_CONNECTED: - ret = "Connected"; + ret = F("Connected"); break; case WL_CONNECT_FAILED: - ret = "Connect failed"; + ret = F("Connect failed"); break; case WL_CONNECTION_LOST: - ret = "Connection lost"; + ret = F("Connection lost"); break; case WL_DISCONNECTED: - ret = "Disconnected"; + ret = F("Disconnected"); break; case WL_NO_SHIELD: - ret = "No WiFi shield"; + ret = F("No WiFi shield"); break; default: - ret = "Unkcnown status"; + ret = F("Unkcnown status"); ret += String(i_wifi_status); } return ret; @@ -516,34 +516,34 @@ String WiFiMngt::TranslateWiFiEncrypion(wifi_auth_mode_t i_data) { String ret = ""; switch (i_data) { case WIFI_AUTH_OPEN: - ret = "open"; + ret = F("open"); break; case WIFI_AUTH_WEP: - ret = "WEP"; + ret = F("WEP"); break; case WIFI_AUTH_WPA_PSK: - ret = "WPA"; + ret = F("WPA"); break; case WIFI_AUTH_WPA2_PSK: - ret = "WPA2"; + ret = F("WPA2"); break; case WIFI_AUTH_WPA_WPA2_PSK: - ret = "WPA+WPA2"; + ret = F("WPA+WPA2"); break; case WIFI_AUTH_WPA2_ENTERPRISE: - ret = "WPA2-EAP"; + ret = F("WPA2-EAP"); break; case WIFI_AUTH_WPA3_PSK: - ret = "WPA3"; + ret = F("WPA3"); break; case WIFI_AUTH_WPA2_WPA3_PSK: - ret = "WPA2+WPA3"; + ret = F("WPA2+WPA3"); break; case WIFI_AUTH_WAPI_PSK: - ret = "WAPI"; + ret = F("WAPI"); break; default: - ret = "unknown"; + ret = F("unknown"); } return ret; @@ -739,7 +739,7 @@ void WiFiMngt::SetFirstConnection(bool i_data) { @return none */ void WiFiMngt_WiFiEventScanDone(WiFiEvent_t event, WiFiEventInfo_t info) { - SystemLog.AddEvent(LogLevel_Info, "WiFi networks scan done"); + SystemLog.AddEvent(LogLevel_Info, F("WiFi networks scan done")); } /** @@ -749,7 +749,7 @@ void WiFiMngt_WiFiEventScanDone(WiFiEvent_t event, WiFiEventInfo_t info) { @return none */ void WiFiMngt_WiFiEventStationStart(WiFiEvent_t event, WiFiEventInfo_t info) { - SystemLog.AddEvent(LogLevel_Info, "WiFi STA start"); + SystemLog.AddEvent(LogLevel_Info, F("WiFi STA start")); } /** @@ -759,7 +759,7 @@ void WiFiMngt_WiFiEventStationStart(WiFiEvent_t event, WiFiEventInfo_t info) { @return none */ void WiFiMngt_WiFiEventStationStop(WiFiEvent_t event, WiFiEventInfo_t info) { - SystemLog.AddEvent(LogLevel_Info, "WiFi STA stop"); + SystemLog.AddEvent(LogLevel_Info, F("WiFi STA stop")); } /** @@ -769,7 +769,7 @@ void WiFiMngt_WiFiEventStationStop(WiFiEvent_t event, WiFiEventInfo_t info) { @return none */ void WiFiMngt_WiFiEventStationConnected(WiFiEvent_t event, WiFiEventInfo_t info) { - SystemLog.AddEvent(LogLevel_Info, "WiFi connected to STA"); + SystemLog.AddEvent(LogLevel_Info, F("WiFi connected to STA")); } /** @@ -803,7 +803,7 @@ void WiFiMngt_WiFiEventGotIP(WiFiEvent_t event, WiFiEventInfo_t info) { @return none */ void WiFiMngt_WiFiEventLostIP(WiFiEvent_t event, WiFiEventInfo_t info) { - SystemLog.AddEvent(LogLevel_Info, "WiFi lost IP address"); + SystemLog.AddEvent(LogLevel_Info, F("WiFi lost IP address")); } /** @@ -855,7 +855,7 @@ void WiFiMngt_WiFiEventStationDisconnected(WiFiEvent_t event, WiFiEventInfo_t in @return none */ void WiFiMngt_WiFiEventApStart(WiFiEvent_t event, WiFiEventInfo_t info) { - SystemLog.AddEvent(LogLevel_Info, "WiFi AP start"); + SystemLog.AddEvent(LogLevel_Info, F("WiFi AP start")); } /** @@ -865,7 +865,7 @@ void WiFiMngt_WiFiEventApStart(WiFiEvent_t event, WiFiEventInfo_t info) { @return none */ void WiFiMngt_WiFiEventApStop(WiFiEvent_t event, WiFiEventInfo_t info) { - SystemLog.AddEvent(LogLevel_Info, "WiFi AP stop"); + SystemLog.AddEvent(LogLevel_Info, F("WiFi AP stop")); } /** @@ -915,7 +915,7 @@ void WiFiMngt_WiFiEventApStaIpAssigned(WiFiEvent_t event, WiFiEventInfo_t info) @return none */ void WiFiMngt_WiFiEventApStaProbeReqRecved(WiFiEvent_t event, WiFiEventInfo_t info) { - SystemLog.AddEvent(LogLevel_Info, "WiFi AP STA receive probe request packet in soft-AP interface"); + SystemLog.AddEvent(LogLevel_Info, F("WiFi AP STA receive probe request packet in soft-AP interface")); } /* EOF */ \ No newline at end of file diff --git a/README.md b/README.md index 900be70..7ac74cc 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This repository includes source code and firmware releases for the ESP32-cam mod This project uses other libraries. It is necessary to install them in the Arduino IDE. - App [Arduino IDE 2.3.2](https://www.arduino.cc/en/software) -- MCU support [ESP32 2.0.15](https://github.com/espressif/arduino-esp32) +- MCU support [ESP32 2.0.16](https://github.com/espressif/arduino-esp32) - Library [ESPAsyncWebSrv 1.2.7](https://github.com/dvarrel/ESPAsyncWebSrv) - Library [AsyncTCP 1.1.4](https://github.com/dvarrel/AsyncTCP) - Library [ArduinoJson 7.0.4](https://github.com/bblanchon/ArduinoJson)