diff --git a/ESP32_PrusaConnectCam/WebPage.h b/ESP32_PrusaConnectCam/WebPage.h index e48a800..829a98a 100644 --- a/ESP32_PrusaConnectCam/WebPage.h +++ b/ESP32_PrusaConnectCam/WebPage.h @@ -312,7 +312,7 @@ const char page_system_html[] PROGMEM = R"rawliteral(
- + @@ -321,9 +321,8 @@ const char page_system_html[] PROGMEM = R"rawliteral( - - +
System status
Status
Prusa Connect Status
Wi-Fi mode
Wi-Fi service AP SSID
Firmware
Version
Build
Available update Check update from cloud
System configuration
Configuration
Camera name & mDNS record.local 
Log level @@ -348,11 +347,12 @@ const char page_system_html[] PROGMEM = R"rawliteral(
+ - - + +
Firmware update
Available from cloud  
StatusReady
Progress
0%
@@ -1219,9 +1219,9 @@ function uploadFile() { if (file) { statusDiv.innerText = 'Updating...'; - uploadingFirmware = true; const formData = new FormData(); formData.append('firmware', file); + uploadingFirmware = true; fetch('/upload', { method: 'POST', diff --git a/ESP32_PrusaConnectCam/camera.cpp b/ESP32_PrusaConnectCam/camera.cpp index 42289c9..f3a5903 100644 --- a/ESP32_PrusaConnectCam/camera.cpp +++ b/ESP32_PrusaConnectCam/camera.cpp @@ -109,7 +109,7 @@ void Camera::InitCameraModule() { err = esp_camera_init(&CameraConfig); if (err != ESP_OK) { - log->AddEvent(LogLevel_Warning, "Camera init failed. Error: " + String(err, HEX)); + log->AddEvent(LogLevel_Warning, F("Camera init failed. Error: "), String(err, HEX)); log->AddEvent(LogLevel_Warning, F("Reset ESP32-cam!")); ESP.restart(); } @@ -179,7 +179,7 @@ framesize_t Camera::TransformFrameSizeDataType(uint8_t i_data) { break; default: ret = FRAMESIZE_QVGA; - log->AddEvent(LogLevel_Warning, "Bad frame size. Set default value. " + String(i_data)); + log->AddEvent(LogLevel_Warning, F("Bad frame size. Set default value. "), String(i_data)); break; } @@ -260,7 +260,7 @@ void Camera::ApplyCameraCfg() { void Camera::ReinitCameraModule() { esp_err_t err = esp_camera_deinit(); if (err != ESP_OK) { - log->AddEvent(LogLevel_Warning, "Camera error deinit camera module. Error: " + String(err, HEX)); + log->AddEvent(LogLevel_Warning, F("Camera error deinit camera module. Error: "), String(err, HEX)); } delay(100); InitCameraModule(); @@ -321,11 +321,11 @@ void Camera::CapturePhoto() { log->AddEvent(LogLevel_Info, buf); if (ControlFlag != 0x00) { - log->AddEvent(LogLevel_Error, "Camera capture failed! photo " + String(ControlFlag, HEX)); + log->AddEvent(LogLevel_Error, F("Camera capture failed! photo "), String(ControlFlag, HEX)); FrameBuffer->len = 0; } else { - log->AddEvent(LogLevel_Info, "Photo OK! " + String(ControlFlag, HEX)); + log->AddEvent(LogLevel_Info, F("Photo OK! "), String(ControlFlag, HEX)); /* generate exif header */ update_exif_from_cfg(imageExifRotation); @@ -334,9 +334,9 @@ void Camera::CapturePhoto() { CameraCaptureSuccess = true; if (PhotoExifData.header != NULL) { - log->AddEvent(LogLevel_Info, "Exif header OK! Len: " + String(PhotoExifData.len)); + log->AddEvent(LogLevel_Info, F("Exif header OK! Len: "), String(PhotoExifData.len)); } else { - log->AddEvent(LogLevel_Error, "Exif header failed! " + String(PhotoExifData.len)); + log->AddEvent(LogLevel_Error, F("Exif header failed! "), String(PhotoExifData.len)); } } @@ -395,7 +395,7 @@ void Camera::CaptureReturnFrameBuffer() { */ void Camera::SetStreamStatus(bool i_status) { StreamOnOff = i_status; - log->AddEvent(LogLevel_Info, "Camera video stream: " + String(StreamOnOff)); + log->AddEvent(LogLevel_Info, F("Camera video stream: "), String(StreamOnOff)); } /** @@ -544,7 +544,7 @@ void Camera::CopyPhoto(char* i_data, int i_from, int i_to) { * @return int - photo size */ int Camera::GetPhotoSize() { - log->AddEvent(LogLevel_Verbose, "Photo size: " + String(FrameBuffer->len)); + log->AddEvent(LogLevel_Verbose, F("Photo size: "), String(FrameBuffer->len)); return (int)FrameBuffer->len; } diff --git a/ESP32_PrusaConnectCam/cfg.cpp b/ESP32_PrusaConnectCam/cfg.cpp index 2dc0ed8..b4e301b 100644 --- a/ESP32_PrusaConnectCam/cfg.cpp +++ b/ESP32_PrusaConnectCam/cfg.cpp @@ -29,7 +29,7 @@ Configuration::Configuration(Logs* i_log) { @return none */ void Configuration::Init() { - Log->AddEvent(LogLevel_Info, "Init cfg module: " + String(EEPROM_SIZE)); + Log->AddEvent(LogLevel_Info, F("Init cfg module: "), String(EEPROM_SIZE)); //EEPROM.begin(EEPROM_SIZE); /* check, when it is first MCU start. If yes, then set default CFG */ @@ -90,7 +90,7 @@ void Configuration::ReadCfg() { LoadNetworkDns(); LoadCameraImageExifRotation(); LoadTimeLapseFunctionStatus(); - Log->AddEvent(LogLevel_Info, "Active WiFi client cfg: " + String(CheckActifeWifiCfgFlag() ? "true" : "false")); + Log->AddEvent(LogLevel_Info, F("Active WiFi client cfg: "), String(CheckActifeWifiCfgFlag() ? "true" : "false")); Log->AddEvent(LogLevel_Info, F("Load CFG from EEPROM done")); } @@ -104,10 +104,10 @@ bool Configuration::CheckFirstMcuStart() { uint8_t flag = EEPROM.read(EEPROM_ADDR_FIRST_MCU_START_FLAG_START); if (CFG_FIRST_MCU_START_NAK == flag) { - Log->AddEvent(LogLevel_Info, "It's not first start MCU: " + String(flag)); + Log->AddEvent(LogLevel_Info, F("It's not first start MCU: "), String(flag)); return false; } else { - Log->AddEvent(LogLevel_Warning, "First start MCU!: " + String(flag)); + Log->AddEvent(LogLevel_Warning, F("First start MCU!: "), String(flag)); return true; } @@ -120,7 +120,7 @@ bool Configuration::CheckFirstMcuStart() { @return none */ void Configuration::SaveFirstMcuStartFlag(uint8_t i_data) { - Log->AddEvent(LogLevel_Info, "Save first MCU start flag: " + String(i_data)); + Log->AddEvent(LogLevel_Info, F("Save first MCU start flag: "), String(i_data)); SaveUint8(EEPROM_ADDR_FIRST_MCU_START_FLAG_START, i_data); } @@ -185,7 +185,7 @@ void Configuration::DefaultCfg() { */ bool Configuration::CheckActifeWifiCfgFlag() { uint8_t flag = EEPROM.read(EEPROM_ADDR_WIFI_ACTIVE_FLAG_START); - Log->AddEvent(LogLevel_Verbose, "Read ActifeWifiCfgFlag: " + String(flag)); + Log->AddEvent(LogLevel_Verbose, F("Read ActifeWifiCfgFlag: "), String(flag)); if (CFG_WIFI_SETTINGS_SAVED == flag) { return true; @@ -208,7 +208,7 @@ void Configuration::CheckResetCfg() { /* wait 10s to pressed reset pin */ uint8_t i = 0; for (i = 0; i < (CFG_RESET_TIME_WAIT / CFG_RESET_LOOP_DELAY); i++) { - Log->AddEvent(LogLevel_Verbose, "Reset pin status: " + String(ResetPinStatus)); + Log->AddEvent(LogLevel_Verbose, F("Reset pin status: "), String(ResetPinStatus)); if (ResetPinStatus == HIGH) { break; } @@ -253,10 +253,10 @@ void Configuration::GetFingerprint() { //String Random = String(esp_random()); String encoded = base64::encode(Id + " " + WiFiMacAddress); SaveFingerprint(encoded); - Log->AddEvent(LogLevel_Verbose, "UniqueID: " + Id); - Log->AddEvent(LogLevel_Verbose, "WiFi MAC: " + WiFiMacAddress); + Log->AddEvent(LogLevel_Verbose, F("UniqueID: "), Id); + Log->AddEvent(LogLevel_Verbose, F("WiFi MAC: "), WiFiMacAddress); //Log->AddEvent(LogLevel_Verbose, "Random number: " + Random); - Log->AddEvent(LogLevel_Warning, "Calculated device fingerprint: " + encoded); + Log->AddEvent(LogLevel_Warning, F("Calculated device fingerprint: "), encoded); } /** @@ -434,7 +434,7 @@ String Configuration::LoadIpAddress(uint16_t address) { @return none */ void Configuration::SaveRefreshInterval(uint8_t i_interval) { - Log->AddEvent(LogLevel_Verbose, "Save RefreshInterval: " + String(i_interval)); + Log->AddEvent(LogLevel_Verbose, F("Save RefreshInterval: "), String(i_interval)); SaveUint8(EEPROM_ADDR_REFRESH_INTERVAL_START, i_interval); } @@ -444,7 +444,7 @@ void Configuration::SaveRefreshInterval(uint8_t i_interval) { @return none */ void Configuration::SaveToken(String i_token) { - Log->AddEvent(LogLevel_Verbose, "Save Token[" + String(i_token.length()) + "]: " + i_token); + Log->AddEvent(LogLevel_Verbose, F("Save Token["), String(i_token.length()) + "]: " + i_token); SaveString(EEPROM_ADDR_TOKEN_START, EEPROM_ADDR_TOKEN_LENGTH, i_token); } @@ -454,7 +454,7 @@ void Configuration::SaveToken(String i_token) { @return none */ void Configuration::SaveFingerprint(String i_fingerprint) { - Log->AddEvent(LogLevel_Verbose, "Save Fingerprint[" + String(i_fingerprint.length()) + "]: " + i_fingerprint); + Log->AddEvent(LogLevel_Verbose, F("Save Fingerprint["), String(i_fingerprint.length()) + "]: " + i_fingerprint); SaveString(EEPROM_ADDR_FINGERPRINT_START, EEPROM_ADDR_FINGERPRINT_LENGTH, i_fingerprint); } @@ -464,7 +464,7 @@ void Configuration::SaveFingerprint(String i_fingerprint) { @return none */ void Configuration::SavePhotoQuality(uint8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save PhotoQuality: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save PhotoQuality: "), String(i_data)); SaveUint8(EEPROM_ADDR_PHOTO_QUALITY_START, i_data); } @@ -474,7 +474,7 @@ void Configuration::SavePhotoQuality(uint8_t i_data) { @return none */ void Configuration::SaveFrameSize(uint8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save FrameSize: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save FrameSize: "), String(i_data)); SaveUint8(EEPROM_ADDR_FRAMESIZE_START, i_data); } @@ -484,7 +484,7 @@ void Configuration::SaveFrameSize(uint8_t i_data) { @return none */ void Configuration::SaveBrightness(int8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save Brightness: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save Brightness: "), String(i_data)); SaveInt8(EEPROM_ADDR_BRIGHTNESS_START, i_data); } @@ -494,7 +494,7 @@ void Configuration::SaveBrightness(int8_t i_data) { @return none */ void Configuration::SaveContrast(int8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save Contrast: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save Contrast: "), String(i_data)); SaveInt8(EEPROM_ADDR_CONTRAST_START, i_data); } @@ -504,7 +504,7 @@ void Configuration::SaveContrast(int8_t i_data) { @return none */ void Configuration::SaveSaturation(int8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save Saturation: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save Saturation: "), String(i_data)); SaveInt8(EEPROM_ADDR_SATURATION_START, i_data); } @@ -514,7 +514,7 @@ void Configuration::SaveSaturation(int8_t i_data) { @return none */ void Configuration::SaveHmirror(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save Hmirror: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save Hmirror: "), String(i_data)); SaveBool(EEPROM_ADDR_HMIRROR_START, i_data); } @@ -524,7 +524,7 @@ void Configuration::SaveHmirror(bool i_data) { @return none */ void Configuration::SaveVflip(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save vflip: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save vflip: "), String(i_data)); SaveBool(EEPROM_ADDR_VFLIP_START, i_data); } @@ -534,7 +534,7 @@ void Configuration::SaveVflip(bool i_data) { @return none */ void Configuration::SaveLensCorrect(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save lensc: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save lensc: "), String(i_data)); SaveBool(EEPROM_ADDR_LENSC_START, i_data); } @@ -544,7 +544,7 @@ void Configuration::SaveLensCorrect(bool i_data) { @return none */ void Configuration::SaveExposureCtrl(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save exposure_ctrl: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save exposure_ctrl: "), String(i_data)); SaveBool(EEPROM_ADDR_EXPOSURE_CTRL_START, i_data); } @@ -554,7 +554,7 @@ void Configuration::SaveExposureCtrl(bool i_data) { @return none */ void Configuration::SaveAwb(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save awb: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save awb: "), String(i_data)); SaveBool(EEPROM_ADDR_AWB_ENABLE_START, i_data); } @@ -564,7 +564,7 @@ void Configuration::SaveAwb(bool i_data) { @return none */ void Configuration::SaveAwbGain(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save awb_gain: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save awb_gain: "), String(i_data)); Configuration::SaveBool(EEPROM_ADDR_AWB_GAIN_ENABLE_START, i_data); } @@ -574,7 +574,7 @@ void Configuration::SaveAwbGain(bool i_data) { @return none */ void Configuration::SaveAwbMode(uint8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save awb_mode: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save awb_mode: "), String(i_data)); SaveUint8(EEPROM_ADDR_AWB_MODE_ENABLE_START, i_data); } @@ -584,7 +584,7 @@ void Configuration::SaveAwbMode(uint8_t i_data) { @return none */ void Configuration::SaveBpc(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save bpc: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save bpc: "), String(i_data)); SaveBool(EEPROM_ADDR_BPC_ENABLE_START, i_data); } @@ -594,7 +594,7 @@ void Configuration::SaveBpc(bool i_data) { @return none */ void Configuration::SaveWpc(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save wpc: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save wpc: "), String(i_data)); SaveBool(EEPROM_ADDR_WPC_ENABLE_START, i_data); } @@ -604,7 +604,7 @@ void Configuration::SaveWpc(bool i_data) { @return none */ void Configuration::SaveRawGama(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save raw_gama: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save raw_gama: "), String(i_data)); SaveBool(EEPROM_ADDR_RAW_GAMA_ENABLE_START, i_data); } @@ -614,7 +614,7 @@ void Configuration::SaveRawGama(bool i_data) { @return none */ void Configuration::SaveWifiSsid(String i_data) { - Log->AddEvent(LogLevel_Verbose, "Save WI-FI SSID[" + String(i_data.length()) + "]: " + i_data); + Log->AddEvent(LogLevel_Verbose, F("Save WI-FI SSID["), String(i_data.length()) + "]: " + i_data); SaveString(EEPROM_ADDR_WIFI_SSID_START, EEPROM_ADDR_WIFI_SSID_LENGTH, i_data); } @@ -625,7 +625,7 @@ void Configuration::SaveWifiSsid(String i_data) { */ void Configuration::SaveWifiPassword(String i_data) { //Log->AddEvent(LogLevel_Verbose, "Save WI-FI password[" + String(i_data.length()) + "]: " + i_data); /* SENSITIVE DATA! */ - Log->AddEvent(LogLevel_Verbose, "Save WI-FI password[" + String(i_data.length()) + "]"); + Log->AddEvent(LogLevel_Verbose, F("Save WI-FI password["), String(i_data.length()) + "]"); SaveString(EEPROM_ADDR_WIFI_PASSWORD_START, EEPROM_ADDR_WIFI_PASSWORD_LENGTH, i_data); } @@ -635,7 +635,7 @@ void Configuration::SaveWifiPassword(String i_data) { @return none */ void Configuration::SaveWifiCfgFlag(uint8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save active wifi cfg flag: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save active wifi cfg flag: "), String(i_data)); SaveUint8(EEPROM_ADDR_WIFI_ACTIVE_FLAG_START, i_data); } @@ -645,7 +645,7 @@ void Configuration::SaveWifiCfgFlag(uint8_t i_data) { @return none */ void Configuration::SaveEnableServiceAp(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save Enable/disable service AP: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save Enable/disable service AP: "), String(i_data)); SaveBool(EEPROM_ADDR_SERVICE_AP_ENABLE_START, i_data); } @@ -655,7 +655,7 @@ void Configuration::SaveEnableServiceAp(bool i_data) { @return none */ void Configuration::SaveBasicAuthUsername(String i_data) { - Log->AddEvent(LogLevel_Verbose, "Save username BasicAuth[" + String(i_data.length()) + "]: " + i_data); + Log->AddEvent(LogLevel_Verbose, F("Save username BasicAuth["), String(i_data.length()) + "]: " + i_data); SaveString(EEPROM_ADDR_BASIC_AUTH_USERNAME_START, EEPROM_ADDR_BASIC_AUTH_USERNAME_LENGTH, i_data); } @@ -666,7 +666,7 @@ void Configuration::SaveBasicAuthUsername(String i_data) { */ void Configuration::SaveBasicAuthPassword(String i_data) { uint8_t len = i_data.length(); - Log->AddEvent(LogLevel_Verbose, "Save password BasicAuth[" + String(len) + "]: "); + Log->AddEvent(LogLevel_Verbose, F("Save password BasicAuth["), String(len) + "]: "); SaveString(EEPROM_ADDR_BASIC_AUTH_PASSWORD_START, EEPROM_ADDR_BASIC_AUTH_PASSWORD_LENGTH, i_data); } @@ -676,7 +676,7 @@ void Configuration::SaveBasicAuthPassword(String i_data) { @return none */ void Configuration::SaveBasicAuthFlag(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save Enable/disable BasicAuth: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save Enable/disable BasicAuth: "), String(i_data)); SaveBool(EEPROM_ADDR_BASIC_AUTH_ENABLE_FLAG_START, i_data); } @@ -686,7 +686,7 @@ void Configuration::SaveBasicAuthFlag(bool i_data) { @return none */ void Configuration::SaveCameraFlashEnable(uint8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save Enable/disable camera flash: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save Enable/disable camera flash: "), String(i_data)); SaveUint8(EEPROM_ADDR_CAMERA_FLASH_ENABLE_START, i_data); } @@ -696,7 +696,7 @@ void Configuration::SaveCameraFlashEnable(uint8_t i_data) { @return none */ void Configuration::SaveCameraFlashTime(uint16_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save camera flash time: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save camera flash time: "), String(i_data)); SaveUint16(EEPROM_ADDR_CAMERA_FLASH_TIME_START, i_data); } @@ -706,7 +706,7 @@ void Configuration::SaveCameraFlashTime(uint16_t i_data) { @return none */ void Configuration::SaveMdnsRecord(String i_data) { - Log->AddEvent(LogLevel_Verbose, "Save mDNS record[" + String(i_data.length()) + "]: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save mDNS record["), String(i_data.length()) + "]: " + String(i_data)); SaveString(EEPROM_ADDR_MDNS_RECORD_START, EEPROM_ADDR_MDNS_RECORD_LENGTH, i_data); } @@ -716,7 +716,7 @@ void Configuration::SaveMdnsRecord(String i_data) { @return none */ void Configuration::SaveAec2(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save Enable/disable AEC2: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save Enable/disable AEC2: "), String(i_data)); SaveBool(EEPROM_ADDR_AEC2_START, i_data); } @@ -726,7 +726,7 @@ void Configuration::SaveAec2(bool i_data) { @return none */ void Configuration::SaveAeLevel(int8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save ae_level: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save ae_level: "), String(i_data)); SaveBool(EEPROM_ADDR_AE_LEVEL_START, i_data); } @@ -736,7 +736,7 @@ void Configuration::SaveAeLevel(int8_t i_data) { @return none */ void Configuration::SaveAecValue(uint16_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save aec value time: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save aec value time: "), String(i_data)); SaveUint16(EEPROM_ADDR_AEC_VALUE_START, i_data); } @@ -746,7 +746,7 @@ void Configuration::SaveAecValue(uint16_t i_data) { @return none */ void Configuration::SaveGainCtrl(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save gain_ctrl: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save gain_ctrl: "), String(i_data)); SaveBool(EEPROM_ADDR_GAIN_CTRL_START, i_data); } @@ -756,7 +756,7 @@ void Configuration::SaveGainCtrl(bool i_data) { @return none */ void Configuration::SaveAgcGain(uint8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save agc_gain: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save agc_gain: "), String(i_data)); SaveUint8(EEPROM_ADDR_AGC_GAIN_START, i_data); } @@ -766,7 +766,7 @@ void Configuration::SaveAgcGain(uint8_t i_data) { @return none */ void Configuration::SaveLogLevel(LogLevel_enum i_data) { - Log->AddEvent(LogLevel_Verbose, "Save log level: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save log level: "), String(i_data)); SaveUint8(EEPROM_ADDR_LOG_LEVEL, i_data); } @@ -776,7 +776,7 @@ void Configuration::SaveLogLevel(LogLevel_enum i_data) { * @return none */ void Configuration::SavePrusaConnectHostname(String i_data) { - Log->AddEvent(LogLevel_Verbose, "Save PrusaConnectHostanme[" + String(i_data.length()) + "]: " + i_data); + Log->AddEvent(LogLevel_Verbose, F("Save PrusaConnectHostanme["), String(i_data.length()) + "]: " + i_data); SaveString(EEPROM_ADDR_HOSTNAME_START, EEPROM_ADDR_HOSTNAME_LENGTH, i_data); } @@ -796,7 +796,7 @@ void Configuration::SaveNetworkIpMethod(uint8_t i_data) { @return none */ void Configuration::SaveNetworkIp(String i_data) { - Log->AddEvent(LogLevel_Verbose, "Save network static ip: " + i_data); + Log->AddEvent(LogLevel_Verbose, F("Save network static ip: "), i_data); SaveIpAddress(EEPROM_ADDR_NETWORK_STATIC_IP_START, i_data); } @@ -807,7 +807,7 @@ void Configuration::SaveNetworkIp(String i_data) { @return none */ void Configuration::SaveNetworkMask(String i_data) { - Log->AddEvent(LogLevel_Verbose, "Save network static mask: " + i_data); + Log->AddEvent(LogLevel_Verbose, F("Save network static mask: "), i_data); SaveIpAddress(EEPROM_ADDR_NETWORK_STATIC_MASK_START, i_data); } @@ -817,7 +817,7 @@ void Configuration::SaveNetworkMask(String i_data) { @return none */ void Configuration::SaveNetworkGateway(String i_data) { - Log->AddEvent(LogLevel_Verbose, "Save network static gateway: " + i_data); + Log->AddEvent(LogLevel_Verbose, F("Save network static gateway: "), i_data); SaveIpAddress(EEPROM_ADDR_NETWORK_STATIC_GATEWAY_START, i_data); } @@ -827,7 +827,7 @@ void Configuration::SaveNetworkGateway(String i_data) { @return none */ void Configuration::SaveNetworkDns(String i_data) { - Log->AddEvent(LogLevel_Verbose, "Save network static dns: " + i_data); + Log->AddEvent(LogLevel_Verbose, F("Save network static dns: "), i_data); SaveIpAddress(EEPROM_ADDR_NETWORK_STATIC_DNS_START, i_data); } @@ -837,7 +837,7 @@ void Configuration::SaveNetworkDns(String i_data) { @return none */ void Configuration::SaveCameraImageExifRotation(uint8_t i_data) { - Log->AddEvent(LogLevel_Verbose, "Save camera image exif rotation: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save camera image exif rotation: "), String(i_data)); SaveUint8(EEPROM_ADDR_IMAGE_ROTATION_START, i_data); } @@ -847,7 +847,7 @@ void Configuration::SaveCameraImageExifRotation(uint8_t i_data) { @return none */ void Configuration::SaveTimeLapseFunctionStatus(bool i_data) { - Log->AddEvent(LogLevel_Verbose, "Save time lapse function status: " + String(i_data)); + Log->AddEvent(LogLevel_Verbose, F("Save time lapse function status: "), String(i_data)); SaveBool(EEPROM_ADDR_TIMELAPS_ENABLE_START, i_data); } @@ -858,7 +858,7 @@ void Configuration::SaveTimeLapseFunctionStatus(bool i_data) { */ uint8_t Configuration::LoadRefreshInterval() { uint8_t ret = EEPROM.read(EEPROM_ADDR_REFRESH_INTERVAL_START); - Log->AddEvent(LogLevel_Info, "Refresh interval: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("Refresh interval: "), String(ret)); return ret; } @@ -869,7 +869,7 @@ uint8_t Configuration::LoadRefreshInterval() { @return String - token */ String Configuration::LoadToken() { - Log->AddEvent(LogLevel_Info, "Token: ", false); + Log->AddEvent(LogLevel_Info, F("Token: "), false); String ret = LoadString(EEPROM_ADDR_TOKEN_START, EEPROM_ADDR_TOKEN_LENGTH, CONSOLE_VERBOSE_DEBUG); return ret; @@ -881,7 +881,7 @@ String Configuration::LoadToken() { @return String - fingerprint */ String Configuration::LoadFingerprint() { - Log->AddEvent(LogLevel_Info, "Fingerprint: ", false); + Log->AddEvent(LogLevel_Info, F("Fingerprint: "), false); String ret = LoadString(EEPROM_ADDR_FINGERPRINT_START, EEPROM_ADDR_FINGERPRINT_LENGTH, true); return ret; @@ -894,7 +894,7 @@ String Configuration::LoadFingerprint() { */ uint8_t Configuration::LoadPhotoQuality() { uint8_t ret = EEPROM.read(EEPROM_ADDR_PHOTO_QUALITY_START); - Log->AddEvent(LogLevel_Info, "Photo quality: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("Photo quality: "), String(ret)); return ret; } @@ -906,7 +906,7 @@ uint8_t Configuration::LoadPhotoQuality() { */ uint8_t Configuration::LoadFrameSize() { uint8_t ret = EEPROM.read(EEPROM_ADDR_FRAMESIZE_START); - Log->AddEvent(LogLevel_Info, "Framesize: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("Framesize: "), String(ret)); return ret; } @@ -917,7 +917,7 @@ uint8_t Configuration::LoadFrameSize() { */ int8_t Configuration::LoadBrightness() { int8_t ret = EEPROM.read(EEPROM_ADDR_BRIGHTNESS_START); - Log->AddEvent(LogLevel_Info, "brightness: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("brightness: "), String(ret)); return ret; } @@ -929,7 +929,7 @@ int8_t Configuration::LoadBrightness() { */ int8_t Configuration::LoadContrast() { int8_t ret = EEPROM.read(EEPROM_ADDR_CONTRAST_START); - Log->AddEvent(LogLevel_Info, "contrast: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("contrast: "), String(ret)); return ret; } @@ -941,7 +941,7 @@ int8_t Configuration::LoadContrast() { */ int8_t Configuration::LoadSaturation() { int8_t ret = EEPROM.read(EEPROM_ADDR_SATURATION_START); - Log->AddEvent(LogLevel_Info, "saturation: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("saturation: "), String(ret)); return ret; } @@ -953,7 +953,7 @@ int8_t Configuration::LoadSaturation() { */ bool Configuration::LoadHmirror() { bool ret = EEPROM.read(EEPROM_ADDR_HMIRROR_START); - Log->AddEvent(LogLevel_Info, "hmirror: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("hmirror: "), String(ret)); return ret; } @@ -965,7 +965,7 @@ bool Configuration::LoadHmirror() { */ bool Configuration::LoadVflip() { bool ret = EEPROM.read(EEPROM_ADDR_VFLIP_START); - Log->AddEvent(LogLevel_Info, "vflip: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("vflip: "), String(ret)); return ret; } @@ -977,7 +977,7 @@ bool Configuration::LoadVflip() { */ bool Configuration::LoadLensCorrect() { bool ret = EEPROM.read(EEPROM_ADDR_LENSC_START); - Log->AddEvent(LogLevel_Info, "lensc: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("lensc: "), String(ret)); return ret; } @@ -989,7 +989,7 @@ bool Configuration::LoadLensCorrect() { */ bool Configuration::LoadExposureCtrl() { bool ret = EEPROM.read(EEPROM_ADDR_EXPOSURE_CTRL_START); - Log->AddEvent(LogLevel_Info, "exposure_ctrl: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("exposure_ctrl: "), String(ret)); return ret; } @@ -1001,7 +1001,7 @@ bool Configuration::LoadExposureCtrl() { */ bool Configuration::LoadAwb() { bool ret = EEPROM.read(EEPROM_ADDR_AWB_ENABLE_START); - Log->AddEvent(LogLevel_Info, "awb: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("awb: "), String(ret)); return ret; } @@ -1013,7 +1013,7 @@ bool Configuration::LoadAwb() { */ bool Configuration::LoadAwbGain() { bool ret = EEPROM.read(EEPROM_ADDR_AWB_GAIN_ENABLE_START); - Log->AddEvent(LogLevel_Info, "awb_gain: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("awb_gain: "), String(ret)); return ret; } @@ -1025,7 +1025,7 @@ bool Configuration::LoadAwbGain() { */ uint8_t Configuration::LoadAwbMode() { uint8_t ret = EEPROM.read(EEPROM_ADDR_AWB_MODE_ENABLE_START); - Log->AddEvent(LogLevel_Info, "awb_mode: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("awb_mode: "), String(ret)); return ret; } @@ -1037,7 +1037,7 @@ uint8_t Configuration::LoadAwbMode() { */ bool Configuration::LoadBpc() { bool ret = EEPROM.read(EEPROM_ADDR_BPC_ENABLE_START); - Log->AddEvent(LogLevel_Info, "bpc: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("bpc: "), String(ret)); return ret; } @@ -1049,7 +1049,7 @@ bool Configuration::LoadBpc() { */ bool Configuration::LoadWpc() { bool ret = EEPROM.read(EEPROM_ADDR_WPC_ENABLE_START); - Log->AddEvent(LogLevel_Info, "wpc: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("wpc: "), String(ret)); return ret; } @@ -1061,7 +1061,7 @@ bool Configuration::LoadWpc() { */ bool Configuration::LoadRawGama() { bool ret = EEPROM.read(EEPROM_ADDR_RAW_GAMA_ENABLE_START); - Log->AddEvent(LogLevel_Info, "raw_gama: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("raw_gama: "), String(ret)); return ret; } @@ -1072,7 +1072,7 @@ bool Configuration::LoadRawGama() { @return String - WI-FI SSID */ String Configuration::LoadWifiSsid() { - Log->AddEvent(LogLevel_Info, "SSID: ", false); + Log->AddEvent(LogLevel_Info, F("SSID: "), false); String ret = LoadString(EEPROM_ADDR_WIFI_SSID_START, EEPROM_ADDR_WIFI_SSID_LENGTH, true); return ret; @@ -1084,7 +1084,7 @@ String Configuration::LoadWifiSsid() { @return String - WI-FI password */ String Configuration::LoadWifiPassowrd() { - Log->AddEvent(LogLevel_Info, "WiFi password: ", false); + Log->AddEvent(LogLevel_Info, F("WiFi password: "), false); String ret = LoadString(EEPROM_ADDR_WIFI_PASSWORD_START, EEPROM_ADDR_WIFI_PASSWORD_LENGTH, CONSOLE_VERBOSE_DEBUG); return ret; @@ -1102,7 +1102,7 @@ bool Configuration::LoadEnableServiceAp() { if ((255 == tmp) || (1 == tmp)) { ret = true; } - Log->AddEvent(LogLevel_Info, "Enable Service AP: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("Enable Service AP: "), String(ret)); return ret; } @@ -1113,7 +1113,7 @@ bool Configuration::LoadEnableServiceAp() { @return String - username */ String Configuration::LoadBasicAuthUsername() { - Log->AddEvent(LogLevel_Info, "web auth user: ", false); + Log->AddEvent(LogLevel_Info, F("web auth user: "), false); String ret = LoadString(EEPROM_ADDR_BASIC_AUTH_USERNAME_START, EEPROM_ADDR_BASIC_AUTH_USERNAME_LENGTH, true); return ret; @@ -1125,7 +1125,7 @@ String Configuration::LoadBasicAuthUsername() { @return String - password */ String Configuration::LoadBasicAuthPassword() { - Log->AddEvent(LogLevel_Info, "web auth pass: ", false); + Log->AddEvent(LogLevel_Info, F("web auth pass: "), false); String ret = LoadString(EEPROM_ADDR_BASIC_AUTH_PASSWORD_START, EEPROM_ADDR_BASIC_AUTH_PASSWORD_LENGTH, CONSOLE_VERBOSE_DEBUG); return ret; @@ -1138,7 +1138,7 @@ String Configuration::LoadBasicAuthPassword() { */ bool Configuration::LoadBasicAuthFlag() { bool ret = EEPROM.read(EEPROM_ADDR_BASIC_AUTH_ENABLE_FLAG_START); - Log->AddEvent(LogLevel_Info, "web auth enable: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("web auth enable: "), String(ret)); return ret; } @@ -1150,7 +1150,7 @@ bool Configuration::LoadBasicAuthFlag() { */ bool Configuration::LoadCameraFlashEnable() { bool ret = EEPROM.read(EEPROM_ADDR_CAMERA_FLASH_ENABLE_START); - Log->AddEvent(LogLevel_Info, "Camera flash: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("Camera flash: "), String(ret)); return ret; } @@ -1162,7 +1162,7 @@ bool Configuration::LoadCameraFlashEnable() { */ uint16_t Configuration::LoadCameraFlashTime() { uint16_t ret = LoadUint16(EEPROM_ADDR_CAMERA_FLASH_TIME_START); - Log->AddEvent(LogLevel_Info, "Camera flash time: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("Camera flash time: "), String(ret)); return ret; } @@ -1173,7 +1173,7 @@ uint16_t Configuration::LoadCameraFlashTime() { @return String - mDNS record */ String Configuration::LoadMdnsRecord() { - Log->AddEvent(LogLevel_Info, "mDNS: ", false); + Log->AddEvent(LogLevel_Info, F("mDNS: "), false); String ret = LoadString(EEPROM_ADDR_MDNS_RECORD_START, EEPROM_ADDR_MDNS_RECORD_LENGTH, true); return ret; @@ -1186,7 +1186,7 @@ String Configuration::LoadMdnsRecord() { */ bool Configuration::LoadAec2() { bool ret = EEPROM.read(EEPROM_ADDR_AEC2_START); - Log->AddEvent(LogLevel_Info, "aec2: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("aec2: "), String(ret)); return ret; } @@ -1198,7 +1198,7 @@ bool Configuration::LoadAec2() { */ int8_t Configuration::LoadAeLevel() { int8_t ret = EEPROM.read(EEPROM_ADDR_AE_LEVEL_START); - Log->AddEvent(LogLevel_Info, "ae_level: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("ae_level: "), String(ret)); return ret; } @@ -1210,7 +1210,7 @@ int8_t Configuration::LoadAeLevel() { */ uint16_t Configuration::LoadAecValue() { uint16_t ret = LoadUint16(EEPROM_ADDR_AEC_VALUE_START); - Log->AddEvent(LogLevel_Info, "aec_value: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("aec_value: "), String(ret)); return ret; } @@ -1222,7 +1222,7 @@ uint16_t Configuration::LoadAecValue() { */ bool Configuration::LoadGainCtrl() { bool ret = EEPROM.read(EEPROM_ADDR_GAIN_CTRL_START); - Log->AddEvent(LogLevel_Info, "gain_ctrl: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("gain_ctrl: "), String(ret)); return ret; } @@ -1234,7 +1234,7 @@ bool Configuration::LoadGainCtrl() { */ uint8_t Configuration::LoadAgcGain() { uint8_t ret = EEPROM.read(EEPROM_ADDR_AGC_GAIN_START); - Log->AddEvent(LogLevel_Info, "agc_gain: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("agc_gain: "), String(ret)); return ret; } @@ -1246,7 +1246,7 @@ uint8_t Configuration::LoadAgcGain() { */ LogLevel_enum Configuration::LoadLogLevel() { LogLevel_enum ret = (LogLevel_enum) EEPROM.read(EEPROM_ADDR_LOG_LEVEL); - Log->AddEvent(LogLevel_Info, "LogLevel: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("LogLevel: "), String(ret)); return ret; } @@ -1257,7 +1257,7 @@ LogLevel_enum Configuration::LoadLogLevel() { * @return String - hostname */ String Configuration::LoadPrusaConnectHostname() { - Log->AddEvent(LogLevel_Info, "PrusaConnect hostname: ", false); + Log->AddEvent(LogLevel_Info, F("PrusaConnect hostname: "), false); String ret = LoadString(EEPROM_ADDR_HOSTNAME_START, EEPROM_ADDR_HOSTNAME_LENGTH, true); return ret; @@ -1287,7 +1287,7 @@ uint8_t Configuration::LoadNetworkIpMethod() { */ String Configuration::LoadNetworkIp() { String ret = LoadIpAddress(EEPROM_ADDR_NETWORK_STATIC_IP_START); - Log->AddEvent(LogLevel_Info, "Network static IP: " + ret); + Log->AddEvent(LogLevel_Info, F("Network static IP: "), ret); return ret; } @@ -1299,7 +1299,7 @@ String Configuration::LoadNetworkIp() { */ String Configuration::LoadNetworkMask() { String ret = LoadIpAddress(EEPROM_ADDR_NETWORK_STATIC_MASK_START); - Log->AddEvent(LogLevel_Info, "Network static mask: " + ret); + Log->AddEvent(LogLevel_Info, F("Network static mask: "), ret); return ret; } @@ -1311,7 +1311,7 @@ String Configuration::LoadNetworkMask() { */ String Configuration::LoadNetworkGateway() { String ret = LoadIpAddress(EEPROM_ADDR_NETWORK_STATIC_GATEWAY_START); - Log->AddEvent(LogLevel_Info, "Network static gateway: " + ret); + Log->AddEvent(LogLevel_Info, F("Network static gateway: "), ret); return ret; } @@ -1323,7 +1323,7 @@ String Configuration::LoadNetworkGateway() { */ String Configuration::LoadNetworkDns() { String ret = LoadIpAddress(EEPROM_ADDR_NETWORK_STATIC_DNS_START); - Log->AddEvent(LogLevel_Info, "Network static DNS: " + ret); + Log->AddEvent(LogLevel_Info, F("Network static DNS: "), ret); return ret; } @@ -1341,7 +1341,7 @@ uint8_t Configuration::LoadCameraImageExifRotation() { ret = 1; } - Log->AddEvent(LogLevel_Info, "Camera image rotation: " + String(ret)); + Log->AddEvent(LogLevel_Info, F("Camera image rotation: "), String(ret)); return ret; } diff --git a/ESP32_PrusaConnectCam/connect.cpp b/ESP32_PrusaConnectCam/connect.cpp index 99aaa5d..270c8eb 100644 --- a/ESP32_PrusaConnectCam/connect.cpp +++ b/ESP32_PrusaConnectCam/connect.cpp @@ -469,7 +469,7 @@ void PrusaConnect::SavePhotoToSdCard() { String FileName = String(TIMELAPS_PHOTO_FOLDER) + "/" + String(TIMELAPS_PHOTO_PREFIX) + "_"; FileName += log->GetSystemTime(); FileName += TIMELAPS_PHOTO_SUFFIX; - log->AddEvent(LogLevel_Verbose, "Saving file: " + FileName); + log->AddEvent(LogLevel_Verbose, F("Saving file: "), FileName); if (camera->GetPhotoExifData()->header != NULL) { if (log->WritePicture(FileName, camera->GetPhotoFb()->buf + camera->GetPhotoExifData()->offset, camera->GetPhotoFb()->len - camera->GetPhotoExifData()->offset, camera->GetPhotoExifData()->header, camera->GetPhotoExifData()->len) == true) { diff --git a/ESP32_PrusaConnectCam/exif.cpp b/ESP32_PrusaConnectCam/exif.cpp index 5438ff4..0a25557 100644 --- a/ESP32_PrusaConnectCam/exif.cpp +++ b/ESP32_PrusaConnectCam/exif.cpp @@ -405,9 +405,7 @@ const uint8_t *get_exif_header(camera_fb_t *fb, const uint8_t **exif_buf, size_t // Set date time struct tm timeinfo; localtime_r(&now_tv.tv_sec, &timeinfo); - strftime(exif_hdr.tiff_data.ifd0_data.datetime, - sizeof(exif_hdr.tiff_data.ifd0_data.datetime), - "%Y:%m:%d %H:%M:%S", &timeinfo); + strftime(exif_hdr.tiff_data.ifd0_data.datetime, sizeof(exif_hdr.tiff_data.ifd0_data.datetime), "%Y:%m:%d %H:%M:%S", &timeinfo); // Set sub-seconds time snprintf( (char *) &(exif_hdr.tiff_data.ifd_exif.entries[TAG_EXIF_SUBSEC_TIME_IDX].value), 9, "%03ld", now_tv.tv_usec/1000); diff --git a/ESP32_PrusaConnectCam/log.cpp b/ESP32_PrusaConnectCam/log.cpp index 583b11b..de8ea36 100644 --- a/ESP32_PrusaConnectCam/log.cpp +++ b/ESP32_PrusaConnectCam/log.cpp @@ -18,8 +18,8 @@ Logs SystemLog(LOGS_FILE_PATH, LOGS_FILE_NAME, LOGS_FILE_MAX_SIZE); @return none */ Logs::Logs() { - FileName = "log.txt"; - FilePath = "/"; + FileName = F("log.txt"); + FilePath = F("/"); LogLevel = LogLevel_Verbose; FileMaxSize = 1024; NtpTimeSynced = false; @@ -163,7 +163,16 @@ void Logs::AddEvent(LogLevel_enum level, String msg, bool newLine, bool date) { #endif } - void Logs::AddEvent(LogLevel_enum level, const __FlashStringHelper *msg, String parameters, bool newLine, bool date) { +/** + @info Add new log event + @param LogLevel_enum - log level + @param const __FlashStringHelper - log message + @param String - parameters + @param bool - new line + @param bool - date + @return none +*/ +void Logs::AddEvent(LogLevel_enum level, const __FlashStringHelper *msg, String parameters, bool newLine, bool date) { if (LogLevel >= level) { String LogMsg = ""; @@ -221,7 +230,7 @@ void Logs::SetFileMaxSize(uint16_t i_data) { */ void Logs::SetNtpTimeSynced(bool i_data) { NtpTimeSynced = i_data; - AddEvent(LogLevel_Info, "System time: " + GetSystemTime()); + AddEvent(LogLevel_Info, F("System time: "), GetSystemTime()); } /** @@ -267,14 +276,21 @@ bool Logs::GetNtpTimeSynced() { */ void Logs::CheckMaxLogFileSize() { uint32_t FileSize = GetFileSize(SD_MMC, FilePath + FileName); - Serial.printf("Log file size: %d bytes\n", FileSize); + AddEvent(LogLevel_Verbose, F("Log file size: "), String(FileSize) + " bytes"); + if (FileSize >= LOGS_FILE_MAX_SIZE) { uint16_t file_count = FileCount(SD_MMC, FilePath, FileName); - Serial.printf("Maximum log file size.\nFile count: %d\n", file_count); + AddEvent(LogLevel_Info, F("Maximum log file size. File count: "), String(file_count)); RenameFile(SD_MMC, FilePath + FileName, FilePath + FileName + String(file_count)); + } } +void Logs::CheckCardSpace() { + CheckCardUsedStatus(); + AddEvent(LogLevel_Verbose, "Card size: " + String(GetCardSizeMB()), + " MB, Used: " + String(GetCardUsedMB()) + " MB, Free: " + String(GetCardUsedMB()) + " MB"); +} + /** @info Get system time @param none diff --git a/ESP32_PrusaConnectCam/log.h b/ESP32_PrusaConnectCam/log.h index 53440e8..014eb9d 100644 --- a/ESP32_PrusaConnectCam/log.h +++ b/ESP32_PrusaConnectCam/log.h @@ -55,6 +55,7 @@ public: LogLevel_enum GetLogLevel(); bool GetNtpTimeSynced(); void CheckMaxLogFileSize(); + void CheckCardSpace(); String GetSystemTime(); }; diff --git a/ESP32_PrusaConnectCam/mcu_cfg.h b/ESP32_PrusaConnectCam/mcu_cfg.h index 2447d30..de6f8db 100644 --- a/ESP32_PrusaConnectCam/mcu_cfg.h +++ b/ESP32_PrusaConnectCam/mcu_cfg.h @@ -56,10 +56,9 @@ #define WEB_SERVER_PORT 80 ///< WEB server port #define SERIAL_PORT_SPEED 115200 ///< baud rate #define WDG_TIMEOUT 40 ///< wdg timeout [second] -#define PHOTO_FRAGMENT_SIZE 2048 ///< photo fragmentation size [bytes] +#define PHOTO_FRAGMENT_SIZE 5120 ///< photo fragmentation size [bytes] #define LOOP_DELAY 100 ///< loop delay [ms] #define WIFI_CLIENT_WAIT_CON false ///< wait for connecting to WiFi network -#define DYNMIC_JSON_SIZE 1024 ///< maximum size for dynamic json [bytes] #define WEB_CACHE_INTERVAL 86400 ///< cache interval for browser [s] 86400s = 24h /* --------------- OTA UPDATE CFG --------------*/ diff --git a/ESP32_PrusaConnectCam/micro_sd.cpp b/ESP32_PrusaConnectCam/micro_sd.cpp index 4874599..07464c1 100644 --- a/ESP32_PrusaConnectCam/micro_sd.cpp +++ b/ESP32_PrusaConnectCam/micro_sd.cpp @@ -451,7 +451,7 @@ int MicroSd::CountFilesInDir(fs::FS &fs, String path) { @param none @return bool - status */ -bool MicroSd::CheckCardUsedStatus() { +void MicroSd::CheckCardUsedStatus() { CardSizeMB = SD_MMC.cardSize() / (1024 * 1024); CardTotalMB = SD_MMC.totalBytes() / (1024 * 1024); @@ -460,9 +460,9 @@ bool MicroSd::CheckCardUsedStatus() { FreeSpacePercent = (CardFreeMB * 100) / CardSizeMB; UsedSpacePercent = 100 - FreeSpacePercent; +#if (true == CONSOLE_VERBOSE_DEBUG) Serial.printf("Card size: %d MB, Total: %d MB, Used: %d MB, Free: %d GB, Free: %d %% \n", CardSizeMB, CardTotalMB, CardUsedMB, CardFreeMB, FreeSpacePercent); - - return true; +#endif } /** diff --git a/ESP32_PrusaConnectCam/micro_sd.h b/ESP32_PrusaConnectCam/micro_sd.h index d16e793..a5e9705 100644 --- a/ESP32_PrusaConnectCam/micro_sd.h +++ b/ESP32_PrusaConnectCam/micro_sd.h @@ -33,14 +33,14 @@ class MicroSd { private: - bool CardDetected; ///< Card detected status - bool DetectAfterBoot; ///< Card detect after boot + bool CardDetected; ///< Card detected status + bool DetectAfterBoot; ///< Card detect after boot uint32_t CardSizeMB; ///< Card size - uint32_t CardTotalMB; - uint32_t CardUsedMB; - uint32_t CardFreeMB; - uint8_t FreeSpacePercent; - uint8_t UsedSpacePercent; + uint32_t CardTotalMB; ///< Card total size + uint32_t CardUsedMB; ///< Card used size + uint32_t CardFreeMB; ///< Card free size + uint8_t FreeSpacePercent; ///< Free space in percent + uint8_t UsedSpacePercent; ///< Used space in percent public: MicroSd(); @@ -66,7 +66,7 @@ public: bool WritePicture(String, uint8_t *, size_t); bool WritePicture(String, uint8_t *, size_t, const uint8_t *, size_t); - bool CheckCardUsedStatus(); + void CheckCardUsedStatus(); bool GetCardDetectedStatus(); bool GetCardDetectAfterBoot(); diff --git a/ESP32_PrusaConnectCam/serial_cfg.cpp b/ESP32_PrusaConnectCam/serial_cfg.cpp index ca1147e..0455ca6 100644 --- a/ESP32_PrusaConnectCam/serial_cfg.cpp +++ b/ESP32_PrusaConnectCam/serial_cfg.cpp @@ -75,19 +75,19 @@ String lastTwoChars = command.substring(command.length() - 2); if (command.startsWith("setwifissid:") && command.endsWith(";")) { /* remove prefix "setwifissid:" and end of command symbol ";" */ wifi_ssid = command.substring(12, command.length() -1); - log->AddEvent(LogLevel_Info, "--> Console set WiFi SSID: " + wifi_ssid); + log->AddEvent(LogLevel_Info, F("--> Console set WiFi SSID: "), wifi_ssid); wifim->SetStaSsid(wifi_ssid); } else if (command.startsWith("setwifipass:") && command.endsWith(";")) { /* remove prefix "setwifipass:" and end of command symbol ";" */ wifi_pass = command.substring(12, command.length() -1); - log->AddEvent(LogLevel_Info, "--> Console set WiFi password: " + wifi_pass); + log->AddEvent(LogLevel_Info, F("--> Console set WiFi password: "), wifi_pass); wifim->SetStaPassword(wifi_pass); } else if (command.startsWith("setauthtoken:") && command.endsWith(";")) { /* remove prefix "setauthtoken:" and end of command symbol ";" */ auth_token = command.substring(13, command.length() -1); - log->AddEvent(LogLevel_Info, "--> Console set auth TOKEN for backend: " + auth_token); + log->AddEvent(LogLevel_Info, F("--> Console set auth TOKEN for backend: "), auth_token); connect->SetToken(auth_token); } else if (command.startsWith("wificonnect") && command.endsWith(";")) { @@ -116,7 +116,7 @@ String lastTwoChars = command.substring(command.length() - 2); } else if (command.startsWith("resolution:") && command.endsWith(";")) { uint8_t resolution = command.substring(11, command.length() -1).toInt(); - log->AddEvent(LogLevel_Info, "--> Console set photo resolution: " + String(resolution)); + log->AddEvent(LogLevel_Info, F("--> Console set photo resolution: "), String(resolution)); if ((resolution >= 0) && (resolution <= 6)) { cam->SetFrameSize(resolution); } else { @@ -124,7 +124,7 @@ String lastTwoChars = command.substring(command.length() - 2); } } else if (command.startsWith("photoquality:") && command.endsWith(";")) { uint8_t quality = command.substring(13, command.length() -1).toInt(); - log->AddEvent(LogLevel_Info, "--> Console set photo quality: " + String(quality)); + log->AddEvent(LogLevel_Info, F("--> Console set photo quality: "), String(quality)); if ((quality >= 10) && (quality <= 63)) { cam->SetPhotoQuality(quality); } else { diff --git a/ESP32_PrusaConnectCam/server.cpp b/ESP32_PrusaConnectCam/server.cpp index 67fb14f..9066f23 100644 --- a/ESP32_PrusaConnectCam/server.cpp +++ b/ESP32_PrusaConnectCam/server.cpp @@ -934,7 +934,7 @@ void Server_InitWebServer_Update() { [](AsyncWebServerRequest* request, String filename, size_t index, uint8_t* data, size_t len, bool final) { if (!index) { FirmwareUpdate.Processing = true; - SystemLog.AddEvent(LogLevel_Info, "Start FW update from file: " + filename); + SystemLog.AddEvent(LogLevel_Info, F("Start FW update from file: "), filename); FirmwareUpdate.UpdatingStatus = String(SYSTEM_MSG_UPDATE_PROCESS); if (!Update.begin(UPDATE_SIZE_UNKNOWN, U_FLASH)) { Update.printError(Serial); @@ -1036,7 +1036,7 @@ void Server_handleCacheRequest(AsyncWebServerRequest* request, const char *conte @return none */ void Server_handleNotFound(AsyncWebServerRequest* request) { - String message = "URL not Found\n\n"; + String message = F("URL not Found\n\n"); message += "URI: " + request->url() + "\nMethod: "; message += (request->method() == HTTP_GET) ? F("GET") : F("POST"); diff --git a/ESP32_PrusaConnectCam/system.cpp b/ESP32_PrusaConnectCam/system.cpp index f8c8da2..f5eca2e 100644 --- a/ESP32_PrusaConnectCam/system.cpp +++ b/ESP32_PrusaConnectCam/system.cpp @@ -254,7 +254,7 @@ bool System_OtaUpdateStart() { FirmwareUpdate.UpdatingStatus = SYSTEM_MSG_UPDATE_PROCESS; httpUpdate.setLedPin(4, HIGH); - SystemLog.AddEvent(LogLevel_Info, "Start OTA update URL: " + FirmwareUpdate.OtaUpdateFwUrl + ";"); + SystemLog.AddEvent(LogLevel_Info, F("Start OTA update URL: "), FirmwareUpdate.OtaUpdateFwUrl + ";"); /* start update */ t_httpUpdate_return ret = httpUpdate.update(client, FirmwareUpdate.OtaUpdateFwUrl.c_str()); @@ -275,7 +275,7 @@ bool System_OtaUpdateStart() { break; } FirmwareUpdate.Processing = false; - SystemLog.AddEvent(LogLevel_Info, "OTA update DONE. " + FirmwareUpdate.UpdatingStatus); + SystemLog.AddEvent(LogLevel_Info, F("OTA update DONE. "), FirmwareUpdate.UpdatingStatus); return b_ret; } @@ -439,7 +439,7 @@ String System_printMcuResetReasonSimple() { @return none */ void System_TaskWifiManagement(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "Task Wifi Management. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("Task Wifi Management. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); while (1) { @@ -451,7 +451,8 @@ void System_TaskWifiManagement(void *pvParameters) { 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"); + SystemLog.AddEvent(LogLevel_Verbose, F("WiFiManagement task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("WiFi status: "), String(WiFi.status())); /* reset wdg */ esp_task_wdt_reset(); @@ -468,14 +469,14 @@ void System_TaskWifiManagement(void *pvParameters) { * @return none */ void System_TaskMain(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "System task. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("System task. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); while (1) { /* for ota update */ esp_task_wdt_reset(); System_Main(); - SystemLog.AddEvent(LogLevel_Verbose, "System task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("System task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* reset wdg */ esp_task_wdt_reset(); @@ -492,7 +493,7 @@ void System_TaskMain(void *pvParameters) { * @return none */ void System_TaskCaptureAndSendPhoto(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "Task photo processing. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("Task photo processing. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); while (1) { @@ -517,7 +518,7 @@ void System_TaskCaptureAndSendPhoto(void *pvParameters) { Connect.IncreaseSendingIntervalCounter(); } - SystemLog.AddEvent(LogLevel_Verbose, "Photo processing task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("Photo processing task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* reset wdg */ esp_task_wdt_reset(); @@ -534,7 +535,7 @@ void System_TaskCaptureAndSendPhoto(void *pvParameters) { * @return none */ void System_TaskSdCardCheck(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "MicroSdCard check task. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("MicroSdCard check task. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); while (1) { @@ -547,17 +548,17 @@ void System_TaskSdCardCheck(void *pvParameters) { /* check card free space */ if (true == SystemLog.GetCardDetectedStatus()) { - SystemLog.AddEvent(LogLevel_Verbose, "Check card free space"); - SystemLog.CheckCardUsedStatus(); + SystemLog.AddEvent(LogLevel_Verbose, F("Check card free space")); + SystemLog.CheckCardSpace(); } /* check maximum log file size */ if (true == SystemLog.GetCardDetectedStatus()) { - SystemLog.AddEvent(LogLevel_Verbose, "Check maximum log file size"); + SystemLog.AddEvent(LogLevel_Verbose, F("Check maximum log file size")); SystemLog.CheckMaxLogFileSize(); } - SystemLog.AddEvent(LogLevel_Verbose, "MicroSdCard task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("MicroSdCard task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* reset wdg */ esp_task_wdt_reset(); @@ -574,13 +575,13 @@ void System_TaskSdCardCheck(void *pvParameters) { * @return none */ void System_TaskSerialCfg(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "SerialCg task. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("SerialCg task. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); while (1) { esp_task_wdt_reset(); SystemSerialCfg.ProcessIncommingData(); - SystemLog.AddEvent(LogLevel_Verbose, "SerialCfg task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("SerialCfg task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* reset wdg */ esp_task_wdt_reset(); @@ -597,12 +598,12 @@ void System_TaskSerialCfg(void *pvParameters) { * @return none */ void System_TaskStreamTelemetry(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "StreamTelemetry task. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("StreamTelemetry task. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); while (1) { esp_task_wdt_reset(); - SystemLog.AddEvent(LogLevel_Verbose, "StreamTelemetry task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("StreamTelemetry task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); if (SystemCamera.GetStreamStatus()) { char buf[80] = { '\0' }; sprintf(buf, "Stream, average data in %dsec. FPS: %.1f, Size: %uKB", (TASK_STREAM_TELEMETRY / SECOND_TO_MILISECOND), SystemCamera.StreamGetFrameAverageFps(), SystemCamera.StreamGetFrameAverageSize()); @@ -625,14 +626,14 @@ void System_TaskStreamTelemetry(void *pvParameters) { * @return none */ void System_TaskSysLed(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "SystemLed task. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("SystemLed task. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); while (1) { system_led.toggle(); /* reset wdg */ esp_task_wdt_reset(); - SystemLog.AddEvent(LogLevel_Verbose, "SystemLed task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("SystemLed task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* next start task */ vTaskDelayUntil(&xLastWakeTime, system_led.getTimer() / portTICK_PERIOD_MS); @@ -646,13 +647,13 @@ void System_TaskSysLed(void *pvParameters) { * @return none */ void System_TaskWiFiWatchdog(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "WiFiWatchdog task. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("WiFiWatchdog task. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); while (1) { esp_task_wdt_reset(); SystemWifiMngt.WiFiWatchdog(); - SystemLog.AddEvent(LogLevel_Verbose, "WiFiWatchdog task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("WiFiWatchdog task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* reset wdg */ esp_task_wdt_reset(); @@ -669,7 +670,7 @@ void System_TaskWiFiWatchdog(void *pvParameters) { * @return none */ void System_TaskSdCardRemove(void *pvParameters) { - SystemLog.AddEvent(LogLevel_Info, "TaskSdCardRemove. core: " + String(xPortGetCoreID())); + SystemLog.AddEvent(LogLevel_Info, F("TaskSdCardRemove. core: "), String(xPortGetCoreID())); TickType_t xLastWakeTime = xTaskGetTickCount(); SdCardRemoveTime = TASK_SDCARD_FILE_REMOVE; @@ -678,21 +679,21 @@ void System_TaskSdCardRemove(void *pvParameters) { if (0 != StartRemoveSdCard) { if (1 == StartRemoveSdCard) { SdCardRemoveTime = 5000; - SystemLog.AddEvent(LogLevel_Info, "Start remove timelaps photo"); + SystemLog.AddEvent(LogLevel_Info, F("Start remove timelaps photo")); uint16_t file_count = SystemLog.CountFilesInDir(SD_MMC, TIMELAPS_PHOTO_FOLDER); - SystemLog.AddEvent(LogLevel_Info, "Files in dir: " + String(file_count)); + SystemLog.AddEvent(LogLevel_Info, F("Files in dir: "), String(file_count)); esp_task_wdt_reset(); StartRemoveSdCard = 2; } if ( false == SystemLog.RemoveFilesInDir(SD_MMC, TIMELAPS_PHOTO_FOLDER, FILE_REMOVE_MAX_COUNT)) { - SystemLog.AddEvent(LogLevel_Info, "Remove files in dir done"); + SystemLog.AddEvent(LogLevel_Info, F("Remove files in dir done")); StartRemoveSdCard = 0; SdCardRemoveTime = TASK_SDCARD_FILE_REMOVE; } } - SystemLog.AddEvent(LogLevel_Verbose, "MicroSdCard task. Stack free size: " + String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); + SystemLog.AddEvent(LogLevel_Verbose, F("MicroSdCard task. Stack free size: "), String(uxTaskGetStackHighWaterMark(NULL)) + " bytes"); /* reset wdg */ esp_task_wdt_reset(); diff --git a/webpage/page_system.html b/webpage/page_system.html index 3616c31..8f17606 100644 --- a/webpage/page_system.html +++ b/webpage/page_system.html @@ -3,7 +3,7 @@
- + @@ -12,9 +12,8 @@ - - +
System status
Status
Prusa Connect Status
Wi-Fi mode
Wi-Fi service AP SSID
Firmware
Version
Build
Available update Check update from cloud
System configuration
Configuration
Camera name & mDNS record.local 
Log level @@ -39,11 +38,12 @@
+ - - + +
Firmware update
Available from cloud  
StatusReady
Progress
0%
diff --git a/webpage/scripts.js b/webpage/scripts.js index fa71277..95f896f 100644 --- a/webpage/scripts.js +++ b/webpage/scripts.js @@ -344,9 +344,9 @@ function uploadFile() { if (file) { statusDiv.innerText = 'Updating...'; - uploadingFirmware = true; const formData = new FormData(); formData.append('firmware', file); + uploadingFirmware = true; fetch('/upload', { method: 'POST',