BT on/off to desktop_lock_menu

This commit is contained in:
Dmitry422
2026-02-12 16:55:19 +07:00
parent aec6045392
commit 808774c05f
5 changed files with 37 additions and 12 deletions

View File

@@ -1,5 +1,4 @@
#include "bt_i.h" #include "bt_api.h"
#include <profiles/serial_profile.h>
FuriHalBleProfileBase* bt_profile_start( FuriHalBleProfileBase* bt_profile_start(
Bt* bt, Bt* bt,

View File

@@ -0,0 +1,5 @@
#pragma once
#include "bt_i.h"
#include <profiles/serial_profile.h>
extern void bt_set_settings(Bt* bt, const BtSettings* settings);

View File

@@ -10,6 +10,8 @@
#include "../views/desktop_view_lock_menu.h" #include "../views/desktop_view_lock_menu.h"
#include "desktop_scene.h" #include "desktop_scene.h"
#include "applications/services/bt/bt_service/bt_api.h"
#define TAG "DesktopSceneLock" #define TAG "DesktopSceneLock"
void desktop_scene_lock_menu_callback(DesktopEvent event, void* context) { void desktop_scene_lock_menu_callback(DesktopEvent event, void* context) {
@@ -34,6 +36,9 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
Desktop* desktop = (Desktop*)context; Desktop* desktop = (Desktop*)context;
bool consumed = false; bool consumed = false;
Bt* bt = furi_record_open(RECORD_BT);
BtSettings bts = bt->bt_settings;
if(event.type == SceneManagerEventTypeTick) { if(event.type == SceneManagerEventTypeTick) {
bool check_pin_changed = bool check_pin_changed =
scene_manager_get_scene_state(desktop->scene_manager, DesktopSceneLockMenu); scene_manager_get_scene_state(desktop->scene_manager, DesktopSceneLockMenu);
@@ -42,10 +47,17 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
} }
} else if(event.type == SceneManagerEventTypeCustom) { } else if(event.type == SceneManagerEventTypeCustom) {
switch(event.event) { switch(event.event) {
case DesktopLockMenuEventLock: // old use case
scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0); // case DesktopLockMenuEventLock:
desktop_lock(desktop); // scene_manager_set_scene_state(desktop->scene_manager, DesktopSceneLockMenu, 0);
consumed = true; // desktop_lock(desktop);
// consumed = true;
// break;
case DesktopLockMenuEventBt:
bts.enabled = !bts.enabled;
bt_set_settings(bt, &bts);
scene_manager_search_and_switch_to_previous_scene(
desktop->scene_manager, DesktopSceneMain);
break; break;
case DesktopLockMenuEventDummyModeOn: case DesktopLockMenuEventDummyModeOn:
desktop_set_dummy_mode_state(desktop, true); desktop_set_dummy_mode_state(desktop, true);
@@ -78,4 +90,5 @@ bool desktop_scene_lock_menu_on_event(void* context, SceneManagerEvent event) {
void desktop_scene_lock_menu_on_exit(void* context) { void desktop_scene_lock_menu_on_exit(void* context) {
UNUSED(context); UNUSED(context);
furi_record_close(RECORD_BT);
} }

View File

@@ -37,7 +37,8 @@ typedef enum {
DesktopDebugEventToggleDebugMode, DesktopDebugEventToggleDebugMode,
DesktopDebugEventExit, DesktopDebugEventExit,
DesktopLockMenuEventLock, //DesktopLockMenuEventLock,
DesktopLockMenuEventBt,
DesktopLockMenuEventDummyModeOn, DesktopLockMenuEventDummyModeOn,
DesktopLockMenuEventDummyModeOff, DesktopLockMenuEventDummyModeOff,
DesktopLockMenuEventStealthModeOn, DesktopLockMenuEventStealthModeOn,

View File

@@ -6,7 +6,8 @@
#include "desktop_view_lock_menu.h" #include "desktop_view_lock_menu.h"
typedef enum { typedef enum {
DesktopLockMenuIndexLock, //DesktopLockMenuIndexLock,
DesktopLockMenuIndexBt,
DesktopLockMenuIndexStealth, DesktopLockMenuIndexStealth,
DesktopLockMenuIndexDummy, DesktopLockMenuIndexDummy,
@@ -56,8 +57,9 @@ void desktop_lock_menu_draw_callback(Canvas* canvas, void* model) {
for(size_t i = 0; i < DesktopLockMenuIndexTotalCount; ++i) { for(size_t i = 0; i < DesktopLockMenuIndexTotalCount; ++i) {
const char* str = NULL; const char* str = NULL;
if(i == DesktopLockMenuIndexLock) { //if(i == DesktopLockMenuIndexLock) {
str = "Lock"; if(i == DesktopLockMenuIndexBt) {
str = "Bluetooth On/Off";
} else if(i == DesktopLockMenuIndexStealth) { } else if(i == DesktopLockMenuIndexStealth) {
if(m->stealth_mode) { if(m->stealth_mode) {
str = "Unmute"; str = "Unmute";
@@ -126,10 +128,15 @@ bool desktop_lock_menu_input_callback(InputEvent* event, void* context) {
update); update);
if(event->key == InputKeyOk) { if(event->key == InputKeyOk) {
if(idx == DesktopLockMenuIndexLock) { if(idx == DesktopLockMenuIndexBt) {
if(event->type == InputTypeShort) { if(event->type == InputTypeShort) {
lock_menu->callback(DesktopLockMenuEventLock, lock_menu->context); lock_menu->callback(DesktopLockMenuEventBt, lock_menu->context);
} }
// old use case
// } else if(idx == DesktopLockMenuIndexLock) {
// if(event->type == InputTypeShort) {
// lock_menu->callback(DesktopLockMenuEventLock, lock_menu->context);
// }
} else if(idx == DesktopLockMenuIndexStealth) { } else if(idx == DesktopLockMenuIndexStealth) {
if((stealth_mode == false) && (event->type == InputTypeShort)) { if((stealth_mode == false) && (event->type == InputTypeShort)) {
lock_menu->callback(DesktopLockMenuEventStealthModeOn, lock_menu->context); lock_menu->callback(DesktopLockMenuEventStealthModeOn, lock_menu->context);