aboutsummaryrefslogtreecommitdiff
path: root/stm32f091/backlog.c
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2022-09-26 14:15:14 +0200
committerlonkaars <loek@pipeframe.xyz>2022-09-26 14:15:14 +0200
commit5829fb58101a9edb6b9d31c9e22183f5159e1480 (patch)
tree684073a504f5bd9d8af7c459a32c07f37c799a3e /stm32f091/backlog.c
parent3608f1cc19f4bc102c1f0c5a3ab242e2e318a0b9 (diff)
implement backlog database functions
Diffstat (limited to 'stm32f091/backlog.c')
-rw-r--r--stm32f091/backlog.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/stm32f091/backlog.c b/stm32f091/backlog.c
index 1c847f0..3f21924 100644
--- a/stm32f091/backlog.c
+++ b/stm32f091/backlog.c
@@ -1 +1,34 @@
+#include <stdlib.h>
+
#include "backlog.h"
+
+ws_s_backlog_database* WS_G_BACKLOG_DATABASE = NULL;
+
+void ws_backlog_alloc(uint16_t record_amt) {
+ WS_G_BACKLOG_DATABASE = malloc(sizeof(ws_s_backlog_database) + sizeof(ws_s_backlog_record) * record_amt);
+ WS_G_BACKLOG_DATABASE->buffer_size = record_amt;
+ WS_G_BACKLOG_DATABASE->buffer_start = 0;
+ WS_G_BACKLOG_DATABASE->buffer_end = 0;
+}
+
+void ws_backlog_add_record(ws_s_backlog_record record) {
+ static uint16_t id = 0;
+
+ WS_G_BACKLOG_DATABASE->records[WS_G_BACKLOG_DATABASE->buffer_end].id = id++;
+ WS_G_BACKLOG_DATABASE->records[WS_G_BACKLOG_DATABASE->buffer_end].sens_atm_pressure = record.sens_atm_pressure;
+ WS_G_BACKLOG_DATABASE->records[WS_G_BACKLOG_DATABASE->buffer_end].sens_humidity = record.sens_humidity;
+ WS_G_BACKLOG_DATABASE->records[WS_G_BACKLOG_DATABASE->buffer_end].sens_temperature = record.sens_temperature;
+
+ // shift buffer start/end
+ WS_G_BACKLOG_DATABASE->buffer_end = (WS_G_BACKLOG_DATABASE->buffer_end + 1) % WS_G_BACKLOG_DATABASE->buffer_size;
+ if (WS_G_BACKLOG_DATABASE->buffer_end == WS_G_BACKLOG_DATABASE->buffer_start)
+ WS_G_BACKLOG_DATABASE->buffer_start = (WS_G_BACKLOG_DATABASE->buffer_start + 1) % WS_G_BACKLOG_DATABASE->buffer_size;
+}
+
+ws_s_backlog_record* ws_backlog_get_record(uint16_t record_index) {
+ return &WS_G_BACKLOG_DATABASE->records[record_index];
+}
+
+ws_s_backlog_record* ws_backlog_get_last_record(uint16_t record_offset) {
+ return ws_backlog_get_record((WS_G_BACKLOG_DATABASE->buffer_end - record_offset - 1) % WS_G_BACKLOG_DATABASE->buffer_size);
+}