diff options
| author | Eddy Pedroni <epedroni@pm.me> | 2026-10-25 09:23:27 +0100 |
|---|---|---|
| committer | Eddy Pedroni <epedroni@pm.me> | 2026-10-25 10:32:32 +0100 |
| commit | a41db06404670b18c7a0809009d611a4bc807e90 (patch) | |
| tree | 0e2ea5ca87d02da834bb2ae9e584319c4045835b /firmware/src | |
Initial commit, firmware skeleton
Diffstat (limited to 'firmware/src')
| -rw-r--r-- | firmware/src/adc.hpp | 25 | ||||
| -rw-r--r-- | firmware/src/debug.hpp | 12 | ||||
| -rw-r--r-- | firmware/src/display.hpp | 22 | ||||
| -rw-r--r-- | firmware/src/firmware.cpp | 35 | ||||
| -rw-r--r-- | firmware/src/midi.hpp | 15 |
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() +{ +} + +} |
