mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-02 02:41:28 +00:00
feat(ble): add command to erase bond belonging to currently connected device
[no changelog]
This commit is contained in:
parent
53f0a840a3
commit
69679d9f9f
@ -81,6 +81,7 @@ typedef enum {
|
|||||||
INTERNAL_CMD_ACK = 0x05,
|
INTERNAL_CMD_ACK = 0x05,
|
||||||
INTERNAL_CMD_ALLOW_PAIRING = 0x06,
|
INTERNAL_CMD_ALLOW_PAIRING = 0x06,
|
||||||
INTERNAL_CMD_REJECT_PAIRING = 0x07,
|
INTERNAL_CMD_REJECT_PAIRING = 0x07,
|
||||||
|
INTERNAL_CMD_UNPAIR = 0x08,
|
||||||
} internal_cmd_t;
|
} internal_cmd_t;
|
||||||
|
|
||||||
// BLE management functions
|
// BLE management functions
|
||||||
@ -98,6 +99,8 @@ void management_send_pairing_cancelled_event(void);
|
|||||||
bool bonds_erase_all(void);
|
bool bonds_erase_all(void);
|
||||||
// Get number of bonded devices
|
// Get number of bonded devices
|
||||||
int bonds_get_count(void);
|
int bonds_get_count(void);
|
||||||
|
// Erase current bond
|
||||||
|
bool bonds_erase_current(void);
|
||||||
|
|
||||||
// Advertising functions
|
// Advertising functions
|
||||||
// Initialization
|
// Initialization
|
||||||
|
@ -21,6 +21,7 @@
|
|||||||
#include <zephyr/types.h>
|
#include <zephyr/types.h>
|
||||||
|
|
||||||
#include <zephyr/bluetooth/bluetooth.h>
|
#include <zephyr/bluetooth/bluetooth.h>
|
||||||
|
#include <zephyr/bluetooth/conn.h>
|
||||||
|
|
||||||
#include <zephyr/logging/log.h>
|
#include <zephyr/logging/log.h>
|
||||||
|
|
||||||
@ -31,8 +32,6 @@ LOG_MODULE_REGISTER(LOG_MODULE_NAME);
|
|||||||
|
|
||||||
#include "ble_internal.h"
|
#include "ble_internal.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool bonds_erase_all(void) {
|
bool bonds_erase_all(void) {
|
||||||
int err = bt_unpair(BT_ID_DEFAULT, BT_ADDR_LE_ANY);
|
int err = bt_unpair(BT_ID_DEFAULT, BT_ADDR_LE_ANY);
|
||||||
if (err) {
|
if (err) {
|
||||||
@ -57,3 +56,24 @@ int bonds_get_count(void) {
|
|||||||
|
|
||||||
return bond_cnt;
|
return bond_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool bonds_erase_current(void) {
|
||||||
|
int err;
|
||||||
|
struct bt_conn *current = connection_get_current();
|
||||||
|
|
||||||
|
if (current == NULL) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct bt_conn_info info;
|
||||||
|
|
||||||
|
err = bt_conn_get_info(current, &info);
|
||||||
|
if (err) {
|
||||||
|
LOG_ERR("Failed to get connection info (err %d)", err);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = bt_unpair(BT_ID_DEFAULT, info.le.dst);
|
||||||
|
|
||||||
|
return err == 0;
|
||||||
|
}
|
||||||
|
@ -62,8 +62,15 @@ void management_send_status_event(void) {
|
|||||||
|
|
||||||
void management_send_success_event(void) {
|
void management_send_success_event(void) {
|
||||||
uint8_t tx_data[] = {
|
uint8_t tx_data[] = {
|
||||||
INTERNAL_EVENT_SUCCESS,
|
INTERNAL_EVENT_SUCCESS,
|
||||||
};
|
};
|
||||||
|
trz_comm_send_msg(NRF_SERVICE_BLE_MANAGER, tx_data, sizeof(tx_data));
|
||||||
|
}
|
||||||
|
|
||||||
|
void management_send_failure_event(void) {
|
||||||
|
uint8_t tx_data[] = {
|
||||||
|
INTERNAL_EVENT_FAILURE,
|
||||||
|
};
|
||||||
trz_comm_send_msg(NRF_SERVICE_BLE_MANAGER, tx_data, sizeof(tx_data));
|
trz_comm_send_msg(NRF_SERVICE_BLE_MANAGER, tx_data, sizeof(tx_data));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,8 +98,11 @@ void management_send_pairing_request_event(uint8_t *data, uint16_t len) {
|
|||||||
|
|
||||||
static void process_command(uint8_t *data, uint16_t len) {
|
static void process_command(uint8_t *data, uint16_t len) {
|
||||||
uint8_t cmd = data[0];
|
uint8_t cmd = data[0];
|
||||||
|
bool success = true;
|
||||||
|
bool send_respons = true;
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case INTERNAL_CMD_SEND_STATE:
|
case INTERNAL_CMD_SEND_STATE:
|
||||||
|
send_respons = false;
|
||||||
management_send_status_event();
|
management_send_status_event();
|
||||||
break;
|
break;
|
||||||
case INTERNAL_CMD_ADVERTISING_ON:
|
case INTERNAL_CMD_ADVERTISING_ON:
|
||||||
@ -103,25 +113,32 @@ static void process_command(uint8_t *data, uint16_t len) {
|
|||||||
break;
|
break;
|
||||||
case INTERNAL_CMD_ERASE_BONDS:
|
case INTERNAL_CMD_ERASE_BONDS:
|
||||||
bonds_erase_all();
|
bonds_erase_all();
|
||||||
management_send_success_event();
|
|
||||||
break;
|
break;
|
||||||
case INTERNAL_CMD_DISCONNECT:
|
case INTERNAL_CMD_DISCONNECT:
|
||||||
connection_disconnect();
|
connection_disconnect();
|
||||||
management_send_success_event();
|
|
||||||
case INTERNAL_CMD_ACK:
|
case INTERNAL_CMD_ACK:
|
||||||
// pb_msg_ack();
|
// pb_msg_ack();
|
||||||
break;
|
break;
|
||||||
case INTERNAL_CMD_ALLOW_PAIRING:
|
case INTERNAL_CMD_ALLOW_PAIRING:
|
||||||
pairing_num_comp_reply(true);
|
pairing_num_comp_reply(true);
|
||||||
management_send_success_event();
|
break;
|
||||||
break;
|
|
||||||
case INTERNAL_CMD_REJECT_PAIRING:
|
case INTERNAL_CMD_REJECT_PAIRING:
|
||||||
pairing_num_comp_reply(false);
|
pairing_num_comp_reply(false);
|
||||||
management_send_success_event();
|
break;
|
||||||
break;
|
case INTERNAL_CMD_UNPAIR:
|
||||||
|
success = bonds_erase_current();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (send_respons) {
|
||||||
|
if (success) {
|
||||||
|
management_send_success_event();
|
||||||
|
} else {
|
||||||
|
management_send_failure_event();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void management_init(void) { k_sem_give(&management_ok); }
|
void management_init(void) { k_sem_give(&management_ok); }
|
||||||
|
Loading…
Reference in New Issue
Block a user