|
|
|
//
|
|
|
|
// userinterface.h
|
|
|
|
//
|
|
|
|
// MiniDexed - Dexed FM synthesizer for bare metal Raspberry Pi
|
|
|
|
// Copyright (C) 2022 The MiniDexed Team
|
|
|
|
//
|
|
|
|
// This program is free software: you can redistribute it and/or modify
|
|
|
|
// it under the terms of the GNU General Public License as published by
|
|
|
|
// the Free Software Foundation, either version 3 of the License, or
|
|
|
|
// (at your option) any later version.
|
|
|
|
//
|
|
|
|
// This program is distributed in the hope that it will be useful,
|
|
|
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
// GNU General Public License for more details.
|
|
|
|
//
|
|
|
|
// You should have received a copy of the GNU General Public License
|
|
|
|
// along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
//
|
|
|
|
#ifndef _userinterface_h
|
|
|
|
#define _userinterface_h
|
|
|
|
|
|
|
|
#include "config.h"
|
Support hierarchic menus (#61)
* Support hierarchic menus
This introduces a new menu engine implemented in the class CUIMenu,
which can be configured with C-tables. This should make it easier to
extend the menus, without modifying the code too much. The UI provides
a main menu, which selects the TG to be edited and a TG sub-menu, which
presents the already known TG parameters (voice bank, voice, volume,
pan, detune and channel). A sub-menu is entered with single click and
left with double click. There are arrows displayed on the LCD, which
show the direction(s), to which the knob can be moved. All TG related
parameters are maintained in the class CMiniDexed now.
* uimenu: Make the tables const
* uimenu: Add sub-menu "Edit Voice"
Menu items can be re-sorted, if necessary.
* uimenu: Add "Reverb" sub-menu
* Map reverb float parameters to range 0 .. 99
* minidexed: Add global (non-TG) parameters
* minidexed: Protect reverb module with spin lock
3 years ago
|
|
|
#include "uimenu.h"
|
|
|
|
#include "uibuttons.h"
|
|
|
|
#include <sensor/ky040.h>
|
|
|
|
#include <display/hd44780device.h>
|
|
|
|
#include <display/ssd1306device.h>
|
|
|
|
#include <circle/gpiomanager.h>
|
|
|
|
#include <circle/writebuffer.h>
|
|
|
|
#include <circle/i2cmaster.h>
|
|
|
|
|
|
|
|
class CMiniDexed;
|
|
|
|
|
|
|
|
class CUserInterface
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CUserInterface (CMiniDexed *pMiniDexed, CGPIOManager *pGPIOManager, CI2CMaster *pI2CMaster, CConfig *pConfig);
|
|
|
|
~CUserInterface (void);
|
|
|
|
|
|
|
|
bool Initialize (void);
|
|
|
|
|
|
|
|
void Process (void);
|
|
|
|
|
Support hierarchic menus (#61)
* Support hierarchic menus
This introduces a new menu engine implemented in the class CUIMenu,
which can be configured with C-tables. This should make it easier to
extend the menus, without modifying the code too much. The UI provides
a main menu, which selects the TG to be edited and a TG sub-menu, which
presents the already known TG parameters (voice bank, voice, volume,
pan, detune and channel). A sub-menu is entered with single click and
left with double click. There are arrows displayed on the LCD, which
show the direction(s), to which the knob can be moved. All TG related
parameters are maintained in the class CMiniDexed now.
* uimenu: Make the tables const
* uimenu: Add sub-menu "Edit Voice"
Menu items can be re-sorted, if necessary.
* uimenu: Add "Reverb" sub-menu
* Map reverb float parameters to range 0 .. 99
* minidexed: Add global (non-TG) parameters
* minidexed: Protect reverb module with spin lock
3 years ago
|
|
|
void ParameterChanged (void);
|
|
|
|
|
Support hierarchic menus (#61)
* Support hierarchic menus
This introduces a new menu engine implemented in the class CUIMenu,
which can be configured with C-tables. This should make it easier to
extend the menus, without modifying the code too much. The UI provides
a main menu, which selects the TG to be edited and a TG sub-menu, which
presents the already known TG parameters (voice bank, voice, volume,
pan, detune and channel). A sub-menu is entered with single click and
left with double click. There are arrows displayed on the LCD, which
show the direction(s), to which the knob can be moved. All TG related
parameters are maintained in the class CMiniDexed now.
* uimenu: Make the tables const
* uimenu: Add sub-menu "Edit Voice"
Menu items can be re-sorted, if necessary.
* uimenu: Add "Reverb" sub-menu
* Map reverb float parameters to range 0 .. 99
* minidexed: Add global (non-TG) parameters
* minidexed: Protect reverb module with spin lock
3 years ago
|
|
|
// Write to display in this format:
|
|
|
|
// +----------------+
|
Support hierarchic menus (#61)
* Support hierarchic menus
This introduces a new menu engine implemented in the class CUIMenu,
which can be configured with C-tables. This should make it easier to
extend the menus, without modifying the code too much. The UI provides
a main menu, which selects the TG to be edited and a TG sub-menu, which
presents the already known TG parameters (voice bank, voice, volume,
pan, detune and channel). A sub-menu is entered with single click and
left with double click. There are arrows displayed on the LCD, which
show the direction(s), to which the knob can be moved. All TG related
parameters are maintained in the class CMiniDexed now.
* uimenu: Make the tables const
* uimenu: Add sub-menu "Edit Voice"
Menu items can be re-sorted, if necessary.
* uimenu: Add "Reverb" sub-menu
* Map reverb float parameters to range 0 .. 99
* minidexed: Add global (non-TG) parameters
* minidexed: Protect reverb module with spin lock
3 years ago
|
|
|
// |PARAM MENU|
|
|
|
|
// |[<]VALUE [>]|
|
|
|
|
// +----------------+
|
Support hierarchic menus (#61)
* Support hierarchic menus
This introduces a new menu engine implemented in the class CUIMenu,
which can be configured with C-tables. This should make it easier to
extend the menus, without modifying the code too much. The UI provides
a main menu, which selects the TG to be edited and a TG sub-menu, which
presents the already known TG parameters (voice bank, voice, volume,
pan, detune and channel). A sub-menu is entered with single click and
left with double click. There are arrows displayed on the LCD, which
show the direction(s), to which the knob can be moved. All TG related
parameters are maintained in the class CMiniDexed now.
* uimenu: Make the tables const
* uimenu: Add sub-menu "Edit Voice"
Menu items can be re-sorted, if necessary.
* uimenu: Add "Reverb" sub-menu
* Map reverb float parameters to range 0 .. 99
* minidexed: Add global (non-TG) parameters
* minidexed: Protect reverb module with spin lock
3 years ago
|
|
|
void DisplayWrite (const char *pMenu, const char *pParam, const char *pValue,
|
|
|
|
bool bArrowDown, bool bArrowUp);
|
|
|
|
|
|
|
|
// To be called from the MIDI device on reception of a MIDI CC message
|
|
|
|
void UIMIDICmdHandler (unsigned nMidiCh, unsigned nMidiCmd, unsigned nMidiData1, unsigned nMidiData2);
|
|
|
|
|
|
|
|
private:
|
|
|
|
void LCDWrite (const char *pString); // Print to optional HD44780 display
|
|
|
|
|
|
|
|
void EncoderEventHandler (CKY040::TEvent Event);
|
|
|
|
static void EncoderEventStub (CKY040::TEvent Event, void *pParam);
|
|
|
|
void UIButtonsEventHandler (CUIButton::BtnEvent Event);
|
|
|
|
static void UIButtonsEventStub (CUIButton::BtnEvent Event, void *pParam);
|
|
|
|
void UISetMIDIButtonChannel (unsigned uCh);
|
|
|
|
|
|
|
|
private:
|
|
|
|
CMiniDexed *m_pMiniDexed;
|
|
|
|
CGPIOManager *m_pGPIOManager;
|
|
|
|
CI2CMaster *m_pI2CMaster;
|
|
|
|
CConfig *m_pConfig;
|
|
|
|
|
|
|
|
CCharDevice *m_pLCD;
|
|
|
|
CHD44780Device *m_pHD44780;
|
|
|
|
CSSD1306Device *m_pSSD1306;
|
|
|
|
CWriteBufferDevice *m_pLCDBuffered;
|
|
|
|
|
|
|
|
CUIButtons *m_pUIButtons;
|
|
|
|
|
|
|
|
unsigned m_nMIDIButtonCh;
|
|
|
|
|
|
|
|
CKY040 *m_pRotaryEncoder;
|
|
|
|
bool m_bSwitchPressed;
|
|
|
|
|
Support hierarchic menus (#61)
* Support hierarchic menus
This introduces a new menu engine implemented in the class CUIMenu,
which can be configured with C-tables. This should make it easier to
extend the menus, without modifying the code too much. The UI provides
a main menu, which selects the TG to be edited and a TG sub-menu, which
presents the already known TG parameters (voice bank, voice, volume,
pan, detune and channel). A sub-menu is entered with single click and
left with double click. There are arrows displayed on the LCD, which
show the direction(s), to which the knob can be moved. All TG related
parameters are maintained in the class CMiniDexed now.
* uimenu: Make the tables const
* uimenu: Add sub-menu "Edit Voice"
Menu items can be re-sorted, if necessary.
* uimenu: Add "Reverb" sub-menu
* Map reverb float parameters to range 0 .. 99
* minidexed: Add global (non-TG) parameters
* minidexed: Protect reverb module with spin lock
3 years ago
|
|
|
CUIMenu m_Menu;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|