@@ -117,6 +117,39 @@ IRAM_ATTR void esp_panic_putchar_hook(char c)
117
117
logbuf_putc (& panicTrace , c );
118
118
}
119
119
120
+ static bool update_boot_config (const char * part , const char * name , const char * args , uint32_t flags )
121
+ {
122
+ if (app .initialized )
123
+ {
124
+ rg_settings_set_string (NS_BOOT , SETTING_BOOT_NAME , name );
125
+ rg_settings_set_string (NS_BOOT , SETTING_BOOT_ARGS , args );
126
+ rg_settings_set_number (NS_BOOT , SETTING_BOOT_FLAGS , flags );
127
+ rg_settings_commit ();
128
+ }
129
+ else
130
+ {
131
+ rg_storage_delete (RG_BASE_PATH_CONFIG "/boot.json" );
132
+ }
133
+ #if defined(ESP_PLATFORM )
134
+ // Check if the OTA settings are already correct, and if so do not call esp_ota_set_boot_partition
135
+ // This is simply to avoid an unecessary flash write...
136
+ const esp_partition_t * current = esp_ota_get_boot_partition ();
137
+ if (current && part && strncmp (current -> label , part , 16 ) == 0 )
138
+ {
139
+ RG_LOGI ("Boot partition already set to desired app!" );
140
+ return true;
141
+ }
142
+ esp_err_t err = esp_ota_set_boot_partition (esp_partition_find_first (
143
+ ESP_PARTITION_TYPE_APP , ESP_PARTITION_SUBTYPE_ANY , part ));
144
+ if (err != ESP_OK )
145
+ {
146
+ RG_LOGE ("esp_ota_set_boot_partition returned 0x%02X!" , err );
147
+ return false;
148
+ }
149
+ #endif
150
+ return true;
151
+ }
152
+
120
153
static void update_memory_statistics (void )
121
154
{
122
155
#ifdef ESP_PLATFORM
@@ -469,14 +502,11 @@ rg_app_t *rg_system_init(int sampleRate, const rg_handlers_t *handlers, const rg
469
502
profile -> lock = rg_mutex_create ();
470
503
#endif
471
504
472
- #ifdef ESP_PLATFORM
473
505
if (app .lowMemoryMode )
474
506
rg_gui_alert ("External memory not detected" , "Boot will continue but it will surely crash..." );
475
507
476
508
if (app .bootFlags & RG_BOOT_ONCE )
477
- esp_ota_set_boot_partition (esp_partition_find_first (
478
- ESP_PARTITION_TYPE_APP , ESP_PARTITION_SUBTYPE_ANY , RG_APP_LAUNCHER ));
479
- #endif
509
+ update_boot_config (RG_APP_LAUNCHER , NULL , NULL , 0 );
480
510
481
511
rg_task_create ("rg_sysmon" , & system_monitor_task , NULL , 3 * 1024 , RG_TASK_PRIORITY_5 , -1 );
482
512
app .initialized = true;
@@ -862,32 +892,10 @@ void rg_system_switch_app(const char *partition, const char *name, const char *a
862
892
{
863
893
RG_LOGI ("Switching to app %s (%s)" , partition ?: "-" , name ?: "-" );
864
894
865
- if (app .initialized )
866
- {
867
- rg_settings_set_string (NS_BOOT , SETTING_BOOT_NAME , name );
868
- rg_settings_set_string (NS_BOOT , SETTING_BOOT_ARGS , args );
869
- rg_settings_set_number (NS_BOOT , SETTING_BOOT_FLAGS , flags );
870
- rg_settings_commit ();
871
- }
872
- #if defined(ESP_PLATFORM )
873
- // Check if the OTA settings are already correct, and if so do not call esp_ota_set_boot_partition
874
- // This is simply to avoid an unecessary flash write...
875
- const esp_partition_t * current = esp_ota_get_boot_partition ();
876
- if (current && partition && strncmp (current -> label , partition , 16 ) == 0 )
877
- {
878
- RG_LOGI ("Boot partition already set to desired app!" );
895
+ if (update_boot_config (partition , name , args , flags ))
879
896
rg_system_restart ();
880
- }
881
- esp_err_t err = esp_ota_set_boot_partition (esp_partition_find_first (
882
- ESP_PARTITION_TYPE_APP , ESP_PARTITION_SUBTYPE_ANY , partition ));
883
- if (err != ESP_OK )
884
- {
885
- RG_LOGE ("esp_ota_set_boot_partition returned 0x%02X!" , err );
886
- RG_PANIC ("Unable to set boot app!" );
887
- }
888
- rg_system_restart ();
889
- #endif
890
- RG_PANIC ("Switch not implemented!" );
897
+
898
+ RG_PANIC ("Failed to switch app!" );
891
899
}
892
900
893
901
bool rg_system_have_app (const char * app )
0 commit comments