BadKB store prev config separately

This commit is contained in:
Willy-JL
2023-06-12 15:55:23 +01:00
parent 29bc041c89
commit 19038dce61
3 changed files with 16 additions and 14 deletions
+4 -5
View File
@@ -153,12 +153,11 @@ BadKbApp* bad_kb_app_alloc(char* arg) {
bad_kb_config_adjust(&app->config);
// Save prev config
BadKbConfig* prev = &app->prev_config;
prev->usb_mode = furi_hal_usb_get_config();
app->prev_usb_mode = furi_hal_usb_get_config();
FuriHalBtProfile kbd = FuriHalBtProfileHidKeyboard;
prev->bt_mode = furi_hal_bt_get_profile_pairing_method(kbd);
strcpy(prev->bt_name, furi_hal_bt_get_profile_adv_name(kbd));
memcpy(prev->bt_mac, furi_hal_bt_get_profile_mac_addr(kbd), BAD_KB_MAC_LEN);
app->prev_bt_mode = furi_hal_bt_get_profile_pairing_method(kbd);
memcpy(app->prev_bt_mac, furi_hal_bt_get_profile_mac_addr(kbd), BAD_KB_MAC_LEN);
strlcpy(app->prev_bt_name, furi_hal_bt_get_profile_adv_name(kbd), BAD_KB_NAME_LEN);
// Adjust BT remember MAC to be serial MAC +2
memcpy(BAD_KB_BOUND_MAC, furi_hal_version_get_ble_mac(), BAD_KB_MAC_LEN);
@@ -565,19 +565,20 @@ int32_t bad_kb_conn_apply(BadKbApp* app) {
void bad_kb_conn_reset(BadKbApp* app) {
if(app->conn_mode == BadKbConnModeBt) {
// TODO: maybe also restore BT profile?
bt_disconnect(app->bt);
furi_delay_ms(200);
bt_keys_storage_set_default_path(app->bt);
furi_hal_bt_set_profile_adv_name(FuriHalBtProfileHidKeyboard, app->prev_config.bt_name);
furi_hal_bt_set_profile_mac_addr(FuriHalBtProfileHidKeyboard, app->prev_config.bt_mac);
furi_hal_bt_set_profile_pairing_method(
FuriHalBtProfileHidKeyboard, app->prev_config.bt_mode);
FuriHalBtProfile kbd = FuriHalBtProfileHidKeyboard;
furi_hal_bt_set_profile_mac_addr(kbd, app->prev_bt_mac);
furi_hal_bt_set_profile_adv_name(kbd, app->prev_bt_name);
furi_hal_bt_set_profile_pairing_method(kbd, app->prev_bt_mode);
furi_check(bt_set_profile(app->bt, BtProfileSerial));
bt_enable_peer_key_update(app->bt);
} else if(app->conn_mode == BadKbConnModeUsb) {
// TODO: maybe also restore USB config context?
furi_check(furi_hal_usb_set_config(app->prev_config.usb_mode, NULL));
// TODO: maybe also restore USB context?
furi_check(furi_hal_usb_set_config(app->prev_usb_mode, NULL));
}
app->conn_mode = BadKbConnModeNone;
@@ -115,10 +115,8 @@ typedef enum {
} BadKbAppError;
typedef struct {
GapPairing bt_mode;
char bt_name[BAD_KB_NAME_LEN];
uint8_t bt_mac[BAD_KB_MAC_LEN];
FuriHalUsbInterface* usb_mode;
FuriHalUsbHidConfig usb_cfg;
} BadKbConfig;
@@ -154,13 +152,17 @@ struct BadKbApp {
bool bt_remember;
BadKbConfig config; // User options
BadKbConfig id_config; // ID and BT_ID values
BadKbConfig prev_config; // State to restore at exit
bool set_usb_id;
bool set_bt_id;
bool has_usb_id;
bool has_bt_id;
GapPairing prev_bt_mode;
char prev_bt_name[BAD_KB_NAME_LEN];
uint8_t prev_bt_mac[BAD_KB_MAC_LEN];
FuriHalUsbInterface* prev_usb_mode;
FuriHalUsbHidConfig* hid_cfg;
BadKbConnMode conn_mode;
FuriThread* conn_init_thread;