Skip to main content

QCOS NavCore™ Code Examples

Practical examples for common use cases

Copyright © 2024-2026 SoftQuantus Innovative OÜ. All Rights Reserved.


Table of Contents

  1. Basic Navigation
  2. Integrity Monitoring
  3. Quantum Sensor Integration
  4. OSNMA Authentication
  5. NIS2 Compliance
  6. Quantum RAIM
  7. API Client Examples
  8. Full Application Examples

Basic Navigation

Simple Position Fix

"""
Example: Basic position fix with integrity monitoring
"""

from datetime import datetime
from navcore import (
FusionEngine,
IntegrityMonitor,
GNSSReceiver,
IMU,
IntegrityStatus,
)

# Create sensors
gnss = GNSSReceiver(
sensor_id="GNSS-001",
manufacturer="u-blox",
model="ZED-F9P",
constellations=["GPS", "Galileo", "GLONASS"],
)

imu = IMU(
sensor_id="IMU-001",
manufacturer="Honeywell",
model="HG1120",
grade="tactical",
)

# Create integrity monitor
monitor = IntegrityMonitor()

# Create fusion engine
fusion = FusionEngine()
fusion.add_sensor(gnss)
fusion.add_sensor(imu)

# Initialize with known position (or let GNSS acquire)
fusion.initialize(
position=(51.5074, -0.1278, 100.0), # London
timestamp=datetime.now(),
)

# Main navigation loop
while True:
# Get latest solution
solution = fusion.get_solution()

# Check integrity
if solution.integrity_status == IntegrityStatus.ALERT:
print("⚠️ INTEGRITY ALERT - Use caution!")
elif solution.integrity_status == IntegrityStatus.WARNING:
print("⚡ Integrity degraded")
else:
print("✓ Normal operation")

# Use the position
print(f"Position: {solution.position}")
print(f" Lat: {solution.position.latitude_deg:.6f}°")
print(f" Lon: {solution.position.longitude_deg:.6f}°")
print(f" Alt: {solution.position.altitude_m:.1f}m")
print(f" Uncertainty: {solution.position.sigma_horizontal_m:.2f}m")

# Wait for next epoch
time.sleep(1.0)

Multi-Constellation GNSS

"""
Example: Multi-constellation GNSS with SBAS augmentation
"""

from navcore import GNSSReceiver, FusionEngine

# Create multi-constellation receiver
receiver = GNSSReceiver(
sensor_id="GNSS-MC-001",
manufacturer="Septentrio",
model="AsteRx-U",
constellations=["GPS", "Galileo", "GLONASS", "BeiDou"],
sbas_enabled=True,
sbas_system="EGNOS", # Europe
)

# Configure for RTK if base station available
receiver.configure_rtk(
base_station_ip="192.168.1.100",
base_station_port=2101,
mountpoint="RTCM3",
)

# Create fusion engine
fusion = FusionEngine()
fusion.add_sensor(receiver)

# Get RTK-precision position
solution = fusion.get_solution()

if solution.rtk_fixed:
print(f"RTK Fixed: {solution.position.sigma_horizontal_m * 100:.1f}cm accuracy")
else:
print(f"Float solution: {solution.position.sigma_horizontal_m:.2f}m accuracy")

Integrity Monitoring

Spoof Detection

"""
Example: Real-time spoof detection
"""

from navcore import IntegrityMonitor, FaultFlags

monitor = IntegrityMonitor()

def check_for_spoofing(gnss_data, imu_data, clock_data):
"""Check current measurements for spoofing indicators."""

# Run consistency checks
result = monitor.check_spoofing_indicators(
gnss_data=gnss_data,
imu_data=imu_data,
clock_data=clock_data,
)

if result.spoof_suspected:
print("🚨 SPOOFING SUSPECTED!")
print(f" Confidence: {result.confidence:.1%}")
print(" Indicators:")
for indicator in result.indicators:
print(f" - {indicator}")

