diff --git a/src/config.cpp b/src/config.cpp index 5214713..98497d4 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -174,17 +174,29 @@ void CConfig::Load (void) m_nMIDIButtonCh = m_Properties.GetNumber ("MIDIButtonCh", 0); m_nMIDIButtonNotes = m_Properties.GetNumber ("MIDIButtonNotes", 0); + m_nMIDIButtonPrev = m_Properties.GetNumber ("MIDIButtonPrev", 0); m_nMIDIButtonNext = m_Properties.GetNumber ("MIDIButtonNext", 0); m_nMIDIButtonBack = m_Properties.GetNumber ("MIDIButtonBack", 0); m_nMIDIButtonSelect = m_Properties.GetNumber ("MIDIButtonSelect", 0); m_nMIDIButtonHome = m_Properties.GetNumber ("MIDIButtonHome", 0); + m_MIDIButtonActionPrev = m_Properties.GetString ("MIDIButtonActionPrev", ""); + m_MIDIButtonActionNext = m_Properties.GetString ("MIDIButtonActionNext", ""); + m_MIDIButtonActionBack = m_Properties.GetString ("MIDIButtonActionBack", ""); + m_MIDIButtonActionSelect = m_Properties.GetString ("MIDIButtonActionSelect", ""); + m_MIDIButtonActionHome = m_Properties.GetString ("MIDIButtonActionHome", ""); + m_nMIDIButtonPgmUp = m_Properties.GetNumber ("MIDIButtonPgmUp", 0); m_nMIDIButtonPgmDown = m_Properties.GetNumber ("MIDIButtonPgmDown", 0); m_nMIDIButtonTGUp = m_Properties.GetNumber ("MIDIButtonTGUp", 0); m_nMIDIButtonTGDown = m_Properties.GetNumber ("MIDIButtonTGDown", 0); - + + m_MIDIButtonActionPgmUp = m_Properties.GetString ("MIDIButtonActionPgmUp", ""); + m_MIDIButtonActionPgmDown = m_Properties.GetString ("MIDIButtonActionPgmDown", ""); + m_MIDIButtonActionTGUp = m_Properties.GetString ("MIDIButtonActionTGUp", ""); + m_MIDIButtonActionTGDown = m_Properties.GetString ("MIDIButtonActionTGDown", ""); + m_bEncoderEnabled = m_Properties.GetNumber ("EncoderEnabled", 0) != 0; m_nEncoderPinClock = m_Properties.GetNumber ("EncoderPinClock", 10); m_nEncoderPinData = m_Properties.GetNumber ("EncoderPinData", 9); @@ -626,6 +638,31 @@ unsigned CConfig::GetMIDIButtonHome (void) const return m_nMIDIButtonHome; } +const char *CConfig::GetMIDIButtonActionPrev (void) const +{ + return m_MIDIButtonActionPrev.c_str(); +} + +const char *CConfig::GetMIDIButtonActionNext (void) const +{ + return m_MIDIButtonActionNext.c_str(); +} + +const char *CConfig::GetMIDIButtonActionBack (void) const +{ + return m_MIDIButtonActionBack.c_str(); +} + +const char *CConfig::GetMIDIButtonActionSelect (void) const +{ + return m_MIDIButtonActionSelect.c_str(); +} + +const char *CConfig::GetMIDIButtonActionHome (void) const +{ + return m_MIDIButtonActionHome.c_str(); +} + unsigned CConfig::GetMIDIButtonPgmUp (void) const { return m_nMIDIButtonPgmUp; @@ -646,6 +683,26 @@ unsigned CConfig::GetMIDIButtonTGDown (void) const return m_nMIDIButtonTGDown; } +const char *CConfig::GetMIDIButtonActionPgmUp (void) const +{ + return m_MIDIButtonActionPgmUp.c_str(); +} + +const char *CConfig::GetMIDIButtonActionPgmDown (void) const +{ + return m_MIDIButtonActionPgmDown.c_str(); +} + +const char *CConfig::GetMIDIButtonActionTGUp (void) const +{ + return m_MIDIButtonActionTGUp.c_str(); +} + +const char *CConfig::GetMIDIButtonActionTGDown (void) const +{ + return m_MIDIButtonActionTGDown.c_str(); +} + bool CConfig::GetEncoderEnabled (void) const { return m_bEncoderEnabled; diff --git a/src/config.h b/src/config.h index a454d90..f85ef36 100644 --- a/src/config.h +++ b/src/config.h @@ -206,18 +206,32 @@ public: // MIDI Button Navigation unsigned GetMIDIButtonCh (void) const; unsigned GetMIDIButtonNotes (void) const; + unsigned GetMIDIButtonPrev (void) const; unsigned GetMIDIButtonNext (void) const; unsigned GetMIDIButtonBack (void) const; unsigned GetMIDIButtonSelect (void) const; unsigned GetMIDIButtonHome (void) const; + // Action type for Midi buttons: "click", "doubleclick", "longpress", "dec", "inc", "" + const char *GetMIDIButtonActionPrev (void) const; + const char *GetMIDIButtonActionNext (void) const; + const char *GetMIDIButtonActionBack (void) const; + const char *GetMIDIButtonActionSelect (void) const; + const char *GetMIDIButtonActionHome (void) const; + // MIDI Button Program and TG Selection unsigned GetMIDIButtonPgmUp (void) const; unsigned GetMIDIButtonPgmDown (void) const; unsigned GetMIDIButtonTGUp (void) const; unsigned GetMIDIButtonTGDown (void) const; - + + // Action type for buttons: "click", "doubleclick", "longpress", "dec", "inc", "" + const char *GetMIDIButtonActionPgmUp (void) const; + const char *GetMIDIButtonActionPgmDown (void) const; + const char *GetMIDIButtonActionTGUp (void) const; + const char *GetMIDIButtonActionTGDown (void) const; + // KY-040 Rotary Encoder // GPIO pin numbers are chip numbers, not header positions bool GetEncoderEnabled (void) const; @@ -331,6 +345,16 @@ private: unsigned m_nMIDIButtonTGUp; unsigned m_nMIDIButtonTGDown; + std::string m_MIDIButtonActionPrev; + std::string m_MIDIButtonActionNext; + std::string m_MIDIButtonActionBack; + std::string m_MIDIButtonActionSelect; + std::string m_MIDIButtonActionHome; + std::string m_MIDIButtonActionPgmUp; + std::string m_MIDIButtonActionPgmDown; + std::string m_MIDIButtonActionTGUp; + std::string m_MIDIButtonActionTGDown; + bool m_bEncoderEnabled; unsigned m_nEncoderPinClock; unsigned m_nEncoderPinData; diff --git a/src/minidexed.ini b/src/minidexed.ini index de9f150..04ee01f 100644 --- a/src/minidexed.ini +++ b/src/minidexed.ini @@ -118,15 +118,25 @@ LongPressTimeout=400 # Note numbers, triggered with NoteOn/NoteOff, not CC numbers. MIDIButtonCh=0 MIDIButtonNotes=0 + MIDIButtonPrev=0 +MIDIButtonActionPrev= MIDIButtonNext=0 +MIDIButtonActionNext= MIDIButtonBack=0 +MIDIButtonActionBack= MIDIButtonSelect=0 +MIDIButtonActionSelect= MIDIButtonHome=0 +MIDIButtonActionHome= MIDIButtonPgmUp=0 +MIDIButtonActionPgmUp= MIDIButtonPgmDown=0 +MIDIButtonActionPgmDown= MIDIButtonTGUp=0 +MIDIButtonActionTGUp= MIDIButtonTGDown=0 +MIDIButtonActionTGDown= # KY-040 Rotary Encoder EncoderEnabled=1 diff --git a/src/uibuttons.cpp b/src/uibuttons.cpp index 0e361ae..ebc9d58 100644 --- a/src/uibuttons.cpp +++ b/src/uibuttons.cpp @@ -268,8 +268,16 @@ CUIButtons::CUIButtons ( unsigned TGUpPin, const char *TGUpAction, unsigned TGDownPin, const char *TGDownAction, unsigned doubleClickTimeout, unsigned longPressTimeout, - unsigned notesMidi, unsigned prevMidi, unsigned nextMidi, unsigned backMidi, unsigned selectMidi, unsigned homeMidi, - unsigned pgmUpMidi, unsigned pgmDownMidi, unsigned TGUpMidi, unsigned TGDownMidi + unsigned notesMidi, + unsigned prevMidi, const char *prevMidiAction, + unsigned nextMidi, const char *nextMidiAction, + unsigned backMidi, const char *backMidiAction, + unsigned selectMidi, const char *selectMidiAction, + unsigned homeMidi, const char *homeMidiAction, + unsigned pgmUpMidi, const char *pgmUpMidiAction, + unsigned pgmDownMidi, const char *pgmDownMidiAction, + unsigned TGUpMidi, const char *TGUpMidiAction, + unsigned TGDownMidi, const char *TGDownMidiAction ) : m_doubleClickTimeout(doubleClickTimeout), m_longPressTimeout(longPressTimeout), @@ -293,14 +301,23 @@ CUIButtons::CUIButtons ( m_TGDownAction(CUIButton::triggerTypeFromString(TGDownAction)), m_notesMidi(notesMidi), m_prevMidi(ccToMidiPin(prevMidi)), + m_prevMidiAction(CUIButton::triggerTypeFromString(prevMidiAction)), m_nextMidi(ccToMidiPin(nextMidi)), + m_nextMidiAction(CUIButton::triggerTypeFromString(nextMidiAction)), m_backMidi(ccToMidiPin(backMidi)), + m_backMidiAction(CUIButton::triggerTypeFromString(backMidiAction)), m_selectMidi(ccToMidiPin(selectMidi)), + m_selectMidiAction(CUIButton::triggerTypeFromString(selectMidiAction)), m_homeMidi(ccToMidiPin(homeMidi)), + m_homeMidiAction(CUIButton::triggerTypeFromString(homeMidiAction)), m_pgmUpMidi(ccToMidiPin(pgmUpMidi)), + m_pgmUpMidiAction(CUIButton::triggerTypeFromString(pgmUpMidiAction)), m_pgmDownMidi(ccToMidiPin(pgmDownMidi)), + m_pgmDownMidiAction(CUIButton::triggerTypeFromString(pgmDownMidiAction)), m_TGUpMidi(ccToMidiPin(TGUpMidi)), + m_TGUpMidiAction(CUIButton::triggerTypeFromString(TGUpMidiAction)), m_TGDownMidi(ccToMidiPin(TGDownMidi)), + m_TGDownMidiAction(CUIButton::triggerTypeFromString(TGDownMidiAction)), m_eventHandler (0), m_lastTick (0) { @@ -330,7 +347,7 @@ boolean CUIButtons::Initialize (void) // Each normal button can be assigned up to 3 actions: click, doubleclick and // longpress. We may not initialise all of the buttons. - // MIDI buttons only support a single click. + // MIDI buttons can be assigned to click, doubleclick, lopngpress unsigned pins[MAX_BUTTONS] = { m_prevPin, m_nextPin, m_backPin, m_selectPin, m_homePin, m_pgmUpPin, m_pgmDownPin, m_TGUpPin, m_TGDownPin, m_prevMidi, m_nextMidi, m_backMidi, m_selectMidi, m_homeMidi, m_pgmUpMidi, m_pgmDownMidi, m_TGUpMidi, m_TGDownMidi @@ -339,9 +356,9 @@ boolean CUIButtons::Initialize (void) // Normal buttons m_prevAction, m_nextAction, m_backAction, m_selectAction, m_homeAction, m_pgmUpAction, m_pgmDownAction, m_TGUpAction, m_TGDownAction, - // MIDI Buttons only support a single click (at present) - CUIButton::BtnTriggerClick, CUIButton::BtnTriggerClick, CUIButton::BtnTriggerClick, CUIButton::BtnTriggerClick, CUIButton::BtnTriggerClick, - CUIButton::BtnTriggerClick, CUIButton::BtnTriggerClick, CUIButton::BtnTriggerClick, CUIButton::BtnTriggerClick + // MIDI buttons + m_prevMidiAction, m_nextMidiAction, m_backMidiAction, m_selectMidiAction, m_homeMidiAction, + m_pgmUpMidiAction, m_pgmDownMidiAction, m_TGUpMidiAction, m_TGDownMidiAction, }; CUIButton::BtnEvent events[MAX_BUTTONS] = { // Normal buttons diff --git a/src/uibuttons.h b/src/uibuttons.h index 44dcca0..c38310b 100644 --- a/src/uibuttons.h +++ b/src/uibuttons.h @@ -122,8 +122,16 @@ public: unsigned TGUpPin, const char *TGUpAction, unsigned TGDownPin, const char *TGDownAction, unsigned doubleClickTimeout, unsigned longPressTimeout, - unsigned notesMidi, unsigned prevMidi, unsigned nextMidi, unsigned backMidi, unsigned selectMidi, unsigned homeMidi, - unsigned pgmUpMidi, unsigned pgmDownMidi, unsigned TGUpMidi, unsigned TGDownMidi + unsigned notesMidi, + unsigned prevMidi, const char *prevMidiAction, + unsigned nextMidi, const char *nextMidiAction, + unsigned backMidi, const char *backMidiAction, + unsigned selectMidi, const char *selectMidiAction, + unsigned homeMidi, const char *homeMidiAction, + unsigned pgmUpMidi, const char *pgmUpMidiAction, + unsigned pgmDownMidi, const char *pgmDownMidiAction, + unsigned TGUpMidi, const char *TGUpMidiAction, + unsigned TGDownMidi, const char *TGDownMidiAction ); ~CUIButtons (void); @@ -170,16 +178,26 @@ private: // MIDI button configuration unsigned m_notesMidi; + unsigned m_prevMidi; + CUIButton::BtnTrigger m_prevMidiAction; unsigned m_nextMidi; + CUIButton::BtnTrigger m_nextMidiAction; unsigned m_backMidi; + CUIButton::BtnTrigger m_backMidiAction; unsigned m_selectMidi; + CUIButton::BtnTrigger m_selectMidiAction; unsigned m_homeMidi; + CUIButton::BtnTrigger m_homeMidiAction; unsigned m_pgmUpMidi; + CUIButton::BtnTrigger m_pgmUpMidiAction; unsigned m_pgmDownMidi; + CUIButton::BtnTrigger m_pgmDownMidiAction; unsigned m_TGUpMidi; + CUIButton::BtnTrigger m_TGUpMidiAction; unsigned m_TGDownMidi; + CUIButton::BtnTrigger m_TGDownMidiAction; BtnEventHandler *m_eventHandler; void *m_eventParam; diff --git a/src/userinterface.cpp b/src/userinterface.cpp index aa46f9e..d65f653 100644 --- a/src/userinterface.cpp +++ b/src/userinterface.cpp @@ -184,14 +184,23 @@ bool CUserInterface::Initialize (void) m_pConfig->GetLongPressTimeout (), m_pConfig->GetMIDIButtonNotes (), m_pConfig->GetMIDIButtonPrev (), + m_pConfig->GetMIDIButtonActionPrev (), m_pConfig->GetMIDIButtonNext (), + m_pConfig->GetMIDIButtonActionNext (), m_pConfig->GetMIDIButtonBack (), + m_pConfig->GetMIDIButtonActionBack (), m_pConfig->GetMIDIButtonSelect (), + m_pConfig->GetMIDIButtonActionSelect (), m_pConfig->GetMIDIButtonHome (), + m_pConfig->GetMIDIButtonActionHome (), m_pConfig->GetMIDIButtonPgmUp (), + m_pConfig->GetMIDIButtonActionPgmUp (), m_pConfig->GetMIDIButtonPgmDown (), + m_pConfig->GetMIDIButtonActionPgmDown (), m_pConfig->GetMIDIButtonTGUp (), - m_pConfig->GetMIDIButtonTGDown () + m_pConfig->GetMIDIButtonActionTGUp (), + m_pConfig->GetMIDIButtonTGDown (), + m_pConfig->GetMIDIButtonActionTGDown () ); assert (m_pUIButtons);