summaryrefslogtreecommitdiff
path: root/src/components/ble
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/ble')
-rw-r--r--src/components/ble/BleController.cpp24
-rw-r--r--src/components/ble/BleController.h16
-rw-r--r--src/components/ble/NimbleController.cpp35
-rw-r--r--src/components/ble/NimbleController.h15
4 files changed, 49 insertions, 41 deletions
diff --git a/src/components/ble/BleController.cpp b/src/components/ble/BleController.cpp
index 0e1c5d7e..b6b7383a 100644
--- a/src/components/ble/BleController.cpp
+++ b/src/components/ble/BleController.cpp
@@ -2,12 +2,28 @@
using namespace Pinetime::Controllers;
-void Ble::SetConnectState(Ble::ConnectStates newState) {
- connectionState = newState;
+bool Ble::IsConnected() const {
+ return isConnected;
}
-Ble::ConnectStates Ble::GetConnectState() const {
- return connectionState;
+void Ble::Connect() {
+ isConnected = true;
+}
+
+void Ble::Disconnect() {
+ isConnected = false;
+}
+
+bool Ble::IsRadioEnabled() const {
+ return isRadioEnabled;
+}
+
+void Ble::EnableRadio() {
+ isRadioEnabled = true;
+}
+
+void Ble::DisableRadio() {
+ isRadioEnabled = false;
}
void Ble::StartFirmwareUpdate() {
diff --git a/src/components/ble/BleController.h b/src/components/ble/BleController.h
index 2714c0c3..675ede2d 100644
--- a/src/components/ble/BleController.h
+++ b/src/components/ble/BleController.h
@@ -10,14 +10,15 @@ namespace Pinetime {
using BleAddress = std::array<uint8_t, 6>;
enum class FirmwareUpdateStates { Idle, Running, Validated, Error };
enum class AddressTypes { Public, Random, RPA_Public, RPA_Random };
- enum class ConnectStates { Disconnected, Connected, Airplane };
Ble() = default;
- bool IsConnected() const {
- return (connectionState == ConnectStates::Connected);
- }
- void SetConnectState(ConnectStates newState);
- ConnectStates GetConnectState() const;
+ bool IsConnected() const;
+ void Connect();
+ void Disconnect();
+
+ bool IsRadioEnabled() const;
+ void EnableRadio();
+ void DisableRadio();
void StartFirmwareUpdate();
void StopFirmwareUpdate();
@@ -57,7 +58,8 @@ namespace Pinetime {
}
private:
- ConnectStates connectionState = ConnectStates::Disconnected;
+ bool isConnected = false;
+ bool isRadioEnabled = true;
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 94d2d155..f6ab6269 100644
--- a/src/components/ble/NimbleController.cpp
+++ b/src/components/ble/NimbleController.cpp
@@ -184,7 +184,7 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
case BLE_GAP_EVENT_ADV_COMPLETE:
NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_ADV_COMPLETE");
NRF_LOG_INFO("reason=%d; status=%0X", event->adv_complete.reason, event->connect.status);
- if (bleController.GetConnectState() == Ble::ConnectStates::Disconnected) {
+ if (bleController.IsRadioEnabled() && !bleController.IsConnected()) {
StartAdvertising();
}
break;
@@ -199,12 +199,12 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
currentTimeClient.Reset();
alertNotificationClient.Reset();
connectionHandle = BLE_HS_CONN_HANDLE_NONE;
- bleController.SetConnectState(Ble::ConnectStates::Disconnected);
+ bleController.Disconnect();
fastAdvCount = 0;
StartAdvertising();
} else {
connectionHandle = event->connect.conn_handle;
- bleController.SetConnectState(Ble::ConnectStates::Connected);
+ bleController.Connect();
systemTask.PushMessage(Pinetime::System::Messages::BleConnected);
// Service discovery is deferred via systemtask
}
@@ -222,8 +222,8 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
currentTimeClient.Reset();
alertNotificationClient.Reset();
connectionHandle = BLE_HS_CONN_HANDLE_NONE;
- if (bleController.GetConnectState() == Ble::ConnectStates::Connected) {
- bleController.SetConnectState(Ble::ConnectStates::Disconnected);
+ if(bleController.IsConnected()) {
+ bleController.Disconnect();
fastAdvCount = 0;
StartAdvertising();
}
@@ -401,19 +401,20 @@ void NimbleController::NotifyBatteryLevel(uint8_t level) {
}
}
-void NimbleController::SwitchAirplaneMode(bool enabled) {
- if (enabled) {
- if (bleController.IsConnected()) {
- bleController.SetConnectState(Ble::ConnectStates::Airplane);
- ble_gap_terminate(connectionHandle, BLE_ERR_REM_USER_CONN_TERM);
- } else {
- bleController.SetConnectState(Ble::ConnectStates::Airplane);
- ble_gap_adv_stop();
- }
+void NimbleController::EnableRadio() {
+ bleController.EnableRadio();
+ bleController.Disconnect();
+ fastAdvCount = 0;
+ StartAdvertising();
+}
+
+void NimbleController::DisableRadio() {
+ bleController.DisableRadio();
+ if (bleController.IsConnected()) {
+ ble_gap_terminate(connectionHandle, BLE_ERR_REM_USER_CONN_TERM);
+ bleController.Disconnect();
} else {
- bleController.SetConnectState(Ble::ConnectStates::Disconnected);
- fastAdvCount = 0;
- StartAdvertising();
+ ble_gap_adv_stop();
}
}
diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h
index 7219ba6b..ad194212 100644
--- a/src/components/ble/NimbleController.h
+++ b/src/components/ble/NimbleController.h
@@ -53,18 +53,6 @@ namespace Pinetime {
void Init();
void StartAdvertising();
int OnGAPEvent(ble_gap_event* event);
-
- /* these are not implemented yet
- int OnDiscoveryEvent(uint16_t i, const ble_gatt_error* pError, const ble_gatt_svc* pSvc);
- int OnCTSCharacteristicDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error* error, const ble_gatt_chr* characteristic);
- int OnANSCharacteristicDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error* error, const ble_gatt_chr* characteristic);
- int OnCurrentTimeReadResult(uint16_t connectionHandle, const ble_gatt_error* error, ble_gatt_attr* attribute);
- int OnANSDescriptorDiscoveryEventCallback(uint16_t connectionHandle,
- const ble_gatt_error* error,
- uint16_t characteristicValueHandle,
- const ble_gatt_dsc* descriptor);
- */
-
void StartDiscovery();
Pinetime::Controllers::MusicService& music() {
@@ -87,7 +75,8 @@ namespace Pinetime {
fastAdvCount = 0;
};
- void SwitchAirplaneMode(bool enabled);
+ void EnableRadio();
+ void DisableRadio();
private:
void PersistBond(struct ble_gap_conn_desc& desc);