Skip to content

Commit 15dc335

Browse files
Release 0.18.0
1 parent 62982b0 commit 15dc335

4 files changed

Lines changed: 6 additions & 6 deletions

File tree

osupdate_esp32.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
{
2-
"version": "0.17.3",
3-
"download_url": "https://updates.micropythonos.com/releases/esp32/MicroPythonOS_esp32_0.17.3.ota",
4-
"changelog": "Board Support:\n- WebAssembly: expose WebExpander (= simulated Fri3d expander) through mpos.io_expander like on fri3d_2026 board by @DrSkunk\n\nBuiltin Apps:\n- AppStore: apply dropdown filter when adding to list so apps don't show up unnecessarily (less glitchy)\n\nFrameworks:\n- View: fix two LVGL memory leaks in activity navigation by @fdb\n\n\n0.17.2\n======\n\n- AppStore: fix 'Update N Apps' button and 'Updates (0)' dropdown behavior when opened before the background update check has run\n\n0.17.1\n======\n\nBuiltin Apps:\n- AppStore: fix 'Update' button in app detail activity\n- AppStore: improve 'Update N Apps' button behavior\n\nFrameworks:\n- View: fix crash when navigating back from an app launched via notification drawer\n\n0.17.0\n======\n\nBoard Support:\n- Fri3d 2026: update CH32 firmware to 2.0.3 which fixes issue with 2 consecutive i2c register writes (fixes #224)\n- Adapt freenove_esp32s3_display, fri3d_2024, fri3d_2026, lilygo_t4, lilygo_t_hmi, matouch_esp32_s3_spi_ips_2_8_with_camera_ov3660 and squixl to SDCardManager API changes\n\nBuiltin Apps:\n- AppStore: add new 'Installed' category and show it by default (or 'All' if there are no apps installed)\n- AppStore: fix double update check (when network established + some time after boot)\n- OSUpdate: fix double update check (when network established + some time after boot)\n- OSUpdate: randomly select between update mirrors (updates.micropythonos.com and updates.micropythonos.org) for redundancy\n- OSUpdate: if wifi is connected but update check fails (due to server error, for example) don't go into 'Waiting for WiFi' state\n\nFrameworks:\n- AudioManager: fix buzzer buzzing along when PWM instance is created and fix clicking sound on PWM init (#233) by @cheops\n- DownloadManager: resumption offset after connection loss that could prevent over-the-air update (ESP_ERR_OTA_VALIDATE_FAILED) if wifi was lost during update download\n- InputManager: add back screen and drawer menu disable/enable APIs so apps receive those keys as regular lv.KEY.ESC / lv.KEY.HOME press\n- InfiniteList: add new `mpos.ui.InfiniteList` virtual-scrolling list widget that only renders visible items, keeping memory and render cost bounded even with thousands of entries\n- SDCardManager: integrate 'sdcard' module functionality and cleanup legacy module\n- Focus: add_focus_highlight with mode='bg' now defaults to 100% background opacity, was 30%\n- Focus: bg-mode focus handler now scrolls the focused widget into view (matching the border-mode handler)\n\nOS:\n- Optimize status bar clock to reduce allocations from ~4.5 KB/s to ~224 B/s (#244) by @fdb\n- SPI: expose Device.lock()/unlock() for shared-bus arbitration between multiple drivers\n- SPI: fix MicroPython's ESP32 SPI driver DMA failures due to incorrect txdata/rxdata flags\n- WiFi: set default country code to Japan instead of World to support channel 12, 13 and 14 (including active scan, meaning hidden SSIDs)"
2+
"version": "0.18.0",
3+
"download_url": "https://updates.micropythonos.com/releases/esp32/MicroPythonOS_esp32_0.18.0.ota",
4+
"changelog": "Board Support:\n- Add Waveshare ESP32-S3-Touch-LCD-3.5 (3.5' 320x480 ST7796 over SPI with LCD reset/CS on a PCA9554 IO expander, FT6336 touch, QMI8658 IMU, AXP2101 battery management); vendors the st7796 display driver and adds a PCA9554 expander driver\n- UNIHIKER K10: improve two-button navigation, correct camera preview orientation, and restore button input after camera operations\n- unix/macOS/web: compiler fallback to bytecode on architectures without a native emitter (e.g. macOS on Apple Silicon) instead of runtime-loaded apps using @micropython.native/@micropython.viper failing to import with SyntaxError 'invalid micropython decorator'\n- Waveshare ESP32-S3-Touch-LCD-3.5: ES8311 audio support (speaker output + microphone input over I2S, DAC volume default tuned by ear on hardware)\n\nBuiltin Apps:\n- AppStore and OSUpdate: defer boot service import and start by 120s and 90s respectively via delay_s in manifest intent_filter, moving their module imports out of the boot path\n- AppStore and OSUpdate: fix cooldown blocking the first update check for 60s after boot on ESP32 (ticks_ms counts from boot)\n- AppStore: add 'Scan QR' button that opens an app's detail screen from a scanned app link (https://badgehub.eu/page/project/APP_ID, micropythonos://app/APP_ID or mpos://app/APP_ID)\n- AppStore: fix insert_app_list_item not hiding items that don't match the selected category filter, causing remote-only apps to leak into the 'Installed' view\n- AppStore: guard against segfault when the activity leaves the foreground during an async download (e.g. back_screen() while the index is downloading)\n- AppStore: open a QR deep link's app detail screen immediately when the app is already known locally, instead of waiting for the index download\n\nFrameworks:\n- AppManager: apps can declare URL handlers via 'urlPattern' in manifest intent_filters; patterns matching the official store host, mpos:// or micropythonos:// are reserved and rejected; multiple matching handlers open the chooser\n- AppManager: boot services can declare delay_s in their intent_filter; services with delay_s > 0 are imported and started asynchronously after the delay, keeping non-critical module imports out of the boot path\n- AudioManager: WAVStream on desktop and web now honors set_repeat()/repeat_count (was ESP32-only), so the MusicPlayer Repeat checkbox works across all platforms\n- AudioManager: WAVStream on ESP32 drains remaining I2S audio by wall-clock instead of a fixed sleep, fixing on_complete delays of up to 2s for low-sample-rate clips\n- Camera: after decoding a QR code in free-scan mode, show an 'Open in App Store' / 'Open link' chip when the code is an app link the OS can open\n- Camera: gracefully handle boards with no camera hardware (e.g. fri3d_2026) — show a 'No camera found' status instead of crashing on get_cameras()[0]\n- DeepLink: new mpos.content.deeplink module with strict app-link parsing (exact host allowlist, identity-only links) and URL dispatch\n- DNS (async_dns): single-flight lookups per name with a synchronous fallback when no worker thread can be spawned (e.g. boot-time thread pressure), so concurrent websocket/download connections no longer fail with 'can't create thread'\n- FileExplorer: pick mode with a path_pattern now lists only matching files (directories stay listed) — non-matching files could never be selected and taps on them were silently ignored, so listing them was pure clutter; browse mode still lists everything\n- focus_direction: skip stale widgets from inactive screens during navigation\n- FontManager: cache emoji codepoints for keyboard input by @fdb\n- FontManager: stop leaking an app's TTF and emoji fonts after the app closes by @fdb\n- fs_driver: widen callback exception handling from OSError to Exception, supporting non-seekable streams like DeflateIO\n- Nostr: surface NIP-47 (NWC) error replies through the error callback instead of silently discarding them. An UNAUTHORIZED reply (e.g. a retired wallet connection) previously left apps stuck on their connecting state forever, indistinguishable from a dead relay; identical repeated errors are forwarded once, and an error reply now also resets the relay silence watchdog since the wallet service is demonstrably answering\n- Screenshot: move the BMP encoder out of the web server into mpos.ui.testing.encode_bmp(), which both now share, and add save_screenshot_bmp() to capture the screen straight into a file\n- SharedPreferences: get_dict_item() and get_list_item_dict() now return copies, fixing silent write loss when mutating returned items\n- TaskManager: add create_supervised_task(restart_on_return=True) and use it for the aiorepl console, so it is restarted when it exits\n- TaskManager: create_task returns None when the task manager is disabled, preventing C-level crashes from asyncio.create_task on ESP32 when called from a disabled test runner context\n- topmenu: close_drawer() now accepts an animate parameter, matching the existing close_bar() API\n- topmenu: replace group.remove_all_objs() + rebuild with per-object lv.group_remove_obj() in _remove_focusables_from_group, avoiding DEFOCUSED event dispatch mid-cleanup and eliminating repeated linked-list node allocations that fragmented the LVGL heap\n- View: clear the shared default focus group before the screen is deleted to prevent dangling LVGL pointer accumulation across activity transitions\n\nOS:\n- aiorepl: stop Ctrl-D in the non-raw REPL loop from shutting asyncio down; it now ends the line like Ctrl-C\n- aiorepl: survive stdin EOF (host disconnect) by polling for reconnection instead of exiting, so the serial console no longer dies permanently after mpremote/raw-REPL connection attempts\n- boot: disable the Ctrl-C interrupt character while mpos.main boots (restored on the REPL fallback paths), so hosts connecting over serial mid-boot (e.g. mpremote entering raw REPL) can no longer silently abort the boot scripts and leave the OS half-started at the REPL\n- builtin: compress the frozen /builtin filesystem archive (freezefs --compress), saving ~39 KB of firmware flash, and strip development junk (__pycache__, .DS_Store, backup files) from it during the build (#268)\n- lvgl_micropython: add general-punctuation glyphs to Montserrat fonts\n- lvgl_micropython: add native-decorator bytecode fallback for builds without a native emitter like the unix port on aarch64 (Apple Silicon macOS) and the wasm/web port\n- lvgl_micropython: compress Montserrat 10-18 fonts to save ~19 KB of flash space\n- main.py: skip the lib/ override when lib/mpos is from a different release than the frozen firmware, instead of letting a stale lib/ (as flashed by the web installer) shadow the new frozen modules after an OTA update and crash the launcher at boot (#239)\n- nostr: improve connection management, watchdog, error management\n- sdl_keyboard: CTRL-SHIFT-S (CMD-SHIFT-S on macOS) saves a timestamped BMP screenshot in the current directory, at the screen's own pixel size instead of the scaled SDL window"
55
}

0 commit comments

Comments
 (0)