Deluge Firmware 1.3.0
Build date: 2025.07.21
Loading...
Searching...
No Matches
usb_peripheral.h
1/*
2 * Copyright © 2024 Synthstrom Audible Limited
3 *
4 * This file is part of The Synthstrom Audible Deluge Firmware.
5 *
6 * The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7 * terms of the GNU General Public License as published by the Free Software Foundation,
8 * either version 3 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along with this program.
15 * If not, see <https://www.gnu.org/licenses/>.
16 */
17
18#pragma once
19
20#include "io/midi/cable_types/usb_device_cable.h"
21#include "io/midi/midi_root_complex.h"
22#include <array>
23
24class MIDIRootComplexUSBPeripheral : public MIDIRootComplex {
25private:
26 using CableArray = std::array<MIDICableUSBUpstream, 3>;
27
28 CableArray cables_;
29
30public:
31 MIDIRootComplexUSBPeripheral(const MIDIRootComplexUSBPeripheral&) = delete;
32 MIDIRootComplexUSBPeripheral(MIDIRootComplexUSBPeripheral&&) = delete;
33 MIDIRootComplexUSBPeripheral& operator=(const MIDIRootComplexUSBPeripheral&) = delete;
34 MIDIRootComplexUSBPeripheral& operator=(MIDIRootComplexUSBPeripheral&&) = delete;
35
36 MIDIRootComplexUSBPeripheral();
37 ~MIDIRootComplexUSBPeripheral() override;
38
39 [[nodiscard]] size_t getNumCables() const override {
40 // This returns 2, not 3, because the 3rd cable is secret (only used by sysex infrastructure)
41 return 2;
42 }
43
44 [[nodiscard]] MIDICable* getCable(size_t index) override;
45 [[nodiscard]] RootComplexType getType() const override { return RootComplexType::RC_USB_PERIPHERAL; }
46
47 void flush() override;
48 [[nodiscard]] Error poll() override;
49};
A MIDI cable connection. Stores all state specific to a given cable and its contained ports and chann...
Definition midi_device.h:94
Error poll() override
Poll the root complex, calling back in to the MIDI engine for any new messages.
Definition usb_peripheral.cpp:114
void flush() override
Flush as much data as possible from any internal buffers to hardware queues.
Definition usb_peripheral.cpp:74