aboutsummaryrefslogtreecommitdiffstats
path: root/firmware/src
diff options
context:
space:
mode:
authorEddy Pedroni <epedroni@pm.me>2026-10-25 09:23:27 +0100
committerEddy Pedroni <epedroni@pm.me>2026-10-25 10:32:32 +0100
commita41db06404670b18c7a0809009d611a4bc807e90 (patch)
tree0e2ea5ca87d02da834bb2ae9e584319c4045835b /firmware/src
Initial commit, firmware skeleton
Diffstat (limited to 'firmware/src')
-rw-r--r--firmware/src/adc.hpp25
-rw-r--r--firmware/src/debug.hpp12
-rw-r--r--firmware/src/display.hpp22
-rw-r--r--firmware/src/firmware.cpp35
-rw-r--r--firmware/src/midi.hpp15
5 files changed, 109 insertions, 0 deletions
diff --git a/firmware/src/adc.hpp b/firmware/src/adc.hpp
new file mode 100644
index 0000000..a3bd0b0
--- /dev/null
+++ b/firmware/src/adc.hpp
@@ -0,0 +1,25 @@
+#include <array>
+#include <cstdint>
+
+namespace adc
+{
+
+struct Sample
+{
+ std::uint8_t value {0};
+ bool changed {false};
+};
+
+void
+init()
+{
+}
+
+std::array<Sample, 2>
+get_samples()
+{
+ // TODO: scale 12-bit range into MIDI 7-bit range with hysteresis
+ return std::array<Sample, 2>{{{}, {}}};
+}
+
+}
diff --git a/firmware/src/debug.hpp b/firmware/src/debug.hpp
new file mode 100644
index 0000000..856da38
--- /dev/null
+++ b/firmware/src/debug.hpp
@@ -0,0 +1,12 @@
+#include <cstdio>
+
+namespace debug
+{
+
+void
+init()
+{
+ stdio_init_all();
+}
+
+}
diff --git a/firmware/src/display.hpp b/firmware/src/display.hpp
new file mode 100644
index 0000000..e2dabf2
--- /dev/null
+++ b/firmware/src/display.hpp
@@ -0,0 +1,22 @@
+#include "hardware/i2c.h"
+
+namespace display
+{
+
+// I2C0 on GPIO8 (SDA) and GPIO9 (SCL) running at 400KHz
+constexpr auto I2C_PORT = i2c0;
+constexpr unsigned I2C_SDA = 8;
+constexpr unsigned I2C_SCL = 9;
+
+void
+init()
+{
+ i2c_init(I2C_PORT, 400*1000);
+
+ gpio_set_function(I2C_SDA, GPIO_FUNC_I2C);
+ gpio_set_function(I2C_SCL, GPIO_FUNC_I2C);
+ gpio_pull_up(I2C_SDA);
+ gpio_pull_up(I2C_SCL);
+}
+
+}
diff --git a/firmware/src/firmware.cpp b/firmware/src/firmware.cpp
new file mode 100644
index 0000000..fc5bdd7
--- /dev/null
+++ b/firmware/src/firmware.cpp
@@ -0,0 +1,35 @@
+#include "pico/stdlib.h"
+
+#include "debug.hpp"
+#include "display.hpp"
+#include "adc.hpp"
+#include "midi.hpp"
+
+void
+update()
+{
+ for (auto const [value, changed] : adc::get_samples())
+ {
+ if (!changed) continue;
+
+ midi::send_message();
+ // update framebuffer
+ }
+
+ // send frame to display
+}
+
+[[noreturn]] int
+main()
+{
+ debug::init();
+ display::init();
+ adc::init();
+ midi::init();
+
+ while (true)
+ {
+ update();
+ sleep_ms(50);
+ }
+}
diff --git a/firmware/src/midi.hpp b/firmware/src/midi.hpp
new file mode 100644
index 0000000..c2d639a
--- /dev/null
+++ b/firmware/src/midi.hpp
@@ -0,0 +1,15 @@
+
+namespace midi
+{
+
+void
+init()
+{
+}
+
+void
+send_message()
+{
+}
+
+}