---
title: "COPILOT D6 Legacy WPF Application"
description: "Complete reverse-engineered architecture documentation of the original COPILOT D6 CCTV keyboard controller system"
---

# COPILOT D6 Legacy Architecture

> Reverse-engineered from compiled .NET 7 assemblies (build 1.0.705, December 2023) using ILSpy decompilation. This documentation covers the complete architecture of the original WPF-based CCTV keyboard controller system.

## System Overview

The COPILOT D6 system is a **CCTV surveillance keyboard controller** used to manage video feeds from multiple camera servers (Geutebruck GeViScope, G-Core, GeViSoft) across a wall of physical monitors. Operators use a custom hardware keyboard with joystick to:

- Switch cameras to monitors (CrossSwitch)
- Control PTZ cameras (Pan/Tilt/Zoom) via joystick
- Manage camera prepositions (saved positions)
- Run camera sequences (automated cycling)
- View and manage alarms
- Playback recorded video

## Architecture at a Glance

```
COPILOT SYSTEM ARCHITECTURE
============================

  ┌──────────────────────────────────────────────────────────┐
  │                COPILOT KEYBOARD (Hardware)                │
  │  ┌─────────────┐  ┌──────────────┐  ┌────────────────┐  │
  │  │  Numpad +    │  │   3-Axis     │  │  Jog/Shuttle   │  │
  │  │  Function    │  │   Joystick   │  │  Wheel         │  │
  │  │  Keys        │  │   (HID USB)  │  │                │  │
  │  │  [Serial]    │  │  X/Y/Z Axes  │  │  [Serial]      │  │
  │  └──────┬───────┘  └──────┬───────┘  └───────┬────────┘  │
  │         │                 │                   │           │
  │         └─────────────────┼───────────────────┘           │
  │                    Arduino Leonardo                        │
  │                    (USB Composite Device)                  │
  └────────────────────────────┬──────────────────────────────┘
                               │ USB (Serial + HID)
  ┌────────────────────────────┼──────────────────────────────┐
  │               LattePanda Sigma SBC                         │
  │  ┌─────────────────────────┴──────────────────────────┐   │
  │  │             Copilot.App.exe (WPF .NET 7)           │   │
  │  │  ┌──────────────────────────────────────────────┐  │   │
  │  │  │           Copilot.Device Layer               │  │   │
  │  │  │  Serial Port ←→ Keyboard Keys/Jog/Shuttle   │  │   │
  │  │  │  HID Device  ←→ Joystick X/Y/Z              │  │   │
  │  │  └──────────────────────┬───────────────────────┘  │   │
  │  │                         │ Events                    │   │
  │  │  ┌──────────────────────┴───────────────────────┐  │   │
  │  │  │           MainWindow (WPF)                   │  │   │
  │  │  │  Routes input → current ViewModel            │  │   │
  │  │  └──────────────────────┬───────────────────────┘  │   │
  │  │                         │                           │   │
  │  │  ┌──────────────────────┴───────────────────────┐  │   │
  │  │  │        SegmentViewModel (main screen)        │  │   │
  │  │  │  • PTZ control via joystick                  │  │   │
  │  │  │  • Camera number entry                       │  │   │
  │  │  │  • CrossSwitch execution                     │  │   │
  │  │  │  • Camera lock management                    │  │   │
  │  │  │  • Playback control (jog/shuttle)            │  │   │
  │  │  └──┬────────────────────────────────────┬──────┘  │   │
  │  │     │ Direct SDK calls                   │ SignalR  │   │
  │  │  ┌──┴──────────────────────┐  ┌─────────┴──────┐  │   │
  │  │  │   Camera Server         │  │  AppServer     │  │   │
  │  │  │   Drivers               │  │  Client        │  │   │
  │  │  │  • GeViScope SDK        │  │  (SignalR Hub) │  │   │
  │  │  │  • G-Core SDK           │  │                │  │   │
  │  │  │  • GeViSoft SDK         │  │                │  │   │
  │  │  └──┬──────────────────────┘  └────────┬───────┘  │   │
  │  └─────┼──────────────────────────────────┼───────────┘   │
  └────────┼──────────────────────────────────┼───────────────┘
           │ Native SDK (TCP)                 │ HTTPS/WSS
           ▼                                  ▼
  ┌─────────────────────┐          ┌────────────────────────┐
  │  Camera Servers      │          │  Copilot AppServer     │
  │  • GeViScope         │          │  (ASP.NET Core)        │
  │    192.168.102.186   │          │  copilot.test.d6...    │
  │  • G-Core            │          │  ┌──────────────────┐  │
  │    192.168.102.20    │          │  │ SignalR Hub       │  │
  │                      │          │  │ • Camera Locks    │  │
  │  Each server has:    │          │  │ • Sequences       │  │
  │  • Cameras           │          │  │ • Config Sync     │  │
  │  • Monitors/Viewers  │          │  │ • Viewer State    │  │
  │  • PTZ controllers   │          │  │ • Alarm History   │  │
  │  • Alarm events      │          │  └──────────────────┘  │
  │                      │          │  ┌──────────────────┐  │
  │                      │          │  │ SQLite Database   │  │
  │                      │          │  │ • Lock state      │  │
  │                      │          │  │ • Alarm history   │  │
  │                      │          │  └──────────────────┘  │
  │                      │          │  ┌──────────────────┐  │
  │                      │          │  │ REST API          │  │
  │                      │          │  │ • Auto-updates    │  │
  │                      │          │  │ • Configuration   │  │
  │                      │          │  │ • Blazor Admin UI │  │
  │                      │          │  └──────────────────┘  │
  └─────────────────────┘          └────────────────────────┘
```

