From a47443ed1ceff9aab6d8183f81b7b7179cd5ae73 Mon Sep 17 00:00:00 2001 From: Astra Date: Tue, 26 Nov 2024 19:26:58 +0900 Subject: [PATCH 1/6] Snooze, timeouts, and dismissing from the locked state --- applications/services/desktop/desktop.c | 2 +- .../desktop/scenes/desktop_scene_locked.c | 2 +- applications/services/gui/gui.c | 28 ++++++++++++--- applications/services/gui/gui.h | 18 ++++++++-- applications/services/gui/gui_i.h | 2 +- .../clock_settings/clock_settings_alarm.c | 34 +++++++++++++++++++ targets/f18/api_symbols.csv | 6 ++-- targets/f7/api_symbols.csv | 6 ++-- 8 files changed, 84 insertions(+), 14 deletions(-) diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index 1132760d5..9b7310370 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -417,7 +417,7 @@ void desktop_unlock(Desktop* desktop) { view_port_enabled_set(desktop->lock_icon_viewport, false); Gui* gui = furi_record_open(RECORD_GUI); - gui_set_lockdown(gui, false); + gui_remove_lockdown(gui); furi_record_close(RECORD_GUI); desktop_view_locked_unlock(desktop->locked_view); scene_manager_search_and_switch_to_previous_scene(desktop->scene_manager, DesktopSceneMain); diff --git a/applications/services/desktop/scenes/desktop_scene_locked.c b/applications/services/desktop/scenes/desktop_scene_locked.c index e7eeebca6..8e0c5bfc1 100644 --- a/applications/services/desktop/scenes/desktop_scene_locked.c +++ b/applications/services/desktop/scenes/desktop_scene_locked.c @@ -45,7 +45,7 @@ void desktop_scene_locked_on_enter(void* context) { if(state == DesktopSceneLockedStateFirstEnter) { view_port_enabled_set(desktop->lock_icon_viewport, true); Gui* gui = furi_record_open(RECORD_GUI); - gui_set_lockdown(gui, true); + gui_set_lockdown(gui); furi_record_close(RECORD_GUI); if(desktop_pin_code_is_set()) { diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 24ea57bc0..085507d1d 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -249,7 +249,7 @@ static void gui_redraw(Gui* gui) { canvas_reset(gui->canvas); - if(gui->lockdown) { + if(gui_is_lockdown(gui)) { gui_redraw_desktop(gui); bool need_attention = (gui_view_port_find_enabled(gui->layers[GuiLayerWindow]) != 0 || @@ -299,7 +299,7 @@ static void gui_input(Gui* gui, InputEvent* input_event) { ViewPort* view_port = NULL; - if(gui->lockdown) { + if(gui_is_lockdown(gui)) { view_port = gui_view_port_find_enabled(gui->layers[GuiLayerDesktop]); } else { view_port = gui_view_port_find_enabled(gui->layers[GuiLayerFullscreen]); @@ -484,17 +484,35 @@ size_t gui_get_framebuffer_size(const Gui* gui) { return canvas_get_buffer_size(gui->canvas); } -void gui_set_lockdown(Gui* gui, bool lockdown) { +void gui_set_lockdown(Gui* gui) { furi_check(gui); gui_lock(gui); - gui->lockdown = lockdown; + FURI_LOG_D(TAG, "Releasing lockdown semaphore"); + furi_semaphore_release(gui->unlock); gui_unlock(gui); // Request redraw gui_update(gui); } +void gui_remove_lockdown(Gui* gui) { + furi_check(gui); + FURI_LOG_D(TAG, "Acquiring lockdown semaphore"); + + gui_lock(gui); + if(furi_semaphore_acquire(gui->unlock, 1000) != FuriStatusOk) { + furi_crash("Could not acquire lockdown semaphore"); + } + gui_unlock(gui); +} + +bool gui_is_lockdown(const Gui* gui) { + furi_check(gui); + + return furi_semaphore_get_count(gui->unlock) == 0; +} + Canvas* gui_direct_draw_acquire(Gui* gui) { furi_check(gui); @@ -529,6 +547,8 @@ Gui* gui_alloc(void) { gui->thread_id = furi_thread_get_current_id(); // Allocate mutex gui->mutex = furi_mutex_alloc(FuriMutexTypeNormal); + // Semaphore for the lockdown state + gui->unlock = furi_semaphore_alloc(2, 1); // Layers for(size_t i = 0; i < GuiLayerMAX; i++) { diff --git a/applications/services/gui/gui.h b/applications/services/gui/gui.h index 1b5987eda..1712d5eca 100644 --- a/applications/services/gui/gui.h +++ b/applications/services/gui/gui.h @@ -100,15 +100,27 @@ void gui_remove_framebuffer_callback(Gui* gui, GuiCanvasCommitCallback callback, */ size_t gui_get_framebuffer_size(const Gui* gui); -/** Set lockdown mode +/** Enable lockdown mode * * When lockdown mode is enabled, only GuiLayerDesktop is shown. * This feature prevents services from showing sensitive information when flipper is locked. * * @param gui Gui instance - * @param lockdown bool, true if enabled */ -void gui_set_lockdown(Gui* gui, bool lockdown); +void gui_set_lockdown(Gui* gui); + +/** Disable lockdown mode + * + * @param gui Gui instance + */ +void gui_remove_lockdown(Gui* gui); + +/** Check if Gui is in lockdown mode + * + * @param gui Gui instance + * @return bool true if Gui is in lockdown mode + */ +bool gui_is_lockdown(const Gui* gui); /** Acquire Direct Draw lock and get Canvas instance * diff --git a/applications/services/gui/gui_i.h b/applications/services/gui/gui_i.h index 8bd3215f9..5d5f11f93 100644 --- a/applications/services/gui/gui_i.h +++ b/applications/services/gui/gui_i.h @@ -48,9 +48,9 @@ struct Gui { // Thread and lock FuriThreadId thread_id; FuriMutex* mutex; + FuriSemaphore* unlock; // Layers and Canvas - bool lockdown; bool direct_draw; ViewPortArray_t layers[GuiLayerMAX]; Canvas* canvas; diff --git a/applications/settings/clock_settings/clock_settings_alarm.c b/applications/settings/clock_settings/clock_settings_alarm.c index 7b096ef70..acbeb0736 100644 --- a/applications/settings/clock_settings/clock_settings_alarm.c +++ b/applications/settings/clock_settings/clock_settings_alarm.c @@ -11,8 +11,12 @@ #define TAG "ClockSettingsAlarm" +#define SNOOZE_MINUTES 9 +#define TIMEOUT_MINUTES 10 + typedef struct { DateTime now; + DateTime alarm_start; IconAnimation* icon; } ClockSettingsAlramModel; @@ -47,12 +51,15 @@ static void clock_settings_alarm_draw_callback(Canvas* canvas, void* ctx) { ClockSettingsAlramModel* model = ctx; char buffer[64] = {}; + // Clock icon canvas_draw_icon_animation(canvas, 5, 6, model->icon); + // Time canvas_set_font(canvas, FontBigNumbers); snprintf(buffer, sizeof(buffer), "%02u:%02u", model->now.hour, model->now.minute); canvas_draw_str(canvas, 58, 32, buffer); + // Date canvas_set_font(canvas, FontPrimary); snprintf( buffer, @@ -62,6 +69,11 @@ static void clock_settings_alarm_draw_callback(Canvas* canvas, void* ctx) { model->now.month, model->now.year); canvas_draw_str(canvas, 60, 44, buffer); + + // Press Back to snooze + canvas_set_font(canvas, FontPrimary); + canvas_draw_icon_ex(canvas, 5, 50, &I_back_btn_10x8, 0); + canvas_draw_str_aligned(canvas, 20, 50, AlignLeft, AlignTop, "Snooze"); } static void clock_settings_alarm_input_callback(InputEvent* input_event, void* ctx) { @@ -95,6 +107,7 @@ int32_t clock_settings_alarm(void* p) { // Register view port in GUI Gui* gui = furi_record_open(RECORD_GUI); + gui_remove_lockdown(gui); gui_add_view_port(gui, view_port, GuiLayerFullscreen); NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION); @@ -110,12 +123,32 @@ int32_t clock_settings_alarm(void* p) { while(running) { if(furi_message_queue_get(event_queue, &event, 2000) == FuriStatusOk) { if(event.type == InputTypePress) { + // Snooze + if(event.key == InputKeyBack) { + furi_hal_rtc_get_datetime(&model.now); + model.now.minute += SNOOZE_MINUTES; + model.now.hour += model.now.minute / 60; + model.now.minute %= 60; + model.now.hour %= 24; + + furi_hal_rtc_set_alarm(NULL, false); + furi_hal_rtc_set_alarm(&model.now, true); + } running = false; } } else { notification_message(notification, &sequence_alarm); furi_hal_rtc_get_datetime(&model.now); view_port_update(view_port); + + // Stop the alarm if it has been ringing for more than TIMEOUT_MINUTES + furi_hal_rtc_get_alarm(&model.alarm_start); + if((model.now.hour == model.alarm_start.hour && + model.now.minute >= model.alarm_start.minute + TIMEOUT_MINUTES) || + (model.now.hour == (model.alarm_start.hour + 1) % 24 && + model.now.minute < (model.alarm_start.minute + TIMEOUT_MINUTES) % 60)) { + running = false; + } } } @@ -125,6 +158,7 @@ int32_t clock_settings_alarm(void* p) { furi_record_close(RECORD_NOTIFICATION); view_port_enabled_set(view_port, false); + gui_set_lockdown(gui); gui_remove_view_port(gui, view_port); view_port_free(view_port); furi_message_queue_free(event_queue); diff --git a/targets/f18/api_symbols.csv b/targets/f18/api_symbols.csv index b5d51a0dd..6b8ad287e 100644 --- a/targets/f18/api_symbols.csv +++ b/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,78.1,, +Version,v,79.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, Header,+,applications/services/cli/cli.h,, @@ -1724,9 +1724,11 @@ Function,+,gui_add_view_port,void,"Gui*, ViewPort*, GuiLayer" Function,+,gui_direct_draw_acquire,Canvas*,Gui* Function,+,gui_direct_draw_release,void,Gui* Function,+,gui_get_framebuffer_size,size_t,const Gui* +Function,+,gui_is_lockdown,_Bool,const Gui* Function,+,gui_remove_framebuffer_callback,void,"Gui*, GuiCanvasCommitCallback, void*" +Function,+,gui_remove_lockdown,void,Gui* Function,+,gui_remove_view_port,void,"Gui*, ViewPort*" -Function,+,gui_set_lockdown,void,"Gui*, _Bool" +Function,+,gui_set_lockdown,void,Gui* Function,-,gui_view_port_send_to_back,void,"Gui*, ViewPort*" Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,-,hci_send_req,int,"hci_request*, uint8_t" diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index ee81f76a9..05e09bef6 100644 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,78.1,, +Version,+,79.0,, Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, @@ -1943,9 +1943,11 @@ Function,+,gui_add_view_port,void,"Gui*, ViewPort*, GuiLayer" Function,+,gui_direct_draw_acquire,Canvas*,Gui* Function,+,gui_direct_draw_release,void,Gui* Function,+,gui_get_framebuffer_size,size_t,const Gui* +Function,+,gui_is_lockdown,_Bool,const Gui* Function,+,gui_remove_framebuffer_callback,void,"Gui*, GuiCanvasCommitCallback, void*" +Function,+,gui_remove_lockdown,void,Gui* Function,+,gui_remove_view_port,void,"Gui*, ViewPort*" -Function,+,gui_set_lockdown,void,"Gui*, _Bool" +Function,+,gui_set_lockdown,void,Gui* Function,-,gui_view_port_send_to_back,void,"Gui*, ViewPort*" Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,-,hci_send_req,int,"hci_request*, uint8_t" From 905f9498aae9d18bab1c35d8b0a29850d89e82c2 Mon Sep 17 00:00:00 2001 From: Astra Date: Tue, 26 Nov 2024 19:31:37 +0900 Subject: [PATCH 2/6] F18 api --- targets/f18/api_symbols.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/f18/api_symbols.csv b/targets/f18/api_symbols.csv index 6b8ad287e..36ce8eadf 100644 --- a/targets/f18/api_symbols.csv +++ b/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,v,79.0,, +Version,+,79.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, Header,+,applications/services/cli/cli.h,, From 93d2120e5519442d2ca167ce5f7422db1b9c0a57 Mon Sep 17 00:00:00 2001 From: Astra Date: Tue, 24 Dec 2024 19:26:31 +0900 Subject: [PATCH 3/6] Fix snooze and next day alarm behavior --- .../clock_settings/clock_settings_alarm.c | 34 ++++++++++++++----- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/applications/settings/clock_settings/clock_settings_alarm.c b/applications/settings/clock_settings/clock_settings_alarm.c index acbeb0736..1327fb4f7 100644 --- a/applications/settings/clock_settings/clock_settings_alarm.c +++ b/applications/settings/clock_settings/clock_settings_alarm.c @@ -16,8 +16,11 @@ typedef struct { DateTime now; + DateTime snooze_until; DateTime alarm_start; IconAnimation* icon; + + bool is_snooze; } ClockSettingsAlramModel; const NotificationSequence sequence_alarm = { @@ -93,8 +96,10 @@ int32_t clock_settings_alarm(void* p) { // View Model ClockSettingsAlramModel model; + model.is_snooze = false; furi_hal_rtc_get_datetime(&model.now); + furi_hal_rtc_get_alarm(&model.alarm_start); model.icon = icon_animation_alloc(&A_Alarm_47x39); // Alloc message queue @@ -125,16 +130,28 @@ int32_t clock_settings_alarm(void* p) { if(event.type == InputTypePress) { // Snooze if(event.key == InputKeyBack) { - furi_hal_rtc_get_datetime(&model.now); - model.now.minute += SNOOZE_MINUTES; - model.now.hour += model.now.minute / 60; - model.now.minute %= 60; - model.now.hour %= 24; + furi_hal_rtc_get_datetime(&model.snooze_until); + model.snooze_until.minute += SNOOZE_MINUTES; + model.snooze_until.hour += model.snooze_until.minute / 60; + model.snooze_until.minute %= 60; + model.snooze_until.hour %= 24; - furi_hal_rtc_set_alarm(NULL, false); - furi_hal_rtc_set_alarm(&model.now, true); + model.is_snooze = true; + model.alarm_start = model.snooze_until; // For correct timeout behavior + view_port_enabled_set(view_port, false); + gui_set_lockdown(gui); + } else { + running = false; } - running = false; + } + } else if(model.is_snooze) { + furi_hal_rtc_get_datetime(&model.now); + if(datetime_datetime_to_timestamp(&model.now) >= + datetime_datetime_to_timestamp(&model.snooze_until)) { + view_port_enabled_set(view_port, true); + gui_remove_lockdown(gui); + + model.is_snooze = false; } } else { notification_message(notification, &sequence_alarm); @@ -142,7 +159,6 @@ int32_t clock_settings_alarm(void* p) { view_port_update(view_port); // Stop the alarm if it has been ringing for more than TIMEOUT_MINUTES - furi_hal_rtc_get_alarm(&model.alarm_start); if((model.now.hour == model.alarm_start.hour && model.now.minute >= model.alarm_start.minute + TIMEOUT_MINUTES) || (model.now.hour == (model.alarm_start.hour + 1) % 24 && From 31365cb170f327e7f26c6b51c8f3052828d701ca Mon Sep 17 00:00:00 2001 From: Astra Date: Wed, 25 Dec 2024 18:38:32 +0900 Subject: [PATCH 4/6] Don't use semaphores for lock state tracking --- applications/services/desktop/desktop.c | 2 +- .../desktop/scenes/desktop_scene_locked.c | 2 +- applications/services/gui/gui.c | 19 ++++++++----------- applications/services/gui/gui.h | 13 +++++++++---- applications/services/gui/gui_i.h | 3 ++- .../clock_settings/clock_settings_alarm.c | 8 ++++---- targets/f7/api_symbols.csv | 8 ++++---- 7 files changed, 29 insertions(+), 26 deletions(-) diff --git a/applications/services/desktop/desktop.c b/applications/services/desktop/desktop.c index 9b7310370..1132760d5 100644 --- a/applications/services/desktop/desktop.c +++ b/applications/services/desktop/desktop.c @@ -417,7 +417,7 @@ void desktop_unlock(Desktop* desktop) { view_port_enabled_set(desktop->lock_icon_viewport, false); Gui* gui = furi_record_open(RECORD_GUI); - gui_remove_lockdown(gui); + gui_set_lockdown(gui, false); furi_record_close(RECORD_GUI); desktop_view_locked_unlock(desktop->locked_view); scene_manager_search_and_switch_to_previous_scene(desktop->scene_manager, DesktopSceneMain); diff --git a/applications/services/desktop/scenes/desktop_scene_locked.c b/applications/services/desktop/scenes/desktop_scene_locked.c index 8e0c5bfc1..e7eeebca6 100644 --- a/applications/services/desktop/scenes/desktop_scene_locked.c +++ b/applications/services/desktop/scenes/desktop_scene_locked.c @@ -45,7 +45,7 @@ void desktop_scene_locked_on_enter(void* context) { if(state == DesktopSceneLockedStateFirstEnter) { view_port_enabled_set(desktop->lock_icon_viewport, true); Gui* gui = furi_record_open(RECORD_GUI); - gui_set_lockdown(gui); + gui_set_lockdown(gui, true); furi_record_close(RECORD_GUI); if(desktop_pin_code_is_set()) { diff --git a/applications/services/gui/gui.c b/applications/services/gui/gui.c index 085507d1d..68a287310 100644 --- a/applications/services/gui/gui.c +++ b/applications/services/gui/gui.c @@ -484,33 +484,32 @@ size_t gui_get_framebuffer_size(const Gui* gui) { return canvas_get_buffer_size(gui->canvas); } -void gui_set_lockdown(Gui* gui) { +void gui_set_lockdown(Gui* gui, bool lockdown) { furi_check(gui); gui_lock(gui); - FURI_LOG_D(TAG, "Releasing lockdown semaphore"); - furi_semaphore_release(gui->unlock); + gui->lockdown = lockdown; gui_unlock(gui); // Request redraw gui_update(gui); } -void gui_remove_lockdown(Gui* gui) { +void gui_set_lockdown_inhibit(Gui* gui, bool inhibit) { furi_check(gui); - FURI_LOG_D(TAG, "Acquiring lockdown semaphore"); gui_lock(gui); - if(furi_semaphore_acquire(gui->unlock, 1000) != FuriStatusOk) { - furi_crash("Could not acquire lockdown semaphore"); - } + gui->lockdown_inhibit = inhibit; gui_unlock(gui); + + // Request redraw + gui_update(gui); } bool gui_is_lockdown(const Gui* gui) { furi_check(gui); - return furi_semaphore_get_count(gui->unlock) == 0; + return gui->lockdown && !gui->lockdown_inhibit; } Canvas* gui_direct_draw_acquire(Gui* gui) { @@ -547,8 +546,6 @@ Gui* gui_alloc(void) { gui->thread_id = furi_thread_get_current_id(); // Allocate mutex gui->mutex = furi_mutex_alloc(FuriMutexTypeNormal); - // Semaphore for the lockdown state - gui->unlock = furi_semaphore_alloc(2, 1); // Layers for(size_t i = 0; i < GuiLayerMAX; i++) { diff --git a/applications/services/gui/gui.h b/applications/services/gui/gui.h index 1712d5eca..db30e2529 100644 --- a/applications/services/gui/gui.h +++ b/applications/services/gui/gui.h @@ -106,14 +106,19 @@ size_t gui_get_framebuffer_size(const Gui* gui); * This feature prevents services from showing sensitive information when flipper is locked. * * @param gui Gui instance + * @param lockdown true to enable lockdown mode */ -void gui_set_lockdown(Gui* gui); +void gui_set_lockdown(Gui* gui, bool lockdown); -/** Disable lockdown mode - * +/** Inhibit lockdown mode + * + * Lockdown mode can be inhibited by calling this function with inhibit set to true. + * This is used to show information even when flipper is locked. + * * @param gui Gui instance + * @param inhibit true to inhibit lockdown mode */ -void gui_remove_lockdown(Gui* gui); +void gui_set_lockdown_inhibit(Gui* gui, bool inhibit); /** Check if Gui is in lockdown mode * diff --git a/applications/services/gui/gui_i.h b/applications/services/gui/gui_i.h index 5d5f11f93..f146ad1fc 100644 --- a/applications/services/gui/gui_i.h +++ b/applications/services/gui/gui_i.h @@ -48,9 +48,10 @@ struct Gui { // Thread and lock FuriThreadId thread_id; FuriMutex* mutex; - FuriSemaphore* unlock; // Layers and Canvas + bool lockdown; + bool lockdown_inhibit; bool direct_draw; ViewPortArray_t layers[GuiLayerMAX]; Canvas* canvas; diff --git a/applications/settings/clock_settings/clock_settings_alarm.c b/applications/settings/clock_settings/clock_settings_alarm.c index 1327fb4f7..ef348c0b1 100644 --- a/applications/settings/clock_settings/clock_settings_alarm.c +++ b/applications/settings/clock_settings/clock_settings_alarm.c @@ -112,7 +112,7 @@ int32_t clock_settings_alarm(void* p) { // Register view port in GUI Gui* gui = furi_record_open(RECORD_GUI); - gui_remove_lockdown(gui); + gui_set_lockdown_inhibit(gui, true); gui_add_view_port(gui, view_port, GuiLayerFullscreen); NotificationApp* notification = furi_record_open(RECORD_NOTIFICATION); @@ -139,7 +139,7 @@ int32_t clock_settings_alarm(void* p) { model.is_snooze = true; model.alarm_start = model.snooze_until; // For correct timeout behavior view_port_enabled_set(view_port, false); - gui_set_lockdown(gui); + gui_set_lockdown_inhibit(gui, false); } else { running = false; } @@ -149,7 +149,7 @@ int32_t clock_settings_alarm(void* p) { if(datetime_datetime_to_timestamp(&model.now) >= datetime_datetime_to_timestamp(&model.snooze_until)) { view_port_enabled_set(view_port, true); - gui_remove_lockdown(gui); + gui_set_lockdown_inhibit(gui, true); model.is_snooze = false; } @@ -174,7 +174,7 @@ int32_t clock_settings_alarm(void* p) { furi_record_close(RECORD_NOTIFICATION); view_port_enabled_set(view_port, false); - gui_set_lockdown(gui); + gui_set_lockdown_inhibit(gui, false); gui_remove_view_port(gui, view_port); view_port_free(view_port); furi_message_queue_free(event_queue); diff --git a/targets/f7/api_symbols.csv b/targets/f7/api_symbols.csv index 1f108f77f..ccdf3711d 100644 --- a/targets/f7/api_symbols.csv +++ b/targets/f7/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,79.2,, +Version,+,80.0,, Header,+,applications/drivers/subghz/cc1101_ext/cc1101_ext_interconnect.h,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, @@ -1957,9 +1957,9 @@ Function,+,gui_direct_draw_release,void,Gui* Function,+,gui_get_framebuffer_size,size_t,const Gui* Function,+,gui_is_lockdown,_Bool,const Gui* Function,+,gui_remove_framebuffer_callback,void,"Gui*, GuiCanvasCommitCallback, void*" -Function,+,gui_remove_lockdown,void,Gui* Function,+,gui_remove_view_port,void,"Gui*, ViewPort*" -Function,+,gui_set_lockdown,void,Gui* +Function,+,gui_set_lockdown,void,"Gui*, _Bool" +Function,+,gui_set_lockdown_inhibit,void,"Gui*, _Bool" Function,-,gui_view_port_send_to_back,void,"Gui*, ViewPort*" Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,-,hci_send_req,int,"hci_request*, uint8_t" @@ -2940,9 +2940,9 @@ Function,+,pipe_install_as_stdio,void,PipeSide* Function,+,pipe_receive,size_t,"PipeSide*, void*, size_t, FuriWait" Function,+,pipe_role,PipeRole,PipeSide* Function,+,pipe_send,size_t,"PipeSide*, const void*, size_t, FuriWait" +Function,+,pipe_set_broken_callback,void,"PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent" Function,+,pipe_set_callback_context,void,"PipeSide*, void*" Function,+,pipe_set_data_arrived_callback,void,"PipeSide*, PipeSideDataArrivedCallback, FuriEventLoopEvent" -Function,+,pipe_set_broken_callback,void,"PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent" Function,+,pipe_set_space_freed_callback,void,"PipeSide*, PipeSideSpaceFreedCallback, FuriEventLoopEvent" Function,+,pipe_spaces_available,size_t,PipeSide* Function,+,pipe_state,PipeState,PipeSide* From 701969e3341a9c6d3965e8aa935dd8d55ee5cef0 Mon Sep 17 00:00:00 2001 From: Astra Date: Wed, 25 Dec 2024 18:39:57 +0900 Subject: [PATCH 5/6] Fix comments --- applications/services/gui/gui.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/applications/services/gui/gui.h b/applications/services/gui/gui.h index db30e2529..7eb19b91d 100644 --- a/applications/services/gui/gui.h +++ b/applications/services/gui/gui.h @@ -100,13 +100,13 @@ void gui_remove_framebuffer_callback(Gui* gui, GuiCanvasCommitCallback callback, */ size_t gui_get_framebuffer_size(const Gui* gui); -/** Enable lockdown mode +/** Set lockdown mode * * When lockdown mode is enabled, only GuiLayerDesktop is shown. * This feature prevents services from showing sensitive information when flipper is locked. * * @param gui Gui instance - * @param lockdown true to enable lockdown mode + * @param lockdown bool, true if enabled */ void gui_set_lockdown(Gui* gui, bool lockdown); From c1c2bca8500d5525d89116bcc16860ac76f8f50a Mon Sep 17 00:00:00 2001 From: Astra Date: Wed, 25 Dec 2024 18:41:50 +0900 Subject: [PATCH 6/6] F18 API --- targets/f18/api_symbols.csv | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/targets/f18/api_symbols.csv b/targets/f18/api_symbols.csv index 381c6cb8d..13c1afb87 100644 --- a/targets/f18/api_symbols.csv +++ b/targets/f18/api_symbols.csv @@ -1,5 +1,5 @@ entry,status,name,type,params -Version,+,79.2,, +Version,+,80.0,, Header,+,applications/services/bt/bt_service/bt.h,, Header,+,applications/services/bt/bt_service/bt_keys_storage.h,, Header,+,applications/services/cli/cli.h,, @@ -1738,9 +1738,9 @@ Function,+,gui_direct_draw_release,void,Gui* Function,+,gui_get_framebuffer_size,size_t,const Gui* Function,+,gui_is_lockdown,_Bool,const Gui* Function,+,gui_remove_framebuffer_callback,void,"Gui*, GuiCanvasCommitCallback, void*" -Function,+,gui_remove_lockdown,void,Gui* Function,+,gui_remove_view_port,void,"Gui*, ViewPort*" -Function,+,gui_set_lockdown,void,Gui* +Function,+,gui_set_lockdown,void,"Gui*, _Bool" +Function,+,gui_set_lockdown_inhibit,void,"Gui*, _Bool" Function,-,gui_view_port_send_to_back,void,"Gui*, ViewPort*" Function,+,gui_view_port_send_to_front,void,"Gui*, ViewPort*" Function,-,hci_send_req,int,"hci_request*, uint8_t" @@ -2304,9 +2304,9 @@ Function,+,pipe_install_as_stdio,void,PipeSide* Function,+,pipe_receive,size_t,"PipeSide*, void*, size_t, FuriWait" Function,+,pipe_role,PipeRole,PipeSide* Function,+,pipe_send,size_t,"PipeSide*, const void*, size_t, FuriWait" +Function,+,pipe_set_broken_callback,void,"PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent" Function,+,pipe_set_callback_context,void,"PipeSide*, void*" Function,+,pipe_set_data_arrived_callback,void,"PipeSide*, PipeSideDataArrivedCallback, FuriEventLoopEvent" -Function,+,pipe_set_broken_callback,void,"PipeSide*, PipeSideBrokenCallback, FuriEventLoopEvent" Function,+,pipe_set_space_freed_callback,void,"PipeSide*, PipeSideSpaceFreedCallback, FuriEventLoopEvent" Function,+,pipe_spaces_available,size_t,PipeSide* Function,+,pipe_state,PipeState,PipeSide*