02150aec42
fix: frontend: Improve navigation on playlist edit screen
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m43s
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 7s
Run pytests / Check-Pytest (push) Successful in 10s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-21 15:36:53 +01:00
7be038d0d1
feat: Allow deleting files and directories
...
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 4s
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-21 15:12:31 +01:00
d96350c1a7
feat: frontend: Allow creating directories
...
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 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 4s
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-21 14:23:34 +01:00
eec3703b7e
feat: Extend audiofiles API
...
Extend the audiofiles GET API to return both directories and audio
files. Also change the JSON format to include the name and type of all
entries.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-21 14:22:38 +01:00
25ac3f0687
feat: Add API and frontend to upload files
...
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 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 4s
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-21 13:29:47 +01:00
3367bba0c5
Merge branch 'misc-fixes' 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 8s
Run pytests / Check-Pytest (push) Successful in 11s
2025-12-21 12:23:23 +01:00
c555ad94f0
fix: Increase watchdog timeout
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m42s
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 11s
Run unit tests on host / Run-Unit-Tests (push) Successful in 19s
Run pytests / Check-Pytest (push) Successful in 31s
Workaround for #60 until it is fixed.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-20 22:31:51 +01:00
10ec080e5f
fix: app: Go to idle mode when playlist end is reached
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-20 22:31:51 +01:00
fb01a8aebb
micropython: Fix filename unicode issues, enable compile-commands.json
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-20 22:31:51 +01:00
2aa2249238
Merge branch 'more-frontend' into mbl-next
2025-12-20 20:28:56 +01:00
3e275a0aee
Merge branch 'mbl/backend-for-frontend' into mbl-next
2025-12-20 20:27:58 +01:00
71949bdd1a
Merge branch '30-frontend'
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m39s
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 8s
Run pytests / Check-Pytest (push) Successful in 11s
2025-12-20 20:26:33 +01:00
8070c0e113
feat: frontend: list of playlists screen, playlist screen, add tracks screen
...
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) Failing after 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 4s
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-20 20:17:06 +01:00
e31aabbefc
Merge branch '30-frontend'
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) Failing after 9s
Check code formatting / Check-Bash-Shellcheck (push) Successful in 4s
Run unit tests on host / Run-Unit-Tests (push) Successful in 8s
Run pytests / Check-Pytest (push) Successful in 10s
2025-12-20 20:15:42 +01:00
94aa84879f
Merge pull request 'webapi-last-tag-uid' ( #58 ) from webapi-last-tag-uid into main
...
Check code formatting / Check-C-Format (push) Has been cancelled
Check code formatting / Check-Python-Flake8 (push) Has been cancelled
Check code formatting / Check-Bash-Shellcheck (push) Has been cancelled
Build RPi Pico firmware image / Build-Firmware (push) Has been cancelled
Run unit tests on host / Run-Unit-Tests (push) Has been cancelled
Run pytests / Check-Pytest (push) Has been cancelled
Reviewed-on: #58
Reviewed-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-20 19:14:20 +00:00
059b705a38
fix: webserver: Use streaming response for filesystem listing
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m37s
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 8s
Run pytests / Check-Pytest (push) Successful in 10s
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-20 19:26:18 +01:00
3213ec8f66
feat: webserver: set and delete playlists
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-20 19:26:16 +01:00
e2ca9e5139
feat: api endpoint to get playlist properties
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) Failing after 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
2025-12-20 16:52:37 +01:00
070cf887ab
feat(wip): api endpoint to get playlist properties
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m47s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Failing after 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
2025-12-20 15:40:52 +01:00
28846c9274
wip: api endpoint to list all available audio files
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m37s
Check code formatting / Check-C-Format (push) Successful in 8s
Check code formatting / Check-Python-Flake8 (push) Failing after 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 10s
Iterative approach. Currently only lists mp3 files.
2025-12-20 14:40:07 +01:00
51cb2c3a68
feat: api endpoint for reading all available playlists
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) 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 10s
2025-12-19 18:33:42 +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