summaryrefslogtreecommitdiff
path: root/src/components/ble/NimbleController.cpp
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2022-02-20 15:25:24 +0100
committerJean-François Milants <jf@codingfield.com>2022-02-20 15:25:24 +0100
commit40cdb547727d99ff140a029ae30980001e4a68f6 (patch)
tree6cb5444d40f1d22c1ae14b7eca30cec59c0fa467 /src/components/ble/NimbleController.cpp
parent69e4ab6be101e7993035b56db75f5c32eda713ac (diff)
parent319030d9e16e833cf8bff569a9ecfa452165ea27 (diff)
Merge branch 'airplane-mode' of https://github.com/evergreen22/InfiniTime into evergreen22-airplane-mode
# Conflicts: # src/CMakeLists.txt # src/displayapp/Apps.h # src/displayapp/DisplayApp.cpp # src/displayapp/Messages.h # src/displayapp/screens/settings/Settings.cpp
Diffstat (limited to 'src/components/ble/NimbleController.cpp')
-rw-r--r--src/components/ble/NimbleController.cpp44
1 files changed, 32 insertions, 12 deletions
diff --git a/src/components/ble/NimbleController.cpp b/src/components/ble/NimbleController.cpp
index 00a394fe..94d2d155 100644
--- a/src/components/ble/NimbleController.cpp
+++ b/src/components/ble/NimbleController.cpp
@@ -23,14 +23,14 @@
using namespace Pinetime::Controllers;
NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
- Pinetime::Controllers::Ble& bleController,
+ Ble& bleController,
DateTime& dateTimeController,
- Pinetime::Controllers::NotificationManager& notificationManager,
- Controllers::Battery& batteryController,
+ NotificationManager& notificationManager,
+ Battery& batteryController,
Pinetime::Drivers::SpiNorFlash& spiNorFlash,
- Controllers::HeartRateController& heartRateController,
- Controllers::MotionController& motionController,
- Controllers::FS& fs)
+ HeartRateController& heartRateController,
+ MotionController& motionController,
+ FS& fs)
: systemTask {systemTask},
bleController {bleController},
dateTimeController {dateTimeController},
@@ -184,7 +184,9 @@ 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);
- StartAdvertising();
+ if (bleController.GetConnectState() == Ble::ConnectStates::Disconnected) {
+ StartAdvertising();
+ }
break;
case BLE_GAP_EVENT_CONNECT:
@@ -197,12 +199,12 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
currentTimeClient.Reset();
alertNotificationClient.Reset();
connectionHandle = BLE_HS_CONN_HANDLE_NONE;
- bleController.Disconnect();
+ bleController.SetConnectState(Ble::ConnectStates::Disconnected);
fastAdvCount = 0;
StartAdvertising();
} else {
connectionHandle = event->connect.conn_handle;
- bleController.Connect();
+ bleController.SetConnectState(Ble::ConnectStates::Connected);
systemTask.PushMessage(Pinetime::System::Messages::BleConnected);
// Service discovery is deferred via systemtask
}
@@ -220,9 +222,11 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
currentTimeClient.Reset();
alertNotificationClient.Reset();
connectionHandle = BLE_HS_CONN_HANDLE_NONE;
- bleController.Disconnect();
- fastAdvCount = 0;
- StartAdvertising();
+ if (bleController.GetConnectState() == Ble::ConnectStates::Connected) {
+ bleController.SetConnectState(Ble::ConnectStates::Disconnected);
+ fastAdvCount = 0;
+ StartAdvertising();
+ }
break;
case BLE_GAP_EVENT_CONN_UPDATE:
@@ -397,6 +401,22 @@ 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();
+ }
+ } else {
+ bleController.SetConnectState(Ble::ConnectStates::Disconnected);
+ fastAdvCount = 0;
+ StartAdvertising();
+ }
+}
+
void NimbleController::PersistBond(struct ble_gap_conn_desc& desc) {
union ble_store_key key;
union ble_store_value our_sec, peer_sec, peer_cccd_set[MYNEWT_VAL(BLE_STORE_MAX_CCCDS)] = {0};