What's Changed
Enhancements
- Add TRMNL X menu and special functions by @schrockwell in #696
- Add celebratory animation upon touchbar tutorial completion by @schrockwell in #756
- Improve setup API by @ronakjain90 in #639
- Refactoring touchbar logic, added progress for touchbar indicator by @GoReNeY in #508
Performance
- Moved the plugin image cache write after the screen refresh by @ikraamg in #644
- Save memory with 1-bpp message/logo screens by @schrockwell in #680
Bug fixes
- Fix setup logo downloads by @schrockwell in #669
- Center wrapped message lines without their trailing space by @schrockwell in #670
- Expand odd pixels of 4-bit gray PNGs to 8 bits correctly by @schrockwell in #671
- Set PNG_MAX_BUFFERED_PIXELS on BWRY, waveshare-esp32-driver by @schrockwell in #672
- Don't show a missing image on rewind by @schrockwell in #673
- Redraw /current.bmp when the answered image was never cached by @schrockwell in #674
- Receive bodies without a Content-Length into one buffer by @schrockwell in #675
- Size uncompressed BMPs from their header, not the panel by @schrockwell in #676
- Check the PNG header before drawing and caching a new image by @ikraamg in #552
- Force screen to 1-bpp before displaying system message screens by @schrockwell in #688
- Fix png limits by @bitbank2 in #689
- Show setup screen when /api/setup returns no image URL by @joelhawksley in #585
- Fix parsing of 5 GHz SSIDs with the ")" character by @schrockwell in #708
- Fixed Xteink X4 battery ADC pin reporting 0V by @DavidOrtmann in #710
- Prevent unsigned underflow in API log sleep duration by @silasbrookshaha in #690
- Fixed the X sending an all-zero MAC to setup on 5 GHz WiFi by @ikraamg in #714
- Kept the X asleep in shipment mode after the setup portal times out by @ikraamg in #698
- Fixed the ship check opening on a short middle press by @ikraamg in #709
- Fixed Send to Me showing an error or an older image by @ikraamg in #712
- E1002 & E1004 sleep fix by @bitbank2 in #656
- Fixed og gen2 4clr I2C pins by @bitbank2 in 439e86b
- Skip the WPA2 Enterprise disable when Wi-Fi is not initialised by @ronakjain90 in #767
- Add missing NoAction button press description to the log by @ikraamg in #736
Refactoring
- Move update_playlist_order into filesystem helpers by @MaXFalstein in #597
- Move handleApiDisplayResponse out of bl.cpp by @MaXFalstein in #599
- Extract Wi-Fi connect / captive portal from bl_init by @MaXFalstein in #600
- Move goToSleep helpers out of bl.cpp by @MaXFalstein in #601
- Move wifiErrorDeepSleep into sleep_session by @MaXFalstein in #602
- Move the API retry rule and error screens out of bl_init by @ikraamg in #729
- Use MAX_QUIET_SLOW_RETRIES for both API and Wi-Fi retries by @ikraamg in #730
- Remove load_prev_image, which never decoded anything by @ikraamg in #733
- Move the button wake handling into button.cpp by @ikraamg in #734
- Move downloadAndShow into display_session.cpp by @ikraamg in #735
- Move the X touch bar setup out of bl_init by @ikraamg in #738
- Move the wake logo and the message screens out of bl.cpp by @ikraamg in #739
- Move the NTP sync and time since sleep out of bl_init by @ikraamg in #740
- Remove unused wake stub include from bl.cpp by @ikraamg in #741
- Remove the commented-out message display test in bl_init by @ikraamg in #742
- Move the log upload out of bl.cpp into app_logger.cpp by @ikraamg in #750
- Move writeSpecialFunction into display_session.cpp by @ikraamg in #751
- Move the X touch bar indicator out of display.cpp by @ikraamg in #753
Tooling
- Add one-step simulator debugging by @schrockwell in #685
- Add xteink_x4_pwr_btn to firmware releases by @schrockwell in #686
- Add integration test suite and workflow by @schrockwell in #667
- Watched the portal outlive a failed join in turbo by @ikraamg in #699
- Moved the saved-network and X portal examples into their own files by @ikraamg in #700
- Gave the X's portal waits the suite's usual 90 s by @ikraamg in #701
- Read the simulator settings from Simulator, not the subclass by @ikraamg in #702
- Added a simulator ref input to the integration workflow by @ikraamg in #704
- Fixed the merged image missing after a cached build by @ikraamg in #706
- Add test spec for #585 by @schrockwell in #707
- Refreshed the merged image on an upload-only build by @ikraamg in #711
- Added a main-only integration run with the IDF display driver by @ikraamg in #720
- Fixed three X specs that cannot pass in the full suite by @ikraamg in #723
- Fixed the publish workflows breaking on Python 3.15 by @ikraamg in #725
- Skip button examples on the XIAO ESP32-C3 by @ikraamg in #727
- Make rake firmware:build work across both espressif32 platforms by @ikraamg in #760
- Fetch trmnl-sim from GitHub by @schrockwell in 07c4130
Documentation
- Updated README server endpoints to link the BYOS guide by @kory-smith in #755
Full Changelog: v1.8.17...v1.8.18