这是indexloc提供的服务,不要输入任何密码
Skip to content

Conversation

@devin-ai-integration
Copy link
Contributor

Initial CMake C++20 Project Setup for MIDI-CI Library

Overview

This PR sets up a comprehensive CMake-based C++20 project structure for implementing MIDI 2.0 MIDI-CI features in C++. The project is designed to be cross-platform and realtime-safe, based on the reference Kotlin implementation in the ktmidi repository.

Changes Made

Project Structure

  • CMakeLists.txt: Main CMake configuration with C++20 standard, cross-platform settings, and build options
  • src/CMakeLists.txt: Source-level CMake configuration with library targets and installation rules
  • Modular directory structure: Organized into core, messages, profiles, properties, and transport modules

Core Implementation

  • MidiCIDevice: Main facade class with thread-safe PIMPL pattern for device management
  • ClientConnection: Connection management class for MIDI-CI device connections
  • MidiCIConstants: MIDI-CI specification constants following MIDI-CI v1.2
  • Message system: Base Message class and DiscoveryInquiry implementation with serialization

Testing Framework

  • Basic unit tests: CMake-integrated test suite with device initialization and ID management tests
  • Test structure: Modular test organization ready for expansion

Technical Features

C++20 Compliance

  • Modern C++ features enabled with CMAKE_CXX_STANDARD 20
  • Cross-platform compatibility for Windows, macOS, and Linux
  • Thread-safe implementation using PIMPL idiom and std::mutex

MIDI-CI Specification Alignment

  • Based on MIDI-CI version 1.2 specification
  • Implements core message types (Discovery, Profile, Property Exchange)
  • Transport-agnostic design following the ktmidi-ci reference architecture

Build System

  • CMake 3.20+ requirement for modern C++ support
  • Configurable build options (shared/static libs, tests, examples)
  • Cross-platform installation and packaging support

Testing Status

⚠️ Local build testing was not possible due to CMake not being installed in the development environment. The project structure and code have been carefully designed based on C++20 best practices and the reference Kotlin implementation, but CI testing will be required to verify compilation.

Next Steps

  1. Verify CMake build works across platforms via CI
  2. Implement remaining core classes (Messenger, ProfileManager, PropertyManager)
  3. Add comprehensive message serialization/deserialization
  4. Implement Property Exchange and Profile Configuration features
  5. Add platform-specific transport layer implementations

Reference Implementation

This implementation is based on the comprehensive MIDI-CI features in the ktmidi-ci module, which includes:

  • All MIDI-CI SysEx messages per MIDI-CI v1.2 specification
  • Profile Configuration with inquiry and management
  • Property Exchange with metadata system and partial updates
  • Process Inquiry implementation
  • Transport-agnostic design

Link to Devin run: https://app.devin.ai/sessions/b596e9ccba3946aca158aa0744dafc05
Requested by: Atsushi Eno (atsushieno@gmail.com)

…anager, and enhanced Message system

- Add comprehensive Messenger class with all MIDI-CI protocol methods
- Implement ProfileManager for Profile Configuration with enable/disable operations
- Add PropertyManager for Property Exchange with subscription management
- Create PropertyChunkManager for handling multi-packet message assembly
- Enhance Message system with complete MIDI-CI v1.2 message types and serialization
- Add comprehensive unit tests for all core components
- Update CMake configuration to include all new source files
- Maintain C++20 realtime-safe design with PIMPL pattern throughout

Co-Authored-By: Atsushi Eno <atsushieno@gmail.com>
@devin-ai-integration
Copy link
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

⚙️ Control Options:

  • Disable automatic comment and CI monitoring

@atsushieno atsushieno merged commit 5b30a3d into main Jun 15, 2025
@atsushieno atsushieno deleted the devin/1734264505-core-midi-ci-features branch June 19, 2025 05:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants