Add BleController to manage the BLE connection status

This commit is contained in:
JF 2019-12-27 17:05:49 +01:00
parent 11aa5e3d88
commit 46eeefb53a
7 changed files with 48 additions and 6 deletions

View File

@ -29,7 +29,6 @@ I've tested this project on the actual PineTime hardware.
* BLE advertising, connection and bonding * BLE advertising, connection and bonding
* BLE CTS client (retrieves the time from the connected device if it implements a CTS server) * BLE CTS client (retrieves the time from the connected device if it implements a CTS server)
* Push button to go to disable screen (and go to low power mode) / enable screen (and wake-up). **NOTE** : I'm not completely sure the power consumption is optimal, especially in sleep mode. Any help to measure and debug this is welcome. * Push button to go to disable screen (and go to low power mode) / enable screen (and wake-up). **NOTE** : I'm not completely sure the power consumption is optimal, especially in sleep mode. Any help to measure and debug this is welcome.
## How to build ## How to build

View File

@ -39,6 +39,7 @@ list(APPEND SOURCE_FILES
Components/Gfx/Gfx.cpp Components/Gfx/Gfx.cpp
BLE/BleManager.c BLE/BleManager.c
Components/Battery/BatteryController.cpp Components/Battery/BatteryController.cpp
Components/Ble/BleController.cpp
) )
set(INCLUDE_FILES set(INCLUDE_FILES
@ -53,6 +54,7 @@ set(INCLUDE_FILES
Components/Gfx/Gfx.h Components/Gfx/Gfx.h
BLE/BleManager.h BLE/BleManager.h
Components/Battery/BatteryController.h Components/Battery/BatteryController.h
Components/Ble/BleController.h
) )
nRF5x_addExecutable(pinetime-app "${SOURCE_FILES}") nRF5x_addExecutable(pinetime-app "${SOURCE_FILES}")

View File

@ -0,0 +1,11 @@
#include "BleController.h"
using namespace Pinetime::Controllers;
void Ble::Connect() {
isConnected = true;
}
void Ble::Disconnect() {
isConnected = false;
}

View File

@ -0,0 +1,15 @@
#pragma once
namespace Pinetime {
namespace Controllers {
class Ble {
public:
bool IsConnected() const {return isConnected;}
void Connect();
void Disconnect();
private:
bool isConnected = false;
};
}
}

View File

@ -10,7 +10,9 @@
using namespace Pinetime::Applications; using namespace Pinetime::Applications;
DisplayApp::DisplayApp(Pinetime::Controllers::Battery &batteryController) : batteryController{batteryController} { DisplayApp::DisplayApp(Pinetime::Controllers::Battery &batteryController, Pinetime::Controllers::Ble &bleController) :
batteryController{batteryController},
bleController{bleController} {
msgQueue = xQueueCreate(queueSize, itemSize); msgQueue = xQueueCreate(queueSize, itemSize);
} }
@ -66,8 +68,8 @@ void DisplayApp::InitHw() {
x = 181; x = 181;
gfx->DrawChar(&largeFont, '0', &x, 78, 0xffff); gfx->DrawChar(&largeFont, '0', &x, 78, 0xffff);
gfx->DrawString(10, 0, 0xffff, "BLE", &smallFont, false); gfx->DrawString(10, 0, 0x0000, "BLE", &smallFont, false);
gfx->DrawString(20, 160, 0xffff, "FRIDAY 27 DEC 2019", &smallFont, false); gfx->DrawString(20, 180, 0xffff, "FRIDAY 27 DEC 2019", &smallFont, false);
} }
void DisplayApp::Refresh() { void DisplayApp::Refresh() {
@ -133,6 +135,13 @@ void DisplayApp::RunningState() {
gfx->DrawString((240-108), 0, 0xffff, batteryChar, &smallFont, false); gfx->DrawString((240-108), 0, 0xffff, batteryChar, &smallFont, false);
} }
bool newIsBleConnected = bleController.IsConnected();
if(newIsBleConnected != bleConnected) {
bleConnected = newIsBleConnected;
uint16_t color = (bleConnected) ? 0xffff : 0x0000;
gfx->DrawString(10, 0, color, "BLE", &smallFont, false);
}
auto raw = systick_counter / 1000; auto raw = systick_counter / 1000;
auto currentDeltaSeconds = raw - deltaSeconds; auto currentDeltaSeconds = raw - deltaSeconds;

View File

@ -7,6 +7,7 @@
#include <bits/unique_ptr.h> #include <bits/unique_ptr.h>
#include <queue.h> #include <queue.h>
#include <Components/Battery/BatteryController.h> #include <Components/Battery/BatteryController.h>
#include <Components/Ble/BleController.h>
#include "lcdfont14.h" #include "lcdfont14.h"
extern const FONT_INFO lCD_70ptFontInfo; extern const FONT_INFO lCD_70ptFontInfo;
@ -17,7 +18,7 @@ namespace Pinetime {
public: public:
enum class States {Idle, Running}; enum class States {Idle, Running};
enum class Messages : uint8_t {GoToSleep, GoToRunning} ; enum class Messages : uint8_t {GoToSleep, GoToRunning} ;
DisplayApp(Pinetime::Controllers::Battery& batteryController); DisplayApp(Pinetime::Controllers::Battery& batteryController, Pinetime::Controllers::Ble& bleController);
void Start(); void Start();
void Minutes(uint8_t m); void Minutes(uint8_t m);
@ -53,7 +54,9 @@ namespace Pinetime {
static constexpr uint8_t itemSize = 1; static constexpr uint8_t itemSize = 1;
Pinetime::Controllers::Battery &batteryController; Pinetime::Controllers::Battery &batteryController;
Pinetime::Controllers::Ble &bleController;
uint16_t battery = 0; uint16_t battery = 0;
bool bleConnected = false;
}; };
} }

View File

@ -12,6 +12,7 @@
#include <libraries/log/nrf_log.h> #include <libraries/log/nrf_log.h>
#include "BLE/BleManager.h" #include "BLE/BleManager.h"
#include "Components/Battery/BatteryController.h" #include "Components/Battery/BatteryController.h"
#include "Components/Ble/BleController.h"
#if NRF_LOG_ENABLED #if NRF_LOG_ENABLED
#include "Logging/NrfLogger.h" #include "Logging/NrfLogger.h"
@ -26,6 +27,7 @@ TaskHandle_t systemThread;
bool isSleeping = false; bool isSleeping = false;
TimerHandle_t debounceTimer; TimerHandle_t debounceTimer;
Pinetime::Controllers::Battery batteryController; Pinetime::Controllers::Battery batteryController;
Pinetime::Controllers::Ble bleController;
extern "C" { extern "C" {
void vApplicationIdleHook() { void vApplicationIdleHook() {
@ -85,11 +87,12 @@ void SystemTask(void *) {
} }
void OnNewTime(uint8_t minutes, uint8_t hours) { void OnNewTime(uint8_t minutes, uint8_t hours) {
bleController.Connect();
displayApp->SetTime(minutes, hours); displayApp->SetTime(minutes, hours);
} }
int main(void) { int main(void) {
displayApp.reset(new Pinetime::Applications::DisplayApp(batteryController)); displayApp.reset(new Pinetime::Applications::DisplayApp(batteryController, bleController));
logger.Init(); logger.Init();
nrf_drv_clock_init(); nrf_drv_clock_init();