summaryrefslogtreecommitdiff
path: root/src/Components/Ble/BleController.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/Components/Ble/BleController.cpp')
-rw-r--r--src/Components/Ble/BleController.cpp28
1 files changed, 28 insertions, 0 deletions
diff --git a/src/Components/Ble/BleController.cpp b/src/Components/Ble/BleController.cpp
index c245808..fd40589 100644
--- a/src/Components/Ble/BleController.cpp
+++ b/src/Components/Ble/BleController.cpp
@@ -1,7 +1,13 @@
+#include <cstring>
+#include <cstdlib>
#include "BleController.h"
using namespace Pinetime::Controllers;
+Ble::Ble() {
+ notificationQueue = xQueueCreate(10, sizeof(NotificationMessage));
+}
+
void Ble::Connect() {
isConnected = true;
}
@@ -9,3 +15,25 @@ void Ble::Connect() {
void Ble::Disconnect() {
isConnected = false;
}
+
+void Ble::PushNotification(const char *message, uint8_t size) {
+ char* messageCopy = static_cast<char *>(malloc(sizeof(char) * size));
+ std::memcpy(messageCopy, message, size);
+ NotificationMessage msg;
+ msg.size = size;
+ msg.message = messageCopy;
+
+ BaseType_t xHigherPriorityTaskWoken;
+ xHigherPriorityTaskWoken = pdFALSE;
+ xQueueSendFromISR(notificationQueue, &msg, &xHigherPriorityTaskWoken);
+ if (xHigherPriorityTaskWoken) {
+ /* Actual macro used here is port specific. */
+ // TODO : should I do something here?
+ }
+}
+
+bool Ble::PopNotification(Ble::NotificationMessage& msg) {
+ return xQueueReceive(notificationQueue, &msg, 0) != 0;
+}
+
+