public void SetLight(FaderPortButton button, FaderPortLightState state) { lock (_lightState) { if (state == FaderPortLightState.Toggle) { var oldState = _lightState[button]; // Everything except a current setting of Off results in a new state of Off state = oldState == FaderPortLightState.Off ? FaderPortLightState.On : FaderPortLightState.Off; } _lightState[button] = state; } SetLight(button, state != FaderPortLightState.Off); }
private void SetLight(FaderPortButton button, bool on) { if ((int)button > 0x7f) { return; } var radioGroup = GetRadioGroup(button); if (radioGroup == null) { _outputDevice.SendEvent(new NoteAftertouchEvent(Out((byte)button), Out(on))); return; } foreach (var btn in radioGroup) { _lightState[btn] = FaderPortLightState.Off; _outputDevice.SendEvent(new NoteAftertouchEvent(Out((byte)btn), Out(false))); } _lightState[button] = FaderPortLightState.On; _outputDevice.SendEvent(new NoteAftertouchEvent(Out((byte)button), Out(true))); }
private void Off(FaderPortButton btn) => _fp.SetLight(btn, FaderPortLightState.Off);
private void Blink(FaderPortButton btn) => _fp.SetLight(btn, FaderPortLightState.Blink);
public FaderPortButtonEventArgs(FaderPortButton btn, FaderPortButtonState state) { Button = btn; State = state; }
public ButtonMessage(FaderPortButton button, bool pressed, FaderPortLightState light) { Button = button; Pressed = pressed; Light = light; }
private ISet <FaderPortButton> GetRadioGroup(FaderPortButton btn) => _radioGroups.FirstOrDefault(g => g.Value.Contains(btn)).Value;