[FL-2468] Reboot to update with RPC (#1122)

* Added update boot mode for RPC
* Fixed FLIPPER_SYSTEM_APPS_COUNT & updater app arg parsing
* Bumped RPC version
* Moved boot mode
This commit is contained in:
hedger
2022-04-15 19:47:57 +03:00
committed by GitHub
parent c209ec56fc
commit 827e30aa5a
6 changed files with 17 additions and 9 deletions

View File

@@ -9,6 +9,7 @@ typedef struct Power Power;
typedef enum {
PowerBootModeNormal,
PowerBootModeDfu,
PowerBootModeUpdateStart,
} PowerBootMode;
typedef enum {

View File

@@ -17,6 +17,8 @@ void power_reboot(PowerBootMode mode) {
furi_hal_rtc_set_boot_mode(FuriHalRtcBootModeNormal);
} else if(mode == PowerBootModeDfu) {
furi_hal_rtc_set_boot_mode(FuriHalRtcBootModeDfu);
} else if(mode == PowerBootModeUpdateStart) {
furi_hal_rtc_set_boot_mode(FuriHalRtcBootModePreUpdate);
}
furi_hal_power_reset();
}

View File

@@ -61,6 +61,8 @@ static void rpc_system_system_reboot_process(const PB_Main* request, void* conte
power_reboot(PowerBootModeNormal);
} else if(mode == PB_System_RebootRequest_RebootMode_DFU) {
power_reboot(PowerBootModeDfu);
} else if(mode == PB_System_RebootRequest_RebootMode_UPDATE) {
power_reboot(PowerBootModeUpdateStart);
} else {
rpc_send_and_release_empty(
session, request->command_id, PB_CommandStatus_ERROR_INVALID_PARAMETERS);
@@ -274,7 +276,7 @@ static void rpc_system_system_update_request_process(const PB_Main* request, voi
furi_assert(session);
bool update_prepare_result =
update_operation_prepare(request->content.system_update_request.update_folder) ==
update_operation_prepare(request->content.system_update_request.update_manifest) ==
UpdatePrepareResultOK;
PB_Main* response = malloc(sizeof(PB_Main));

View File

@@ -80,7 +80,9 @@ Updater* updater_alloc(const char* arg) {
#ifdef FURI_RAM_EXEC
if(true) {
#else
if(!arg) {
FuriHalRtcBootMode boot_mode = furi_hal_rtc_get_boot_mode();
if(!arg && ((boot_mode == FuriHalRtcBootModePreUpdate) ||
(boot_mode == FuriHalRtcBootModePostUpdate))) {
#endif
updater->update_task = update_task_alloc();
update_task_set_progress_cb(updater->update_task, status_update_cb, updater->main_view);