summaryrefslogtreecommitdiff
path: root/src/components
diff options
context:
space:
mode:
authorJean-François Milants <jf@codingfield.com>2022-02-20 14:25:24 (GMT)
committerJean-François Milants <jf@codingfield.com>2022-02-20 14:25:24 (GMT)
commit40cdb547727d99ff140a029ae30980001e4a68f6 (patch)
tree6cb5444d40f1d22c1ae14b7eca30cec59c0fa467 /src/components
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')
-rw-r--r--src/components/ble/BleController.cpp8
-rw-r--r--src/components/ble/BleController.h9
-rw-r--r--src/components/ble/NimbleController.cpp44
-rw-r--r--src/components/ble/NimbleController.h28
-rw-r--r--src/components/settings/Settings.h39
5 files changed, 92 insertions, 36 deletions
diff --git a/src/components/ble/BleController.cpp b/src/components/ble/BleController.cpp
index a80c971..0e1c5d7 100644
--- a/src/components/ble/BleController.cpp
+++ b/src/components/ble/BleController.cpp
@@ -2,12 +2,12 @@
using namespace Pinetime::Controllers;
-void Ble::Connect() {
- isConnected = true;
+void Ble::SetConnectState(Ble::ConnectStates newState) {
+ connectionState = newState;
}
-void Ble::Disconnect() {
- isConnected = false;
+Ble::ConnectStates Ble::GetConnectState() const {
+ return connectionState;
}
void Ble::StartFirmwareUpdate() {
diff --git a/src/components/ble/BleController.h b/src/components/ble/BleController.h
index 72b8766..2714c0c 100644
--- a/src/components/ble/BleController.h
+++ b/src/components/ble/BleController.h
@@ -10,13 +10,14 @@ 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 isConnected;
+ return (connectionState == ConnectStates::Connected);
}
- void Connect();
- void Disconnect();
+ void SetConnectState(ConnectStates newState);
+ ConnectStates GetConnectState() const;
void StartFirmwareUpdate();
void StopFirmwareUpdate();
@@ -56,7 +57,7 @@ namespace Pinetime {
}
private:
- bool isConnected = false;
+ ConnectStates connectionState = ConnectStates::Disconnected;
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 00a394f..94d2d15 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};
diff --git a/src/components/ble/NimbleController.h b/src/components/ble/NimbleController.h
index 2b300e6..7219ba6 100644
--- a/src/components/ble/NimbleController.h
+++ b/src/components/ble/NimbleController.h
@@ -14,6 +14,7 @@
#include "components/ble/CurrentTimeService.h"
#include "components/ble/DeviceInformationService.h"
#include "components/ble/DfuService.h"
+#include "components/ble/FSService.h"
#include "components/ble/HeartRateService.h"
#include "components/ble/ImmediateAlertService.h"
#include "components/ble/MusicService.h"
@@ -22,7 +23,6 @@
#include "components/ble/MotionService.h"
#include "components/ble/weather/WeatherService.h"
#include "components/fs/FS.h"
-#include "components/ble/FSService.h"
namespace Pinetime {
namespace Drivers {
@@ -42,18 +42,19 @@ namespace Pinetime {
public:
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,
- Pinetime::Controllers::FS& fs);
+ HeartRateController& heartRateController,
+ MotionController& motionController,
+ FS& fs);
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);
@@ -62,6 +63,7 @@ namespace Pinetime {
const ble_gatt_error* error,
uint16_t characteristicValueHandle,
const ble_gatt_dsc* descriptor);
+ */
void StartDiscovery();
@@ -83,7 +85,9 @@ namespace Pinetime {
void RestartFastAdv() {
fastAdvCount = 0;
- }
+ };
+
+ void SwitchAirplaneMode(bool enabled);
private:
void PersistBond(struct ble_gap_conn_desc& desc);
@@ -91,12 +95,12 @@ namespace Pinetime {
static constexpr const char* deviceName = "InfiniTime";
Pinetime::System::SystemTask& systemTask;
- Pinetime::Controllers::Ble& bleController;
+ Ble& bleController;
DateTime& dateTimeController;
- Pinetime::Controllers::NotificationManager& notificationManager;
+ NotificationManager& notificationManager;
Pinetime::Drivers::SpiNorFlash& spiNorFlash;
- Pinetime::Controllers::FS& fs;
- Pinetime::Controllers::DfuService dfuService;
+ FS& fs;
+ DfuService dfuService;
DeviceInformationService deviceInformationService;
CurrentTimeClient currentTimeClient;
diff --git a/src/components/settings/Settings.h b/src/components/settings/Settings.h
index 8d20f06..9878aac 100644
--- a/src/components/settings/Settings.h
+++ b/src/components/settings/Settings.h
@@ -18,7 +18,23 @@ namespace Pinetime {
Shake = 3,
};
enum class Colors : uint8_t {
- White, Silver, Gray, Black, Red, Maroon, Yellow, Olive, Lime, Green, Cyan, Teal, Blue, Navy, Magenta, Purple, Orange
+ White,
+ Silver,
+ Gray,
+ Black,
+ Red,
+ Maroon,
+ Yellow,
+ Olive,
+ Lime,
+ Green,
+ Cyan,
+ Teal,
+ Blue,
+ Navy,
+ Magenta,
+ Purple,
+ Orange
};
struct PineTimeStyle {
Colors ColorTime = Colors::Teal;
@@ -170,18 +186,29 @@ namespace Pinetime {
}
settings.brightLevel = level;
};
+
Controllers::BrightnessController::Levels GetBrightness() const {
return settings.brightLevel;
};
- void SetStepsGoal( uint32_t goal ) {
- if ( goal != settings.stepsGoal ) {
+ void SetStepsGoal(uint32_t goal) {
+ if (goal != settings.stepsGoal) {
settingsChanged = true;
}
settings.stepsGoal = goal;
};
- uint32_t GetStepsGoal() const { return settings.stepsGoal; };
+ uint32_t GetStepsGoal() const {
+ return settings.stepsGoal;
+ };
+
+ void SetAirplaneMode(bool mode) {
+ airplaneMode = mode;
+ };
+
+ bool GetAirplaneMode() const {
+ return airplaneMode;
+ };
private:
Pinetime::Controllers::FS& fs;
@@ -210,6 +237,10 @@ namespace Pinetime {
uint8_t appMenu = 0;
uint8_t settingsMenu = 0;
+ /* airplaneMode is intentionally not saved with the other watch settings and initialized
+ * to off (false) on every boot because we always want ble to be enabled on startup
+ */
+ bool airplaneMode = false;
void LoadSettingsFromFile();
void SaveSettingsToFile();