## Assembly Map

| Assembly | Type | Purpose |
|----------|------|---------|
| `Copilot.App.dll` | WPF Client | Main application - UI, ViewModels, navigation, input handling |
| `Copilot.Device.dll` | Client Library | Hardware abstraction - serial port, HID joystick, key mapping |
| `Copilot.Common.dll` | Shared Library | Configuration models, data protection, providers, hub interfaces |
| `Copilot.Common.Services.dll` | Shared Library | Driver providers, media channel service, viewer state management |
| `Copilot.Drivers.Common.dll` | Shared Library | Driver interfaces (`IMovementController`, `ICameraServerDriver`, etc.) |
| `Copilot.Drivers.GeViScope.dll` | Driver | GeViScope SDK wrapper - PLC actions for cameras/PTZ |
| `Copilot.Drivers.GCore.dll` | Driver | G-Core SDK wrapper - binary protocol for cameras/PTZ |
| `Copilot.Drivers.GeviSoft.dll` | Driver | GeViSoft SDK wrapper |
| `Copilot.AppServer.Client.dll` | Client Library | SignalR hub client, availability monitoring |
| `Copilot.AppServer.dll` | Server | ASP.NET Core server - API, SignalR hub, Blazor admin |
| `Copilot.AppServer.Database.dll` | Server Library | Entity Framework - SQLite models and repositories |
| `Copilot.Camea.Client.dll` | Server Library | Camea API integration (external alarm system) |

## Documentation Pages

- **[System Architecture](./architecture.md)** - Component diagrams, dependency graph, deployment model
- **[Hardware & Input](./hardware-input.md)** - Joystick, keyboard, serial/HID protocols
- **[PTZ Control Flow](./ptz-control.md)** - Joystick → Pan/Tilt/Zoom → SDK command pipeline
- **[Data Flows](./data-flows.md)** - CrossSwitch, Alarms, Sequences, Playback, Camera Lock
- **[Configuration](./configuration.md)** - JSON config files, monitor wall topology, function buttons
- **[AppServer](./appserver.md)** - SignalR hub, REST API, database, admin UI
