diff --git a/applications/main/bad_kb/bad_kb_app.c b/applications/main/bad_kb/bad_kb_app.c index bfb5a3d6d..4b3dd9fc6 100644 --- a/applications/main/bad_kb/bad_kb_app.c +++ b/applications/main/bad_kb/bad_kb_app.c @@ -107,7 +107,7 @@ BadKbApp* bad_kb_app_alloc(char* arg) { Bt* bt = furi_record_open(RECORD_BT); app->bt = bt; app->is_bt = XTREME_SETTINGS()->bad_bt; - app->bonding = BondingForgetDevices; + app->bt_remember = XTREME_SETTINGS()->bad_bt_remember; const char* adv_name = furi_hal_bt_get_profile_adv_name(FuriHalBtProfileHidKeyboard); memcpy(app->name, adv_name, BAD_KB_ADV_NAME_MAX_LEN); memcpy(app->bt_old_config.name, adv_name, BAD_KB_ADV_NAME_MAX_LEN); diff --git a/applications/main/bad_kb/bad_kb_app_i.h b/applications/main/bad_kb/bad_kb_app_i.h index ac79205b5..88a770ff8 100644 --- a/applications/main/bad_kb/bad_kb_app_i.h +++ b/applications/main/bad_kb/bad_kb_app_i.h @@ -40,10 +40,6 @@ typedef enum BadKbCustomEvent { BadKbCustomEventErrorBack } BadKbCustomEvent; - -#define BondingForgetDevices false -#define BondingRememberDevices true - typedef struct { //uint8_t bounded_mac[BAD_KB_MAC_ADDRESS_LEN]; uint8_t mac[BAD_KB_MAC_ADDRESS_LEN]; @@ -65,7 +61,7 @@ struct BadKbApp { ByteInput* byte_input; uint8_t mac[BAD_KB_MAC_ADDRESS_LEN]; char name[BAD_KB_ADV_NAME_MAX_LEN + 1]; - bool bonding; // weither we remember paired devices or not + bool bt_remember; // weither we remember paired devices or not BadKbBtConfig bt_old_config; BadKbAppError error; diff --git a/applications/main/bad_kb/bad_kb_script.c b/applications/main/bad_kb/bad_kb_script.c index b1bc13482..d86bd9649 100644 --- a/applications/main/bad_kb/bad_kb_script.c +++ b/applications/main/bad_kb/bad_kb_script.c @@ -650,8 +650,8 @@ void bad_kb_config_switch_mode(BadKbApp* app) { } } -void bad_kb_config_switch_bonding_mode(BadKbApp *app) { - if (app->bonding) { +void bad_kb_config_switch_remember_mode(BadKbApp *app) { + if (app->bt_remember) { // set bouding mac uint8_t mac[6] = BAD_KB_BOUND_MAC_ADDRESS; furi_hal_bt_set_profile_pairing_method(FuriHalBtProfileHidKeyboard, GapPairingPinCodeVerifyYesNo); @@ -676,7 +676,7 @@ int32_t bad_kb_connection_init(BadKbApp* app) { // furi_delay_ms(200); bt_keys_storage_set_storage_path(app->bt, BAD_KB_APP_PATH_BOUND_KEYS_FILE); app->bt_prev_mode = furi_hal_bt_get_profile_pairing_method(FuriHalBtProfileHidKeyboard); - if (app->bonding) { // usefull if bounding become an XTREME setting + if (app->bt_remember) { uint8_t mac[6] = BAD_KB_BOUND_MAC_ADDRESS; furi_hal_bt_set_profile_mac_addr(FuriHalBtProfileHidKeyboard, mac); // using GapPairingNone breaks bounding between devices @@ -688,8 +688,11 @@ int32_t bad_kb_connection_init(BadKbApp* app) { bt_set_profile(app->bt, BtProfileHidKeyboard); if(app->is_bt) { furi_hal_bt_start_advertising(); - if (!app->bonding) + if (app->bt_remember) { + bt_enable_peer_key_update(app->bt); + } else { bt_disable_peer_key_update(app->bt); // disable peer key adding to bt SRAM storage + } } else { furi_hal_bt_stop_advertising(); } @@ -708,12 +711,11 @@ void bad_kb_connection_deinit(BadKbApp* app) { bt_disconnect(app->bt); // stop ble // furi_delay_ms(200); // Wait 2nd core to update nvm storage bt_keys_storage_set_default_path(app->bt); - if (app->bonding) { + if (app->bt_remember) { // hal primitives doesn't restarts ble, that's what we want cuz we are shutting down furi_hal_bt_set_profile_mac_addr(FuriHalBtProfileHidKeyboard, app->mac); - }else { - bt_enable_peer_key_update(app->bt); // starts saving peer keys (bounded devices) } + bt_enable_peer_key_update(app->bt); // starts saving peer keys (bounded devices) // fails if ble radio stack isn't ready when switching profile // if it happens, maybe we should increase the delay after bt_disconnect bt_set_profile(app->bt, BtProfileSerial); diff --git a/applications/main/bad_kb/bad_kb_script.h b/applications/main/bad_kb/bad_kb_script.h index ad8618658..bf4d2ee00 100644 --- a/applications/main/bad_kb/bad_kb_script.h +++ b/applications/main/bad_kb/bad_kb_script.h @@ -36,7 +36,7 @@ typedef struct { void bad_kb_config_switch_mode(BadKbApp* app); -void bad_kb_config_switch_bonding_mode(BadKbApp *app); +void bad_kb_config_switch_remember_mode(BadKbApp *app); int32_t bad_kb_connection_init(BadKbApp* app); diff --git a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c index 02b20a761..e41f3d136 100644 --- a/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c +++ b/applications/main/bad_kb/scenes/bad_kb_scene_config_bt.c @@ -5,7 +5,7 @@ enum VarItemListIndex { VarItemListIndexConnection, - VarItemListIndexBonding, + VarItemListIndexRemember, VarItemListIndexKeyboardLayout, VarItemListIndexAdvertisementName, VarItemListIndexMacAddress, @@ -22,9 +22,11 @@ void bad_kb_scene_config_bt_connection_callback(VariableItem* item) { void bad_kb_scene_config_bt_bounding_callback(VariableItem* item) { BadKbApp* bad_kb = variable_item_get_context(item); - bad_kb->bonding = variable_item_get_current_value_index(item); - variable_item_set_current_value_text(item, bad_kb->bonding ? "Remember" : "Forget"); - view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexBonding); + bad_kb->bt_remember = variable_item_get_current_value_index(item); + XTREME_SETTINGS()->bad_bt_remember = bad_kb->bt_remember; + XTREME_SETTINGS_SAVE(); + variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); + view_dispatcher_send_custom_event(bad_kb->view_dispatcher, VarItemListIndexRemember); } void bad_kb_scene_config_bt_var_item_list_callback(void* context, uint32_t index) { @@ -43,16 +45,16 @@ void bad_kb_scene_config_bt_on_enter(void* context) { variable_item_set_current_value_text(item, bad_kb->is_bt ? "BT" : "USB"); item = variable_item_list_add( - var_item_list, "Bonding", 2, bad_kb_scene_config_bt_bounding_callback, bad_kb); - variable_item_set_current_value_index(item, bad_kb->bonding); - variable_item_set_current_value_text(item, bad_kb->bonding ? "Remember" : "Forget"); + var_item_list, "Remember", 2, bad_kb_scene_config_bt_bounding_callback, bad_kb); + variable_item_set_current_value_index(item, bad_kb->bt_remember); + variable_item_set_current_value_text(item, bad_kb->bt_remember ? "ON" : "OFF"); item = variable_item_list_add(var_item_list, "Keyboard layout", 0, NULL, bad_kb); item = variable_item_list_add(var_item_list, "BT device name", 0, NULL, bad_kb); - + // this doesn't update instantly when toggling between Bounding modes - if (!bad_kb->bonding) { + if (!bad_kb->bt_remember) { item = variable_item_list_add(var_item_list, "BT MAC address", 0, NULL, bad_kb); } @@ -73,8 +75,8 @@ bool bad_kb_scene_config_bt_on_event(void* context, SceneManagerEvent event) { scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigLayout); } else if(event.event == VarItemListIndexConnection) { bad_kb_config_switch_mode(bad_kb); - } else if (event.event == VarItemListIndexBonding) { - bad_kb_config_switch_bonding_mode(bad_kb); + } else if (event.event == VarItemListIndexRemember) { + bad_kb_config_switch_remember_mode(bad_kb); scene_manager_previous_scene(bad_kb->scene_manager); scene_manager_next_scene(bad_kb->scene_manager, BadKbSceneConfigBt); } else if(event.event == VarItemListIndexAdvertisementName) { diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c index 0350785e7..e0bc53d29 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_protocols.c @@ -8,6 +8,14 @@ static void xtreme_app_scene_protocols_bad_bk_mode_changed(VariableItem* item) { app->save_settings = true; } +static void xtreme_app_scene_protocols_bad_bt_remember_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->bad_bt_remember = value; + app->save_settings = true; +} + static void xtreme_app_scene_protocols_subghz_extend_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); app->subghz_extend = variable_item_get_current_value_index(item); @@ -33,6 +41,11 @@ void xtreme_app_scene_protocols_on_enter(void* context) { variable_item_set_current_value_index(item, xtreme_settings->bad_bt); variable_item_set_current_value_text(item, xtreme_settings->bad_bt ? "BT" : "USB"); + item = variable_item_list_add( + var_item_list, "Bad BT Remember", 2, xtreme_app_scene_protocols_bad_bt_remember_changed, app); + variable_item_set_current_value_index(item, xtreme_settings->bad_bt_remember); + variable_item_set_current_value_text(item, xtreme_settings->bad_bt_remember ? "ON" : "OFF"); + item = variable_item_list_add( var_item_list, "SubGHz Extend", 2, xtreme_app_scene_protocols_subghz_extend_changed, app); variable_item_set_current_value_index(item, app->subghz_extend); diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index 8036c8d58..881ab8950 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -39,6 +39,7 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->bar_borders = true; // ON xtreme_settings->bar_background = false; // OFF xtreme_settings->bad_bt = false; // USB + xtreme_settings->bad_bt_remember = false; // OFF xtreme_settings->butthurt_timer = 43200; // 12 H xtreme_settings->sort_dirs_first = true; // ON xtreme_settings->dark_mode = false; // OFF diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index b870235ec..87f64bb54 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -11,7 +11,7 @@ #define MAX_PACK_NAME_LEN 32 -#define XTREME_SETTINGS_VERSION (4) +#define XTREME_SETTINGS_VERSION (5) #define XTREME_SETTINGS_PATH INT_PATH(XTREME_SETTINGS_FILE_NAME) #define XTREME_SETTINGS_MAGIC (0x69) @@ -28,6 +28,7 @@ typedef struct { bool bar_borders; bool bar_background; bool bad_bt; + bool bad_bt_remember; int32_t butthurt_timer; bool sort_dirs_first; bool dark_mode;