diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-04-10 11:00:50 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-05-12 03:23:10 (GMT) |
| commit | 6c3268c24be4555b68d4fd4e4bf488d5fce1369c (patch) | |
| tree | 8297e654d86890043135ddc36cab2a61879ecf34 /src/components/ble | |
| parent | c559096005f37fd53b36c861fdd65f600a76f7c1 (diff) | |
Bluetooth Passkey Toggle setting
Diffstat (limited to 'src/components/ble')
| -rw-r--r-- | src/components/ble/BleController.h | 5 | ||||
| -rw-r--r-- | src/components/ble/NimbleController.cpp | 47 |
2 files changed, 35 insertions, 17 deletions
diff --git a/src/components/ble/BleController.h b/src/components/ble/BleController.h index 675ede2..b15d688 100644 --- a/src/components/ble/BleController.h +++ b/src/components/ble/BleController.h @@ -20,6 +20,10 @@ namespace Pinetime { void EnableRadio(); void DisableRadio(); + void EnablePasskey() { isPasskeyEnabled = true; } + void DisablePasskey() { isPasskeyEnabled = false; } + bool IsPasskeyEnabled() { return isPasskeyEnabled; } + void StartFirmwareUpdate(); void StopFirmwareUpdate(); void FirmwareUpdateTotalBytes(uint32_t totalBytes); @@ -60,6 +64,7 @@ namespace Pinetime { private: bool isConnected = false; bool isRadioEnabled = true; + bool isPasskeyEnabled = false; bool isFirmwareUpdating = false; uint32_t firmwareUpdateTotalBytes = 0; uint32_t firmwareUpdateCurrentBytes = 0; diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp index 10eb429..4dee63e 100644 --- a/src/components/ble/NimbleController.cpp +++ b/src/components/ble/NimbleController.cpp @@ -116,25 +116,38 @@ void NimbleController::Init() { ASSERT(rc == 0); bleController.Address(std::move(address)); - switch (addrType) { - case BLE_OWN_ADDR_PUBLIC: - bleController.AddressType(Ble::AddressTypes::Public); - break; - case BLE_OWN_ADDR_RANDOM: - bleController.AddressType(Ble::AddressTypes::Random); - break; - case BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT: - bleController.AddressType(Ble::AddressTypes::RPA_Public); - break; - case BLE_OWN_ADDR_RPA_RANDOM_DEFAULT: - bleController.AddressType(Ble::AddressTypes::RPA_Random); - break; + if (bleController.IsPasskeyEnabled()) { + switch (addrType) { + case BLE_OWN_ADDR_PUBLIC: + bleController.AddressType(Ble::AddressTypes::Public); + break; + case BLE_OWN_ADDR_RANDOM: + bleController.AddressType(Ble::AddressTypes::Random); + break; + case BLE_OWN_ADDR_RPA_PUBLIC_DEFAULT: + bleController.AddressType(Ble::AddressTypes::RPA_Public); + break; + case BLE_OWN_ADDR_RPA_RANDOM_DEFAULT: + bleController.AddressType(Ble::AddressTypes::RPA_Random); + break; + } + } else { + switch (addrType) { + case BLE_OWN_ADDR_PUBLIC: + bleController.AddressType(Ble::AddressTypes::Public); + break; + default: + bleController.AddressType(Ble::AddressTypes::Random); + break; + } } rc = ble_gatts_start(); ASSERT(rc == 0); - RestoreBond(); + if (bleController.IsPasskeyEnabled()) { + RestoreBond(); + } StartAdvertising(); } @@ -217,7 +230,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { NRF_LOG_INFO("Disconnect event : BLE_GAP_EVENT_DISCONNECT"); NRF_LOG_INFO("disconnect reason=%d", event->disconnect.reason); - if (event->disconnect.conn.sec_state.bonded) { + if (bleController.IsPasskeyEnabled() && event->disconnect.conn.sec_state.bonded) { PersistBond(event->disconnect.conn); } @@ -252,7 +265,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { NRF_LOG_INFO("Security event : BLE_GAP_EVENT_ENC_CHANGE"); NRF_LOG_INFO("encryption change event; status=%0X ", event->enc_change.status); - if (event->enc_change.status == 0) { + if (bleController.IsPasskeyEnabled() && event->enc_change.status == 0) { struct ble_gap_conn_desc desc; ble_gap_conn_find(event->enc_change.conn_handle, &desc); if (desc.sec_state.bonded) { @@ -281,7 +294,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) { * Use the tinycrypt prng here since rand() is predictable. */ NRF_LOG_INFO("Security event : BLE_GAP_EVENT_PASSKEY_ACTION"); - if (event->passkey.params.action == BLE_SM_IOACT_DISP) { + if (bleController.IsPasskeyEnabled() && event->passkey.params.action == BLE_SM_IOACT_DISP) { struct ble_sm_io pkey = {0}; pkey.action = event->passkey.params.action; |
