Skip to content

Commit 40cdb54

Browse files
committed
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
2 parents 69e4ab6 + 319030d commit 40cdb54

22 files changed

Lines changed: 295 additions & 87 deletions

src/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,7 @@ list(APPEND SOURCE_FILES
449449
displayapp/screens/settings/SettingSetTime.cpp
450450
displayapp/screens/settings/SettingChimes.cpp
451451
displayapp/screens/settings/SettingShakeThreshold.cpp
452+
displayapp/screens/settings/SettingAirplaneMode.cpp
452453

453454
## Watch faces
454455
displayapp/icons/bg_clock.c

src/components/ble/BleController.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@
22

33
using namespace Pinetime::Controllers;
44

5-
void Ble::Connect() {
6-
isConnected = true;
5+
void Ble::SetConnectState(Ble::ConnectStates newState) {
6+
connectionState = newState;
77
}
88

9-
void Ble::Disconnect() {
10-
isConnected = false;
9+
Ble::ConnectStates Ble::GetConnectState() const {
10+
return connectionState;
1111
}
1212

1313
void Ble::StartFirmwareUpdate() {

src/components/ble/BleController.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,14 @@ namespace Pinetime {
1010
using BleAddress = std::array<uint8_t, 6>;
1111
enum class FirmwareUpdateStates { Idle, Running, Validated, Error };
1212
enum class AddressTypes { Public, Random, RPA_Public, RPA_Random };
13+
enum class ConnectStates { Disconnected, Connected, Airplane };
1314

1415
Ble() = default;
1516
bool IsConnected() const {
16-
return isConnected;
17+
return (connectionState == ConnectStates::Connected);
1718
}
18-
void Connect();
19-
void Disconnect();
19+
void SetConnectState(ConnectStates newState);
20+
ConnectStates GetConnectState() const;
2021

2122
void StartFirmwareUpdate();
2223
void StopFirmwareUpdate();
@@ -56,7 +57,7 @@ namespace Pinetime {
5657
}
5758

5859
private:
59-
bool isConnected = false;
60+
ConnectStates connectionState = ConnectStates::Disconnected;
6061
bool isFirmwareUpdating = false;
6162
uint32_t firmwareUpdateTotalBytes = 0;
6263
uint32_t firmwareUpdateCurrentBytes = 0;

src/components/ble/NimbleController.cpp

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@
2323
using namespace Pinetime::Controllers;
2424

2525
NimbleController::NimbleController(Pinetime::System::SystemTask& systemTask,
26-
Pinetime::Controllers::Ble& bleController,
26+
Ble& bleController,
2727
DateTime& dateTimeController,
28-
Pinetime::Controllers::NotificationManager& notificationManager,
29-
Controllers::Battery& batteryController,
28+
NotificationManager& notificationManager,
29+
Battery& batteryController,
3030
Pinetime::Drivers::SpiNorFlash& spiNorFlash,
31-
Controllers::HeartRateController& heartRateController,
32-
Controllers::MotionController& motionController,
33-
Controllers::FS& fs)
31+
HeartRateController& heartRateController,
32+
MotionController& motionController,
33+
FS& fs)
3434
: systemTask {systemTask},
3535
bleController {bleController},
3636
dateTimeController {dateTimeController},
@@ -184,7 +184,9 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
184184
case BLE_GAP_EVENT_ADV_COMPLETE:
185185
NRF_LOG_INFO("Advertising event : BLE_GAP_EVENT_ADV_COMPLETE");
186186
NRF_LOG_INFO("reason=%d; status=%0X", event->adv_complete.reason, event->connect.status);
187-
StartAdvertising();
187+
if (bleController.GetConnectState() == Ble::ConnectStates::Disconnected) {
188+
StartAdvertising();
189+
}
188190
break;
189191

190192
case BLE_GAP_EVENT_CONNECT:
@@ -197,12 +199,12 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
197199
currentTimeClient.Reset();
198200
alertNotificationClient.Reset();
199201
connectionHandle = BLE_HS_CONN_HANDLE_NONE;
200-
bleController.Disconnect();
202+
bleController.SetConnectState(Ble::ConnectStates::Disconnected);
201203
fastAdvCount = 0;
202204
StartAdvertising();
203205
} else {
204206
connectionHandle = event->connect.conn_handle;
205-
bleController.Connect();
207+
bleController.SetConnectState(Ble::ConnectStates::Connected);
206208
systemTask.PushMessage(Pinetime::System::Messages::BleConnected);
207209
// Service discovery is deferred via systemtask
208210
}
@@ -220,9 +222,11 @@ int NimbleController::OnGAPEvent(ble_gap_event* event) {
220222
currentTimeClient.Reset();
221223
alertNotificationClient.Reset();
222224
connectionHandle = BLE_HS_CONN_HANDLE_NONE;
223-
bleController.Disconnect();
224-
fastAdvCount = 0;
225-
StartAdvertising();
225+
if (bleController.GetConnectState() == Ble::ConnectStates::Connected) {
226+
bleController.SetConnectState(Ble::ConnectStates::Disconnected);
227+
fastAdvCount = 0;
228+
StartAdvertising();
229+
}
226230
break;
227231

228232
case BLE_GAP_EVENT_CONN_UPDATE:
@@ -397,6 +401,22 @@ void NimbleController::NotifyBatteryLevel(uint8_t level) {
397401
}
398402
}
399403

404+
void NimbleController::SwitchAirplaneMode(bool enabled) {
405+
if (enabled) {
406+
if (bleController.IsConnected()) {
407+
bleController.SetConnectState(Ble::ConnectStates::Airplane);
408+
ble_gap_terminate(connectionHandle, BLE_ERR_REM_USER_CONN_TERM);
409+
} else {
410+
bleController.SetConnectState(Ble::ConnectStates::Airplane);
411+
ble_gap_adv_stop();
412+
}
413+
} else {
414+
bleController.SetConnectState(Ble::ConnectStates::Disconnected);
415+
fastAdvCount = 0;
416+
StartAdvertising();
417+
}
418+
}
419+
400420
void NimbleController::PersistBond(struct ble_gap_conn_desc& desc) {
401421
union ble_store_key key;
402422
union ble_store_value our_sec, peer_sec, peer_cccd_set[MYNEWT_VAL(BLE_STORE_MAX_CCCDS)] = {0};

src/components/ble/NimbleController.h

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include "components/ble/CurrentTimeService.h"
1515
#include "components/ble/DeviceInformationService.h"
1616
#include "components/ble/DfuService.h"
17+
#include "components/ble/FSService.h"
1718
#include "components/ble/HeartRateService.h"
1819
#include "components/ble/ImmediateAlertService.h"
1920
#include "components/ble/MusicService.h"
@@ -22,7 +23,6 @@
2223
#include "components/ble/MotionService.h"
2324
#include "components/ble/weather/WeatherService.h"
2425
#include "components/fs/FS.h"
25-
#include "components/ble/FSService.h"
2626

2727
namespace Pinetime {
2828
namespace Drivers {
@@ -42,18 +42,19 @@ namespace Pinetime {
4242

4343
public:
4444
NimbleController(Pinetime::System::SystemTask& systemTask,
45-
Pinetime::Controllers::Ble& bleController,
45+
Ble& bleController,
4646
DateTime& dateTimeController,
47-
Pinetime::Controllers::NotificationManager& notificationManager,
48-
Controllers::Battery& batteryController,
47+
NotificationManager& notificationManager,
48+
Battery& batteryController,
4949
Pinetime::Drivers::SpiNorFlash& spiNorFlash,
50-
Controllers::HeartRateController& heartRateController,
51-
Controllers::MotionController& motionController,
52-
Pinetime::Controllers::FS& fs);
50+
HeartRateController& heartRateController,
51+
MotionController& motionController,
52+
FS& fs);
5353
void Init();
5454
void StartAdvertising();
5555
int OnGAPEvent(ble_gap_event* event);
5656

57+
/* these are not implemented yet
5758
int OnDiscoveryEvent(uint16_t i, const ble_gatt_error* pError, const ble_gatt_svc* pSvc);
5859
int OnCTSCharacteristicDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error* error, const ble_gatt_chr* characteristic);
5960
int OnANSCharacteristicDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error* error, const ble_gatt_chr* characteristic);
@@ -62,6 +63,7 @@ namespace Pinetime {
6263
const ble_gatt_error* error,
6364
uint16_t characteristicValueHandle,
6465
const ble_gatt_dsc* descriptor);
66+
*/
6567

6668
void StartDiscovery();
6769

@@ -83,20 +85,22 @@ namespace Pinetime {
8385

8486
void RestartFastAdv() {
8587
fastAdvCount = 0;
86-
}
88+
};
89+
90+
void SwitchAirplaneMode(bool enabled);
8791

8892
private:
8993
void PersistBond(struct ble_gap_conn_desc& desc);
9094
void RestoreBond();
9195

9296
static constexpr const char* deviceName = "InfiniTime";
9397
Pinetime::System::SystemTask& systemTask;
94-
Pinetime::Controllers::Ble& bleController;
98+
Ble& bleController;
9599
DateTime& dateTimeController;
96-
Pinetime::Controllers::NotificationManager& notificationManager;
100+
NotificationManager& notificationManager;
97101
Pinetime::Drivers::SpiNorFlash& spiNorFlash;
98-
Pinetime::Controllers::FS& fs;
99-
Pinetime::Controllers::DfuService dfuService;
102+
FS& fs;
103+
DfuService dfuService;
100104

101105
DeviceInformationService deviceInformationService;
102106
CurrentTimeClient currentTimeClient;

src/components/settings/Settings.h

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,23 @@ namespace Pinetime {
1818
Shake = 3,
1919
};
2020
enum class Colors : uint8_t {
21-
White, Silver, Gray, Black, Red, Maroon, Yellow, Olive, Lime, Green, Cyan, Teal, Blue, Navy, Magenta, Purple, Orange
21+
White,
22+
Silver,
23+
Gray,
24+
Black,
25+
Red,
26+
Maroon,
27+
Yellow,
28+
Olive,
29+
Lime,
30+
Green,
31+
Cyan,
32+
Teal,
33+
Blue,
34+
Navy,
35+
Magenta,
36+
Purple,
37+
Orange
2238
};
2339
struct PineTimeStyle {
2440
Colors ColorTime = Colors::Teal;
@@ -170,18 +186,29 @@ namespace Pinetime {
170186
}
171187
settings.brightLevel = level;
172188
};
189+
173190
Controllers::BrightnessController::Levels GetBrightness() const {
174191
return settings.brightLevel;
175192
};
176193

177-
void SetStepsGoal( uint32_t goal ) {
178-
if ( goal != settings.stepsGoal ) {
194+
void SetStepsGoal(uint32_t goal) {
195+
if (goal != settings.stepsGoal) {
179196
settingsChanged = true;
180197
}
181198
settings.stepsGoal = goal;
182199
};
183200

184-
uint32_t GetStepsGoal() const { return settings.stepsGoal; };
201+
uint32_t GetStepsGoal() const {
202+
return settings.stepsGoal;
203+
};
204+
205+
void SetAirplaneMode(bool mode) {
206+
airplaneMode = mode;
207+
};
208+
209+
bool GetAirplaneMode() const {
210+
return airplaneMode;
211+
};
185212

186213
private:
187214
Pinetime::Controllers::FS& fs;
@@ -210,6 +237,10 @@ namespace Pinetime {
210237

211238
uint8_t appMenu = 0;
212239
uint8_t settingsMenu = 0;
240+
/* airplaneMode is intentionally not saved with the other watch settings and initialized
241+
* to off (false) on every boot because we always want ble to be enabled on startup
242+
*/
243+
bool airplaneMode = false;
213244

214245
void LoadSettingsFromFile();
215246
void SaveSettingsToFile();

src/displayapp/Apps.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ namespace Pinetime {
3838
SettingSetTime,
3939
SettingChimes,
4040
SettingShakeThreshold,
41+
SettingAirplaneMode,
4142
Error
4243
};
4344
}

src/displayapp/DisplayApp.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@
4949
#include "displayapp/screens/settings/SettingSetTime.h"
5050
#include "displayapp/screens/settings/SettingChimes.h"
5151
#include "displayapp/screens/settings/SettingShakeThreshold.h"
52+
#include "displayapp/screens/settings/SettingAirplaneMode.h"
5253

5354
#include "libs/lv_conf.h"
5455

@@ -292,6 +293,9 @@ void DisplayApp::Refresh() {
292293
case Messages::BleFirmwareUpdateStarted:
293294
LoadApp(Apps::FirmwareUpdate, DisplayApp::FullRefreshDirections::Down);
294295
break;
296+
case Messages::AirplaneModeToggle:
297+
PushMessageToSystemTask(System::Messages::AirplaneModeToggle);
298+
break;
295299
case Messages::UpdateDateTime:
296300
// Added to remove warning
297301
// What should happen here?
@@ -430,6 +434,10 @@ void DisplayApp::LoadApp(Apps app, DisplayApp::FullRefreshDirections direction)
430434
currentScreen = std::make_unique<Screens::SettingShakeThreshold>(this, settingsController, motionController, *systemTask);
431435
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
432436
break;
437+
case Apps::SettingAirplaneMode:
438+
currentScreen = std::make_unique<Screens::SettingAirplaneMode>(this, settingsController);
439+
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);
440+
break;
433441
case Apps::BatteryInfo:
434442
currentScreen = std::make_unique<Screens::BatteryInfo>(this, batteryController);
435443
ReturnApp(Apps::Settings, FullRefreshDirections::Down, TouchEvents::SwipeDown);

src/displayapp/Messages.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ namespace Pinetime {
2121
RestoreBrightness,
2222
ShowPairingKey,
2323
AlarmTriggered,
24-
Clock
24+
Clock,
25+
AirplaneModeToggle
2526
};
2627
}
2728
}

src/displayapp/fonts/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* Do not enable font compression and horizontal subpixel hinting
1414
* Load the file `JetBrainsMono-Bold.tff` (use the file in this repo to ensure the version matches) and specify the following range : `0x20-0x7f, 0x410-0x44f`
1515
* Add a 2nd font, load the file `FontAwesome5-Solid+Brands+Regular.woff` and specify the following
16-
range : `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015`
16+
range : `0xf293, 0xf294, 0xf244, 0xf240, 0xf242, 0xf243, 0xf241, 0xf54b, 0xf21e, 0xf1e6, 0xf54b, 0xf017, 0xf129, 0xf03a, 0xf185, 0xf560, 0xf001, 0xf3fd, 0xf069, 0xf1fc, 0xf45d, 0xf59f, 0xf5a0, 0xf029, 0xf027, 0xf028, 0xf6a9, 0xf04b, 0xf04c, 0xf048, 0xf051, 0xf095, 0xf3dd, 0xf04d, 0xf2f2, 0xf024, 0xf252, 0xf569, 0xf201, 0xf06e, 0xf015, 0xf072`
1717
* Click on Convert, and download the file `jetbrains_mono_bold_20.c` and copy it in `src/DisplayApp/Fonts`
1818
* Add the font .c file path to src/CMakeLists.txt
1919
* Add an LV_FONT_DECLARE line in src/libs/lv_conf.h

0 commit comments

Comments
 (0)