TallyCCUPro V3.5
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 neededCCUState.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.