Merge branch 'airplane-mode' of https://github.com/evergreen22/InfiniTime into evergreen22-airplane-mode

Apply a few changes that were requested in the PR during the review.

# Conflicts:
#	src/CMakeLists.txt
#	src/displayapp/Apps.h
#	src/displayapp/DisplayApp.cpp
#	src/displayapp/Messages.h
#	src/displayapp/screens/settings/Settings.cpp
This commit is contained in:
Jean-François Milants
2022-02-20 15:40:49 +01:00
parent 40cdb54772
commit ef44b763d9
21 changed files with 179 additions and 124 deletions

View File

@@ -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() {

View File

@@ -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;

View File

@@ -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();
}
}

View File

@@ -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);

View File

@@ -202,12 +202,12 @@ namespace Pinetime {
return settings.stepsGoal;
};
void SetAirplaneMode(bool mode) {
airplaneMode = mode;
void SetBleRadioEnabled(bool enabled) {
bleRadioEnabled = enabled;
};
bool GetAirplaneMode() const {
return airplaneMode;
bool GetBleRadioEnabled() const {
return bleRadioEnabled;
};
private:
@@ -240,7 +240,7 @@ namespace Pinetime {
/* 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;
bool bleRadioEnabled = true;
void LoadSettingsFromFile();
void SaveSettingsToFile();