aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Phillips <david@yeah.nah.nz>2021-02-27 23:25:04 +1300
committerDavid Phillips <david@yeah.nah.nz>2021-02-27 23:25:54 +1300
commit64a168c77568f8886662b535515ff25d056042e9 (patch)
treead0044e2c51d794b7affb4b2386afb2ed7c45b7a
parent4118386ca9a4cb717f0d79f636586f0151d3e985 (diff)
downloadaltimeter-64a168c77568f8886662b535515ff25d056042e9.tar.xz
Re-add basic display-only logic
This module will be extended later with input and UI/menu logic
-rw-r--r--Makefile2
-rw-r--r--altimeter.c18
-rw-r--r--ui.c63
-rw-r--r--ui.h10
4 files changed, 83 insertions, 10 deletions
diff --git a/Makefile b/Makefile
index a2546df..c1f53b2 100644
--- a/Makefile
+++ b/Makefile
@@ -71,6 +71,7 @@ REAL_OBJ = \
$(REAL_DIR)/altimeter.o \
$(REAL_DIR)/util.o \
$(REAL_DIR)/timer.o \
+ $(REAL_DIR)/ui.o \
$(REAL_DIR)/data_manager.o
SIM_OBJ = \
@@ -79,6 +80,7 @@ SIM_OBJ = \
$(SIM_DIR)/altimeter.o \
$(SIM_DIR)/util.o \
$(SIM_DIR)/timer.o \
+ $(SIM_DIR)/ui.o \
$(SIM_DIR)/data_manager.o
ALL_OBJ = $(TEST_OBJ) $(REAL_OBJ) $(SIM_OBJ)
diff --git a/altimeter.c b/altimeter.c
index 76dabd9..df238da 100644
--- a/altimeter.c
+++ b/altimeter.c
@@ -11,6 +11,7 @@
#include "data_manager.h"
#include "display.h"
#include "timer.h"
+#include "ui.h"
#include "barometer.h"
#ifdef WDT_DISABLE
@@ -23,35 +24,32 @@
#endif
static struct data_ctx dctx = {};
+static struct ui_ctx ui_ctx = {};
/* ISR for collecting and displaying pressure, altitude data etc */
ISR(TIMER1_COMPA_vect)
{
data_manager_tick(&dctx);
- //ui_tick();
-
+ ui_update(&ui_ctx, &dctx);
WDT_PAT_MAYBE();
}
int main(void)
{
- struct display display;
struct barometer barometer;
+ struct display display;
struct timer timer;
- /* Initialise display before enabling interrupts */
- get_system_display(&display);
- display.init();
- display.clear();
-
/* get descriptors for system default peripherals */
get_system_barometer(&barometer);
+ get_system_display(&display);
get_system_timer(&timer);
- timer.init();
+ /* Initialise peripherals/modules before enabling interrupts below */
barometer.init();
-
+ timer.init();
data_manager_init(&dctx, &timer, &barometer);
+ ui_init(&ui_ctx, &display);
#ifdef USBCON
/* Disable USB controller if one is present - this spams (latches?) USB_GEN
diff --git a/ui.c b/ui.c
new file mode 100644
index 0000000..6b63a86
--- /dev/null
+++ b/ui.c
@@ -0,0 +1,63 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "data_manager.h"
+#include "display.h"
+#include "util.h"
+#include "ui.h"
+
+void ui_init(struct ui_ctx *ui, struct display *display)
+{
+ ui->display = display;
+ ui->display->init();
+ ui->display->clear();
+}
+
+void ui_update(struct ui_ctx *ui, struct data_ctx *dctx)
+{
+ char line[LCD_WIDTH+1];
+ //if (rate_m_s < 0) {
+ // rate_sym = C_DESC;
+ //} else if (rate_m_s == 0) {
+ // rate_sym = C_IDLE;
+ //} else {
+ // rate_sym = C_ASC;
+ //}
+ //DEBUG_MARK_5_CLEAR;
+
+ /* FIXME these are missing from the data context, dummy values to test */
+ float rate_m_s = 1.2;
+ char rate_sym = '\0';
+ if (rate_m_s < 0) {
+ rate_sym = C_DESC;
+ } else if (rate_m_s == 0) {
+ rate_sym = C_IDLE;
+ } else {
+ rate_sym = C_ASC;
+ }
+
+ /* line 1 */
+ snprintf(line, sizeof(line), "%.1f m %c%d m/s", dctx->altitude, rate_sym, abs(rate_m_s));
+ blank_to_eol(line, sizeof(line));
+ ui->display->set_cursor(0, 0);
+ ui->display->write(line);
+
+
+ /* line 2 */
+ snprintf(line, sizeof(line), "%.2f hPa", dctx->pressure);
+ blank_to_eol(line, sizeof(line));
+ ui->display->set_cursor(0, 1);
+ ui->display->write(line);
+
+ /* line 3 */
+ snprintf(line, sizeof(line), "SET %.2f hPa", dctx->setting);
+ blank_to_eol(line, sizeof(line));
+ ui->display->set_cursor(0, 2);
+ ui->display->write(line);
+
+ /* line 4 */
+ snprintf(line, sizeof(line), "%.1f ""\xdf""C", 12.3f);
+ blank_to_eol(line, sizeof(line));
+ ui->display->set_cursor(0, 3);
+ ui->display->write(line);
+}
diff --git a/ui.h b/ui.h
new file mode 100644
index 0000000..c51c261
--- /dev/null
+++ b/ui.h
@@ -0,0 +1,10 @@
+#pragma once
+
+#include "data_manager.h"
+
+struct ui_ctx {
+ struct display *display;
+};
+
+void ui_init(struct ui_ctx*, struct display *);
+void ui_update(struct ui_ctx*, struct data_ctx*);