|
|
|
@ -30,7 +30,7 @@ extern MIDI_NAMESPACE::MidiInterface<MIDI_NAMESPACE::SerialMIDI<HardwareSerial>>
|
|
|
|
|
|
|
|
|
|
extern MixerMuteState AirMutes[2];
|
|
|
|
|
extern MixerFaderState AirFaders[2];
|
|
|
|
|
|
|
|
|
|
extern bool ButtonCheck(uint8_t btn);
|
|
|
|
|
|
|
|
|
|
// Typedefs ====================================================================
|
|
|
|
|
struct UI_SM {
|
|
|
|
@ -45,6 +45,7 @@ typedef void UI_STATE_FUNC(UI_SM* me, uint16_t event);
|
|
|
|
|
// Local variables =============================================================
|
|
|
|
|
static UI_SM UiSm;
|
|
|
|
|
#define DEFINE_MY_OBJECT() UI_SM* const me = &UiSm;
|
|
|
|
|
TimedPin DummyRelay;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const uint16_t ToutProg = 30; // [s]
|
|
|
|
@ -118,14 +119,15 @@ void UiSt_MixerStartup(UI_SM* const me, uint16_t event) {
|
|
|
|
|
case EV_STATE_ENTER: { //u MixerStartup: entry:
|
|
|
|
|
me->Timer = 0;
|
|
|
|
|
LedBoard.Blink(30, 270, 5);
|
|
|
|
|
LedChOn1.Blink(500, 500);
|
|
|
|
|
LedChOn2.Blink(500, 500);
|
|
|
|
|
LedInc1.Blink(500, 500);
|
|
|
|
|
LedDec1.Blink(500, 500);
|
|
|
|
|
LedChOn1.Blink(10, 1990);
|
|
|
|
|
LedChOn2.Blink(10, 1990);
|
|
|
|
|
LedInc1.Blink(10, 1990);
|
|
|
|
|
LedDec1.Blink(10, 1990);
|
|
|
|
|
}break;
|
|
|
|
|
case EV_STATE_EXIT: {
|
|
|
|
|
}break;
|
|
|
|
|
|
|
|
|
|
case EV_UI_RX_MIDI:
|
|
|
|
|
case EV_UI_RX_MUTE_CH1_ON:
|
|
|
|
|
case EV_UI_RX_MUTE_CH1_OFF:
|
|
|
|
|
case EV_UI_RX_MUTE_CH2_ON:
|
|
|
|
@ -134,12 +136,13 @@ void UiSt_MixerStartup(UI_SM* const me, uint16_t event) {
|
|
|
|
|
}break;
|
|
|
|
|
|
|
|
|
|
case EV_UI_TICK_1S: {
|
|
|
|
|
if ((me->Timer % 2) == 0) {
|
|
|
|
|
MixerFaderState& fader = AirFaders[0];
|
|
|
|
|
MIDI.sendControlChange(fader.MidiCtrlNr, fader.FaderStd - ((me->Timer >> 1) % 2), 1); // ping mixer with changing value (std, std-1, std,...)
|
|
|
|
|
}
|
|
|
|
|
if (++me->Timer == 15) {
|
|
|
|
|
SM_SET_STATE(&UiSt_Home); //u MixerStartup -left-> Home : timeout
|
|
|
|
|
}
|
|
|
|
|
//static uint8_t MuteVal = 0;
|
|
|
|
|
//MIDI.sendControlChange(21, MuteVal, 2); // Send Mute: CH2, 21-26: Aux1-6
|
|
|
|
|
//MuteVal = MuteVal ? 0 : 127;
|
|
|
|
|
}break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -162,6 +165,19 @@ void UiSt_Home(UI_SM* const me, uint16_t event) {
|
|
|
|
|
switch (event) {
|
|
|
|
|
case EV_STATE_ENTER: {
|
|
|
|
|
LedBoard.Blink(30, 270, 5);
|
|
|
|
|
// initialize mixer
|
|
|
|
|
for (uint_fast8_t i=0; i<ELEMCNT(AirMutes); i++) {
|
|
|
|
|
MixerMuteState& mute = AirMutes[i];
|
|
|
|
|
mute.MuteLocal = false; // init value: not muted (channel enabled)
|
|
|
|
|
MIDI.sendControlChange(mute.MidiCtrlNr, mute.MuteLocal ? 127 : 0, 2);
|
|
|
|
|
mute.LedUpdate();
|
|
|
|
|
}
|
|
|
|
|
for (uint_fast8_t i=0; i<ELEMCNT(AirFaders); i++) {
|
|
|
|
|
MixerFaderState& fader = AirFaders[i];
|
|
|
|
|
fader.FaderLocal = fader.FaderStd; // init: set volume to standard
|
|
|
|
|
MIDI.sendControlChange(fader.MidiCtrlNr, fader.FaderLocal, 1);
|
|
|
|
|
fader.LedUpdate();
|
|
|
|
|
}
|
|
|
|
|
}break;
|
|
|
|
|
case EV_STATE_EXIT: {
|
|
|
|
|
}break;
|
|
|
|
@ -177,11 +193,21 @@ void UiSt_Home(UI_SM* const me, uint16_t event) {
|
|
|
|
|
for (uint_fast8_t i=0; i<ELEMCNT(AirFaders); i++) {
|
|
|
|
|
MixerFaderState& fader = AirFaders[i];
|
|
|
|
|
if (btn == fader.UiButtonInc) {
|
|
|
|
|
if (ButtonCheck(fader.UiButtonDec)) { // inc+dec button together
|
|
|
|
|
fader.FaderLocal = fader.FaderStd;
|
|
|
|
|
fader.LedUpdate();
|
|
|
|
|
}else {
|
|
|
|
|
fader.VolumeInc();
|
|
|
|
|
}
|
|
|
|
|
MIDI.sendControlChange(fader.MidiCtrlNr, fader.FaderLocal, 1);
|
|
|
|
|
}
|
|
|
|
|
if (btn == fader.UiButtonDec) {
|
|
|
|
|
if (ButtonCheck(fader.UiButtonInc)) { // inc+dec button together
|
|
|
|
|
fader.FaderLocal = fader.FaderStd;
|
|
|
|
|
fader.LedUpdate();
|
|
|
|
|
}else {
|
|
|
|
|
fader.VolumeDec();
|
|
|
|
|
}
|
|
|
|
|
MIDI.sendControlChange(fader.MidiCtrlNr, fader.FaderLocal, 1);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|