Skip to content
/ canopy Public

Canopy is a Qt6-based desktop application that provides a robust, user-friendly interface for uploading bytecode to CockpitVM-enabled devices. Built with the needs of system integrators in mind, it demonstrates modern C++ GUI development practices and embedded systems integration in order to provide basic upload and verification.

Notifications You must be signed in to change notification settings

cms-pm/canopy

Repository files navigation

Canopy - CockpitVM Bytecode Uploader GUI

Canopy Logo

Qt C++ CockpitVM Platform License

GUI application for reliable CockpitVM firmware uploads with diagnostics and device visibility

Overview

Canopy is a Qt6-based desktop application that provides a robust, user-friendly interface for uploading bytecode to CockpitVM-enabled devices. Built with the needs of system integrators in mind, it demonstrates modern C++ GUI development practices and embedded systems integration in order to provide basic upload and verification.

Key Technical Achievements

  • UI Architecture: Progressive disclosure design with Simple/Advanced tab structure
  • Protocol Integration: Direct reuse of validated CockpitVM Oracle libraries via symbolic linking
  • Enhanced Diagnostics: Real-time protocol frame capture with error reporting
  • Qt6 Implementation: Resource system, custom widgets, RAII patterns
  • Device Discovery: Robust serial port enumeration with CockpitVM handshake identification
  • Error Recovery: Comprehensive timeout handling and user guidance systems

Current Development Status

Phase: CANOPY-1.4.x - Diagnostics Framework
Branch: main (preliminary foundation)
Architecture: Validated Qt6 + C++23 with Oracle library integration

Completed Milestones

  • CANOPY-1.1: Build system & Oracle integration with symbolic linking architecture
  • CANOPY-1.3: Professional UI implementation with Qt Designer and resource system
  • CANOPY-1.4.1: Advanced tab framework with progressive disclosure
  • CANOPY-1.4.2: Enhanced bytecode analysis pane with hex viewer
  • CANOPY-1.4.3: Protocol inspector with real-time frame capture
  • Enhanced Bootloader Protocol V2.0: Complete A1/A2/B session architecture

In Development

  • 🔨 Device Information Browser: STM32G4 hardware integration and flash readback
  • 📋 Hardware Integration: Enhanced CockpitVM device bootloader protocols

Integration Strategy

  • Protocol Library Reuse: Direct C++ integration via submodule configuration
  • Frame Parser Integration: Universal parser for protocol-level debugging
  • Qt6 Modern Practices: Signals/slots, resource system, designer workflows
  • Error Handling: std::expected for explicit error propagation

Enhanced Bootloader Protocol V2.0 - in-progress

A significant technical contribution is the design and specification of the Enhanced Bootloader Protocol V2.0, featuring:

  • A1/A2/B Session Architecture: Clean separation of device info, flash read, and programming operations
  • STM32G4 Hardware Integration: 64-bit alignment, bounds checking, verification
  • Mealy-Moore State Machine: Deterministic flow with command-descriptive states to enhance clarity and reliability
  • Protobuf Messaging: Structured communication with comprehensive error recovery

Quick Start

Prerequisites

  • Qt6 (Core, Widgets, SerialPort)
  • CMake 3.20+
  • C++23 compatible compiler
  • CockpitVM-compatible device

Build & Run

mkdir build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
./canopy

Project Structure

canopy-gui/
├── src/gui/                 # Qt6 GUI implementation
├── src/protocol/            # CockpitVM protocol client
├── src/diagnostics/         # Frame capture & analysis
├── include/                 # Public headers
├── resources/               # Qt resources (icons, UI files)  
├── shared_libs/            # Oracle library integration
├── docs/                   # Technical specifications
└── tests/                  # Unit & integration tests

Documentation

Technical Specifications

Development Methodology

  • Phase-based validation: Each increment demonstrates working functionality
  • Chunk-based development: Manageable development cycles with rollback capability
  • Technical excellence: Focus on maintainable, extensible, well-documented code

Key Learnings & Innovations

GUI Architecture

  • Progressive disclosure prevents cognitive overload while maintaining power-user access
  • Qt Designer integration enables rapid UI iteration with path toward polished UI

Embedded Systems Integration

  • Symbolic linking enables seamless reuse of validated embedded libraries
  • Frame-level protocol capture provides enhanced debugging visibility
  • Hardware abstraction facilitates cross-platform device support

Software Engineering

  • Modern C++23 features (std::expected) improve error handling clarity
  • RAII patterns prevent resource leaks in GUI applications
  • Comprehensive documentation enables effective team collaboration

Immediate Development Plans

Short Term

  • Complete Device Information Browser pane implementation
  • Enhance background processing with Qt threading
  • Implement CockpitVM vm_bootloader enhancements

Medium Term

  • Multi-device support and batch operations
  • Advanced protocol analysis and performance metrics
  • Cross-platform deployment (Windows, macOS, Linux)

Related Projects

Contributing

This project demonstrates embedded GUI development practices. Contributions welcome from developers interested in Qt6, embedded systems, or protocol design.


Canopy - Bridging the gap between embedded firmware and modern desktop applications

About

Canopy is a Qt6-based desktop application that provides a robust, user-friendly interface for uploading bytecode to CockpitVM-enabled devices. Built with the needs of system integrators in mind, it demonstrates modern C++ GUI development practices and embedded systems integration in order to provide basic upload and verification.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •