Skip to content

TallyCCUPro V3.5

Choose a tag to compare

@fiverecords fiverecords released this 27 Jan 19:48
· 29 commits to main since this release
487798f

TallyCCU Pro v3.5 Release Notes

Overview

This release introduces a completely redesigned real-time synchronization system using Server-Sent Events (SSE), replacing the previous polling-based approach. The new architecture provides instant bidirectional sync between the web interface, Companion module, and Arduino, while freeing up approximately 604 bytes of precious RAM.

New Features

Real-Time Synchronization via SSE

  • Instant parameter sync: Changes made in Companion are immediately reflected in the web interface and vice versa
  • Per-camera state storage: The web browser now maintains state for all 8 cameras, enabling seamless camera switching without losing parameter values
  • Bidirectional sync on connect: When either the web interface or Companion connects, it automatically receives the current state from the other

Automatic State Recovery

  • Web → Companion sync: When Companion connects after the web interface, it automatically receives all cached parameter values
  • Companion → Web sync: When the web interface connects after Companion, it requests and receives all parameter values via the new REQUESTSYNC protocol

Live Preset Name Updates

  • Preset names now sync instantly across all interfaces when saved or loaded
  • No more manual refresh required to see updated preset names

Improvements

Performance

  • Near-zero latency sync: Replaced 2.5-second polling interval with instant SSE push notifications
  • Faster SSE connection: Optimized header reading for instant connection establishment
  • Reduced network traffic: Only actual changes are transmitted instead of periodic full-state polls

Memory Optimization

  • Removed CCUState module: Freed ~604 bytes of RAM by moving state storage to the web browser
  • Eliminated LRU cache overhead: No longer needed with SSE-based architecture

User Interface

  • Consistent number formatting: Fixed flickering between decimal formats when values sync
  • New formatNumber() function: Ensures consistent display of numeric values across all controls

Reliability

  • Fixed override persistence bug: Resolved issue where Tally, CCU, and vMix override settings could become corrupted after power cycle
    • Root cause: Variables were being reused incorrectly when loading/saving EEPROM values
    • Each override now uses separate variables to prevent cross-contamination

Technical Changes

New Files

  • None (consolidated into existing modules)

Removed Files

  • CCUState.h - No longer needed
  • CCUState.cpp - No longer needed

Modified Files

Arduino Firmware

File Changes
webserver.h Added SSE functions: sendSSEEvent(), sendSSEPresetLoaded(), sendSSEPresetSaved(), sendSSERequestSync(), hasSSEClient(), handleSyncStatePOST()
webserver.cpp Implemented /events SSE endpoint, /syncState POST handler, preset notifications, optimized header reading
CCUBroadcast.h Added requestSync() public method
CCUBroadcast.cpp Added CCUSYNC message handling, REQUESTSYNC on client subscribe, WebServer integration
CCUControl.cpp Removed CCUState dependency, added SSE event broadcasting, fixed override save bug
TallyManager.cpp Fixed override save bug with separate variables
VmixConnector.cpp Fixed override save bug with separate variables
SdUtils.cpp Added preset load notifications to TCP and SSE clients
TallyCCUPro.ino Removed CCUState references, updated status command for SSE

Known Limitations

  • Only one SSE client supported at a time (multiple browser tabs share the same connection)
  • HTTPS not supported (Arduino Mega hardware limitation)
  • Initial sync requires either web or Companion to be connected first

Acknowledgments

Thanks to the TallyCCU Pro community for feedback and bug reports that led to these improvements.