From ce98749256e9231cdb67d1e62b77f697dc219095 Mon Sep 17 00:00:00 2001 From: Richard Garner Date: Sat, 12 Jul 2025 19:19:43 +1000 Subject: [PATCH] Faderport 14 bit fader -> two byte key --- reaper_csurf_integrator/control_surface_integrator.cpp | 8 +++++++- reaper_csurf_integrator/control_surface_midi_widgets.h | 10 +++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/reaper_csurf_integrator/control_surface_integrator.cpp b/reaper_csurf_integrator/control_surface_integrator.cpp index d69d596..bfd9683 100644 --- a/reaper_csurf_integrator/control_surface_integrator.cpp +++ b/reaper_csurf_integrator/control_surface_integrator.cpp @@ -492,6 +492,7 @@ void Midi_ControlSurface::ProcessMidiWidget(int &lineNumber, ifstream &surfaceTe string oneByteKey = ""; string twoByteKey = ""; + string twoByteKeyMsg2 = ""; string threeByteKey = ""; string threeByteKeyMsg2 = ""; @@ -511,6 +512,7 @@ void Midi_ControlSurface::ProcessMidiWidget(int &lineNumber, ifstream &surfaceTe message2.midi_message[1] = strToHex(tokenLines[i][5]); message2.midi_message[2] = strToHex(tokenLines[i][6]); + twoByteKeyMsg2 = to_string(message2.midi_message[0] * 0x10000 + message2.midi_message[1] * 0x100); threeByteKeyMsg2 = to_string(message2.midi_message[0] * 0x10000 + message2.midi_message[1] * 0x100 + message2.midi_message[2]); } @@ -527,7 +529,11 @@ void Midi_ControlSurface::ProcessMidiWidget(int &lineNumber, ifstream &surfaceTe else if (widgetType == "Fader14Bit" && size == 4) CSIMessageGeneratorsByMessage_.insert(make_pair(oneByteKey, make_unique(csi_, widget))); else if (widgetType == "FaderportClassicFader14Bit" && size == 7) - CSIMessageGeneratorsByMessage_.insert(make_pair(oneByteKey, make_unique(csi_, widget, message1, message2))); + { + shared_ptr message1Ptr = make_shared(message1); + CSIMessageGeneratorsByMessage_.insert(make_pair(twoByteKey, make_unique(csi_, widget, message1Ptr, message2))); + CSIMessageGeneratorsByMessage_.insert(make_pair(twoByteKeyMsg2, make_unique(csi_, widget, message1Ptr, message2))); + } else if (widgetType == "Fader7Bit" && size== 4) CSIMessageGeneratorsByMessage_.insert(make_pair(twoByteKey, make_unique(csi_, widget))); else if (widgetType == "Encoder" && widgetClass == "RotaryWidgetClass") diff --git a/reaper_csurf_integrator/control_surface_midi_widgets.h b/reaper_csurf_integrator/control_surface_midi_widgets.h index d374b3c..56ef078 100755 --- a/reaper_csurf_integrator/control_surface_midi_widgets.h +++ b/reaper_csurf_integrator/control_surface_midi_widgets.h @@ -96,19 +96,19 @@ class FaderportClassicFader14Bit_Midi_CSIMessageGenerator : public Midi_CSIMessa ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// { protected: - MIDI_event_ex_t message1_; + shared_ptr message1_; MIDI_event_ex_t message2_; public: virtual ~FaderportClassicFader14Bit_Midi_CSIMessageGenerator() {} - FaderportClassicFader14Bit_Midi_CSIMessageGenerator(CSurfIntegrator *const csi, Widget *widget, MIDI_event_ex_t message1, MIDI_event_ex_t message2) : Midi_CSIMessageGenerator(csi, widget), message1_(message1), message2_(message2) {} + FaderportClassicFader14Bit_Midi_CSIMessageGenerator(CSurfIntegrator *const csi, Widget *widget, shared_ptr message1, MIDI_event_ex_t message2) : Midi_CSIMessageGenerator(csi, widget), message1_(message1), message2_(message2) {} virtual void ProcessMidiMessage(const MIDI_event_ex_t *midiMessage) override { - if (message1_.midi_message[1] == midiMessage->midi_message[1]) - message1_.midi_message[2] = midiMessage->midi_message[2]; + if (message1_->midi_message[1] == midiMessage->midi_message[1]) + message1_->midi_message[2] = midiMessage->midi_message[2]; else if (message2_.midi_message[1] == midiMessage->midi_message[1]) - widget_->GetZoneManager()->DoAction(widget_, int14ToNormalized(message1_.midi_message[2], midiMessage->midi_message[2])); + widget_->GetZoneManager()->DoAction(widget_, int14ToNormalized(message1_->midi_message[2], midiMessage->midi_message[2])); } };