TallyCCUPro V3.7
TallyCCU Pro v3.7 Release Notes
Safe Mode Recovery System
This release introduces a comprehensive Safe Mode system to automatically detect and recover from hardware-related boot failures, eliminating the frustrating boot loop scenarios that could occur with SDI Shield issues.
The Problem
Previously, if the SDI Shield encountered issues during initialization (missing 12V power, invalid SDI signal, or I2C problems), the system would enter an infinite boot loop:
- Arduino boots → tries to initialize SDI Shield
- Shield blocks on I2C communication
- Watchdog triggers reset after 8 seconds
- Loop repeats indefinitely
This made diagnosis difficult since the web interface never became available.
The Solution
The new Safe Mode system tracks boot attempts using EEPROM. After 3 consecutive boot failures, the system automatically enters Safe Mode, skipping SDI Shield initialization while keeping network services available for remote diagnosis.
New Features
Automatic Boot Loop Detection
- System tracks consecutive boot failures in EEPROM
- Clean boot resets the failure counter
- After 3 failed boots, Safe Mode activates automatically
Safe Mode Operation
When in Safe Mode:
- ✓ Web interface available (diagnostic page)
- ✓ Network configuration accessible
- ✓ vMix tally connection (receive only)
- ✓ Companion TCP integration
- ✓ Serial console
- ✗ SDI tally output (disabled)
- ✗ CCU camera control (disabled)
Diagnostic Web Interface
New safemode.html page provides:
- System status (reset count, uptime, free RAM, IP)
- Common causes and solutions
- One-click "Restart Normal Mode" button
- Clear indication of what works and what doesn't
New Serial Commands
safemode- Force safe mode on next boot (for testing)normalboot- Exit safe mode and restart
New API Endpoints
GET /safemode-status- Returns JSON with system diagnosticsPOST /safemode-exit- Clears safe mode flag and restarts
Technical Details
New Files
SafeMode.h- Header with EEPROM addresses and APISafeMode.cpp- Boot failure detection and recovery logicsafemode.html- Diagnostic web interface (copy to SD card)
Modified Files
TallyCCUPro.ino- SafeMode integration, dual boot pathsTallyManager.cpp- Skip SDI Shield init in Safe ModeWebServer.h- New handler declarationsWebServer.cpp- Safe Mode endpoints and redirects
EEPROM Usage
New addresses (310-314):
- 310: Reset counter
- 311-312: Boot flag magic (0xDEAD)
- 313: Last reset reason
- 314: Manual safe mode flag
Boot Sequence
Power On
↓
SafeMode::begin() ← Called FIRST, enables watchdog
↓
Check EEPROM boot flag
↓
┌─────────────────────┐
│ Flag present? │─NO─→ Clean boot, counter = 0
│ (previous crash) │
└──────────┬──────────┘
│YES
↓
Counter++
↓
┌─────────────────────┐
│ Counter >= 3? │─NO─→ Try normal boot
└──────────┬──────────┘
│YES
↓
SAFE MODE
- Skip CCUControl::begin()
- Skip sdiTallyControl.begin()
- Initialize network/web only
- Serve safemode.html
Installation
- Upload new firmware to Arduino
- Copy
safemode.htmlto SD card root - System will boot normally
To test Safe Mode:
- Send
safemodevia serial - Send
resetor power cycle - System enters Safe Mode
- Access web interface to see diagnostic page
- Click "Restart Normal Mode" to exit
Compatibility
- Fully backward compatible with v3.6
- No changes to Companion module required
- No changes to existing web interfaces (index.html, tally.html, sdcard.html)