Skip to content

v0.2.5 — slower inter-packet pacing

Choose a tag to compare

@terraboops terraboops released this 15 Apr 04:50
· 1 commit to main since this release

Fixed

  • Periodic ~15s freezes from BLE buffer overflow. v0.2.4 switched GIF data to `WriteWithoutResponse` to avoid hangs waiting for ATT acknowledgements, but freezes kept happening every ~30-60 minutes. Root cause turned out to be inter-packet pacing: ~45% of our sends are 2-packet GIFs, and the 100ms inter-block sleep was overflowing either the iDotMatrix firmware buffer or CoreBluetooth's transmit queue. On macOS that flips the `canSendWriteWithoutResponse` gate, which blocks the next write until the stack drains — manifesting as 5s write timeouts.

    Per the 8none1 reverse-engineering doc, the protocol expects either listening for the `0500010001` confirmation notification between blocks, or sleeping ~1 second. Bumped `BLE_INTER_PACKET_MS` from 100 to 1000.

    Multi-packet GIFs now take ~1s longer to transmit, but that's comfortably within the existing 2s debounce so overall display update latency is unchanged. Single-packet GIFs (~55% of sends) are entirely unaffected. Notification-based flow control is left for a future change.