# Get recommended action
if result.confidence > 0.8:
print(" ACTION: Switch to holdover mode immediately")
else:
print(" ACTION: Increase monitoring, verify with quantum sensors")

return True

return False

# Example: Check position jump (classic spoof indicator)
def check_position_jump(current_pos, previous_pos, dt_seconds):
"""Detect impossible position jumps."""

result = monitor.check_position_consistency(
current_pos=current_pos,
previous_pos=previous_pos,
time_delta_s=dt_seconds,
max_velocity_ms=350.0, # ~1260 km/h for aircraft
)

if not result["consistent"]:
print(f"⚠️ Position jump detected!")
print(f" Distance: {result['distance_m']:.0f}m in {dt_seconds}s")
print(f" Implied velocity: {result['implied_velocity_ms']:.0f} m/s")
return True

return False

Jam Detection

"""
Example: RF jamming detection
"""

from navcore import IntegrityMonitor

monitor = IntegrityMonitor()

def detect_jamming(cn0_values, agc_values, baseline_cn0=45.0):
"""Detect RF jamming based on signal metrics."""

result = monitor.check_jamming_indicators(
cn0_values=cn0_values,
agc_values=agc_values,
expected_cn0=baseline_cn0,
)

if result.jam_detected:
print("🔴 JAMMING DETECTED!")
print(f" Severity: {result.severity}")
print(f" Affected satellites: {len(result.affected_svs)}")
print(f" C/N0 drop: {result.cn0_drop_db:.1f} dB")

if result.severity == "high":
print(" ACTION: Engage holdover mode")
else:
print(" ACTION: Monitor situation")

return result

# Example usage
cn0_samples = [45.0, 44.0, 20.0, 15.0, 10.0] # Sudden drop
agc_samples = [50, 55, 80, 95, 100] # AGC saturation

result = detect_jamming(cn0_samples, agc_samples)

Holdover Management

"""
Example: Automatic holdover mode management
"""

from navcore import FusionEngine, IntegrityMonitor, HoldoverManager

fusion = FusionEngine()
monitor = IntegrityMonitor()
holdover = HoldoverManager(clock_type="OCXO", holdover_budget_s=3600)

class NavigationController:
def __init__(self):
self.mode = "normal"
self.holdover_start = None

def update(self, gnss_available, gnss_data=None):
"""Update navigation mode based on GNSS availability."""

if gnss_available and self.mode == "holdover":
# Transition back to normal mode
self.mode = "normal"
holdover.reset()
print("✓ GNSS recovered - resuming normal operation")

elif not gnss_available and self.mode == "normal":
# Enter holdover mode
self.mode = "holdover"
self.holdover_start = datetime.now()
print("⚠️ GNSS denied - entering holdover mode")

if self.mode == "holdover":
# Check holdover budget
status = holdover.get_status()

print(f"📡 Holdover mode: {status.elapsed_s:.0f}s / {status.budget_s:.0f}s")
print(f" Position drift: {status.position_drift_m:.1f}m")
print(f" Time drift: {status.time_drift_ns:.1f}ns")

if status.budget_exceeded:
print("🔴 HOLDOVER BUDGET EXCEEDED - accuracy degraded")

# Usage
controller = NavigationController()

# Simulate GNSS loss
controller.update(gnss_available=True)
time.sleep(5)
controller.update(gnss_available=False) # Lost GNSS
time.sleep(10)
controller.update(gnss_available=False) # Still denied
controller.update(gnss_available=True) # Recovered

Quantum Sensor Integration

Quantum Gravimeter

"""
Example: Quantum gravimeter integration for vertical reference
"""

from navcore import (
QuantumGravimeter,
FusionEngine,
QECEngine, # Short alias for QuantumErrorCorrectionEngine
)

# Create quantum gravimeter
gravimeter = QuantumGravimeter(
sensor_id="QG-001",
manufacturer="SoftQuantus",
model="QGRAV-1000",
atom_species="Rb-87",
interrogation_time_us=100,
)

# Create QEC engine for noise suppression
qec = QECEngine()

# Create fusion engine with quantum sensor
fusion = FusionEngine()
fusion.add_sensor(gravimeter, role="quantum_truth")

def process_gravity_measurement(raw_data):
"""Process quantum gravimeter measurement with error correction."""

# Characterize noise environment
noise = qec.characterize_noise(
sensor_id="QG-001",
time_series=raw_data,
sample_rate=100.0,
)

# Select optimal decoupling sequence
sequence = qec.select_optimal_sequence(
sensor_id="QG-001",
interrogation_time_us=100.0,
)

# Process with error correction
result = qec.process_measurement(
raw_signal=raw_data,
sequence=sequence,
atom_number=100000,
)

print(f"Gravity: {result.value:.9f} m/s²")
print(f"Uncertainty: {result.uncertainty:.2e} m/s²")
print(f"Improvement: {result.improvement_factor:.1f}x over raw")

return result

# Use gravity for altitude verification
def verify_altitude(gnss_altitude, gravity_reading):
"""Verify GNSS altitude using quantum gravimeter."""

# Calculate expected gravity at altitude
g0 = 9.80665 # m/s² at sea level
R = 6371000 # Earth radius in meters
expected_g = g0 * (R / (R + gnss_altitude)) ** 2

# Compare with measurement
difference = abs(gravity_reading - expected_g)

# At 1 µGal precision, we can detect ~3m altitude change
altitude_uncertainty = difference / (2 * g0 / R)

if altitude_uncertainty > 10: # More than 10m discrepancy
print(f"⚠️ Altitude discrepancy detected: {altitude_uncertainty:.1f}m")
return False

print(f"✓ Altitude verified within {altitude_uncertainty:.1f}m")
return True

Optical Atomic Clock

"""
Example: Optical atomic clock for timing assurance
"""

from navcore import OpticalAtomicClock, TimingNetwork

# Create optical atomic clock
clock = OpticalAtomicClock(
sensor_id="OAC-001",
manufacturer="SoftQuantus",
model="OPTCLOCK-18",
transition="Sr-87", # Strontium lattice clock
stability=1e-18,
)

# Add to timing network
timing = TimingNetwork()
timing.add_primary_reference(clock)

def verify_gnss_time(gnss_time, gnss_uncertainty_ns):
"""Verify GNSS time against optical clock."""

# Get atomic clock time
atomic_time = clock.get_time()

# Compare
offset_ns = (gnss_time - atomic_time).total_seconds() * 1e9

# Optical clock has ~1ps uncertainty, GNSS typically 10-50ns
if abs(offset_ns) > 3 * gnss_uncertainty_ns:
print(f"⚠️ Time offset exceeds expected: {offset_ns:.1f}ns")
print(" Possible time spoofing attack")
return False

print(f"✓ Time verified: offset {offset_ns:.1f}ns")
return True

OSNMA Authentication

Basic OSNMA Verification

"""
Example: OSNMA authentication for Galileo signals
"""

from navcore import OSNMAVerifier, OSNMAStatus

# Create OSNMA verifier
verifier = OSNMAVerifier()

# Wait for initialization
print("Initializing OSNMA...")
while verifier.get_status() == OSNMAStatus.INITIALIZING:
time.sleep(1)
print(" Acquiring key chain...")

print("✓ OSNMA operational")

def process_galileo_message(svid, nav_data, osnma_data, tow, wn):
"""Process and authenticate Galileo navigation message."""

result = verifier.verify_message(
svid=svid,
subframe_data=nav_data,
osnma_data=osnma_data,
tow=tow,
wn=wn,
)

if result.verified:
print(f"✓ E{svid}: Message authenticated")
return True
else:
print(f"✗ E{svid}: Authentication FAILED")
print(f" Reason: {result.failure_reason}")

# Exclude from solution
return False

