platformio.ini restructured; delete update.cpp
This commit is contained in:
parent
41343919b1
commit
6c92bf5e47
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
; ---> SELECT TARGET PLATFORM HERE! <---
|
; ---> SELECT TARGET PLATFORM HERE! <---
|
||||||
[platformio]
|
[platformio]
|
||||||
env_default = generic
|
;env_default = generic
|
||||||
;env_default = ebox
|
;env_default = ebox
|
||||||
;env_default = eboxtube
|
;env_default = eboxtube
|
||||||
;env_default = heltec
|
;env_default = heltec
|
||||||
@ -15,7 +15,7 @@ env_default = generic
|
|||||||
;env_default = ttgov2
|
;env_default = ttgov2
|
||||||
;env_default = ttgov21old
|
;env_default = ttgov21old
|
||||||
;env_default = ttgov21new
|
;env_default = ttgov21new
|
||||||
;env_default = ttgobeam
|
env_default = ttgobeam
|
||||||
;env_default = lopy
|
;env_default = lopy
|
||||||
;env_default = lopy4
|
;env_default = lopy4
|
||||||
;env_default = fipy
|
;env_default = fipy
|
||||||
@ -29,7 +29,7 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng
|
|||||||
|
|
||||||
[common]
|
[common]
|
||||||
; for release_version use max. 10 chars total, use any decimal format like "a.b.c"
|
; for release_version use max. 10 chars total, use any decimal format like "a.b.c"
|
||||||
release_version = 1.6.82
|
release_version = 1.6.85
|
||||||
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
|
; DEBUG LEVEL: For production run set to 0, otherwise device will leak RAM while running!
|
||||||
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
|
; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose
|
||||||
debug_level = 0
|
debug_level = 0
|
||||||
@ -38,12 +38,10 @@ upload_protocol = esptool
|
|||||||
;upload_protocol = custom
|
;upload_protocol = custom
|
||||||
extra_scripts = pre:build.py
|
extra_scripts = pre:build.py
|
||||||
keyfile = ota.conf
|
keyfile = ota.conf
|
||||||
platform_espressif32 = espressif32@1.5.0
|
;platform_espressif32 = espressif32@1.5.0
|
||||||
|
platform_espressif32 = https://github.com/platformio/platform-espressif32.git#a7b1fe6
|
||||||
board_build.partitions = min_spiffs.csv
|
board_build.partitions = min_spiffs.csv
|
||||||
monitor_speed = 115200
|
monitor_speed = 115200
|
||||||
lib_deps_basic =
|
|
||||||
ArduinoJson@^5.13.1
|
|
||||||
Time@>=1.5
|
|
||||||
lib_deps_lora =
|
lib_deps_lora =
|
||||||
; MCCI LoRaWAN LMIC library@^2.2.2
|
; MCCI LoRaWAN LMIC library@^2.2.2
|
||||||
lib_deps_display =
|
lib_deps_display =
|
||||||
@ -52,38 +50,42 @@ lib_deps_rgbled =
|
|||||||
SmartLeds@>=1.1.3
|
SmartLeds@>=1.1.3
|
||||||
lib_deps_gps =
|
lib_deps_gps =
|
||||||
TinyGPSPlus@>=1.0.2
|
TinyGPSPlus@>=1.0.2
|
||||||
lib_deps_sensors =
|
lib_deps_basic =
|
||||||
Adafruit Unified Sensor@^1.0.2
|
ArduinoJson@^5.13.1
|
||||||
Adafruit BME680 Library@^1.0.7
|
Time@>=1.5
|
||||||
lib_deps_all =
|
lib_deps_all =
|
||||||
${common.lib_deps_basic}
|
${common.lib_deps_basic}
|
||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_display}
|
${common.lib_deps_display}
|
||||||
${common.lib_deps_rgbled}
|
${common.lib_deps_rgbled}
|
||||||
${common.lib_deps_gps}
|
${common.lib_deps_gps}
|
||||||
${common.lib_deps_sensors}
|
build_flags_basic =
|
||||||
build_flags =
|
-include $PROJECTSRC_DIR\\hal\\${PIOENV}.h
|
||||||
-include "src/hal/${PIOENV}.h"
|
-include $PROJECTSRC_DIR\\paxcounter.conf
|
||||||
-include "src/paxcounter.conf"
|
|
||||||
-w
|
-w
|
||||||
;'-D ARDUINO_LMIC_PROJECT_CONFIG_H="/$PROJECTSRC_DIR/lmic_config.h"'
|
|
||||||
'-DARDUINO_LMIC_PROJECT_CONFIG_H=../../../src/lmic_config.h'
|
'-DARDUINO_LMIC_PROJECT_CONFIG_H=../../../src/lmic_config.h'
|
||||||
'-DCORE_DEBUG_LEVEL=${common.debug_level}'
|
'-DCORE_DEBUG_LEVEL=${common.debug_level}'
|
||||||
'-DLOG_LOCAL_LEVEL=${common.debug_level}'
|
'-DLOG_LOCAL_LEVEL=${common.debug_level}'
|
||||||
'-DBINTRAY_PACKAGE="${PIOENV}"'
|
'-DBINTRAY_PACKAGE="${PIOENV}"'
|
||||||
'-DPROGVERSION="${common.release_version}"'
|
'-DPROGVERSION="${common.release_version}"'
|
||||||
|
build_flags_sensors =
|
||||||
|
-Llib/Bosch-BSEC
|
||||||
|
-llibalgobsec.a
|
||||||
|
build_flags_all =
|
||||||
|
${common.build_flags_basic}
|
||||||
|
${common.build_flags_sensors}
|
||||||
|
|
||||||
[env:ebox]
|
[env:ebox]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = esp32dev
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 115200
|
upload_speed = 115200
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${common.lib_deps_basic}
|
${common.lib_deps_basic}
|
||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -91,7 +93,7 @@ monitor_speed = ${common.monitor_speed}
|
|||||||
[env:eboxtube]
|
[env:eboxtube]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = esp32dev
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 115200
|
upload_speed = 115200
|
||||||
lib_deps =
|
lib_deps =
|
||||||
@ -99,7 +101,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_rgbled}
|
${common.lib_deps_rgbled}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -115,7 +117,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_display}
|
${common.lib_deps_display}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -131,7 +133,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_display}
|
${common.lib_deps_display}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -147,7 +149,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_display}
|
${common.lib_deps_display}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -163,7 +165,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_display}
|
${common.lib_deps_display}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -171,7 +173,7 @@ monitor_speed = ${common.monitor_speed}
|
|||||||
[env:ttgov21old]
|
[env:ttgov21old]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = esp32dev
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
@ -179,7 +181,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_display}
|
${common.lib_deps_display}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -187,7 +189,7 @@ monitor_speed = ${common.monitor_speed}
|
|||||||
[env:ttgov21new]
|
[env:ttgov21new]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = esp32dev
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
@ -195,7 +197,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_display}
|
${common.lib_deps_display}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -203,7 +205,7 @@ monitor_speed = ${common.monitor_speed}
|
|||||||
[env:ttgobeam]
|
[env:ttgobeam]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = esp32dev
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
@ -211,7 +213,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_gps}
|
${common.lib_deps_gps}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_all}
|
||||||
-mfix-esp32-psram-cache-issue
|
-mfix-esp32-psram-cache-issue
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
@ -220,7 +222,7 @@ monitor_speed = ${common.monitor_speed}
|
|||||||
[env:fipy]
|
[env:fipy]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = esp32dev
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
@ -228,7 +230,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_rgbled}
|
${common.lib_deps_rgbled}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -236,7 +238,7 @@ monitor_speed = ${common.monitor_speed}
|
|||||||
[env:lopy]
|
[env:lopy]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = lopy4
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
@ -245,7 +247,7 @@ lib_deps =
|
|||||||
${common.lib_deps_rgbled}
|
${common.lib_deps_rgbled}
|
||||||
${common.lib_deps_gps}
|
${common.lib_deps_gps}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -253,7 +255,7 @@ monitor_speed = ${common.monitor_speed}
|
|||||||
[env:lopy4]
|
[env:lopy4]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = lopy4
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps =
|
lib_deps =
|
||||||
@ -262,7 +264,7 @@ lib_deps =
|
|||||||
${common.lib_deps_rgbled}
|
${common.lib_deps_rgbled}
|
||||||
${common.lib_deps_gps}
|
${common.lib_deps_gps}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
-mfix-esp32-psram-cache-issue
|
-mfix-esp32-psram-cache-issue
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
@ -279,7 +281,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_rgbled}
|
${common.lib_deps_rgbled}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -295,7 +297,7 @@ lib_deps =
|
|||||||
${common.lib_deps_lora}
|
${common.lib_deps_lora}
|
||||||
${common.lib_deps_rgbled}
|
${common.lib_deps_rgbled}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -310,7 +312,7 @@ lib_deps =
|
|||||||
${common.lib_deps_basic}
|
${common.lib_deps_basic}
|
||||||
${common.lib_deps_rgbled}
|
${common.lib_deps_rgbled}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common.build_flags}
|
${common.build_flags_basic}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -322,7 +324,7 @@ board = featheresp32
|
|||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps = ${common.lib_deps_all}
|
lib_deps = ${common.lib_deps_all}
|
||||||
build_flags = ${common.build_flags}
|
build_flags = ${common.build_flags_all}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
||||||
@ -330,11 +332,11 @@ monitor_speed = ${common.monitor_speed}
|
|||||||
[env:generic]
|
[env:generic]
|
||||||
platform = ${common.platform_espressif32}
|
platform = ${common.platform_espressif32}
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = heltec_wifi_lora_32
|
board = esp32dev
|
||||||
board_build.partitions = ${common.board_build.partitions}
|
board_build.partitions = ${common.board_build.partitions}
|
||||||
upload_speed = 921600
|
upload_speed = 921600
|
||||||
lib_deps = ${common.lib_deps_all}
|
lib_deps = ${common.lib_deps_all}
|
||||||
build_flags = ${common.build_flags}
|
build_flags = ${common.build_flags_all}
|
||||||
upload_protocol = ${common.upload_protocol}
|
upload_protocol = ${common.upload_protocol}
|
||||||
extra_scripts = ${common.extra_scripts}
|
extra_scripts = ${common.extra_scripts}
|
||||||
monitor_speed = ${common.monitor_speed}
|
monitor_speed = ${common.monitor_speed}
|
375
src/update.cpp
375
src/update.cpp
@ -1,375 +0,0 @@
|
|||||||
/*
|
|
||||||
this file copied from esp32-arduino library and patched, see PR
|
|
||||||
https://github.com/espressif/arduino-esp32/pull/1979
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "update.h"
|
|
||||||
#include "Arduino.h"
|
|
||||||
#include "esp_spi_flash.h"
|
|
||||||
#include "esp_ota_ops.h"
|
|
||||||
#include "esp_image_format.h"
|
|
||||||
|
|
||||||
static const char * _err2str(uint8_t _error){
|
|
||||||
if(_error == UPDATE_ERROR_OK){
|
|
||||||
return ("No Error");
|
|
||||||
} else if(_error == UPDATE_ERROR_WRITE){
|
|
||||||
return ("Flash Write Failed");
|
|
||||||
} else if(_error == UPDATE_ERROR_ERASE){
|
|
||||||
return ("Flash Erase Failed");
|
|
||||||
} else if(_error == UPDATE_ERROR_READ){
|
|
||||||
return ("Flash Read Failed");
|
|
||||||
} else if(_error == UPDATE_ERROR_SPACE){
|
|
||||||
return ("Not Enough Space");
|
|
||||||
} else if(_error == UPDATE_ERROR_SIZE){
|
|
||||||
return ("Bad Size Given");
|
|
||||||
} else if(_error == UPDATE_ERROR_STREAM){
|
|
||||||
return ("Stream Read Timeout");
|
|
||||||
} else if(_error == UPDATE_ERROR_MD5){
|
|
||||||
return ("MD5 Check Failed");
|
|
||||||
} else if(_error == UPDATE_ERROR_MAGIC_BYTE){
|
|
||||||
return ("Wrong Magic Byte");
|
|
||||||
} else if(_error == UPDATE_ERROR_ACTIVATE){
|
|
||||||
return ("Could Not Activate The Firmware");
|
|
||||||
} else if(_error == UPDATE_ERROR_NO_PARTITION){
|
|
||||||
return ("Partition Could Not be Found");
|
|
||||||
} else if(_error == UPDATE_ERROR_BAD_ARGUMENT){
|
|
||||||
return ("Bad Argument");
|
|
||||||
} else if(_error == UPDATE_ERROR_ABORT){
|
|
||||||
return ("Aborted");
|
|
||||||
}
|
|
||||||
return ("UNKNOWN");
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool _partitionIsBootable(const esp_partition_t* partition){
|
|
||||||
uint8_t buf[4];
|
|
||||||
if(!partition){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if(!ESP.flashRead(partition->address, (uint32_t*)buf, 4)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(buf[0] != ESP_IMAGE_HEADER_MAGIC) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool _enablePartition(const esp_partition_t* partition){
|
|
||||||
uint8_t buf[4];
|
|
||||||
if(!partition){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if(!ESP.flashRead(partition->address, (uint32_t*)buf, 4)) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
buf[0] = ESP_IMAGE_HEADER_MAGIC;
|
|
||||||
|
|
||||||
return ESP.flashWrite(partition->address, (uint32_t*)buf, 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateClass::UpdateClass()
|
|
||||||
: _error(0)
|
|
||||||
, _buffer(0)
|
|
||||||
, _bufferLen(0)
|
|
||||||
, _size(0)
|
|
||||||
, _progress_callback(NULL)
|
|
||||||
, _progress(0)
|
|
||||||
, _command(U_FLASH)
|
|
||||||
, _partition(NULL)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateClass& UpdateClass::onProgress(THandlerFunction_Progress fn) {
|
|
||||||
_progress_callback = fn;
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateClass::_reset() {
|
|
||||||
if (_buffer)
|
|
||||||
delete[] _buffer;
|
|
||||||
_buffer = 0;
|
|
||||||
_bufferLen = 0;
|
|
||||||
_progress = 0;
|
|
||||||
_size = 0;
|
|
||||||
_command = U_FLASH;
|
|
||||||
|
|
||||||
if(_ledPin != -1) {
|
|
||||||
digitalWrite(_ledPin, !_ledOn); // off
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateClass::canRollBack(){
|
|
||||||
if(_buffer){ //Update is running
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const esp_partition_t* partition = esp_ota_get_next_update_partition(NULL);
|
|
||||||
return _partitionIsBootable(partition);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateClass::rollBack(){
|
|
||||||
if(_buffer){ //Update is running
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
const esp_partition_t* partition = esp_ota_get_next_update_partition(NULL);
|
|
||||||
return _partitionIsBootable(partition) && !esp_ota_set_boot_partition(partition);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateClass::begin(size_t size, int command, int ledPin, uint8_t ledOn) {
|
|
||||||
if(_size > 0){
|
|
||||||
log_w("already running");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
_ledPin = ledPin;
|
|
||||||
_ledOn = !!ledOn; // 0(LOW) or 1(HIGH)
|
|
||||||
|
|
||||||
_reset();
|
|
||||||
_error = 0;
|
|
||||||
|
|
||||||
if(size == 0) {
|
|
||||||
_error = UPDATE_ERROR_SIZE;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (command == U_FLASH) {
|
|
||||||
_partition = esp_ota_get_next_update_partition(NULL);
|
|
||||||
if(!_partition){
|
|
||||||
_error = UPDATE_ERROR_NO_PARTITION;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
log_d("OTA Partition: %s", _partition->label);
|
|
||||||
}
|
|
||||||
else if (command == U_SPIFFS) {
|
|
||||||
_partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_DATA_SPIFFS, NULL);
|
|
||||||
if(!_partition){
|
|
||||||
_error = UPDATE_ERROR_NO_PARTITION;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
_error = UPDATE_ERROR_BAD_ARGUMENT;
|
|
||||||
log_e("bad command %u", command);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(size == UPDATE_SIZE_UNKNOWN){
|
|
||||||
size = _partition->size;
|
|
||||||
} else if(size > _partition->size){
|
|
||||||
_error = UPDATE_ERROR_SIZE;
|
|
||||||
log_e("too large %u > %u", size, _partition->size);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
//initialize
|
|
||||||
_buffer = (uint8_t*)malloc(SPI_FLASH_SEC_SIZE);
|
|
||||||
if(!_buffer){
|
|
||||||
log_e("malloc failed");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_size = size;
|
|
||||||
_command = command;
|
|
||||||
_md5.begin();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateClass::_abort(uint8_t err){
|
|
||||||
_reset();
|
|
||||||
_error = err;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateClass::abort(){
|
|
||||||
_abort(UPDATE_ERROR_ABORT);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateClass::_writeBuffer(){
|
|
||||||
//first bytes of new firmware
|
|
||||||
if(!_progress && _command == U_FLASH){
|
|
||||||
//check magic
|
|
||||||
if(_buffer[0] != ESP_IMAGE_HEADER_MAGIC){
|
|
||||||
_abort(UPDATE_ERROR_MAGIC_BYTE);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
//remove magic byte from the firmware now and write it upon success
|
|
||||||
//this ensures that partially written firmware will not be bootable
|
|
||||||
_buffer[0] = 0xFF;
|
|
||||||
}
|
|
||||||
if(!ESP.flashEraseSector((_partition->address + _progress)/SPI_FLASH_SEC_SIZE)){
|
|
||||||
_abort(UPDATE_ERROR_ERASE);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
if (!ESP.flashWrite(_partition->address + _progress, (uint32_t*)_buffer, _bufferLen)) {
|
|
||||||
_abort(UPDATE_ERROR_WRITE);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
//restore magic or md5 will fail
|
|
||||||
if(!_progress && _command == U_FLASH){
|
|
||||||
_buffer[0] = ESP_IMAGE_HEADER_MAGIC;
|
|
||||||
}
|
|
||||||
_md5.add(_buffer, _bufferLen);
|
|
||||||
_progress += _bufferLen;
|
|
||||||
_bufferLen = 0;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateClass::_verifyHeader(uint8_t data) {
|
|
||||||
if(_command == U_FLASH) {
|
|
||||||
if(data != ESP_IMAGE_HEADER_MAGIC) {
|
|
||||||
_abort(UPDATE_ERROR_MAGIC_BYTE);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
} else if(_command == U_SPIFFS) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateClass::_verifyEnd() {
|
|
||||||
if(_command == U_FLASH) {
|
|
||||||
if(!_enablePartition(_partition) || !_partitionIsBootable(_partition)) {
|
|
||||||
_abort(UPDATE_ERROR_READ);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(esp_ota_set_boot_partition(_partition)){
|
|
||||||
_abort(UPDATE_ERROR_ACTIVATE);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_reset();
|
|
||||||
return true;
|
|
||||||
} else if(_command == U_SPIFFS) {
|
|
||||||
_reset();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateClass::setMD5(const char * expected_md5){
|
|
||||||
if(strlen(expected_md5) != 32)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_target_md5 = expected_md5;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool UpdateClass::end(bool evenIfRemaining){
|
|
||||||
if(hasError() || _size == 0){
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!isFinished() && !evenIfRemaining){
|
|
||||||
log_e("premature end: res:%u, pos:%u/%u\n", getError(), progress(), _size);
|
|
||||||
_abort(UPDATE_ERROR_ABORT);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(evenIfRemaining) {
|
|
||||||
if(_bufferLen > 0) {
|
|
||||||
_writeBuffer();
|
|
||||||
}
|
|
||||||
_size = progress();
|
|
||||||
}
|
|
||||||
|
|
||||||
_md5.calculate();
|
|
||||||
if(_target_md5.length()) {
|
|
||||||
if(_target_md5 != _md5.toString()){
|
|
||||||
_abort(UPDATE_ERROR_MD5);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return _verifyEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t UpdateClass::write(uint8_t *data, size_t len) {
|
|
||||||
if(hasError() || !isRunning()){
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(len > remaining()){
|
|
||||||
_abort(UPDATE_ERROR_SPACE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t left = len;
|
|
||||||
|
|
||||||
while((_bufferLen + left) > SPI_FLASH_SEC_SIZE) {
|
|
||||||
size_t toBuff = SPI_FLASH_SEC_SIZE - _bufferLen;
|
|
||||||
memcpy(_buffer + _bufferLen, data + (len - left), toBuff);
|
|
||||||
_bufferLen += toBuff;
|
|
||||||
if(!_writeBuffer()){
|
|
||||||
return len - left;
|
|
||||||
}
|
|
||||||
left -= toBuff;
|
|
||||||
}
|
|
||||||
memcpy(_buffer + _bufferLen, data + (len - left), left);
|
|
||||||
_bufferLen += left;
|
|
||||||
if(_bufferLen == remaining()){
|
|
||||||
if(!_writeBuffer()){
|
|
||||||
return len - left;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return len;
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t UpdateClass::writeStream(Stream &data) {
|
|
||||||
data.setTimeout(RESPONSE_TIMEOUT_MS);
|
|
||||||
size_t written = 0;
|
|
||||||
size_t toRead = 0;
|
|
||||||
if(hasError() || !isRunning())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if(!_verifyHeader(data.peek())) {
|
|
||||||
_reset();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (_progress_callback) {
|
|
||||||
_progress_callback(0, _size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(_ledPin != -1) {
|
|
||||||
pinMode(_ledPin, OUTPUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
while(remaining()) {
|
|
||||||
if(_ledPin != -1) {
|
|
||||||
digitalWrite(_ledPin, _ledOn); // Switch LED on
|
|
||||||
}
|
|
||||||
size_t bytesToRead = SPI_FLASH_SEC_SIZE - _bufferLen;
|
|
||||||
if(bytesToRead > remaining()) {
|
|
||||||
bytesToRead = remaining();
|
|
||||||
}
|
|
||||||
|
|
||||||
toRead = data.readBytes(_buffer + _bufferLen, bytesToRead);
|
|
||||||
if(toRead == 0) { //Timeout
|
|
||||||
delay(100);
|
|
||||||
toRead = data.readBytes(_buffer + _bufferLen, bytesToRead);
|
|
||||||
if(toRead == 0) { //Timeout
|
|
||||||
_abort(UPDATE_ERROR_STREAM);
|
|
||||||
return written;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(_ledPin != -1) {
|
|
||||||
digitalWrite(_ledPin, !_ledOn); // Switch LED off
|
|
||||||
}
|
|
||||||
_bufferLen += toRead;
|
|
||||||
if((_bufferLen == remaining() || _bufferLen == SPI_FLASH_SEC_SIZE) && !_writeBuffer())
|
|
||||||
return written;
|
|
||||||
written += toRead;
|
|
||||||
if(_progress_callback) {
|
|
||||||
_progress_callback(_progress, _size);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(_progress_callback) {
|
|
||||||
_progress_callback(_size, _size);
|
|
||||||
}
|
|
||||||
return written;
|
|
||||||
}
|
|
||||||
|
|
||||||
void UpdateClass::printError(Stream &out){
|
|
||||||
out.println(_err2str(_error));
|
|
||||||
}
|
|
||||||
|
|
||||||
UpdateClass Update;
|
|
Loading…
Reference in New Issue
Block a user