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.h31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/components/ble/NotificationManager.h b/src/components/ble/NotificationManager.h
index 40f174ea..4c199dbf 100644
--- a/src/components/ble/NotificationManager.h
+++ b/src/components/ble/NotificationManager.h
@@ -26,9 +26,9 @@ namespace Pinetime {
struct Notification {
using Id = uint8_t;
- Id id;
+ using Idx = uint8_t;
+ Id id = 0;
bool valid = false;
- uint8_t index;
uint8_t size;
std::array<char, MessageSize + 1> message;
Categories category = Categories::Unknown;
@@ -36,27 +36,38 @@ namespace Pinetime {
const char* Message() const;
const char* Title() const;
};
- Notification::Id nextId {0};
void Push(Notification&& notif);
- Notification GetLastNotification();
- Notification GetNext(Notification::Id id);
- Notification GetPrevious(Notification::Id id);
+ Notification GetLastNotification() const;
+ Notification Get(Notification::Id id) const;
+ Notification GetNext(Notification::Id id) const;
+ Notification GetPrevious(Notification::Id id) const;
+ // Return the index of the notification with the specified id, if not found return NbNotifications()
+ Notification::Idx IndexOf(Notification::Id id) const;
bool ClearNewNotificationFlag();
- bool AreNewNotificationsAvailable();
+ bool AreNewNotificationsAvailable() const;
+ void Dismiss(Notification::Id id);
static constexpr size_t MaximumMessageSize() {
return MessageSize;
};
+ bool IsEmpty() const {
+ return size == 0;
+ }
size_t NbNotifications() const;
private:
+ Notification::Id nextId {0};
Notification::Id GetNextId();
+ const Notification& At(Notification::Idx idx) const;
+ Notification& At(Notification::Idx idx);
+ void DismissIdx(Notification::Idx idx);
+
static constexpr uint8_t TotalNbNotifications = 5;
std::array<Notification, TotalNbNotifications> notifications;
- uint8_t readIndex = 0;
- uint8_t writeIndex = 0;
- bool empty = true;
+ size_t beginIdx = TotalNbNotifications - 1; // index of the newest notification
+ size_t size = 0; // number of valid notifications in buffer
+
std::atomic<bool> newNotification {false};
};
}