cd5939f4ee
feat: Enable dualstack IPv4/IPv6 for microdot
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-27 15:23:48 +01:00
02954cd87c
feat: Visual feedback on LEDs during startup
...
Set the LEDs to a fixed color during bootup to show the different modes:
- Orange when the device is booting
- Red when button 0 is held and the device goes to a shell
- Blue when button 1 is held and the device goes to AP mode instead of
joining the configured WiFi network
- Red blinking when the run() method throws an exception for any reason
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-27 15:23:48 +01:00
58f8526d7e
feat: Join an existing WiFi network
...
Add ssid and passphrase to config to configure the network to join. If
empty SSID is configured, it will create the "TonberryPicoAP..." network
in AP mode as before.
Holding the button 1 during startup will revert to AP mode regardless of
the current configuration.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-27 15:23:48 +01:00
d3aef1be32
fix: frontend: don't convert text that looks like an integer to integers
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-23 12:00:05 +01:00
b9baa1c7d5
microdot: Update to v2.5.1
...
The important fix is an urldecode bug causing umlauts to be decoded
incorrectly from url arguments. This was fixed in v2.2.0, but let's just
update to the latest version.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-23 12:00:05 +01:00
67d7650923
fix: webserver: Catch and report IO errors on upload
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-23 12:00:05 +01:00
43fd68779c
feat: store git version in fw and show in web ui
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-23 12:00:05 +01:00
704951074b
feat: Long press VOL_DOWN button to shutdown/reset device
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-21 18:31:13 +01:00
cac61f924f
Merge branch 'file-upload' into mbl-next
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 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-21 18:31:04 +01:00
9320a3cff2
fix: Show reboot request response in UI
...
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
Also make response from api more understandable for non-technical users.
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-21 18:30:45 +01:00
65efebc5c2
feat: allow reboot commands only if usb cable is inserted
2025-12-21 18:30:45 +01:00
040ae4a731
fix: fix flake8 complaint
...
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-21 18:30:45 +01:00
9cf044bc80
feat: frontend: Add reboot to bootloader button (for updates)
...
Build RPi Pico firmware image / Build-Firmware (push) Successful in 4m47s
Check code formatting / Check-C-Format (push) Successful in 6s
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
Signed-off-by: Matthias Blankertz <matthias@blankertz.org >
2025-12-21 17:07:09 +01:00
da9843adb9
feat: /api/v1/reboot/[bootloader|application], confirm with pink LED pattern
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) 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-12-21 16:57:37 +01:00
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