# Monitor satellite authentication status
def print_satellite_status():
"""Print authentication status for all satellites."""

print("\nSatellite Authentication Status:")
print("-" * 40)

for svid, status in verifier.satellite_status.items():
symbol = "✓" if status.value == "authenticated" else "○"
print(f" E{svid:02d}: {symbol} {status.value}")

stats = verifier.get_statistics()
print("-" * 40)
print(f"Authenticated: {stats.authenticated}/{stats.total}")
print(f"Authentication rate: {stats.rate:.1%}")

OSNMA with Smart Tachograph Compliance

"""
Example: EU Smart Tachograph compliance with OSNMA
"""

from navcore import OSNMAVerifier, NIS2ComplianceManager
from datetime import datetime

class SmartTachographCompliance:
"""Ensure EU Smart Tachograph GNSS authentication requirements."""

def __init__(self):
self.osnma = OSNMAVerifier()
self.compliance = NIS2ComplianceManager(
entity_type="essential",
sector="transport",
)
self.authentication_log = []

def record_position(self, position, gnss_data, osnma_data):
"""Record authenticated position for tachograph."""

# Verify with OSNMA
auth_result = self.osnma.verify_message(
svid=gnss_data["svid"],
subframe_data=gnss_data["nav_data"],
osnma_data=osnma_data,
tow=gnss_data["tow"],
wn=gnss_data["wn"],
)

# Create tachograph record
record = {
"timestamp": datetime.now().isoformat(),
"position": position,
"authenticated": auth_result.verified,
"satellites_authenticated": self.osnma.authenticated_count,
"authentication_rate": self.osnma.authentication_rate,
"evidence_id": auth_result.evidence_id,
}

self.authentication_log.append(record)

# EU requirement: Record every 3 hours minimum
if not auth_result.verified:
print("⚠️ Position recorded WITHOUT authentication")
print(" Tachograph may reject this record")
else:
print("✓ Authenticated position recorded")

return record

def export_compliance_report(self):
"""Export compliance report for regulatory inspection."""

report = {
"period_start": self.authentication_log[0]["timestamp"],
"period_end": self.authentication_log[-1]["timestamp"],
"total_records": len(self.authentication_log),
"authenticated_records": sum(1 for r in self.authentication_log if r["authenticated"]),
"authentication_rate": sum(1 for r in self.authentication_log if r["authenticated"]) / len(self.authentication_log),
"osnma_status": "compliant" if self.osnma.authentication_rate > 0.8 else "non_compliant",
}

return report

NIS2 Compliance

Compliance Assessment

"""
Example: NIS2 compliance assessment for transport operator
"""

from navcore.compliance import (
NIS2ComplianceManager,
NIS2EntityType,
NIS2Sector,
ARTICLE_21_REQUIREMENTS,
)

# Create compliance manager
manager = NIS2ComplianceManager(
entity_type=NIS2EntityType.ESSENTIAL,
sector=NIS2Sector.TRANSPORT,
)

def run_compliance_assessment():
"""Run full NIS2 compliance assessment."""

print("=" * 60)
print("NIS2 Compliance Assessment Report")
print("=" * 60)

# Get assessment
assessment = manager.assess_compliance()

print(f"\nEntity Type: {assessment.entity_type}")
print(f"Sector: {assessment.sector}")
print(f"Overall Status: {assessment.status}")
print(f"Compliance Score: {assessment.score:.1f}%")

# Article 21 breakdown
print("\nArticle 21 Requirements:")
print("-" * 60)

for req in ARTICLE_21_REQUIREMENTS:
status = manager.get_requirement_status(req.id)
symbol = "✓" if status.value == "compliant" else "○"
print(f" {symbol} {req.id}: {req.name}")
print(f" Status: {status.value}")

# Identify gaps
gaps = manager.identify_gaps()

if gaps:
print(f"\n⚠️ {len(gaps)} Compliance Gaps Identified:")
print("-" * 60)

