2020-03-28 18:05:28 +00:00
|
|
|
#include <cstring>
|
|
|
|
#include "NotificationManager.h"
|
|
|
|
|
|
|
|
using namespace Pinetime::Controllers;
|
|
|
|
|
|
|
|
void NotificationManager::Push(Pinetime::Controllers::NotificationManager::Categories category,
|
2020-06-28 09:59:14 +00:00
|
|
|
const char *message, uint8_t currentMessageSize) {
|
2020-03-28 18:05:28 +00:00
|
|
|
// TODO handle edge cases on read/write index
|
2020-06-28 09:59:14 +00:00
|
|
|
auto checkedSize = std::min(currentMessageSize, uint8_t{18});
|
2020-03-28 18:05:28 +00:00
|
|
|
auto& notif = notifications[writeIndex];
|
2020-06-28 09:59:14 +00:00
|
|
|
std::memcpy(notif.message.data(), message, checkedSize);
|
|
|
|
notif.message[checkedSize] = '\0';
|
2020-03-28 18:05:28 +00:00
|
|
|
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;
|
|
|
|
}
|