mirror of
https://github.com/sle118/squeezelite-esp32.git
synced 2025-12-08 04:27:12 +03:00
OTA Fine tuning - release
This commit is contained in:
@@ -6,7 +6,7 @@
|
|||||||
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
|
||||||
CONDITIONS OF ANY KIND, either express or implied.
|
CONDITIONS OF ANY KIND, either express or implied.
|
||||||
*/
|
*/
|
||||||
//#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
|
#define LOG_LOCAL_LEVEL ESP_LOG_DEBUG
|
||||||
#include "freertos/FreeRTOS.h"
|
#include "freertos/FreeRTOS.h"
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
#include "esp_system.h"
|
#include "esp_system.h"
|
||||||
@@ -38,7 +38,6 @@
|
|||||||
|
|
||||||
#include "esp_ota_ops.h"
|
#include "esp_ota_ops.h"
|
||||||
|
|
||||||
#define OTA_FLASH_ERASE_BLOCK (4096*10)
|
|
||||||
static const char *TAG = "squeezelite-ota";
|
static const char *TAG = "squeezelite-ota";
|
||||||
extern const uint8_t server_cert_pem_start[] asm("_binary_github_pem_start");
|
extern const uint8_t server_cert_pem_start[] asm("_binary_github_pem_start");
|
||||||
extern const uint8_t server_cert_pem_end[] asm("_binary_github_pem_end");
|
extern const uint8_t server_cert_pem_end[] asm("_binary_github_pem_end");
|
||||||
@@ -178,7 +177,6 @@ esp_err_t _http_event_handler(esp_http_client_event_t *evt)
|
|||||||
|
|
||||||
ota_status.lastpct=ota_status.newpct;
|
ota_status.lastpct=ota_status.newpct;
|
||||||
}
|
}
|
||||||
taskYIELD();
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case HTTP_EVENT_ON_FINISH:
|
case HTTP_EVENT_ON_FINISH:
|
||||||
@@ -208,7 +206,7 @@ esp_err_t _erase_last_boot_app_partition(void)
|
|||||||
{
|
{
|
||||||
uint16_t num_passes=0;
|
uint16_t num_passes=0;
|
||||||
uint16_t remain_size=0;
|
uint16_t remain_size=0;
|
||||||
uint16_t single_pass_size=0;
|
uint32_t single_pass_size=0;
|
||||||
const esp_partition_t *ota_partition=NULL;
|
const esp_partition_t *ota_partition=NULL;
|
||||||
const esp_partition_t *ota_data_partition=NULL;
|
const esp_partition_t *ota_data_partition=NULL;
|
||||||
esp_err_t err=ESP_OK;
|
esp_err_t err=ESP_OK;
|
||||||
@@ -221,7 +219,7 @@ esp_err_t _erase_last_boot_app_partition(void)
|
|||||||
else {
|
else {
|
||||||
ota_partition = (esp_partition_t *) esp_partition_get(it);
|
ota_partition = (esp_partition_t *) esp_partition_get(it);
|
||||||
if(ota_partition != NULL){
|
if(ota_partition != NULL){
|
||||||
ESP_LOGI(TAG, "Found OTA partition.");
|
ESP_LOGI(TAG, "Found OTA partition: %s.",ota_partition->label);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ESP_LOGE(TAG,"OTA partition not found! Unable update application.");
|
ESP_LOGE(TAG,"OTA partition not found! Unable update application.");
|
||||||
@@ -248,19 +246,31 @@ esp_err_t _erase_last_boot_app_partition(void)
|
|||||||
if(ota_data_partition==NULL || ota_partition==NULL){
|
if(ota_data_partition==NULL || ota_partition==NULL){
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
}
|
}
|
||||||
ESP_LOGI(TAG,"Erasing flash ");
|
|
||||||
num_passes=ota_partition->size/OTA_FLASH_ERASE_BLOCK;
|
|
||||||
single_pass_size= ota_partition->size/num_passes;
|
|
||||||
|
|
||||||
remain_size=ota_partition->size-(num_passes*OTA_FLASH_ERASE_BLOCK);
|
|
||||||
|
|
||||||
|
char * ota_erase_size=config_alloc_get(NVS_TYPE_STR, "ota_erase_blk");
|
||||||
|
if(ota_erase_size!=NULL) {
|
||||||
|
single_pass_size = atol(ota_erase_size);
|
||||||
|
ESP_LOGD(TAG,"OTA Erase block size is %d (from string: %s)",single_pass_size, ota_erase_size );
|
||||||
|
free(ota_erase_size);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ESP_LOGW(TAG,"OTA Erase block config not found");
|
||||||
|
single_pass_size = OTA_FLASH_ERASE_BLOCK;
|
||||||
|
}
|
||||||
|
ESP_LOGI(TAG,"Erasing flash partition of size %u", ota_partition->size);
|
||||||
|
num_passes=ota_partition->size/single_pass_size;
|
||||||
|
remain_size=ota_partition->size-(num_passes*single_pass_size);
|
||||||
|
ESP_LOGD(TAG,"Erasing in %d passes with blocks of %d bytes, ", num_passes,single_pass_size);
|
||||||
for(uint16_t i=0;i<num_passes;i++){
|
for(uint16_t i=0;i<num_passes;i++){
|
||||||
err=esp_partition_erase_range(ota_partition, i*single_pass_size, single_pass_size);
|
|
||||||
if(err!=ESP_OK) return err;
|
|
||||||
ESP_LOGD(TAG,"Erasing flash (%u%%)",i/num_passes);
|
ESP_LOGD(TAG,"Erasing flash (%u%%)",i/num_passes);
|
||||||
ESP_LOGD(TAG,"Pass %d of %d, with chunks of %d bytes, from %d to %d", i+1, num_passes,single_pass_size,i*single_pass_size,i*single_pass_size+single_pass_size);
|
ESP_LOGD(TAG,"Pass %d of %d, with chunks of %d bytes, from %d to %d", i+1, num_passes,single_pass_size,i*single_pass_size,i*single_pass_size+single_pass_size);
|
||||||
triggerStatusJsonRefresh(i%2==0?true:false,"Erasing flash (%u/%u)",i,num_passes);
|
err=esp_partition_erase_range(ota_partition, i*single_pass_size, single_pass_size);
|
||||||
taskYIELD();
|
if(err!=ESP_OK) return err;
|
||||||
|
// triggerStatusJsonRefresh(i%10==0?true:false,"Erasing flash (%u/%u)",i,num_passes);
|
||||||
|
if(i%10) {
|
||||||
|
triggerStatusJsonRefresh(false,"Erasing flash (%u/%u)",i,num_passes);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if(remain_size>0){
|
if(remain_size>0){
|
||||||
err=esp_partition_erase_range(ota_partition, ota_partition->size-remain_size, remain_size);
|
err=esp_partition_erase_range(ota_partition, ota_partition->size-remain_size, remain_size);
|
||||||
@@ -322,6 +332,7 @@ void ota_task(void *pvParameter)
|
|||||||
|
|
||||||
esp_err_t process_recovery_ota(const char * bin_url){
|
esp_err_t process_recovery_ota(const char * bin_url){
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
uint16_t stack_size, task_priority;
|
||||||
if(ota_status.bOTAThreadStarted){
|
if(ota_status.bOTAThreadStarted){
|
||||||
ESP_LOGE(TAG,"OTA Already started. ");
|
ESP_LOGE(TAG,"OTA Already started. ");
|
||||||
return ESP_FAIL;
|
return ESP_FAIL;
|
||||||
@@ -340,7 +351,28 @@ esp_err_t process_recovery_ota(const char * bin_url){
|
|||||||
#define OTA_CORE 1
|
#define OTA_CORE 1
|
||||||
#endif
|
#endif
|
||||||
ESP_LOGI(TAG, "Starting ota on core %u for : %s", OTA_CORE,urlPtr);
|
ESP_LOGI(TAG, "Starting ota on core %u for : %s", OTA_CORE,urlPtr);
|
||||||
ret=xTaskCreatePinnedToCore(&ota_task, "ota_task", 1024*20, (void *)urlPtr, ESP_TASK_MAIN_PRIO+1, NULL, OTA_CORE);
|
char * num_buffer=config_alloc_get(NVS_TYPE_STR, "ota_stack");
|
||||||
|
if(num_buffer!=NULL) {
|
||||||
|
stack_size= atol(num_buffer);
|
||||||
|
free(num_buffer);
|
||||||
|
num_buffer=NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ESP_LOGW(TAG,"OTA stack size config not found");
|
||||||
|
stack_size = OTA_STACK_SIZE;
|
||||||
|
}
|
||||||
|
num_buffer=config_alloc_get(NVS_TYPE_STR, "ota_prio");
|
||||||
|
if(num_buffer!=NULL) {
|
||||||
|
task_priority= atol(num_buffer);
|
||||||
|
free(num_buffer);
|
||||||
|
num_buffer=NULL;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
ESP_LOGW(TAG,"OTA task priority not found");
|
||||||
|
task_priority= OTA_TASK_PRIOTITY;
|
||||||
|
}
|
||||||
|
ESP_LOGD(TAG,"OTA task stack size %d, priority %d (%d %s ESP_TASK_MAIN_PRIO)",stack_size , task_priority, abs(task_priority-ESP_TASK_MAIN_PRIO), task_priority-ESP_TASK_MAIN_PRIO>0?"above":"below");
|
||||||
|
ret=xTaskCreatePinnedToCore(&ota_task, "ota_task", stack_size , (void *)urlPtr, task_priority, NULL, OTA_CORE);
|
||||||
//ret=xTaskCreate(&ota_task, "ota_task", 1024*20, (void *)urlPtr, ESP_TASK_MAIN_PRIO+2, NULL);
|
//ret=xTaskCreate(&ota_task, "ota_task", 1024*20, (void *)urlPtr, ESP_TASK_MAIN_PRIO+2, NULL);
|
||||||
if (ret != pdPASS) {
|
if (ret != pdPASS) {
|
||||||
ESP_LOGI(TAG, "create thread %s failed", "ota_task");
|
ESP_LOGI(TAG, "create thread %s failed", "ota_task");
|
||||||
|
|||||||
@@ -12,7 +12,10 @@
|
|||||||
#else
|
#else
|
||||||
#define CODE_RAM_LOCATION
|
#define CODE_RAM_LOCATION
|
||||||
#endif
|
#endif
|
||||||
|
// ERASE BLOCK needs to be a multiple of wear leveling's sector size
|
||||||
|
#define OTA_FLASH_ERASE_BLOCK (uint32_t)512000
|
||||||
|
#define OTA_STACK_SIZE 5120
|
||||||
|
#define OTA_TASK_PRIOTITY 6
|
||||||
esp_err_t start_ota(const char * bin_url, bool bFromAppMain);
|
esp_err_t start_ota(const char * bin_url, bool bFromAppMain);
|
||||||
const char * ota_get_status();
|
const char * ota_get_status();
|
||||||
uint8_t ota_get_pct_complete();
|
uint8_t ota_get_pct_complete();
|
||||||
|
|||||||
@@ -51,11 +51,11 @@ static const char TAG[] = "http_server";
|
|||||||
/* @brief task handle for the http server */
|
/* @brief task handle for the http server */
|
||||||
static TaskHandle_t task_http_server = NULL;
|
static TaskHandle_t task_http_server = NULL;
|
||||||
static StaticTask_t task_http_buffer;
|
static StaticTask_t task_http_buffer;
|
||||||
#if RECOVERY_APPLICATION
|
//#if RECOVERY_APPLICATION
|
||||||
static StackType_t task_http_stack[HTTP_STACK_SIZE];
|
//static StackType_t task_http_stack[HTTP_STACK_SIZE];
|
||||||
#else
|
//#else
|
||||||
static StackType_t EXT_RAM_ATTR task_http_stack[HTTP_STACK_SIZE];
|
static StackType_t EXT_RAM_ATTR task_http_stack[HTTP_STACK_SIZE];
|
||||||
#endif
|
//#endif
|
||||||
SemaphoreHandle_t http_server_config_mutex = NULL;
|
SemaphoreHandle_t http_server_config_mutex = NULL;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -351,7 +351,7 @@ void http_server_netconn_serve(struct netconn *conn) {
|
|||||||
ESP_LOGE(TAG, "Unable to get host name. Error: %s",esp_err_to_name(err));
|
ESP_LOGE(TAG, "Unable to get host name. Error: %s",esp_err_to_name(err));
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
ESP_LOGI(TAG,"System host name %s, http requested host: %s. They %s",host_name, host,strcasestr(host,host_name)?"match":"don't match" );
|
ESP_LOGI(TAG,"System host name %s, http requested host: %s.",host_name, host);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* determine if Host is from the STA IP address */
|
/* determine if Host is from the STA IP address */
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
//#define LOG_LOCAL_LEVEL ESP_LOG_VERBOSE
|
#define LOG_LOCAL_LEVEL ESP_LOG_DEBUG
|
||||||
#include "platform_esp32.h"
|
#include "platform_esp32.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@@ -192,6 +192,20 @@ void register_default_nvs(){
|
|||||||
config_set_default(NVS_TYPE_STR, "a2dp_dev_name", CONFIG_A2DP_DEV_NAME, 0);
|
config_set_default(NVS_TYPE_STR, "a2dp_dev_name", CONFIG_A2DP_DEV_NAME, 0);
|
||||||
ESP_LOGD(TAG,"Registering default value for key %s, value %s", "bypass_wm", "0");
|
ESP_LOGD(TAG,"Registering default value for key %s, value %s", "bypass_wm", "0");
|
||||||
config_set_default(NVS_TYPE_STR, "bypass_wm", "0", 0);
|
config_set_default(NVS_TYPE_STR, "bypass_wm", "0", 0);
|
||||||
|
|
||||||
|
char number_buffer[101] = {};
|
||||||
|
snprintf(number_buffer,sizeof(number_buffer)-1,"%u",OTA_FLASH_ERASE_BLOCK);
|
||||||
|
ESP_LOGD(TAG,"Registering default value for key %s, value %s", "ota_erase_blk", number_buffer);
|
||||||
|
config_set_default(NVS_TYPE_STR, "ota_erase_blk", number_buffer, 0);
|
||||||
|
|
||||||
|
snprintf(number_buffer,sizeof(number_buffer)-1,"%u",OTA_STACK_SIZE);
|
||||||
|
ESP_LOGD(TAG,"Registering default value for key %s, value %s", "ota_stack", number_buffer);
|
||||||
|
config_set_default(NVS_TYPE_STR, "ota_stack", number_buffer, 0);
|
||||||
|
|
||||||
|
snprintf(number_buffer,sizeof(number_buffer)-1,"%d",OTA_TASK_PRIOTITY);
|
||||||
|
ESP_LOGD(TAG,"Registering default value for key %s, value %s", "ota_prio", number_buffer);
|
||||||
|
config_set_default(NVS_TYPE_STR, "ota_prio", number_buffer, 0);
|
||||||
|
|
||||||
ESP_LOGD(TAG,"Registering default value for key %s, value %s", "enable_bt_sink", STR(CONFIG_BT_SINK));
|
ESP_LOGD(TAG,"Registering default value for key %s, value %s", "enable_bt_sink", STR(CONFIG_BT_SINK));
|
||||||
char * flag = config_alloc_get_default(NVS_TYPE_STR, "enable_bt_sink", STR(CONFIG_BT_SINK), 0);
|
char * flag = config_alloc_get_default(NVS_TYPE_STR, "enable_bt_sink", STR(CONFIG_BT_SINK), 0);
|
||||||
if(flag !=NULL){
|
if(flag !=NULL){
|
||||||
|
|||||||
Reference in New Issue
Block a user