summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJF <jf@codingfield.com>2020-05-01 21:58:31 +0200
committerJF <jf@codingfield.com>2020-05-01 21:58:31 +0200
commit87c6556ad049077ab14398637031ea029b321baf (patch)
tree55fbc74c2ea30425a5def6deab44433581445958 /src
parent56b527925ce64bc0a9ef4b0ca51a1648b6400e04 (diff)
Defer the discovery of services using the system task.
Diffstat (limited to 'src')
-rw-r--r--src/Components/Ble/AlertNotificationClient.cpp4
-rw-r--r--src/Components/Ble/AlertNotificationClient.h1
-rw-r--r--src/Components/Ble/CurrentTimeClient.cpp4
-rw-r--r--src/Components/Ble/CurrentTimeClient.h1
-rw-r--r--src/Components/Ble/NimbleController.cpp10
-rw-r--r--src/Components/Ble/NimbleController.h2
-rw-r--r--src/SystemTask/SystemTask.cpp16
-rw-r--r--src/SystemTask/SystemTask.h5
8 files changed, 28 insertions, 15 deletions
diff --git a/src/Components/Ble/AlertNotificationClient.cpp b/src/Components/Ble/AlertNotificationClient.cpp
index 6e096353..bf4d851c 100644
--- a/src/Components/Ble/AlertNotificationClient.cpp
+++ b/src/Components/Ble/AlertNotificationClient.cpp
@@ -42,10 +42,6 @@ bool AlertNotificationClient::OnDiscoveryEvent(uint16_t connectionHandle, const
return false;
}
-void AlertNotificationClient::Init() {
-
-}
-
int AlertNotificationClient::OnCharacteristicsDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error *error,
const ble_gatt_chr *characteristic) {
if(error->status != 0 && error->status != BLE_HS_EDONE) {
diff --git a/src/Components/Ble/AlertNotificationClient.h b/src/Components/Ble/AlertNotificationClient.h
index 7a085b7e..ca4f4e94 100644
--- a/src/Components/Ble/AlertNotificationClient.h
+++ b/src/Components/Ble/AlertNotificationClient.h
@@ -16,7 +16,6 @@ namespace Pinetime {
public:
explicit AlertNotificationClient(Pinetime::System::SystemTask &systemTask,
Pinetime::Controllers::NotificationManager &notificationManager);
- void Init();
bool OnDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error *error, const ble_gatt_svc *service);
int OnCharacteristicsDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error *error,
diff --git a/src/Components/Ble/CurrentTimeClient.cpp b/src/Components/Ble/CurrentTimeClient.cpp
index fdebc084..caec39d1 100644
--- a/src/Components/Ble/CurrentTimeClient.cpp
+++ b/src/Components/Ble/CurrentTimeClient.cpp
@@ -10,10 +10,6 @@ CurrentTimeClient::CurrentTimeClient(DateTime& dateTimeController) : dateTimeCon
}
-void CurrentTimeClient::Init() {
-
-}
-
bool CurrentTimeClient::OnDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error *error, const ble_gatt_svc *service) {
if(service == nullptr && error->status == BLE_HS_EDONE) {
NRF_LOG_INFO("CTS Discovery complete");
diff --git a/src/Components/Ble/CurrentTimeClient.h b/src/Components/Ble/CurrentTimeClient.h
index 2278ef15..76caff9f 100644
--- a/src/Components/Ble/CurrentTimeClient.h
+++ b/src/Components/Ble/CurrentTimeClient.h
@@ -10,7 +10,6 @@ namespace Pinetime {
class CurrentTimeClient {
public:
explicit CurrentTimeClient(DateTime& dateTimeController);
- void Init();
bool OnDiscoveryEvent(uint16_t connectionHandle, const ble_gatt_error *error, const ble_gatt_svc *service);
int OnCharacteristicDiscoveryEvent(uint16_t conn_handle, const ble_gatt_error *error,
const ble_gatt_chr *characteristic);
diff --git a/src/Components/Ble/NimbleController.cpp b/src/Components/Ble/NimbleController.cpp
index ccb1e6ad..f3d271ec 100644
--- a/src/Components/Ble/NimbleController.cpp
+++ b/src/Components/Ble/NimbleController.cpp
@@ -73,7 +73,6 @@ void NimbleController::Init() {
ble_svc_gatt_init();
deviceInformationService.Init();
-// currentTimeClient.Init();
dfuService.Init();
int res;
res = ble_hs_util_ensure_addr(0);
@@ -156,8 +155,9 @@ int NimbleController::OnGAPEvent(ble_gap_event *event) {
bleController.Disconnect();
} else {
bleController.Connect();
+ systemTask.PushMessage(Pinetime::System::SystemTask::Messages::BleConnected);
connectionHandle = event->connect.conn_handle;
-// ble_gattc_disc_all_svcs(connectionHandle, OnAllSvrDisco, this);
+ // Service discovery is deffered via systemtask
}
}
break;
@@ -166,6 +166,7 @@ int NimbleController::OnGAPEvent(ble_gap_event *event) {
NRF_LOG_INFO("disconnect; reason=%d ", event->disconnect.reason);
/* Connection terminated; resume advertising. */
+ connectionHandle = BLE_HS_CONN_HANDLE_NONE;
bleController.Disconnect();
StartAdvertising();
break;
@@ -248,7 +249,6 @@ int NimbleController::OnDiscoveryEvent(uint16_t i, const ble_gatt_error *error,
ble_gattc_disc_all_chrs(connectionHandle, alertNotificationClient.StartHandle(), alertNotificationClient.EndHandle(),
AlertNotificationCharacteristicDiscoveredCallback, this);
}
- return 0;
}
alertNotificationClient.OnDiscoveryEvent(i, error, service);
@@ -295,6 +295,10 @@ int NimbleController::OnANSDescriptorDiscoveryEventCallback(uint16_t connectionH
return alertNotificationClient.OnDescriptorDiscoveryEventCallback(connectionHandle, error, characteristicValueHandle, descriptor);
}
+void NimbleController::StartDiscovery() {
+ ble_gattc_disc_all_svcs(connectionHandle, OnAllSvrDisco, this);
+}
+
diff --git a/src/Components/Ble/NimbleController.h b/src/Components/Ble/NimbleController.h
index 25f583f2..945d3329 100644
--- a/src/Components/Ble/NimbleController.h
+++ b/src/Components/Ble/NimbleController.h
@@ -26,6 +26,8 @@ namespace Pinetime {
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();
private:
static constexpr char* deviceName = "Pinetime-JF";
Pinetime::System::SystemTask& systemTask;
diff --git a/src/SystemTask/SystemTask.cpp b/src/SystemTask/SystemTask.cpp
index 6516f68b..43ac73f9 100644
--- a/src/SystemTask/SystemTask.cpp
+++ b/src/SystemTask/SystemTask.cpp
@@ -100,9 +100,25 @@ void SystemTask::Work() {
case Messages::OnNewNotification:
displayApp->PushMessage(Pinetime::Applications::DisplayApp::Messages::NewNotification);
break;
+ case Messages::BleConnected:
+ isBleDiscoveryTimerRunning = true;
+ bleDiscoveryTimer = 5;
+ break;
default: break;
}
}
+
+ if(isBleDiscoveryTimerRunning) {
+ if(bleDiscoveryTimer == 0) {
+ isBleDiscoveryTimerRunning = false;
+ // Services discovery is deffered from 3 seconds to avoid the conflicts between the host communicating with the
+ // tharget and vice-versa. I'm not sure if this is the right way to handle this...
+ nimbleController.StartDiscovery();
+ } else {
+ bleDiscoveryTimer--;
+ }
+ }
+
uint32_t systick_counter = nrf_rtc_counter_get(portNRF_RTC_REG);
dateTimeController.UpdateTime(systick_counter);
batteryController.Update();
diff --git a/src/SystemTask/SystemTask.h b/src/SystemTask/SystemTask.h
index 5eba391b..65cfdd8f 100644
--- a/src/SystemTask/SystemTask.h
+++ b/src/SystemTask/SystemTask.h
@@ -14,7 +14,7 @@ namespace Pinetime {
namespace System {
class SystemTask {
public:
- enum class Messages {GoToSleep, GoToRunning, OnNewTime, OnNewNotification
+ enum class Messages {GoToSleep, GoToRunning, OnNewTime, OnNewNotification, BleConnected
};
SystemTask(Drivers::SpiMaster &spi, Drivers::St7789 &lcd, Drivers::Cst816S &touchPanel,
@@ -58,7 +58,8 @@ namespace Pinetime {
static void Process(void* instance);
void Work();
-
+ bool isBleDiscoveryTimerRunning = false;
+ uint8_t bleDiscoveryTimer = 0;
};
}