From 6c92bf5e476e5e7a7250fb32d639479eca86a0b5 Mon Sep 17 00:00:00 2001 From: Klaus K Wilting Date: Sun, 25 Nov 2018 18:45:48 +0100 Subject: [PATCH] platformio.ini restructured; delete update.cpp --- platformio.ini | 94 +++++++------ src/update.cpp | 375 ------------------------------------------------- 2 files changed, 48 insertions(+), 421 deletions(-) delete mode 100644 src/update.cpp diff --git a/platformio.ini b/platformio.ini index 313b8039..69d42cb9 100644 --- a/platformio.ini +++ b/platformio.ini @@ -6,7 +6,7 @@ ; ---> SELECT TARGET PLATFORM HERE! <--- [platformio] -env_default = generic +;env_default = generic ;env_default = ebox ;env_default = eboxtube ;env_default = heltec @@ -15,7 +15,7 @@ env_default = generic ;env_default = ttgov2 ;env_default = ttgov21old ;env_default = ttgov21new -;env_default = ttgobeam +env_default = ttgobeam ;env_default = lopy ;env_default = lopy4 ;env_default = fipy @@ -29,7 +29,7 @@ description = Paxcounter is a proof-of-concept ESP32 device for metering passeng [common] ; 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! ; 0=None, 1=Error, 2=Warn, 3=Info, 4=Debug, 5=Verbose debug_level = 0 @@ -38,12 +38,10 @@ upload_protocol = esptool ;upload_protocol = custom extra_scripts = pre:build.py 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 monitor_speed = 115200 -lib_deps_basic = - ArduinoJson@^5.13.1 - Time@>=1.5 lib_deps_lora = ; MCCI LoRaWAN LMIC library@^2.2.2 lib_deps_display = @@ -52,38 +50,42 @@ lib_deps_rgbled = SmartLeds@>=1.1.3 lib_deps_gps = TinyGPSPlus@>=1.0.2 -lib_deps_sensors = - Adafruit Unified Sensor@^1.0.2 - Adafruit BME680 Library@^1.0.7 +lib_deps_basic = + ArduinoJson@^5.13.1 + Time@>=1.5 lib_deps_all = ${common.lib_deps_basic} ${common.lib_deps_lora} ${common.lib_deps_display} ${common.lib_deps_rgbled} ${common.lib_deps_gps} - ${common.lib_deps_sensors} -build_flags = - -include "src/hal/${PIOENV}.h" - -include "src/paxcounter.conf" +build_flags_basic = + -include $PROJECTSRC_DIR\\hal\\${PIOENV}.h + -include $PROJECTSRC_DIR\\paxcounter.conf -w - ;'-D ARDUINO_LMIC_PROJECT_CONFIG_H="/$PROJECTSRC_DIR/lmic_config.h"' - '-D ARDUINO_LMIC_PROJECT_CONFIG_H=../../../src/lmic_config.h' - '-D CORE_DEBUG_LEVEL=${common.debug_level}' - '-D LOG_LOCAL_LEVEL=${common.debug_level}' - '-D BINTRAY_PACKAGE="${PIOENV}"' - '-D PROGVERSION="${common.release_version}"' + '-DARDUINO_LMIC_PROJECT_CONFIG_H=../../../src/lmic_config.h' + '-DCORE_DEBUG_LEVEL=${common.debug_level}' + '-DLOG_LOCAL_LEVEL=${common.debug_level}' + '-DBINTRAY_PACKAGE="${PIOENV}"' + '-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] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = esp32dev board_build.partitions = ${common.board_build.partitions} upload_speed = 115200 lib_deps = ${common.lib_deps_basic} ${common.lib_deps_lora} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -91,7 +93,7 @@ monitor_speed = ${common.monitor_speed} [env:eboxtube] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = esp32dev board_build.partitions = ${common.board_build.partitions} upload_speed = 115200 lib_deps = @@ -99,7 +101,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_rgbled} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -115,7 +117,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_display} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -131,7 +133,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_display} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -147,7 +149,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_display} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -163,7 +165,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_display} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -171,7 +173,7 @@ monitor_speed = ${common.monitor_speed} [env:ttgov21old] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = esp32dev board_build.partitions = ${common.board_build.partitions} upload_speed = 921600 lib_deps = @@ -179,7 +181,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_display} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -187,7 +189,7 @@ monitor_speed = ${common.monitor_speed} [env:ttgov21new] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = esp32dev board_build.partitions = ${common.board_build.partitions} upload_speed = 921600 lib_deps = @@ -195,7 +197,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_display} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -203,7 +205,7 @@ monitor_speed = ${common.monitor_speed} [env:ttgobeam] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = esp32dev board_build.partitions = ${common.board_build.partitions} upload_speed = 921600 lib_deps = @@ -211,7 +213,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_gps} build_flags = - ${common.build_flags} + ${common.build_flags_all} -mfix-esp32-psram-cache-issue upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} @@ -220,7 +222,7 @@ monitor_speed = ${common.monitor_speed} [env:fipy] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = esp32dev board_build.partitions = ${common.board_build.partitions} upload_speed = 921600 lib_deps = @@ -228,7 +230,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_rgbled} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -236,7 +238,7 @@ monitor_speed = ${common.monitor_speed} [env:lopy] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = lopy4 board_build.partitions = ${common.board_build.partitions} upload_speed = 921600 lib_deps = @@ -245,7 +247,7 @@ lib_deps = ${common.lib_deps_rgbled} ${common.lib_deps_gps} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -253,7 +255,7 @@ monitor_speed = ${common.monitor_speed} [env:lopy4] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = lopy4 board_build.partitions = ${common.board_build.partitions} upload_speed = 921600 lib_deps = @@ -262,7 +264,7 @@ lib_deps = ${common.lib_deps_rgbled} ${common.lib_deps_gps} build_flags = - ${common.build_flags} + ${common.build_flags_basic} -mfix-esp32-psram-cache-issue upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} @@ -279,7 +281,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_rgbled} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -295,7 +297,7 @@ lib_deps = ${common.lib_deps_lora} ${common.lib_deps_rgbled} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -310,7 +312,7 @@ lib_deps = ${common.lib_deps_basic} ${common.lib_deps_rgbled} build_flags = - ${common.build_flags} + ${common.build_flags_basic} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -322,7 +324,7 @@ board = featheresp32 board_build.partitions = ${common.board_build.partitions} upload_speed = 921600 lib_deps = ${common.lib_deps_all} -build_flags = ${common.build_flags} +build_flags = ${common.build_flags_all} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} @@ -330,11 +332,11 @@ monitor_speed = ${common.monitor_speed} [env:generic] platform = ${common.platform_espressif32} framework = arduino -board = heltec_wifi_lora_32 +board = esp32dev board_build.partitions = ${common.board_build.partitions} upload_speed = 921600 lib_deps = ${common.lib_deps_all} -build_flags = ${common.build_flags} +build_flags = ${common.build_flags_all} upload_protocol = ${common.upload_protocol} extra_scripts = ${common.extra_scripts} monitor_speed = ${common.monitor_speed} \ No newline at end of file diff --git a/src/update.cpp b/src/update.cpp deleted file mode 100644 index a0c9b007..00000000 --- a/src/update.cpp +++ /dev/null @@ -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;