BMS Connectors

The BMS Application uses a modular connector architecture to integrate with various real-time data sources. Each connector implements a common interface for receiving position updates, video feeds, geofences, and bullseye references.

Connector Architecture

flowchart TB subgraph External["External Data Sources"] RADAR["🛰️ RADAR
Cambridge Pixel"] TAK["📡 TAK Server
ATAK/WinTAK"] AI["🤖 AI Sensor
Autonomous Detection"] GPS["📍 GPS Receiver
NMEA 0183"] ADSB["✈️ ADS-B
OpenSky Network"] AIS["🚢 AIS
Marine Traffic"] GTFS["🚌 GTFS-RT
Transit Feeds"] JSON["📄 JSON Files
Static Data"] DDS["⚙️ DDS Bus
LDM v10"] end subgraph Connectors["BMS Connectors"] SPX["SPX Connector
UDP Multicast"] SAPIENT["SAPIENT Connector
TCP Protobuf"] COT["CoT Connector
TCP/Multicast"] NMEA["NMEA Connector
Serial/Network"] ADSBC["ADS-B Connector
REST API"] AISC["AIS Connector
WebSocket"] GTFSC["GTFS Connector
Protobuf"] JSONC["JSON Connector
File Watch"] LDMC["LDM Connector
DDS Topics"] end subgraph BMS["BMS Application"] CM["Connector Manager"] MAP["Map Widget"] TRACK["Track Display"] end %% RADAR feeds RADAR --> SPX RADAR --> SAPIENT %% AI Sensor feeds AI --> SAPIENT %% TAK feeds TAK --> COT %% Other feeds GPS --> NMEA ADSB --> ADSBC AIS --> AISC GTFS --> GTFSC JSON --> JSONC DDS --> LDMC %% Connectors to BMS SPX --> CM SAPIENT --> CM COT --> CM NMEA --> CM ADSBC --> CM AISC --> CM GTFSC --> CM JSONC --> CM LDMC --> CM CM --> MAP CM --> TRACK style RADAR fill:#e74c3c,color:#fff style AI fill:#9b59b6,color:#fff style TAK fill:#3498db,color:#fff style GPS fill:#27ae60,color:#fff style ADSB fill:#f39c12,color:#fff style AIS fill:#1abc9c,color:#fff style BMS fill:#2c3e50,color:#fff

Available Connectors

Connector Protocol Transport Description
SPX RADAR Cambridge Pixel Binary UDP Multicast RADAR track reports from Cambridge Pixel systems
SAPIENT BSI Flex 335 v2.0 TCP Protobuf Autonomous sensor integration (AI, RADAR)
CoT Cursor on Target XML TCP/Multicast TAK ecosystem integration (ATAK, WinTAK)
NMEA NMEA 0183 Serial/TCP GPS position data
ADS-B OpenSky REST HTTP/JSON Real-time aircraft positions
AIS AIS Messages WebSocket Maritime vessel tracking
GTFS GTFS Realtime HTTP/Protobuf Public transit vehicle positions
JSON File Custom JSON File System Static position data with live monitoring
LDM Land Data Model v10 DDS GVA vehicle/unit positions

SPX RADAR Connector

The SPX connector receives track reports from Cambridge Pixel RADAR systems over UDP multicast.

Protocol Details

  • Magic Number: 0x4342 (Cambridge Pixel)
  • Default Multicast: 239.192.50.79:5079
  • Encoding: Big-endian binary

Message Types

Type Code Size Description
Tracker Status 0x0115 80 bytes Sensor position, track counts
Plot Status 0x0116 48 bytes Sector status updates
Track Minimal 0x0110 72 bytes Basic track info (ID, range, azimuth, speed)
Track Normal 0x0111 128 bytes Includes Cartesian position
Track Extended 0x0112 Variable Includes lat/lon from bitmap

Track Status Values

Status Value Symbol
Deleted 0 Track removed
Provisional 1 Pending confirmation
Established 2 Confirmed track
Lost 3 Coasting (no updates)
Plot 4 Raw detection

Configuration

{
    "connectorId": "spx",
    "enabled": true,
    "settings": {
        "multicastAddress": "239.192.50.79",
        "port": 5079,
        "interface": "",
        "staleTimeoutSec": 30,
        "calculateLatLon": true
    }
}

SAPIENT Connector

The SAPIENT connector implements BSI Flex 335 v2.0 for autonomous sensor integration, receiving detection reports from AI sensors and RADAR systems.

Protocol Details

  • Standard: BSI Flex 335 v2.0
  • Encoding: Protocol Buffers
  • Transport: TCP with 4-byte length prefix

Message Types

  • Registration / RegistrationAck - Sensor registration
  • DetectionReport - Object detections with classifications
  • StatusReport - Sensor health and status
  • Task / TaskAck - Sensor tasking commands

Detection Classifications

SAPIENT provides AI-based object classification with confidence levels:

  • Vehicle (car, truck, tank, APC)
  • Person (individual, group)
  • Aircraft (fixed-wing, rotary)
  • Maritime (boat, ship)

Configuration

{
    "connectorId": "sapient",
    "enabled": true,
    "settings": {
        "mode": "client",
        "host": "192.168.1.100",
        "port": 8080,
        "nodeId": "bms-node-001",
        "defaultAffiliation": "unknown",
        "staleTimeoutSec": 300
    }
}

Cursor on Target (CoT) Connector

The CoT connector integrates with the TAK ecosystem (ATAK, WinTAK, TAK Server) using the Cursor on Target XML protocol.

Protocol Details

  • Format: XML over TCP or UDP Multicast
  • SA Multicast: 239.2.3.1:6969
  • Chat Multicast: 224.10.10.1:17012

CoT Event Types

Type Pattern Description
a-f-G-* Friendly Ground
a-h-G-* Hostile Ground
a-n-G-* Neutral Ground
a-u-G-* Unknown Ground
a-f-A-* Friendly Air
b-m-p-* Map Point

Configuration

{
    "connectorId": "cot",
    "enabled": true,
    "settings": {
        "mode": "multicast",
        "multicastAddress": "239.2.3.1",
        "port": 6969,
        "interface": ""
    }
}

Data Flow

sequenceDiagram participant Sensor as Data Source participant Conn as Connector participant CM as Connector Manager participant Map as Map Widget Sensor->>Conn: Raw Data (Binary/XML/JSON) Conn->>Conn: Parse & Validate Conn->>Conn: Convert to PositionUpdate Conn->>CM: emit positionUpdated() CM->>Map: Forward Update Map->>Map: Render Symbol

Connector Manager

The Connector Manager handles:

  • Registration: Built-in and plugin connectors
  • Lifecycle: Start, stop, configure connectors
  • Routing: Forward updates to map and track displays
  • Status: Monitor connector health and statistics

Loading Connectors

// Get connector manager instance
auto* manager = ConnectorManager::instance();

// Create and configure a connector
auto* spx = manager->createInstance("spx", "radar-1");
spx->configure({
    {"multicastAddress", "239.192.50.79"},
    {"port", 5079}
});

// Connect signals
connect(spx, &ConnectorInterface::positionUpdated,
        this, &BmsWindow::onPositionUpdate);

// Start receiving data
spx->start();

Symbol Mapping

Connectors convert source-specific data to APP-6D military symbols (SIDC):

Source Default Symbol Notes
SPX Track Air/Surface Unknown Based on track status and flags
SAPIENT Detection Based on classification AI confidence affects display
CoT Event Derived from CoT type Direct mapping from a-X-Y-Z
ADS-B Aircraft Neutral Air Based on aircraft category
AIS Vessel Neutral Surface Based on vessel type

Adding Custom Connectors

Implement the ConnectorInterface to create custom connectors:

class MyConnector : public ConnectorInterface
{
    Q_OBJECT
public:
    QString connectorId() const override { return "my-connector"; }
    QString displayName() const override { return "My Custom Connector"; }

    bool configure(const QVariantMap& settings) override;
    bool start() override;
    void stop() override;

    // Emit positionUpdated() when data arrives
};

See ConnectorInterface.h for the full interface definition.