for gap in gaps:
print(f"\n {gap.requirement_id}: {gap.requirement_name}")
print(f" Risk Level: {gap.risk_level}")
print(f" Effort: {gap.effort_days} days")
print(f" Remediation:")
for step in gap.remediation_steps:
print(f" - {step}")
else:
print("\n✓ No compliance gaps identified")

return assessment

# Run assessment
assessment = run_compliance_assessment()

Incident Reporting

"""
Example: NIS2-compliant incident reporting
"""

from navcore.compliance import (
NIS2ComplianceManager,
NIS2Incident,
IncidentCategory,
IncidentSeverity,
)
from datetime import datetime, timedelta

manager = NIS2ComplianceManager(
entity_type="essential",
sector="transport",
)

def report_security_incident(
title: str,
description: str,
severity: str,
affected_systems: list,
):
"""Report a security incident per NIS2 requirements."""

# Create incident
incident = NIS2Incident(
id=f"INC-{datetime.now().strftime('%Y%m%d%H%M%S')}",
category=IncidentCategory.AVAILABILITY,
severity=IncidentSeverity[severity.upper()],
title=title,
description=description,
affected_systems=affected_systems,
detection_time=datetime.now(),
report_time=datetime.now(),
)

# Record incident
result = manager.record_incident(incident)

print(f"🚨 Incident Reported: {incident.id}")
print(f" Severity: {severity}")
print(f" Category: {incident.category.value}")

# NIS2 notification requirements
if severity in ["HIGH", "CRITICAL"]:
csirt_deadline = datetime.now() + timedelta(hours=24)
print(f"\n⚠️ CSIRT Notification Required!")
print(f" Deadline: {csirt_deadline.isoformat()}")
print(f" Contact your national CSIRT immediately")

update_deadline = datetime.now() + timedelta(hours=72)
print(f"\n📋 72-Hour Update Required")
print(f" Deadline: {update_deadline.isoformat()}")

return result

# Example: Report GNSS disruption
report_security_incident(
title="GNSS Service Disruption - Suspected Jamming",
description="""
Complete loss of GNSS signals detected across all operational vehicles
in the northern sector. C/N0 dropped to zero on all satellites.
Suspected RF jamming attack. Vehicles operating in holdover mode.
""",
severity="HIGH",
affected_systems=["NAV-001", "NAV-002", "NAV-003", "CENTRAL-DISPATCH"],
)

Quantum RAIM

Basic Quantum RAIM

"""
Example: Quantum RAIM integrity monitoring
"""

from navcore.quantum_raim import (
QuantumRAIMEngine,
RAIMState,
ThreatLevel,
)

# Create Quantum RAIM engine
raim = QuantumRAIMEngine(
integrity_risk_target=1e-7, # 10^-7 for aviation
horizontal_alert_limit_m=40.0,
vertical_alert_limit_m=35.0,
)

# Add quantum sensors as truth arbiters
raim.add_sensor("quantum_gravimeter", gravimeter)
raim.add_sensor("quantum_clock", atomic_clock)

def process_navigation_epoch(gnss_data, quantum_data, imu_data):
"""Process navigation epoch with Quantum RAIM."""

result = raim.process_epoch(
gnss_measurements=gnss_data,
quantum_measurements=quantum_data,
classical_measurements=imu_data,
)

# Check RAIM state
print(f"RAIM State: {result.state}")

# Check protection levels
print(f"Protection Levels:")
print(f" HPL: {result.hpl_m:.1f}m (limit: 40m) {'✓' if result.hpl_valid else '✗'}")
print(f" VPL: {result.vpl_m:.1f}m (limit: 35m) {'✓' if result.vpl_valid else '✗'}")

# Check for threats
if result.threats_detected:
print(f"\n⚠️ THREATS DETECTED:")
for threat in result.threats:
print(f" - {threat.type}: {threat.confidence:.1%} confidence")
if threat.quantum_confirmed:
print(f" 🔬 Confirmed by quantum sensor")

