summaryrefslogtreecommitdiff
path: root/src/components/Ble/NotificationManager.cpp
diff options
context:
space:
mode:
authorAvamander <avamander@gmail.com>2020-10-02 21:44:27 +0300
committerAvamander <avamander@gmail.com>2020-10-02 21:44:27 +0300
commit40a643d203d2d21834dd2b35d83419a56a3939b6 (patch)
tree522947ffe2e7c10f6e8c45a6e7d1e58d3521829b /src/components/Ble/NotificationManager.cpp
parent455d8319e4af521de4e24cfa423a4c06c4378a8d (diff)
Renamed Components/ to components/
Diffstat (limited to 'src/components/Ble/NotificationManager.cpp')
-rw-r--r--src/components/Ble/NotificationManager.cpp30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/components/Ble/NotificationManager.cpp b/src/components/Ble/NotificationManager.cpp
new file mode 100644
index 00000000..0aea0697
--- /dev/null
+++ b/src/components/Ble/NotificationManager.cpp
@@ -0,0 +1,30 @@
+#include <cstring>
+#include "NotificationManager.h"
+
+using namespace Pinetime::Controllers;
+
+void NotificationManager::Push(Pinetime::Controllers::NotificationManager::Categories category,
+ const char *message, uint8_t currentMessageSize) {
+ // TODO handle edge cases on read/write index
+ auto checkedSize = std::min(currentMessageSize, uint8_t{18});
+ auto& notif = notifications[writeIndex];
+ std::memcpy(notif.message.data(), message, checkedSize);
+ notif.message[checkedSize] = '\0';
+ notif.category = category;
+
+ writeIndex = (writeIndex + 1 < TotalNbNotifications) ? writeIndex + 1 : 0;
+ if(!empty && writeIndex == readIndex)
+ readIndex = writeIndex + 1;
+}
+
+NotificationManager::Notification Pinetime::Controllers::NotificationManager::Pop() {
+// TODO handle edge cases on read/write index
+ NotificationManager::Notification notification = notifications[readIndex];
+
+ if(readIndex != writeIndex) {
+ readIndex = (readIndex + 1 < TotalNbNotifications) ? readIndex + 1 : 0;
+ }
+
+ // TODO Check move optimization on return
+ return notification;
+}