From 6e036557670f69e7371a46137b7d4a3f2f0bd248 Mon Sep 17 00:00:00 2001 From: Ken Van Hoeylandt Date: Thu, 28 Dec 2023 00:42:57 +0100 Subject: [PATCH] simplified open/close record with transaction --- components/furi/src/record.h | 13 +++++++++++++ main/src/hello_world/hello_world.c | 25 ++++++++----------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/components/furi/src/record.h b/components/furi/src/record.h index 4819123e..55ed2992 100644 --- a/components/furi/src/record.h +++ b/components/furi/src/record.h @@ -12,6 +12,19 @@ extern "C" { #endif +/** + * Opens a record, calls the code and then closes the record. + * @param record_name const char* that contains the name of the record + * @param variable_name the name of the variable that is used in the `code` + * @param code the code to execute: consider putting it between {} + */ +#define FURI_RECORD_TRANSACTION(record_name, variable_name, code) \ + { \ + NbGui* (variable_name) = (NbGui*)furi_record_open(record_name); \ + code \ + furi_record_close(record_name); \ + } + /** Initialize record storage For internal use only. */ void furi_record_init(); diff --git a/main/src/hello_world/hello_world.c b/main/src/hello_world/hello_world.c index d8a94352..3fd1cd6d 100644 --- a/main/src/hello_world/hello_world.c +++ b/main/src/hello_world/hello_world.c @@ -14,16 +14,11 @@ ViewPort* view_port = NULL; static void prv_on_button_click(lv_event_t _Nonnull* event) { ESP_LOGI(TAG, "button clicked"); - // TODO: make macro for record 'transactions' - NbGui* gui = furi_record_open(RECORD_GUI); - gui_remove_view_port(gui, view_port); - - view_port_free(view_port); - view_port = NULL; - - // Close Gui record - furi_record_close(RECORD_GUI); - gui = NULL; + FURI_RECORD_TRANSACTION(RECORD_GUI, gui, { + gui_remove_view_port(gui, view_port); + view_port_free(view_port); + view_port = NULL; + }); } static void prv_hello_world_lvgl(lv_obj_t* parent, void* context) { @@ -52,13 +47,9 @@ static int32_t prv_hello_world_main(void* param) { view_port = view_port_alloc(); view_port_draw_callback_set(view_port, &prv_hello_world_lvgl, view_port); - // Register view port in GUI - NbGui* gui = furi_record_open(RECORD_GUI); - gui_add_view_port(gui, view_port, GuiLayerFullscreen); - - // Close Gui record - furi_record_close(RECORD_GUI); - gui = NULL; + FURI_RECORD_TRANSACTION(RECORD_GUI, gui, { + gui_add_view_port(gui, view_port, GuiLayerFullscreen); + }) return 0; }