diff options
| author | Michele Bini <michele.bini@gmail.com> | 2022-04-10 11:00:50 (GMT) |
|---|---|---|
| committer | Michele Bini <michele.bini@gmail.com> | 2022-04-10 11:19:45 (GMT) |
| commit | 4f46da35b4a1b0a708594cb91343b921928d6a01 (patch) | |
| tree | 91d20252a8ff11648f9449cebaa29702ce0a6438 /src/components | |
| parent | 9f68f5b227ad3c83130d7cc521c80b6caf974466 (diff) | |
Bluetooth Passkey Toggle setting
Diffstat (limited to 'src/components')
| -rw-r--r-- | src/components/ble/BleController.h | 4 | ||||
| -rw-r--r-- | src/components/ble/NimbleController.cpp | 47 | ||||
| -rw-r--r-- | src/components/settings/Settings.h | 11 |
3 files changed, 44 insertions, 18 deletions
diff --git a/src/components/ble/BleController.h b/src/components/ble/BleController.h index 675ede2..594cf40 100644 --- a/src/components/ble/BleController.h +++ b/src/components/ble/BleController.h @@ -20,6 +20,9 @@ namespace Pinetime { void EnableRadio(); void DisableRadio(); + void EnablePasskey() { isPasskeyEnabled = true; } + void DisablePasskey() { isPasskeyEnabled = false; } + void StartFirmwareUpdate(); void StopFirmwareUpdate(); void FirmwareUpdateTotalBytes(uint32_t totalBytes); @@ -60,6 +63,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..a66551e 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; diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h index 34e1af4..2d5f1d5 100644 --- a/src/components/settings/Settings.h +++ b/src/components/settings/Settings.h @@ -211,10 +211,18 @@ namespace Pinetime { return bleRadioEnabled; }; + void SetBluetoothPasskeyEnabled(bool enabled) { + settings.bluetoothPasskeyEnabled = enabled; + }; + + bool GetBluetoothPasskeyEnabled() const { + return settings.bluetoothPasskeyEnabled; + }; + private: Pinetime::Controllers::FS& fs; - static constexpr uint32_t settingsVersion = 0x0003; + static constexpr uint32_t settingsVersion = 0x3505; struct SettingsData { uint32_t version = settingsVersion; uint32_t stepsGoal = 10000; @@ -232,6 +240,7 @@ namespace Pinetime { uint16_t shakeWakeThreshold = 150; Controllers::BrightnessController::Levels brightLevel = Controllers::BrightnessController::Levels::Medium; + bool bluetoothPasskeyEnabled = false; }; SettingsData settings; |
