BuGUI
BUtton Grid User Interface
Loading...
Searching...
No Matches
midi.hpp
1#pragma once
2#include <concepts/device.hpp>
3#include <hardware/protocol/midi_in.hpp>
4#include <hardware/protocol/midi_out.hpp>
5#include <hardware/protocol/sysex_out.hpp>
6
7namespace bugui
8{
9// FIXME : is the diamond problem
10// necesitate that the virtual inheritace
11// happens at the same level of the hierarchy ?
12#define midi_cnstrctr \
13protected: \
14explicit midi_base(Controller* ctrlr) \
15 : midi_in<Device, Controller>{ctrlr} \
16{ }
17
18template <typename Device, typename Controller>
20 : public midi_out<Device, Controller>
21 , public midi_in<Device, Controller>
22{
23 midi_cnstrctr
24};
25
26template <sends_sysex Device, typename Controller>
27struct midi_base<Device, Controller>
28 : public sysex_out<Device, Controller>
29 , public midi_in<Device, Controller>
30{
31 midi_cnstrctr
32};
33
34template <typename Device, typename Controller>
35struct midi : public midi_base<Device, Controller>
36{
37 void setup() override
38 {
39 libremidi::observer obs;
40 stdx::error ret{std::errc::not_connected};
41
42 for (const auto& input : obs.get_input_ports())
43 if (Device::display_name() == input.display_name)
44 ret = this->m_input.open_port(input);
45
46 if (ret != stdx::error{}) throw ret;
47
48 for (const auto& output : obs.get_output_ports())
49 if (Device::display_name() == output.display_name)
50 ret = this->m_output.open_port(output);
51
52 if (ret != stdx::error{}) throw ret;
53
54 if constexpr(has_init<Device>)
55 midi_base<Device, Controller>::init();
56
57 this->clear();
58 }
59
60protected:
61 explicit midi(Controller* ctrlr)
62 : midi_base<Device, Controller>{ctrlr}
63 { }
64};
65
66} // namespace bugui
Definition midi_out.hpp:14
void clear() override
Turns off all LEDs.
Definition midi_out.hpp:28
Definition sysex_out.hpp:14
Definition device.hpp:51
Definition midi.hpp:22
Definition midi.hpp:36
void setup() override
Sends any preliminary commands needed by the device ie. initialising to a particular mode like XY (La...
Definition midi.hpp:37