# Position is safe to use if:
if result.state == RAIMState.AVAILABLE and result.hpl_valid and result.vpl_valid:
print("\n✓ Position integrity assured")
return result.position
else:
print("\n⚠️ Position integrity NOT assured - use with caution")
return None

Spoof Detection with Quantum Verification

"""
Example: Detecting carry-off spoofing attacks with quantum sensors
"""

from navcore.quantum_raim import QuantumRAIMEngine, AttackType

raim = QuantumRAIMEngine(
integrity_risk_target=1e-7,
horizontal_alert_limit_m=40.0,
vertical_alert_limit_m=35.0,
)

class CarryOffDetector:
"""Detect slow-drift carry-off spoofing attacks."""

def __init__(self, raim_engine):
self.raim = raim_engine
self.position_history = []
self.gravity_history = []

def check_for_carry_off(self, gnss_position, gravity_reading):
"""Check for carry-off attack using quantum gravimeter."""

# Store history
self.position_history.append(gnss_position)
self.gravity_history.append(gravity_reading)

# Need history for drift detection
if len(self.position_history) < 10:
return None

# Calculate implied altitude change from GNSS
gnss_altitude_change = (
self.position_history[-1]["altitude"] -
self.position_history[0]["altitude"]
)

# Calculate implied altitude change from gravity
g0 = 9.80665
R = 6371000

gravity_delta = self.gravity_history[-1] - self.gravity_history[0]
gravity_implied_altitude_change = -gravity_delta * R**2 / (2 * g0)

# Compare
discrepancy = abs(gnss_altitude_change - gravity_implied_altitude_change)

if discrepancy > 50: # 50m threshold
print(f"🚨 CARRY-OFF ATTACK DETECTED!")
print(f" GNSS claims altitude change: {gnss_altitude_change:.1f}m")
print(f" Gravity indicates altitude change: {gravity_implied_altitude_change:.1f}m")
print(f" Discrepancy: {discrepancy:.1f}m")
print(f"\n Quantum sensor proves GNSS is being spoofed!")

return {
"attack_type": AttackType.SPOOFING_CARRY_OFF,
"confidence": min(discrepancy / 100, 0.99),
"gnss_altitude_change": gnss_altitude_change,
"true_altitude_change": gravity_implied_altitude_change,
}

return None

API Client Examples

Python Requests

"""
Example: NavCore API client using Python requests
"""

import requests
from datetime import datetime

class NavCoreClient:
"""Simple NavCore API client."""

def __init__(self, base_url: str, api_key: str):
self.base_url = base_url
self.headers = {"Authorization": f"Bearer {api_key}"}

def get_status(self) -> dict:
"""Get system status."""
response = requests.get(
f"{self.base_url}/api/v1/navcore/status",
headers=self.headers,
)
response.raise_for_status()
return response.json()

def get_solution(self) -> dict:
"""Get navigation solution."""
response = requests.get(
f"{self.base_url}/api/v1/navcore/solution",
headers=self.headers,
)
response.raise_for_status()
return response.json()

def get_protection_levels(self) -> dict:
"""Get RAIM protection levels."""
response = requests.get(
f"{self.base_url}/api/v1/navcore/raim/protection",
headers=self.headers,
)
response.raise_for_status()
return response.json()

def report_incident(self, incident: dict) -> dict:
"""Report NIS2 incident."""
response = requests.post(
f"{self.base_url}/api/v1/navcore/compliance/nis2/incident",
headers=self.headers,
json=incident,
)
response.raise_for_status()
return response.json()

# Usage
client = NavCoreClient("http://localhost:8000", "your-api-key")

# Get current solution
solution = client.get_solution()
print(f"Position: {solution['position']['latitude_deg']}, {solution['position']['longitude_deg']}")

# Check protection levels
levels = client.get_protection_levels()
if levels["hpl_valid"] and levels["vpl_valid"]:
print("✓ Integrity assured")

cURL Examples

