mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-16 04:24:45 -07:00
Removes pin verif when using BT for bad-USB
This commit is contained in:
@@ -641,15 +641,19 @@ static int32_t bad_usb_worker(void* context) {
|
|||||||
int32_t delay_val = 0;
|
int32_t delay_val = 0;
|
||||||
|
|
||||||
FuriHalUsbInterface* usb_mode_prev = NULL;
|
FuriHalUsbInterface* usb_mode_prev = NULL;
|
||||||
|
GapPairing old_pairing_method = GapPairingNone;
|
||||||
if (bad_usb->bt) {
|
if (bad_usb->bt) {
|
||||||
bt_timeout = bt_hid_delays[LevelRssi39_0];
|
bt_timeout = bt_hid_delays[LevelRssi39_0];
|
||||||
bt_disconnect(bad_usb->bt);
|
bt_disconnect(bad_usb->bt);
|
||||||
furi_delay_ms(200);
|
furi_delay_ms(200);
|
||||||
bt_keys_storage_set_storage_path(bad_usb->bt, HID_BT_KEYS_STORAGE_PATH);
|
bt_keys_storage_set_storage_path(bad_usb->bt, HID_BT_KEYS_STORAGE_PATH);
|
||||||
|
|
||||||
if(!bt_set_profile(bad_usb->bt, BtProfileHidKeyboard)) {
|
if(!bt_set_profile(bad_usb->bt, BtProfileHidKeyboard)) {
|
||||||
FURI_LOG_E(TAG, "Failed to switch to HID profile");
|
FURI_LOG_E(TAG, "Failed to switch to HID profile");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
old_pairing_method = bt_get_profile_pairing_method(bad_usb->bt);
|
||||||
|
bt_set_profile_pairing_method(bad_usb->bt, GapPairingNone);
|
||||||
furi_hal_bt_start_advertising();
|
furi_hal_bt_start_advertising();
|
||||||
bt_set_status_changed_callback(bad_usb->bt, bad_usb_bt_hid_state_callback, bad_usb);
|
bt_set_status_changed_callback(bad_usb->bt, bad_usb_bt_hid_state_callback, bad_usb);
|
||||||
} else {
|
} else {
|
||||||
@@ -843,6 +847,8 @@ static int32_t bad_usb_worker(void* context) {
|
|||||||
|
|
||||||
bt_keys_storage_set_default_path(bad_usb->bt);
|
bt_keys_storage_set_default_path(bad_usb->bt);
|
||||||
|
|
||||||
|
bt_set_profile_pairing_method(bad_usb->bt, old_pairing_method);
|
||||||
|
|
||||||
if(!bt_set_profile(bad_usb->bt, BtProfileSerial)) {
|
if(!bt_set_profile(bad_usb->bt, BtProfileSerial)) {
|
||||||
FURI_LOG_E(TAG, "Failed to switch to Serial profile");
|
FURI_LOG_E(TAG, "Failed to switch to Serial profile");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -370,12 +370,16 @@ static void bt_close_connection(Bt* bt) {
|
|||||||
furi_event_flag_set(bt->api_event, BT_API_UNLOCK_EVENT);
|
furi_event_flag_set(bt->api_event, BT_API_UNLOCK_EVENT);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void bt_restart(Bt* bt) {
|
static inline FuriHalBtProfile get_hal_bt_profile(BtProfile profile) {
|
||||||
if(bt->profile == BtProfileHidKeyboard) {
|
if(profile == BtProfileHidKeyboard) {
|
||||||
furi_hal_bt_change_app(FuriHalBtProfileHidKeyboard, bt_on_gap_event_callback, bt);
|
return FuriHalBtProfileHidKeyboard;
|
||||||
} else {
|
} else {
|
||||||
furi_hal_bt_change_app(FuriHalBtProfileSerial, bt_on_gap_event_callback, bt);
|
return FuriHalBtProfileSerial;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void bt_restart(Bt* bt) {
|
||||||
|
furi_hal_bt_change_app(get_hal_bt_profile(bt->profile), bt_on_gap_event_callback, bt);
|
||||||
furi_hal_bt_start_advertising();
|
furi_hal_bt_start_advertising();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -388,44 +392,28 @@ void bt_set_profile_adv_name(Bt* bt, const char* fmt, ...) {
|
|||||||
va_start(args, fmt);
|
va_start(args, fmt);
|
||||||
vsnprintf(name, sizeof(name), fmt, args);
|
vsnprintf(name, sizeof(name), fmt, args);
|
||||||
va_end(args);
|
va_end(args);
|
||||||
if(bt->profile == BtProfileHidKeyboard) {
|
furi_hal_bt_set_profile_adv_name(get_hal_bt_profile(bt->profile), name);
|
||||||
furi_hal_bt_set_profile_adv_name(FuriHalBtProfileHidKeyboard, name);
|
|
||||||
} else {
|
|
||||||
furi_hal_bt_set_profile_adv_name(FuriHalBtProfileSerial, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
bt_restart(bt);
|
bt_restart(bt);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* bt_get_profile_adv_name(Bt* bt) {
|
const char* bt_get_profile_adv_name(Bt* bt) {
|
||||||
furi_assert(bt);
|
furi_assert(bt);
|
||||||
if(bt->profile == BtProfileHidKeyboard) {
|
return furi_hal_bt_get_profile_adv_name(get_hal_bt_profile(bt->profile));
|
||||||
return furi_hal_bt_get_profile_adv_name(FuriHalBtProfileHidKeyboard);
|
|
||||||
} else {
|
|
||||||
return furi_hal_bt_get_profile_adv_name(FuriHalBtProfileSerial);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void bt_set_profile_mac_address(Bt* bt, const uint8_t mac[6]) {
|
void bt_set_profile_mac_address(Bt* bt, const uint8_t mac[6]) {
|
||||||
furi_assert(bt);
|
furi_assert(bt);
|
||||||
furi_assert(mac);
|
furi_assert(mac);
|
||||||
|
|
||||||
if(bt->profile == BtProfileHidKeyboard) {
|
furi_hal_bt_set_profile_mac_addr(get_hal_bt_profile(bt->profile), mac);
|
||||||
furi_hal_bt_set_profile_mac_addr(FuriHalBtProfileHidKeyboard, mac);
|
|
||||||
} else {
|
|
||||||
furi_hal_bt_set_profile_mac_addr(FuriHalBtProfileSerial, mac);
|
|
||||||
}
|
|
||||||
|
|
||||||
bt_restart(bt);
|
bt_restart(bt);
|
||||||
}
|
}
|
||||||
|
|
||||||
const uint8_t* bt_get_profile_mac_address(Bt* bt) {
|
const uint8_t* bt_get_profile_mac_address(Bt* bt) {
|
||||||
furi_assert(bt);
|
furi_assert(bt);
|
||||||
if(bt->profile == BtProfileHidKeyboard) {
|
return furi_hal_bt_get_profile_mac_addr(get_hal_bt_profile(bt->profile));
|
||||||
return furi_hal_bt_get_profile_mac_addr(FuriHalBtProfileHidKeyboard);
|
|
||||||
} else {
|
|
||||||
return furi_hal_bt_get_profile_mac_addr(FuriHalBtProfileSerial);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bt_remote_rssi(Bt* bt, BtRssi* rssi) {
|
bool bt_remote_rssi(Bt* bt, BtRssi* rssi) {
|
||||||
@@ -443,6 +431,17 @@ bool bt_remote_rssi(Bt* bt, BtRssi* rssi) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void bt_set_profile_pairing_method(Bt* bt, GapPairing pairing_method) {
|
||||||
|
furi_assert(bt);
|
||||||
|
furi_hal_bt_set_profile_pairing_method(get_hal_bt_profile(bt->profile), pairing_method);
|
||||||
|
bt_restart(bt);
|
||||||
|
}
|
||||||
|
|
||||||
|
GapPairing bt_get_profile_pairing_method(Bt* bt) {
|
||||||
|
furi_assert(bt);
|
||||||
|
return furi_hal_bt_get_profile_pairing_method(get_hal_bt_profile(bt->profile));
|
||||||
|
}
|
||||||
|
|
||||||
int32_t bt_srv(void* p) {
|
int32_t bt_srv(void* p) {
|
||||||
UNUSED(p);
|
UNUSED(p);
|
||||||
Bt* bt = bt_alloc();
|
Bt* bt = bt_alloc();
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <furi_hal_bt.h>
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -48,6 +49,9 @@ const uint8_t* bt_get_profile_mac_address(Bt* bt);
|
|||||||
|
|
||||||
bool bt_remote_rssi(Bt* bt, BtRssi* rssi);
|
bool bt_remote_rssi(Bt* bt, BtRssi* rssi);
|
||||||
|
|
||||||
|
void bt_set_profile_pairing_method(Bt* bt, GapPairing pairing_method);
|
||||||
|
GapPairing bt_get_profile_pairing_method(Bt* bt);
|
||||||
|
|
||||||
/** Disconnect from Central
|
/** Disconnect from Central
|
||||||
*
|
*
|
||||||
* @param bt Bt instance
|
* @param bt Bt instance
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
entry,status,name,type,params
|
entry,status,name,type,params
|
||||||
Version,+,13.0,,
|
Version,+,13.2,,
|
||||||
Header,+,applications/services/bt/bt_service/bt.h,,
|
Header,+,applications/services/bt/bt_service/bt.h,,
|
||||||
Header,+,applications/services/cli/cli.h,,
|
Header,+,applications/services/cli/cli.h,,
|
||||||
Header,+,applications/services/cli/cli_vcp.h,,
|
Header,+,applications/services/cli/cli_vcp.h,,
|
||||||
@@ -573,12 +573,14 @@ Function,+,bt_disconnect,void,Bt*
|
|||||||
Function,+,bt_forget_bonded_devices,void,Bt*
|
Function,+,bt_forget_bonded_devices,void,Bt*
|
||||||
Function,+,bt_get_profile_adv_name,const char*,Bt*
|
Function,+,bt_get_profile_adv_name,const char*,Bt*
|
||||||
Function,+,bt_get_profile_mac_address,const uint8_t*,Bt*
|
Function,+,bt_get_profile_mac_address,const uint8_t*,Bt*
|
||||||
|
Function,+,bt_get_profile_pairing_method,GapPairing,Bt*
|
||||||
Function,+,bt_keys_storage_set_default_path,void,Bt*
|
Function,+,bt_keys_storage_set_default_path,void,Bt*
|
||||||
Function,+,bt_keys_storage_set_storage_path,void,"Bt*, const char*"
|
Function,+,bt_keys_storage_set_storage_path,void,"Bt*, const char*"
|
||||||
Function,+,bt_remote_rssi,_Bool,"Bt*, BtRssi*"
|
Function,+,bt_remote_rssi,_Bool,"Bt*, BtRssi*"
|
||||||
Function,+,bt_set_profile,_Bool,"Bt*, BtProfile"
|
Function,+,bt_set_profile,_Bool,"Bt*, BtProfile"
|
||||||
Function,+,bt_set_profile_adv_name,void,"Bt*, const char*, ..."
|
Function,+,bt_set_profile_adv_name,void,"Bt*, const char*, ..."
|
||||||
Function,+,bt_set_profile_mac_address,void,"Bt*, const uint8_t[6]"
|
Function,+,bt_set_profile_mac_address,void,"Bt*, const uint8_t[6]"
|
||||||
|
Function,+,bt_set_profile_pairing_method,void,"Bt*, GapPairing"
|
||||||
Function,+,bt_set_status_changed_callback,void,"Bt*, BtStatusChangedCallback, void*"
|
Function,+,bt_set_status_changed_callback,void,"Bt*, BtStatusChangedCallback, void*"
|
||||||
Function,+,buffered_file_stream_alloc,Stream*,Storage*
|
Function,+,buffered_file_stream_alloc,Stream*,Storage*
|
||||||
Function,+,buffered_file_stream_close,_Bool,Stream*
|
Function,+,buffered_file_stream_close,_Bool,Stream*
|
||||||
@@ -1004,6 +1006,7 @@ Function,+,furi_hal_bt_get_conn_rssi,uint32_t,uint8_t*
|
|||||||
Function,+,furi_hal_bt_get_key_storage_buff,void,"uint8_t**, uint16_t*"
|
Function,+,furi_hal_bt_get_key_storage_buff,void,"uint8_t**, uint16_t*"
|
||||||
Function,+,furi_hal_bt_get_profile_adv_name,const char*,FuriHalBtProfile
|
Function,+,furi_hal_bt_get_profile_adv_name,const char*,FuriHalBtProfile
|
||||||
Function,+,furi_hal_bt_get_profile_mac_addr,const uint8_t*,FuriHalBtProfile
|
Function,+,furi_hal_bt_get_profile_mac_addr,const uint8_t*,FuriHalBtProfile
|
||||||
|
Function,+,furi_hal_bt_get_profile_pairing_method,GapPairing,FuriHalBtProfile
|
||||||
Function,+,furi_hal_bt_get_radio_stack,FuriHalBtStack,
|
Function,+,furi_hal_bt_get_radio_stack,FuriHalBtStack,
|
||||||
Function,+,furi_hal_bt_get_rssi,float,
|
Function,+,furi_hal_bt_get_rssi,float,
|
||||||
Function,+,furi_hal_bt_get_transmitted_packets,uint32_t,
|
Function,+,furi_hal_bt_get_transmitted_packets,uint32_t,
|
||||||
@@ -1039,6 +1042,7 @@ Function,+,furi_hal_bt_serial_tx,_Bool,"uint8_t*, uint16_t"
|
|||||||
Function,+,furi_hal_bt_set_key_storage_change_callback,void,"BleGlueKeyStorageChangedCallback, void*"
|
Function,+,furi_hal_bt_set_key_storage_change_callback,void,"BleGlueKeyStorageChangedCallback, void*"
|
||||||
Function,+,furi_hal_bt_set_profile_adv_name,void,"FuriHalBtProfile, const char[( 1 + ( 8 + 1 ) ) - 1]"
|
Function,+,furi_hal_bt_set_profile_adv_name,void,"FuriHalBtProfile, const char[( 1 + ( 8 + 1 ) ) - 1]"
|
||||||
Function,+,furi_hal_bt_set_profile_mac_addr,void,"FuriHalBtProfile, const uint8_t[( 6 )]"
|
Function,+,furi_hal_bt_set_profile_mac_addr,void,"FuriHalBtProfile, const uint8_t[( 6 )]"
|
||||||
|
Function,+,furi_hal_bt_set_profile_pairing_method,void,"FuriHalBtProfile, GapPairing"
|
||||||
Function,+,furi_hal_bt_start_advertising,void,
|
Function,+,furi_hal_bt_start_advertising,void,
|
||||||
Function,+,furi_hal_bt_start_app,_Bool,"FuriHalBtProfile, GapEventCallback, void*"
|
Function,+,furi_hal_bt_start_app,_Bool,"FuriHalBtProfile, GapEventCallback, void*"
|
||||||
Function,+,furi_hal_bt_start_packet_rx,void,"uint8_t, uint8_t"
|
Function,+,furi_hal_bt_start_packet_rx,void,"uint8_t, uint8_t"
|
||||||
|
|||||||
|
@@ -377,15 +377,24 @@ static void gap_init_svc(Gap* gap) {
|
|||||||
aci_gap_set_io_capability(IO_CAP_DISPLAY_YES_NO);
|
aci_gap_set_io_capability(IO_CAP_DISPLAY_YES_NO);
|
||||||
keypress_supported = true;
|
keypress_supported = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t conf_mitm = CFG_MITM_PROTECTION;
|
||||||
|
uint8_t conf_used_fixed_pin = CFG_USED_FIXED_PIN;
|
||||||
|
|
||||||
|
if (gap->config->pairing_method == GapPairingNone) {
|
||||||
|
conf_mitm = 0;
|
||||||
|
conf_used_fixed_pin = 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Setup authentication
|
// Setup authentication
|
||||||
aci_gap_set_authentication_requirement(
|
aci_gap_set_authentication_requirement(
|
||||||
gap->config->bonding_mode,
|
gap->config->bonding_mode,
|
||||||
CFG_MITM_PROTECTION,
|
conf_mitm,
|
||||||
CFG_SC_SUPPORT,
|
CFG_SC_SUPPORT,
|
||||||
keypress_supported,
|
keypress_supported,
|
||||||
CFG_ENCRYPTION_KEY_SIZE_MIN,
|
CFG_ENCRYPTION_KEY_SIZE_MIN,
|
||||||
CFG_ENCRYPTION_KEY_SIZE_MAX,
|
CFG_ENCRYPTION_KEY_SIZE_MAX,
|
||||||
CFG_USED_FIXED_PIN, // 0x0 for no pin
|
conf_used_fixed_pin, // 0x0 for no pin
|
||||||
0,
|
0,
|
||||||
PUBLIC_ADDR);
|
PUBLIC_ADDR);
|
||||||
// Configure whitelist
|
// Configure whitelist
|
||||||
|
|||||||
@@ -495,3 +495,13 @@ const uint8_t* furi_hal_bt_get_profile_mac_addr(FuriHalBtProfile profile) {
|
|||||||
furi_assert(profile < FuriHalBtProfileNumber);
|
furi_assert(profile < FuriHalBtProfileNumber);
|
||||||
return profile_config[profile].config.mac_address;
|
return profile_config[profile].config.mac_address;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void furi_hal_bt_set_profile_pairing_method(FuriHalBtProfile profile, GapPairing pairing_method) {
|
||||||
|
furi_assert(profile < FuriHalBtProfileNumber);
|
||||||
|
profile_config[profile].config.pairing_method = pairing_method;
|
||||||
|
}
|
||||||
|
|
||||||
|
GapPairing furi_hal_bt_get_profile_pairing_method(FuriHalBtProfile profile) {
|
||||||
|
furi_assert(profile < FuriHalBtProfileNumber);
|
||||||
|
return profile_config[profile].config.pairing_method;
|
||||||
|
}
|
||||||
|
|||||||
@@ -246,6 +246,10 @@ const uint8_t* furi_hal_bt_get_profile_mac_addr(FuriHalBtProfile profile);
|
|||||||
|
|
||||||
uint32_t furi_hal_bt_get_conn_rssi(uint8_t* rssi);
|
uint32_t furi_hal_bt_get_conn_rssi(uint8_t* rssi);
|
||||||
|
|
||||||
|
void furi_hal_bt_set_profile_pairing_method(FuriHalBtProfile profile, GapPairing pairing_method);
|
||||||
|
|
||||||
|
GapPairing furi_hal_bt_get_profile_pairing_method(FuriHalBtProfile profile);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user