summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authorMichele Bini <michele.bini@gmail.com>2022-04-10 11:00:50 (GMT)
committerMichele Bini <michele.bini@gmail.com>2022-04-10 11:19:45 (GMT)
commit4f46da35b4a1b0a708594cb91343b921928d6a01 (patch)
tree91d20252a8ff11648f9449cebaa29702ce0a6438 /src/components
parent9f68f5b227ad3c83130d7cc521c80b6caf974466 (diff)
Bluetooth Passkey Toggle setting
Diffstat (limited to 'src/components')
-rw-r--r--src/components/ble/BleController.h4
-rw-r--r--src/components/ble/NimbleController.cpp47
-rw-r--r--src/components/settings/Settings.h11
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;