* companion radio: offline messages queue
This commit is contained in:
@@ -42,6 +42,10 @@
|
|||||||
#define MAX_CONTACTS 100
|
#define MAX_CONTACTS 100
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef OFFLINE_QUEUE_SIZE
|
||||||
|
#define OFFLINE_QUEUE_SIZE 16
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <helpers/BaseChatMesh.h>
|
#include <helpers/BaseChatMesh.h>
|
||||||
|
|
||||||
#define SEND_TIMEOUT_BASE_MILLIS 300
|
#define SEND_TIMEOUT_BASE_MILLIS 300
|
||||||
@@ -143,6 +147,13 @@ class MyMesh : public BaseChatMesh {
|
|||||||
uint8_t cmd_frame[MAX_FRAME_SIZE+1];
|
uint8_t cmd_frame[MAX_FRAME_SIZE+1];
|
||||||
uint8_t out_frame[MAX_FRAME_SIZE+1];
|
uint8_t out_frame[MAX_FRAME_SIZE+1];
|
||||||
|
|
||||||
|
struct Frame {
|
||||||
|
uint8_t len;
|
||||||
|
uint8_t buf[MAX_FRAME_SIZE];
|
||||||
|
};
|
||||||
|
int offline_queue_len;
|
||||||
|
Frame offline_queue[OFFLINE_QUEUE_SIZE];
|
||||||
|
|
||||||
void loadContacts() {
|
void loadContacts() {
|
||||||
if (_fs->exists("/contacts3")) {
|
if (_fs->exists("/contacts3")) {
|
||||||
File file = _fs->open("/contacts3");
|
File file = _fs->open("/contacts3");
|
||||||
@@ -254,9 +265,25 @@ class MyMesh : public BaseChatMesh {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void addToOfflineQueue(const uint8_t frame[], int len) {
|
void addToOfflineQueue(const uint8_t frame[], int len) {
|
||||||
// TODO
|
if (offline_queue_len >= OFFLINE_QUEUE_SIZE) {
|
||||||
|
MESH_DEBUG_PRINTLN("ERROR: offline_queue is full!");
|
||||||
|
} else {
|
||||||
|
offline_queue[offline_queue_len].len = len;
|
||||||
|
memcpy(offline_queue[offline_queue_len].buf, frame, len);
|
||||||
|
offline_queue_len++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
int getFromOfflineQueue(uint8_t frame[]) {
|
int getFromOfflineQueue(uint8_t frame[]) {
|
||||||
|
if (offline_queue_len > 0) { // check offline queue
|
||||||
|
size_t len = offline_queue[0].len; // take from top of queue
|
||||||
|
memcpy(frame, offline_queue[0].buf, len);
|
||||||
|
|
||||||
|
offline_queue_len--;
|
||||||
|
for (int i = 0; i < offline_queue_len; i++) { // delete top item from queue
|
||||||
|
offline_queue[i] = offline_queue[i + 1];
|
||||||
|
}
|
||||||
|
return len;
|
||||||
|
}
|
||||||
return 0; // queue is empty
|
return 0; // queue is empty
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -364,6 +391,7 @@ public:
|
|||||||
: BaseChatMesh(radio, *new ArduinoMillis(), rng, rtc, *new StaticPoolPacketManager(16), tables), _serial(NULL)
|
: BaseChatMesh(radio, *new ArduinoMillis(), rng, rtc, *new StaticPoolPacketManager(16), tables), _serial(NULL)
|
||||||
{
|
{
|
||||||
_iter_started = false;
|
_iter_started = false;
|
||||||
|
offline_queue_len = 0;
|
||||||
|
|
||||||
// defaults
|
// defaults
|
||||||
memset(&_prefs, 0, sizeof(_prefs));
|
memset(&_prefs, 0, sizeof(_prefs));
|
||||||
|
|||||||
Reference in New Issue
Block a user