735167db22
Merge branch '30-frontend' into mbl-next
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m38s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 4s
Run unit tests on host / Run-Unit-Tests (push) Successful in 7s
Run pytests / Check-Pytest (push) Successful in 10s
2025-12-17 19:11:10 +01:00
11e31aabc2
Merge remote-tracking branch 'origin/webapi-last-tag-uid' into mbl-next
2025-12-17 18:39:26 +01:00
32e996e446
build: add requirements.txt for host python deps
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m40s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 11s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-17 18:37:34 +01:00
32bf6a8d68
always return content type application/json
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m36s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 10s
2025-12-16 23:13:04 +01:00
49197c8ca4
Merge pull request 'feat: Move tagmode setting to config.json, remove playlistdb settings' ( #57 ) from unify-config into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m38s
Check code formatting / Check-C-Format (push) Successful in 6s
Check code formatting / Check-Python-Flake8 (push) Successful in 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 11s
Reviewed-on: #57
Reviewed-by: Stefan Kratochwil <kratochwil-la@gmx.de >
2025-12-16 21:55:28 +00:00
e2f9287ebd
feat: last connected tag uid available at /api/v1/last_tag_uid
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m39s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 9s
Run pytests / Check-Pytest (push) Successful in 11s
2025-12-16 22:41:55 +01:00
19dff763bd
feat: webserver: keep alive; move playback write prot to handler
...
- Reset the app idle timer when interacting with the webapp, so that the
device does not turn off while the web ui is used.
- Handle denying put/post while playback is active centrally in the
before_request handler, so that it does not need to be copy/pasted
into every request handler.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-16 22:34:06 +01:00
b20a31ccf4
feat: webserver: redirect / to /index.html
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m41s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 4s
Run unit tests on host / Run-Unit-Tests (push) Successful in 7s
Run pytests / Check-Pytest (push) Successful in 10s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-16 21:01:18 +01:00
8a2d621c7d
feat: webserver: keep alive; move playback write prot to handler
...
- Reset the app idle timer when interacting with the webapp, so that the
device does not turn off while the web ui is used.
- Handle denying put/post while playback is active centrally in the
before_request handler, so that it does not need to be copy/pasted
into every request handler.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-16 20:48:01 +01:00
e447902001
feat: Move tagmode setting to config.json, remove playlistdb settings
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m35s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 10s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-16 20:41:40 +01:00
93ea5036dc
feat: config frontend
...
Implement nicer configuration UI:
- Show human-readable names for config settings
- Show error message received from server if storing settings fails
- Show appropriate input elements for enum choice and numerical inputs
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-16 20:41:40 +01:00
aee5a48967
fix: config: Merge defaults into config at load time
...
Merge defaults into config at load time to ensure that all config
options show up in the configuration dialog, even if they were added
after the local configuration was last changed.
Also use the merge method to merge the local config with the new config
in set_config, ensuring the config contains all keys even if the
submitted config leaves some out.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-16 20:41:40 +01:00
936020df58
feat: Add and deploy frontend
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-16 20:41:40 +01:00
768b630722
Merge pull request 'misc-stability-improvements' ( #56 ) from misc-stability-improvements into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m36s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 7s
Run pytests / Check-Pytest (push) Successful in 10s
Reviewed-on: #56
Reviewed-by: Stefan Kratochwil <kratochwil-la@gmx.de >
2025-12-16 19:25:44 +00:00
e0ff9c54bc
refactor: timer: split out two helpers from _timer_worker
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m35s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 11s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-16 20:19:30 +01:00
c0b9ef2961
fix: timer: handle modifications to timers when _timer_worker is already scheduled correctly
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m45s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 11s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 10s
Run pytests / Check-Pytest (push) Successful in 12s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-07 13:25:35 +01:00
e23f8bd34c
fix: exceptions in callback should not terminate caller
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m46s
Check code formatting / Check-C-Format (push) Successful in 9s
Check code formatting / Check-Python-Flake8 (push) Successful in 11s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 10s
Run pytests / Check-Pytest (push) Successful in 13s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-07 13:09:34 +01:00
97e9742c75
feat: Add basic watchdog timer
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-07 13:09:34 +01:00
c687e3a977
Merge pull request 'feat: copy build unix executable to other build artifacts' ( #54 ) from feat/publish_unix_build into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m40s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 10s
Run pytests / Check-Pytest (push) Successful in 12s
Reviewed-on: #54
2025-12-03 20:11:49 +00:00
aa1a02ce54
feat: copy build unix executable to other build artifacts
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m45s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 11s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 8s
Run unit tests on host / Run-Unit-Tests (push) Successful in 10s
Run pytests / Check-Pytest (push) Successful in 12s
2025-12-03 21:00:26 +01:00
3e888790e4
Merge pull request 'fix: Block certain requests during playback' ( #55 ) from block-requests-during-playback into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m43s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 11s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 9s
Run pytests / Check-Pytest (push) Successful in 12s
Reviewed-on: #55
Reviewed-by: Stefan Kratochwil <kratochwil-la@gmx.de >
2025-12-03 19:59:46 +00:00
96759c999c
fix: Block certain requests during playback
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m42s
Check code formatting / Check-C-Format (push) Successful in 9s
Check code formatting / Check-Python-Flake8 (push) Successful in 12s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 7s
Run unit tests on host / Run-Unit-Tests (push) Successful in 10s
Run pytests / Check-Pytest (push) Successful in 13s
Probably due to memory/stack overrun, some more involved web API
requests cause the system to hang if performed during playback. For now,
block these requests during playback.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-03 20:36:41 +01:00
82ed3a3c2e
Merge pull request '27-configuration-storage' ( #53 ) from 27-configuration-storage into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m42s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 9s
Run pytests / Check-Pytest (push) Successful in 12s
Reviewed-on: #53
Reviewed-by: Stefan Kratochwil <kratochwil-la@gmx.de >
2025-12-03 19:20:26 +00:00
a7e58853bb
feat: Add api/v1/config to get, put config
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m40s
Check code formatting / Check-C-Format (push) Successful in 9s
Check code formatting / Check-Python-Flake8 (push) Successful in 12s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 10s
Run pytests / Check-Pytest (push) Successful in 12s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-03 20:12:29 +01:00
2e1bc7782b
fix: Ensure each timer can only be scheduled once
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m58s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 11s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 10s
Run pytests / Check-Pytest (push) Successful in 13s
If a timer is scheduled with the timer manager while it is already
scheduled, the new exipry time should override the prev. expiry time
instead of adding a second instance of the same timer function.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-01 20:25:30 +01:00
fa0e23ee87
feat: Add play/pause and prev track function
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-01 20:25:30 +01:00
856bf34161
feat: Make button mapping configurable
...
- Remove Pin to button mapping from hwconfig, replace with a simple list
of Pins to which buttons are attached
- Add BUTTON_MAP to config.json which maps indices in the HW button list
to button names
- Update utils.Buttons to use the button map to connect the correct pins
to the matching key codes
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-01 20:25:30 +01:00
83deb1b4c2
feat: Replace hardcoded timeouts in app with configurable
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-01 20:25:30 +01:00
2225906664
feat: Move LED_COUNT from hwconfig to config.json
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-01 20:25:30 +01:00
176fc66c17
feat: config store
...
Load a config.json file from the root of the littlefs flash filesystem.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-01 20:25:30 +01:00
79a970e70a
Merge pull request 'freeze-python-code' ( #52 ) from freeze-python-code into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m38s
Check code formatting / Check-C-Format (push) Successful in 39m39s
Check code formatting / Check-Python-Flake8 (push) Successful in 12s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 10s
Run pytests / Check-Pytest (push) Successful in 13s
Reviewed-on: #52
Reviewed-by: Stefan Kratochwil <kratochwil-la@gmx.de >
2025-12-01 19:25:06 +00:00
19afb2f936
ci: Fix build.yaml for changed output dir
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m39s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 11s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 11s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-11-28 18:19:50 +01:00
3c23fc1446
feat: freeze all python code, restructure build
...
Add all python code run on the device to the manifest.py to freeze
it. This has two benefits:
- It precompiles the bytecode, so it is smaller and faster
- All code (C and python) is now in the firmware image, leaving the
littlefs filesystem on the flash free for user settings.
This requires changing the way the hardware variants are handled. There
is now only one _filesystem_ image, but instead there are different
_firmware_ images for each variant.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-11-28 18:19:50 +01:00
111ae65ebc
cleanup: Remove unused python files from src
...
Remove python files that are not referenced directly or indirectly by
main.py.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-11-28 17:59:13 +01:00
1356ea06ab
Merge pull request 'feat: new micropython unix variant with support for microdot' ( #51 ) from feat/micropython_on_unix into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 3m39s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 9s
Run pytests / Check-Pytest (push) Successful in 11s
Reviewed-on: #51
Reviewed-by: Matthias Blankertz <matthias@blankertz.org >
2025-11-28 16:58:59 +00:00
e07ee46518
style: Fix flake8 complaints
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m28s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 11s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 9s
Run pytests / Check-Pytest (push) Successful in 11s
Remove unused imports in main.py
Add missing "global" in webserver and fix spacing.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-11-28 17:48:39 +01:00
cd5515ddad
feat: new micropython variant with support for microdot
Build RPi Pico firmware image / Build-Firmware (push) Successful in 3m36s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Failing after 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 9s
Run pytests / Check-Pytest (push) Successful in 12s
2025-11-11 22:32:00 +01:00
99ad8582f0
Defined the two endpoints we need for webapi version 1
Build RPi Pico firmware image / Build-Firmware (push) Successful in 3m28s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Failing after 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 11s
2025-11-11 22:30:23 +01:00
ae875950cd
Enabled --update flag for differential flashing
2025-11-11 22:30:23 +01:00
340aea6be6
Factored out webserver sample into dedicated module
2025-11-11 22:30:18 +01:00
f64bbc27fd
basic webserver works
2025-11-11 22:28:55 +01:00
abb880baca
print network interface info
2025-11-11 22:28:49 +01:00
a59f00ad60
disabled wifi power management for now
2025-11-11 22:26:04 +01:00
135ad11de9
Minimal example for api endpoint
2025-11-11 22:26:04 +01:00
ff52e989a2
Forumlated potentially useful json schema.
...
Note that this is based on an earlier state of the project, and the
terms used in this schema may differ from the current state of the project.
2025-11-11 22:26:04 +01:00
fbb383abed
Merge pull request 'LED patterns, idle shutdown' ( #49 ) from misc-mvp-features into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 3m27s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 6s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 12s
Reviewed-on: #49
Reviewed-by: Stefan Kratochwil <kratochwil-la@gmx.de >
2025-11-11 19:39:54 +00:00
869a92d998
feat: Implement shutdown on idle when on battery
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 3m24s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 10s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 11s
Allow the PlayerApp to turn off the device if it is idle for longer then
the timeout. The timeout is currently hardcoded to 1 minute, this will be
made configurable in the future.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-11-11 20:31:48 +01:00
696f7b956c
feat: Change LED pattern based on playback state
...
Move the LED control to the utils.LedManager class. For the first
implementation, support two LED patterns 'idle' and 'playing'.
Extend the PlayerApp to set the LED pattern based on playback state.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-11-11 20:30:54 +01:00
0bb1b2758a
Merge pull request 'hw-board-updates' ( #50 ) from hw-board-updates into main
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 3m23s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Successful in 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 11s
Reviewed-on: #50
2025-11-10 20:52:07 +00:00
419d85209e
hw: Final fixes for Rev 1.2
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 3m23s
Check code formatting / Check-C-Format (push) Successful in 7s
Check code formatting / Check-Python-Flake8 (push) Successful in 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 5s
Run unit tests on host / Run-Unit-Tests (push) Successful in 9s
Run pytests / Check-Pytest (push) Successful in 11s
- Move RC522 connector a bit further away from the MAX98375 module
footprint, so a JST-XH connector can be used here too.
- Update custom rules and fix some DRC warnings (no netlist and layout
changes).
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
pcb-rev1.2
2025-11-10 21:45:57 +01:00