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¶
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¶
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.