#!/bin/bash
# NavCore API cURL examples

API_URL="http://localhost:8000"
API_KEY="your-api-key"

# Get status
curl -s -H "Authorization: Bearer $API_KEY" \
"$API_URL/api/v1/navcore/status" | jq

# Get navigation solution
curl -s -H "Authorization: Bearer $API_KEY" \
"$API_URL/api/v1/navcore/solution" | jq

# Get OSNMA status
curl -s -H "Authorization: Bearer $API_KEY" \
"$API_URL/api/v1/navcore/compliance/osnma/status" | jq

# Get RAIM protection levels
curl -s -H "Authorization: Bearer $API_KEY" \
"$API_URL/api/v1/navcore/raim/protection" | jq

# Report incident
curl -s -X POST \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"category": "AVAILABILITY",
"severity": "HIGH",
"title": "GNSS Disruption",
"description": "Complete signal loss",
"affected_systems": ["NAV-001"],
"detection_time": "2024-12-20T10:00:00Z"
}' \
"$API_URL/api/v1/navcore/compliance/nis2/incident" | jq

Full Application Examples

Maritime PNT System

"""
Example: Complete maritime PNT system with NavCore
"""

from navcore import (
FusionEngine,
IntegrityMonitor,
OSNMAVerifier,
QuantumRAIMEngine,
GNSSReceiver,
IMU,
Barometer,
)

class MaritimePNTSystem:
"""Maritime PNT system with IMO A.915(22) compliance."""

def __init__(self):
# Sensors
self.gnss = GNSSReceiver(
sensor_id="GNSS-001",
manufacturer="Furuno",
model="GP-170",
constellations=["GPS", "Galileo", "GLONASS"],
)
self.imu = IMU(
sensor_id="IMU-001",
manufacturer="Kongsberg",
model="MRU-5+",
)
self.baro = Barometer(sensor_id="BARO-001")

# Core components
self.fusion = FusionEngine()
self.integrity = IntegrityMonitor()
self.osnma = OSNMAVerifier()
self.raim = QuantumRAIMEngine(
integrity_risk_target=1e-5, # Maritime standard
horizontal_alert_limit_m=25.0,
vertical_alert_limit_m=30.0,
)

# Add sensors
self.fusion.add_sensor(self.gnss)
self.fusion.add_sensor(self.imu)
self.fusion.add_sensor(self.baro)

def get_navigation_data(self) -> dict:
"""Get navigation data for ECDIS/VDR."""

solution = self.fusion.get_solution()

# IMO A.915(22) requires:
# - Position accuracy
# - Integrity information
# - System status

return {
"position": {
"latitude": solution.position.latitude_deg,
"longitude": solution.position.longitude_deg,
"accuracy_m": solution.position.sigma_horizontal_m,
},
"course_over_ground": solution.velocity.ground_track_deg,
"speed_over_ground": solution.velocity.ground_speed_ms * 1.944, # knots
"heading": solution.attitude.heading_deg,
"integrity": {
"status": solution.integrity_status.value,
"raim_available": self.raim.get_status()["integrity_available"],
},
"time_utc": solution.time.utc.isoformat(),
}

def check_safety_critical(self) -> bool:
"""Check if navigation is safe for critical operations."""

raim_status = self.raim.get_status()
levels = self.raim.get_protection_levels()

# For port approach, require:
# - RAIM available
# - HPL < 10m
# - No active threats

safe = (
raim_status["integrity_available"] and
levels["hpl_m"] < 10.0 and
not raim_status["fault_detected"]
)

if not safe:
print("⚠️ Navigation not suitable for safety-critical operations")

return safe

# Usage
pnt = MaritimePNTSystem()

while True:
nav_data = pnt.get_navigation_data()

if pnt.check_safety_critical():
# Safe for port approach
pass
else:
# Reduce speed, increase watch
pass

time.sleep(1.0)

These examples are for QCOS NavCore™. For licensing information, contact sales@softquantus.com