Skip to content

Latest commit

 

History

History
113 lines (78 loc) · 1.82 KB

File metadata and controls

113 lines (78 loc) · 1.82 KB

EMOG Transport Specification v0.3

Overview

EMOG Transport provides:

  • Beacon-based stream discovery (UDP 9997)
  • Dynamic telemetry ports per producer
  • Rolling merged state on consumer
  • MTU-aware packet splitting
  • Core packet guarantee
  • Multi-group packet model

The Python library is the reference implementation.


Ports

Purpose Port
Beacon 9997 (default)
Telemetry Chosen dynamically by producer (ephemeral)

Producers MUST NOT use the beacon port for telemetry.


Beacon Packet

Sent periodically (~2 Hz default):

{ "meta": { "timestamp_ms": 123456, "source": "emog_py", "spec_version": "0.3" }, "discovery": { "telemetry_port": 12345, "stream_id": "abcd1234", "ttl_ms": 2000 } }


Telemetry Packets

Core Packet (mandatory per frame)

Contains:

  • meta
  • identity
  • vehicle
  • input
  • dynamics
  • engine

Must always be sent each frame.

Group Packets

Each additional group (wheels, aero, damage, etc.) sent separately.


MTU Rule

Packets must not exceed safe payload (~1200 bytes default).

If a group exceeds limit:

  • Split by top-level keys
  • Include meta.part_index and meta.parts_total

Consumer Rules

Consumers must:

  • Discover streams via beacon
  • Track by stream_id
  • Merge incoming packets into rolling state
  • Replace only affected group
  • Keep latest meta

Direct Endpoint Mode

For legacy feeds:

  • emog.endpoint("ip:port")
  • emog.source("spec_name") where spec contains "endpoint"

This bypasses beacon and uses direct UDP receive/send.


.emog Mapping Files (Bidirectional)

Structure:

{ "name": "erinsmod", "endpoint": "0.0.0.0:9998", "mappings": { "to_emog": [ ... ], "from_emog": [ ... ] } }

  • to_emog used when receiving via .source()
  • from_emog used when sending via .dest()