apx-gcs

Plugin System

Overview

The APX GCS uses a flexible plugin architecture that allows extending functionality without modifying core code. This modular approach enables developers to add new features, communication protocols, or UI components while maintaining system stability.

Plugin Types

Communication Plugins

Handle different connection types to UAVs:

Data Processing Plugins

Process telemetry and sensor data:

UI Plugins

Extend user interface capabilities:

Mission Plugins

Handle mission planning and execution:

Plugin Structure

Each plugin follows a consistent structure:

Plugins/
├── MyPlugin/
│   ├── CMakeLists.txt
│   ├── myplugin.cpp
│   ├── myplugin.h
│   ├── qml/
│   │   └── MyPlugin.qml
│   └── resources/
│       └── plugin.json

Plugin Manifest (plugin.json)

{
    "name": "MyPlugin",
    "version": "1.0.0",
    "description": "Description of what this plugin does",
    "author": "Your Name",
    "license": "MIT",
    "type": "communication",
    "dependencies": {
        "apx-gcs": ">=11.0.0"
    }
}

Plugin Registration

Plugins are automatically discovered and registered at application startup:

  1. CMake Integration: Plugins are added via add_subdirectory() in CMakeLists.txt
  2. Dynamic Loading: Plugins are loaded at runtime using Qt’s plugin system
  3. Dependency Resolution: Required dependencies are checked automatically
  4. Version Compatibility: Plugin compatibility is verified

Development Guidelines

Creating a New Plugin

  1. Create plugin directory structure
  2. Implement plugin interface in C++
  3. Add QML UI components if needed
  4. Register plugin in CMakeLists.txt
  5. Test plugin functionality

Plugin Interface

Plugins must implement the ApxPlugin interface:

class ApxPlugin : public QObject
{
    Q_OBJECT
public:
    virtual QString name() const = 0;
    virtual QString version() const = 0;
    virtual bool initialize() = 0;
    virtual void shutdown() = 0;
};

Best Practices

Plugin Management

The system provides runtime management capabilities: