The Core Rule
Your device adapter should emitHeadbandFrameV1 frames through a
HeadbandTransport.
That is the compatibility boundary for browser apps and downstream analysis.
If the frame contract is correct, app code can stay simple. If the frame
contract is unstable, everything above it becomes harder to trust.
HeadbandFrameV1
Every transport produces the same top-level frame shape:
eeg as the required block and add
other blocks only when the device exposes them clearly.
HeadbandSignalBlock
The EEG payload should be normalized into this shape:
What Must Stay Stable
HeadbandTransport
All transports implement the same lifecycle surface:
Lifecycle Expectations
The transition rules matter as much as the methods themselves. A clean
integration should make it obvious whether the transport is idle, connected,
streaming, degraded, reconnecting, disconnected, or in error.
HeadbandTransportStatus
Status updates should be explicit enough for apps to react correctly:
Practical Rules for Integrators
1
Keep channel order fixed
If the device streams
TP9, AF7, AF8, TP10, every emitted row should use
that order consistently.2
Make row width match channel count
A row should never contain more or fewer EEG values than
channelCount.3
Use the right sample rate
Do not hardcode a nominal value if the actual output rate differs.
4
Document timestamp behavior
State whether timestamps come from the device clock or a local browser clock.
5
Surface failures through status updates
Apps need clear signals for disconnects, retries, and unrecoverable errors.
Minimal Usage Pattern
Related Docs
Next
Protocol Requirements
Gather the packet and metadata details needed to satisfy the contract.
Adapter Implementation
Wire the contract into a real device adapter.