mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-02-01 18:30:56 +00:00
feat(ble): support setting device name from trezor
[no changelog]
This commit is contained in:
parent
69679d9f9f
commit
b8b27a343a
@ -36,7 +36,8 @@ CONFIG_POWEROFF=y
|
||||
|
||||
CONFIG_BT=y
|
||||
CONFIG_BT_PERIPHERAL=y
|
||||
CONFIG_BT_DEVICE_NAME="Trezor T3W1"
|
||||
CONFIG_BT_DEVICE_NAME="Trezor BLE"
|
||||
CONFIG_BT_DEVICE_NAME_DYNAMIC=y
|
||||
CONFIG_BT_DEVICE_APPEARANCE=833
|
||||
CONFIG_BT_MAX_CONN=1
|
||||
CONFIG_BT_MAX_PAIRED=8
|
||||
|
@ -37,10 +37,7 @@ bool advertising_wl = false;
|
||||
|
||||
uint8_t manufacturer_data[8] = {0xff, 0xff, 0, 0, 'T', '3', 'W', '1'};
|
||||
|
||||
static const struct bt_data advertising_data[] = {
|
||||
BT_DATA_BYTES(BT_DATA_FLAGS, (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR)),
|
||||
BT_DATA(BT_DATA_NAME_COMPLETE, DEVICE_NAME, DEVICE_NAME_LEN),
|
||||
};
|
||||
static struct bt_data advertising_data[2];
|
||||
|
||||
static const struct bt_data scan_response_data[] = {
|
||||
BT_DATA_BYTES(BT_DATA_UUID128_ALL, BT_UUID_TRZ_VAL),
|
||||
@ -64,22 +61,29 @@ void advertising_setup_wl(void) {
|
||||
bt_foreach_bond(BT_ID_DEFAULT, add_to_whitelist, NULL);
|
||||
}
|
||||
|
||||
void advertising_start(bool wl) {
|
||||
void advertising_start(bool wl, uint8_t color, char *name, int name_len) {
|
||||
if (advertising) {
|
||||
if (wl != advertising_wl) {
|
||||
LOG_WRN("Restarting advertising");
|
||||
bt_le_adv_stop();
|
||||
} else {
|
||||
LOG_WRN("Already advertising");
|
||||
|
||||
management_send_status_event();
|
||||
return;
|
||||
}
|
||||
LOG_WRN("Restarting advertising");
|
||||
bt_le_adv_stop();
|
||||
}
|
||||
|
||||
int err;
|
||||
|
||||
manufacturer_data[3] = 0x03; // todo color
|
||||
manufacturer_data[3] = color;
|
||||
|
||||
advertising_data[0].type = BT_DATA_FLAGS;
|
||||
advertising_data[0].data_len = 1;
|
||||
static const uint8_t flags = (BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR);
|
||||
advertising_data[0].data = &flags;
|
||||
|
||||
/* Fill second element for the name */
|
||||
advertising_data[1].type = BT_DATA_NAME_COMPLETE;
|
||||
advertising_data[1].data_len = name_len;
|
||||
advertising_data[1].data = (const uint8_t *)name;
|
||||
|
||||
char gap_name[21] = {0};
|
||||
memcpy(gap_name, name, name_len);
|
||||
|
||||
bt_set_name(gap_name);
|
||||
|
||||
if (wl) {
|
||||
advertising_setup_wl();
|
||||
|
@ -73,8 +73,6 @@ bool ble_init(void) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
bt_set_name("TrezorGAP");
|
||||
|
||||
advertising_init();
|
||||
management_init();
|
||||
|
||||
|
@ -106,7 +106,7 @@ bool bonds_erase_current(void);
|
||||
// Initialization
|
||||
void advertising_init(void);
|
||||
// Start advertising, with or without whitelist
|
||||
void advertising_start(bool wl);
|
||||
void advertising_start(bool wl, uint8_t color, char *name, int name_len);
|
||||
// Stop advertising
|
||||
void advertising_stop(void);
|
||||
// Check if advertising is active
|
||||
|
@ -62,15 +62,15 @@ void management_send_status_event(void) {
|
||||
|
||||
void management_send_success_event(void) {
|
||||
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,
|
||||
};
|
||||
INTERNAL_EVENT_FAILURE,
|
||||
};
|
||||
trz_comm_send_msg(NRF_SERVICE_BLE_MANAGER, tx_data, sizeof(tx_data));
|
||||
}
|
||||
|
||||
@ -105,9 +105,12 @@ static void process_command(uint8_t *data, uint16_t len) {
|
||||
send_respons = false;
|
||||
management_send_status_event();
|
||||
break;
|
||||
case INTERNAL_CMD_ADVERTISING_ON:
|
||||
advertising_start(data[1] != 0);
|
||||
break;
|
||||
case INTERNAL_CMD_ADVERTISING_ON: {
|
||||
uint8_t color = data[2];
|
||||
char *name = &data[3];
|
||||
int name_len = strnlen(name, 20);
|
||||
advertising_start(data[1] != 0, color, name, name_len);
|
||||
} break;
|
||||
case INTERNAL_CMD_ADVERTISING_OFF:
|
||||
advertising_stop();
|
||||
break;
|
||||
@ -121,13 +124,13 @@ static void process_command(uint8_t *data, uint16_t len) {
|
||||
break;
|
||||
case INTERNAL_CMD_ALLOW_PAIRING:
|
||||
pairing_num_comp_reply(true);
|
||||
break;
|
||||
break;
|
||||
case INTERNAL_CMD_REJECT_PAIRING:
|
||||
pairing_num_comp_reply(false);
|
||||
break;
|
||||
break;
|
||||
case INTERNAL_CMD_UNPAIR:
|
||||
success = bonds_erase_current();
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user