What's Changed
- Boot screen: simplify scale calculations and improve portrait mode layout by @davelee98 in #50
- Fix dangling pointer to out-of-scope errorResponse in sendResponse by @balloob in #51
- Unify ButtonState definition to fix ODR violation and out-of-bounds writes by @balloob in #52
- Fix staticRowBuffer overflow on panels wider than the boot scratch row by @balloob in #53
- Yield during deep-sleep wake advertising window instead of busy-spinning by @balloob in #54
- Add stuck-state watchdog for abandoned partial writes (panel rail) by @balloob in #55
- Balance touch-suspend counter so touch survives direct-write errors by @balloob in #56
- Bound led_run_step() to one flash per call to prevent device hang by @balloob in #57
- Cap total buzzer playback duration to bound blocking time by @balloob in #58
- Rate-limit blocking sensor reads in updatemsdata() with a 30s cache by @balloob in #59
- Reset config buffer capacity each load so larger reloads succeed by @balloob in #60
- Raise decompression chunk size 256 -> 2048 to cut SPI transactions by @balloob in #61
- Don't block setup() waiting for WiFi association by @balloob in #62
- Widen sendResponse() length parameter to uint16_t to avoid truncation by @balloob in #63
- Guard button event read-and-clear against ISR race by @balloob in #64
- Skip unconfigured (0xFF) LED pins in flashLed() by @balloob in #65
- Clear touch IRQ mask atomically w.r.t. the touch ISRs by @balloob in #66
- Skip nRF advertising rebuild when MSD payload is unchanged by @balloob in #67
- Set epdRefreshInProgress during partial refresh by @balloob in #68
- Make BLE command queue indices volatile (cross-task publish) by @balloob in #69
- Defer WiFi startup on deep-sleep wake until a central connects by @balloob in #70
- Minor correctness fixes: config wipe secrets, TLV bound, dead copy by @balloob in #72
- Skip empty rows in the boot color-plane pass (BWR/BWY) by @balloob in #73
- Read stored config once on boot instead of twice by @balloob in #76
- Drop per-iteration "Loop end" debug log on nRF by @balloob in #77
- Set max preferred connection interval instead of min twice (ESP32) by @balloob in #78
- Remove dead pinToButtonIndex array by @balloob in #79
- fix: re-init I2C bus before AXP2101 probe in initAXP2101 by @sebmueller in #81
- fix: validate config CRC with CRC-16/CCITT (advisory) to match toolbox/nRF/Silabs by @balloob in #83
- fix: write both bitplanes for BWR/BWY direct display by @balloob in #82
- Clear displayed_etag on etag-less full refresh by @balloob in #85
- Row-pad direct-write sizing for 1/2/4bpp single-plane formats by @balloob in #87
- Fix MJ-14 config-read chunk cap + encrypted-response 255 B guard + EP368 boot 4-gray LUT by @balloob in #88
- Emit identifiable error frames on the direct-write path (MJ-16) by @balloob in #89
- Try a lightweight GT911 probe before full reset on EPD-refresh resume by @balloob in #75
New Contributors
- @balloob made their first contribution in #51
- @sebmueller made their first contribution in #81
Full Changelog: 2.0...2.10