Overview

Reverse‑engineered the BLE protocol of wireless SMPTE timecode hardware to expose live sync data, pairing behavior, and initialization requirements for custom tools.

Problem

Atomos/TimecodeSystems UltraSync BLUE units support only a limited number of paired devices and provide no official API for custom integrations. The goal was to recover the BLE protocol so third‑party tools could read timecode reliably while respecting the device’s required initialization sequence.

Hardware

SMPTE Timecode Overview

SMPTE timecode is a standardized method for labeling individual frames of audio‑visual media with a monotonically increasing address. Rather than representing absolute wall‑clock time, SMPTE timecode identifies position within recorded media using a frame‑indexed format:

HH:MM:SS:FF

Where:

The meaning of the frame field (FF) is dependent on the active frame rate, making timecode a rate‑aware addressing system, not a simple timestamp.

Common frame rates include: 23.976, 24, 25, 29.97 (drop‑frame / non‑drop), and 30.

In drop‑frame modes (notably 29.97 DF), frame numbers are periodically skipped to keep timecode aligned with real elapsed time. As a result, correct timecode reconstruction requires knowledge of both the frame rate and the drop‑frame state.

Importantly, SMPTE timecode does not prescribe how timecode is transported—only how it is represented.

Timecode Representation vs. Transport

SMPTE defines the representation of timecode (HH:MM:SS:FF and its frame‑rate semantics), but not the transport mechanism used to deliver that information between devices.

Common transport methods include:

The Atomos / Timecode Systems UltraSync BLUE does not transmit LTC audio. Instead, it broadcasts timecode state using a proprietary BLE protocol. These BLE messages do not themselves constitute SMPTE timecode; rather, they contain the state required to reconstruct SMPTE timecode on the receiving device.

This distinction is critical: BLE acts as a transport layer, while SMPTE timecode remains the logical representation reconstructed by the receiver.

Converting BLE Messages into SMPTE Timecode

The UltraSync BLUE transmits periodic BLE notifications containing a snapshot of timecode state, including hours, minutes, seconds, frame index, and frame‑rate configuration and status flags.

Each BLE message represents a discrete state update, not a continuous signal. As a result, reconstructing usable SMPTE timecode requires additional logic on the receiving device.

The reconstruction process follows four conceptual steps:

  1. State acquisition — Each BLE notification is parsed to extract the current SMPTE components (HH, MM, SS, FF) and frame‑rate metadata.
  2. Local timestamping (jam point) — Upon receipt, the receiver records a local monotonic timestamp. This establishes a "jam" reference: at local time T, the master timecode state was X.
  3. Forward timecode generation — Between BLE updates, the receiver advances timecode locally by incrementing frames according to the active frame rate, handling frame, second, minute, and hour rollovers, and applying drop‑frame rules where applicable. This mirrors how a traditional LTC‑based device free‑runs between jam events.
  4. Latency compensation — BLE introduces a small but consistent transport delay. To ensure visual alignment (e.g. a slate display matching camera timecode at the clap frame), a fixed frame offset is applied during reconstruction.

In effect, BLE notifications are treated as periodic jam sync events, and SMPTE timecode is continuously regenerated from those events using a frame‑accurate local model.

Implications for Third‑Party Displays

Because BLE provides state snapshots rather than a continuous waveform, reliable third‑party timecode consumption depends on:

When these requirements are met, BLE‑transported timecode can be rendered frame‑accurately and remain visually consistent with wired LTC‑based systems, enabling reliable digital timecode displays and low‑cost slate implementations without requiring an onboard timecode generator.

Protocol

Identified the custom timecode service UUID, primary notify/read characteristic, and the frame count/config channel required for reliable initialization.

UUID Purpose Properties
9383b854-8bee-11e7-bb31-be2e44b06b34 Timecode Service
9383b110-8bee-11e7-bb31-be2e44b06b34 Primary Timecode notify, read
9383b110-8bee-11e7-bb79-be2e44b06b34 Frame Count / Config read, write
ce8dadf8-b7e0-4d9e-94cd-43f84803b361 Secondary Timecode / Status notify, read
0252db82-f8a8-4874-b5cd-e65b7b3309b9 Status / Sync notify, read

Manual Reference

UltraSync Blue manual reference screenshot
UltraSync family diagram (official manual). The ecosystem supports a limited range of compatible device types without custom integrations.
UltraSync Blue manual reference screenshot
UltraSync Bluetooth menu must remain open for continuous packet streaming (official manual).

Initialization Sequence

  1. Read frame count/config characteristic.
  2. Read device name.
  3. Subscribe to primary timecode notifications.

The official app fails to read timecode reliably unless the frame count characteristic is read first.

Tools & Methods

Key Technical Challenges

Outcome

The resulting spec enables reliable timecode reads and custom integrations without relying on the official app, while preserving proper initialization and pairing behavior.

It also makes it possible to build inexpensive digital timecode slates using off‑the‑shelf Bluetooth receivers, 7‑segment displays, and MAX driver boards to show frame‑accurate timecode.