summaryrefslogtreecommitdiff
path: root/src/components/ble/NotificationManager.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/ble/NotificationManager.h')
-rw-r--r--src/components/ble/NotificationManager.h20
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