diff options
Diffstat (limited to 'src/components/ble/NotificationManager.h')
-rw-r--r-- | src/components/ble/NotificationManager.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/components/ble/NotificationManager.h b/src/components/ble/NotificationManager.h index daa1571b..49fe8306 100644 --- a/src/components/ble/NotificationManager.h +++ b/src/components/ble/NotificationManager.h @@ -1,29 +1,43 @@ #pragma once #include <array> +#include <atomic> namespace Pinetime { namespace Controllers { class NotificationManager { public: enum class Categories {Unknown, SimpleAlert, Email, News, IncomingCall, MissedCall, Sms, VoiceMail, Schedule, HighProriotyAlert, InstantMessage }; - static constexpr uint8_t MessageSize{18}; + static constexpr uint8_t MessageSize{100}; struct Notification { + using Id = uint8_t; + Id id; + bool valid = false; + uint8_t index; std::array<char, MessageSize+1> message; Categories category = Categories::Unknown; }; + Notification::Id nextId {0}; - void Push(Categories category, const char* message, uint8_t messageSize); - Notification Pop(); + void Push(Notification&& notif); + Notification GetLastNotification(); + Notification GetNext(Notification::Id id); + Notification GetPrevious(Notification::Id id); + bool ClearNewNotificationFlag(); + bool AreNewNotificationsAvailable(); + static constexpr uint8_t MaximumMessageSize() { return MessageSize; }; + size_t NbNotifications() const; private: + Notification::Id GetNextId(); static constexpr uint8_t TotalNbNotifications = 5; std::array<Notification, TotalNbNotifications> notifications; uint8_t readIndex = 0; uint8_t writeIndex = 0; bool empty = true; + std::atomic<bool> newNotification{false}; }; } }
\ No newline at end of file |