Commit Graph

403 Commits

Author SHA1 Message Date
Thomas Farstrike b821cdbfcd MposKeyboard: scroll into view when opening, restore scroll after closing 2025-12-18 15:07:21 +01:00
Thomas Farstrike 29af03e6b3 stream_record.py: avoid seeking by writing large file size 2025-12-17 23:34:27 +01:00
Thomas Farstrike d2f80dbfc9 stream_record.py: add periodic flushing 2025-12-17 23:00:08 +01:00
Thomas Farstrike ddf8656943 Improve recording UX 2025-12-17 22:52:57 +01:00
Thomas Farstrike 9286260453 Fix delay when finalizing sound recording 2025-12-17 22:20:24 +01:00
Thomas Farstrike da9f912ab7 AudioFlinger: add support for I2S microphone recording to WAV 2025-12-17 21:49:51 +01:00
Thomas Farstrike e64b475b10 AudioFlinger: revert to threaded method
The TaskManager (asyncio) was jittery when under heavy CPU load.
2025-12-17 20:07:51 +01:00
Thomas Farstrike 4836db557b stream_wav.py: back to 8192 chunk size
Still jitters during QuasiBird.
2025-12-17 19:36:32 +01:00
Thomas Farstrike 736b146eda Increment version number 2025-12-17 19:14:29 +01:00
Thomas Farstrike 740f239acc fix(ui/testing): use send_event for reliable label clicks in tests
click_label() now detects clickable parent containers and uses
send_event(lv.EVENT.CLICKED) instead of simulate_click() for more
reliable UI test interactions.

This fixes sporadic failures in test_graphical_imu_calibration_ui_bug.py
where clicking "Check IMU Calibration" would sometimes fail because
simulate_click() wasn't reliably triggering the click event on the
parent container.

- Add use_send_event parameter to click_label() (default: True)
- Detect clickable parent containers and send events directly to them
- Verified with 15 consecutive test runs (100% pass rate)
2025-12-17 19:09:40 +01:00
Thomas Farstrike afe8434bc7 AudioFlinger: eliminate thread by using TaskManager (asyncio)
Also simplify, and move all testing mocks to a dedicated file.
2025-12-17 17:03:42 +01:00
Thomas Farstrike 23a8f92ea9 OSUpdate app: show download speed
DownloadManager: add support for download speed
2025-12-17 15:02:31 +01:00
Thomas Farstrike 5dd24090f4 Move download_url() to DownloadManager 2025-12-17 12:26:02 +01:00
Thomas Farstrike ac7daa0018 WebSocket: fix asyncio task not always stopping 2025-12-15 12:00:27 +01:00
Thomas Farstrike 2d8a26b3cb TaskManager: return task just like asyncio.create_task() 2025-12-15 11:59:47 +01:00
Thomas Farstrike 658b999929 TaskManager: comments 2025-12-12 09:58:34 +01:00
Thomas Farstrike 7b4d08d432 TaskManager: add disable() functionality and fix unit tests 2025-12-11 22:07:04 +01:00
Thomas Farstrike 3cd66da3c4 TaskManager: simplify 2025-12-11 21:11:59 +01:00
Thomas Farstrike 8a72f3f343 TaskManager: add stop and start functions 2025-12-11 21:01:29 +01:00
Thomas Farstrike 6a9ae7238e Appstore app: allow time to update UI 2025-12-11 19:42:46 +01:00
Thomas Farstrike e1964abfa2 Add /lib/aiorepl.py 2025-12-11 19:42:16 +01:00
Thomas Farstrike 70cd00b50e Improve name of aiorepl coroutine 2025-12-11 19:29:50 +01:00
Thomas Farstrike 7ba45e692e TaskManager: without new thread works but blocks REPL
aiorepl (asyncio REPL) works but it's pretty limited

It's probably fine for production, but it means the user has to sys.exit()
in aiorepl before landing on the real interactive REPL, with asyncio tasks stopped.
2025-12-11 19:02:40 +01:00
Thomas Farstrike c0b9f68ae8 AppStore app: eliminate thread 2025-12-11 14:38:12 +01:00
Thomas Farstrike 5936dafd7e TaskManager: normal stack size for asyncio thread 2025-12-11 14:37:41 +01:00