diff --git a/applications/rpc/rpc_system.c b/applications/rpc/rpc_system.c index 92a770ad..2ce23129 100644 --- a/applications/rpc/rpc_system.c +++ b/applications/rpc/rpc_system.c @@ -3,6 +3,7 @@ #include "status.pb.h" #include +#include #include void rpc_system_system_ping_process(const PB_Main* msg_request, void* context) { @@ -98,6 +99,15 @@ void rpc_system_system_device_info_process(const PB_Main* request, void* context free(response); } +void rpc_system_system_factory_reset_process(const PB_Main* request, void* context) { + furi_assert(request); + furi_assert(request->which_content == PB_Main_system_factory_reset_request_tag); + furi_assert(context); + + furi_hal_bootloader_set_flags(FuriHalBootloaderFlagFactoryReset); + power_reboot(PowerBootModeNormal); +} + void* rpc_system_system_alloc(Rpc* rpc) { RpcHandler rpc_handler = { .message_handler = NULL, @@ -114,5 +124,8 @@ void* rpc_system_system_alloc(Rpc* rpc) { rpc_handler.message_handler = rpc_system_system_device_info_process; rpc_add_handler(rpc, PB_Main_system_device_info_request_tag, &rpc_handler); + rpc_handler.message_handler = rpc_system_system_factory_reset_process; + rpc_add_handler(rpc, PB_Main_system_factory_reset_request_tag, &rpc_handler); + return NULL; } diff --git a/assets/compiled/flipper.pb.h b/assets/compiled/flipper.pb.h index 7599e3c5..5ce575fd 100644 --- a/assets/compiled/flipper.pb.h +++ b/assets/compiled/flipper.pb.h @@ -91,6 +91,7 @@ typedef struct _PB_Main { PB_System_RebootRequest system_reboot_request; PB_System_DeviceInfoRequest system_device_info_request; PB_System_DeviceInfoResponse system_device_info_response; + PB_System_FactoryResetRequest system_factory_reset_request; } content; } PB_Main; @@ -147,6 +148,7 @@ extern "C" { #define PB_Main_system_reboot_request_tag 31 #define PB_Main_system_device_info_request_tag 32 #define PB_Main_system_device_info_response_tag 33 +#define PB_Main_system_factory_reset_request_tag 34 /* Struct field encoding specification for nanopb */ #define PB_Empty_FIELDLIST(X, a) \ @@ -192,7 +194,8 @@ X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_info_response,content.storag X(a, STATIC, ONEOF, MSG_W_CB, (content,storage_rename_request,content.storage_rename_request), 30) \ X(a, STATIC, ONEOF, MSG_W_CB, (content,system_reboot_request,content.system_reboot_request), 31) \ X(a, STATIC, ONEOF, MSG_W_CB, (content,system_device_info_request,content.system_device_info_request), 32) \ -X(a, STATIC, ONEOF, MSG_W_CB, (content,system_device_info_response,content.system_device_info_response), 33) +X(a, STATIC, ONEOF, MSG_W_CB, (content,system_device_info_response,content.system_device_info_response), 33) \ +X(a, STATIC, ONEOF, MSG_W_CB, (content,system_factory_reset_request,content.system_factory_reset_request), 34) #define PB_Main_CALLBACK NULL #define PB_Main_DEFAULT NULL #define PB_Main_content_empty_MSGTYPE PB_Empty @@ -225,6 +228,7 @@ X(a, STATIC, ONEOF, MSG_W_CB, (content,system_device_info_response,content. #define PB_Main_content_system_reboot_request_MSGTYPE PB_System_RebootRequest #define PB_Main_content_system_device_info_request_MSGTYPE PB_System_DeviceInfoRequest #define PB_Main_content_system_device_info_response_MSGTYPE PB_System_DeviceInfoResponse +#define PB_Main_content_system_factory_reset_request_MSGTYPE PB_System_FactoryResetRequest extern const pb_msgdesc_t PB_Empty_msg; extern const pb_msgdesc_t PB_StopSession_msg; diff --git a/assets/compiled/system.pb.c b/assets/compiled/system.pb.c index 128e1c08..dd1bc623 100644 --- a/assets/compiled/system.pb.c +++ b/assets/compiled/system.pb.c @@ -21,5 +21,8 @@ PB_BIND(PB_System_DeviceInfoRequest, PB_System_DeviceInfoRequest, AUTO) PB_BIND(PB_System_DeviceInfoResponse, PB_System_DeviceInfoResponse, AUTO) +PB_BIND(PB_System_FactoryResetRequest, PB_System_FactoryResetRequest, AUTO) + + diff --git a/assets/compiled/system.pb.h b/assets/compiled/system.pb.h index 84120fc9..dbb23ff7 100644 --- a/assets/compiled/system.pb.h +++ b/assets/compiled/system.pb.h @@ -25,6 +25,10 @@ typedef struct _PB_System_DeviceInfoResponse { char *value; } PB_System_DeviceInfoResponse; +typedef struct _PB_System_FactoryResetRequest { + char dummy_field; +} PB_System_FactoryResetRequest; + typedef struct _PB_System_PingRequest { pb_bytes_array_t *data; } PB_System_PingRequest; @@ -54,11 +58,13 @@ extern "C" { #define PB_System_RebootRequest_init_default {_PB_System_RebootRequest_RebootMode_MIN} #define PB_System_DeviceInfoRequest_init_default {0} #define PB_System_DeviceInfoResponse_init_default {NULL, NULL} +#define PB_System_FactoryResetRequest_init_default {0} #define PB_System_PingRequest_init_zero {NULL} #define PB_System_PingResponse_init_zero {NULL} #define PB_System_RebootRequest_init_zero {_PB_System_RebootRequest_RebootMode_MIN} #define PB_System_DeviceInfoRequest_init_zero {0} #define PB_System_DeviceInfoResponse_init_zero {NULL, NULL} +#define PB_System_FactoryResetRequest_init_zero {0} /* Field tags (for use in manual encoding/decoding) */ #define PB_System_DeviceInfoResponse_key_tag 1 @@ -94,11 +100,17 @@ X(a, POINTER, SINGULAR, STRING, value, 2) #define PB_System_DeviceInfoResponse_CALLBACK NULL #define PB_System_DeviceInfoResponse_DEFAULT NULL +#define PB_System_FactoryResetRequest_FIELDLIST(X, a) \ + +#define PB_System_FactoryResetRequest_CALLBACK NULL +#define PB_System_FactoryResetRequest_DEFAULT NULL + extern const pb_msgdesc_t PB_System_PingRequest_msg; extern const pb_msgdesc_t PB_System_PingResponse_msg; extern const pb_msgdesc_t PB_System_RebootRequest_msg; extern const pb_msgdesc_t PB_System_DeviceInfoRequest_msg; extern const pb_msgdesc_t PB_System_DeviceInfoResponse_msg; +extern const pb_msgdesc_t PB_System_FactoryResetRequest_msg; /* Defines for backwards compatibility with code written before nanopb-0.4.0 */ #define PB_System_PingRequest_fields &PB_System_PingRequest_msg @@ -106,12 +118,14 @@ extern const pb_msgdesc_t PB_System_DeviceInfoResponse_msg; #define PB_System_RebootRequest_fields &PB_System_RebootRequest_msg #define PB_System_DeviceInfoRequest_fields &PB_System_DeviceInfoRequest_msg #define PB_System_DeviceInfoResponse_fields &PB_System_DeviceInfoResponse_msg +#define PB_System_FactoryResetRequest_fields &PB_System_FactoryResetRequest_msg /* Maximum encoded size of messages (where known) */ /* PB_System_PingRequest_size depends on runtime parameters */ /* PB_System_PingResponse_size depends on runtime parameters */ /* PB_System_DeviceInfoResponse_size depends on runtime parameters */ #define PB_System_DeviceInfoRequest_size 0 +#define PB_System_FactoryResetRequest_size 0 #define PB_System_RebootRequest_size 2 #ifdef __cplusplus diff --git a/assets/protobuf b/assets/protobuf index 5761a237..f6fdc10e 160000 --- a/assets/protobuf +++ b/assets/protobuf @@ -1 +1 @@ -Subproject commit 5761a23786b4729303bfa49142effea51870e549 +Subproject commit f6fdc10e6d111b289188e88ac1d432698bb739cf