diff --git a/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxAnalogAuxMixerController.cs b/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxAnalogAuxMixerController.cs index c6829c9b..7d27d35b 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxAnalogAuxMixerController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxAnalogAuxMixerController.cs @@ -7,39 +7,47 @@ using PepperDash.Essentials.Core; namespace PepperDash_Essentials_DM.Chassis { public class HdPsXxxAnalogAuxMixerController : IKeyed, - IHasVolumeControlWithFeedback, IHasMuteControlWithFeedback // || IBasicVolumeWithFeedback + IHasVolumeControlWithFeedback, IHasMuteControlWithFeedback { public string Key { get; private set; } - public HdPsXxxAnalogAuxMixer Mixer { get; private set; } + private readonly HdPsXxxAnalogAuxMixer _mixer; public HdPsXxxAnalogAuxMixerController(string parent, uint mixer, HdPsXxx chassis) { Key = string.Format("{0}-analogMixer{1}", parent, mixer); - Mixer = chassis.AnalogAuxiliaryMixer[mixer]; + _mixer = chassis.AnalogAuxiliaryMixer[mixer]; - Mixer.AuxMixerPropertyChange += OnAuxMixerPropertyChange; - Mixer.AuxiliaryMuteControl.MuteAndVolumeControlPropertyChange += OnMuteAndVolumeControlPropertyChange; + _mixer.AuxMixerPropertyChange += OnAuxMixerPropertyChange; + _mixer.AuxiliaryMuteControl.MuteAndVolumeControlPropertyChange += OnMuteAndVolumeControlPropertyChange; VolumeLevelFeedback = new IntFeedback(() => VolumeLevel); MuteFeedback = new BoolFeedback(() => IsMuted); - - VolumeLevel = Mixer.VolumeFeedback.ShortValue; - IsMuted = Mixer.AuxiliaryMuteControl.MuteOnFeedback.BoolValue; } #region Volume private void OnAuxMixerPropertyChange(object sender, GenericEventArgs args) { - Debug.Console(2, this, "AuxMixerPropertyChange: {0} > Index-{1}, EventId-{2}", sender.GetType().ToString(), args.Index, args.EventId); + Debug.Console(2, this, "OnAuxMixerPropertyChange: {0} > Index-{1}, EventId-{2}", sender.ToString(), args.Index, args.EventId); switch (args.EventId) { - case (3): + case MuteAndVolumeContorlEventIds.VolumeFeedbackEventId: { - VolumeLevel = Mixer.VolumeFeedback.ShortValue; + VolumeLevel = _mixer.VolumeFeedback.ShortValue; + break; + } + case MuteAndVolumeContorlEventIds.MuteOnEventId: + case MuteAndVolumeContorlEventIds.MuteOffEventId: + { + IsMuted = _mixer.AuxiliaryMuteControl.MuteOnFeedback.BoolValue; + break; + } + default: + { + Debug.Console(1, this, "OnAuxMixerPropertyChange: {0} > Index-{1}, EventId-{2} - unhandled eventId", sender.ToString(), args.Index, args.EventId); break; } } @@ -58,13 +66,12 @@ namespace PepperDash_Essentials_DM.Chassis public int VolumeLevel { get { return _volumeLevel; } - set + private set { var level = value; - // ScaleWithLimits(inputValue, InputUpperBound, InputLowerBound, OutputUpperBound, OutputLowerBound) _volumeLevel = CrestronEnvironment.ScaleWithLimits(level, DeviceLevelMax, DeviceLevelMin, CrestronLevelMax, CrestronLevelMin); - + Debug.Console(1, this, "VolumeFeedback: level-'{0}', scaled-'{1}'", level, _volumeLevel); VolumeLevelFeedback.FireUpdate(); @@ -72,26 +79,25 @@ namespace PepperDash_Essentials_DM.Chassis } public IntFeedback VolumeLevelFeedback { get; private set; } - + public void SetVolume(ushort level) { - // ScaleWithLimits(inputValue, InputUpperBound, InputLowerBound, OutputUpperBound, OutputLowerBound) - var scaled = CrestronEnvironment.ScaleWithLimits(level, CrestronLevelMax, CrestronLevelMin, DeviceLevelMax, DeviceLevelMin); + var levelScaled = CrestronEnvironment.ScaleWithLimits(level, CrestronLevelMax, CrestronLevelMin, DeviceLevelMax, DeviceLevelMin); - Debug.Console(1, this, "SetVolume: level-'{0}', scaled-'{1}'", level, scaled); - - Mixer.Volume.ShortValue = (short)scaled; + Debug.Console(1, this, "SetVolume: level-'{0}', levelScaled-'{1}'", level, levelScaled); + + _mixer.Volume.ShortValue = (short)levelScaled; } public void VolumeUp(bool pressRelease) { if (pressRelease) { - Mixer.Volume.CreateSignedRamp(DeviceLevelMax, RampTime); + _mixer.Volume.CreateSignedRamp(DeviceLevelMax, RampTime); } else { - Mixer.Volume.StopRamp(); + _mixer.Volume.StopRamp(); } } @@ -99,14 +105,11 @@ namespace PepperDash_Essentials_DM.Chassis { if (pressRelease) { - //var remainingRatio = Mixer.Volume.UShortValue/CrestronLevelMax; - //Mixer.Volume.CreateRamp(CrestronLevelMin, (uint)(RampTime * remainingRatio)); - - Mixer.Volume.CreateSignedRamp(DeviceLevelMin, RampTime); + _mixer.Volume.CreateSignedRamp(DeviceLevelMin, RampTime); } else { - Mixer.Volume.StopRamp(); + _mixer.Volume.StopRamp(); } } @@ -123,12 +126,22 @@ namespace PepperDash_Essentials_DM.Chassis switch (args.EventId) { - case (1): - case (2): + case MuteAndVolumeContorlEventIds.VolumeFeedbackEventId: { - IsMuted = Mixer.AuxiliaryMuteControl.MuteOnFeedback.BoolValue; + VolumeLevel = _mixer.VolumeFeedback.ShortValue; break; } + case MuteAndVolumeContorlEventIds.MuteOnEventId: + case MuteAndVolumeContorlEventIds.MuteOffEventId: + { + IsMuted = _mixer.AuxiliaryMuteControl.MuteOnFeedback.BoolValue; + break; + } + default: + { + Debug.Console(1, this, "OnMuteAndVolumeControlPropertyChange: {0} > Index-{1}, EventId-{2} - unhandled eventId", device.ToString(), args.Index, args.EventId); + break; + } } } @@ -151,12 +164,12 @@ namespace PepperDash_Essentials_DM.Chassis public void MuteOn() { - Mixer.AuxiliaryMuteControl.MuteOn(); + _mixer.AuxiliaryMuteControl.MuteOn(); } public void MuteOff() { - Mixer.AuxiliaryMuteControl.MuteOff(); + _mixer.AuxiliaryMuteControl.MuteOff(); } public void MuteToggle() diff --git a/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxController.cs b/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxController.cs index c0363387..6b0f8520 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxController.cs @@ -88,7 +88,7 @@ namespace PepperDash_Essentials_DM.Chassis var audioDevice = new HdPsXxxOutputAudioController(Key, item.Number, _chassis); Debug.Console(2, this, "Adding HdPsXxxOutputAudioController '{0}' for output '{1}'", audioDevice.Key, item.Number); DeviceManager.AddDevice(audioDevice); - } + } foreach (var item in _chassis.AnalogAuxiliaryMixer) { var audioDevice = new HdPsXxxAnalogAuxMixerController(Key, item.MixerNumber, _chassis); diff --git a/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxOutputAudioController.cs b/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxOutputAudioController.cs index 3f28d91f..57067bde 100644 --- a/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxOutputAudioController.cs +++ b/essentials-framework/Essentials DM/Essentials_DM/Chassis/HdPsXxxOutputAudioController.cs @@ -6,25 +6,56 @@ using PepperDash.Essentials.Core; namespace PepperDash_Essentials_DM.Chassis { public class HdPsXxxOutputAudioController : IKeyed, - IHasVolumeControlWithFeedback, IHasMuteControlWithFeedback // || IBasicVolumeWithFeedback + IHasVolumeControlWithFeedback, IHasMuteControlWithFeedback { public string Key { get; private set; } - public HdPsXxxOutputPort Port { get; private set; } + private readonly HdPsXxxHdmiDmLiteOutputMixer _mixer; // volume/volumeFeedback + private readonly HdPsXxxOutputPort _port; // mute/muteFeedback public HdPsXxxOutputAudioController(string parent, uint output, HdPsXxx chassis) { Key = string.Format("{0}-audioOut{1}", parent, output); - Port = chassis.HdmiDmLiteOutputs[output].OutputPort; + _port = chassis.HdmiDmLiteOutputs[output].OutputPort; + _mixer = chassis.HdmiDmLiteOutputs[output].Mixer; + + chassis.DMOutputChange += ChassisOnDmOutputChange; VolumeLevelFeedback = new IntFeedback(() => VolumeLevel); MuteFeedback = new BoolFeedback(() => IsMuted); + } - //if(Port.AudioOutput.Volume != null) - // VolumeLevel = Port.AudioOutput.VolumeFeedback.UShortValue; + private void ChassisOnDmOutputChange(Switch device, DMOutputEventArgs args) + { + switch (args.EventId) + { + case (DMOutputEventIds.VolumeEventId): + { + Debug.Console(2, this, "HdPsXxxOutputAudioController: {0} > Index-{1}, Number-{3}, EventId-{2} - AudioMute/UnmuteEventId", + device.ToString(), args.Index, args.EventId, args.Number); - IsMuted = Port.MuteOnFeedback.BoolValue; + VolumeLevel = _mixer.VolumeFeedback.ShortValue; + + break; + } + case DMOutputEventIds.MuteOnEventId: + case DMOutputEventIds.MuteOffEventId: + { + Debug.Console(2, this, "HdPsXxxOutputAudioController: {0} > Index-{1}, Number-{3}, EventId-{2} - MuteOnEventId/MuteOffEventId", + device.ToString(), args.Index, args.EventId, args.Number); + + IsMuted = _port.MuteOnFeedback.BoolValue; + + break; + } + default: + { + Debug.Console(1, this, "HdPsXxxOutputAudioController: {0} > Index-{1}, Number-{3}, EventId-{2} - unhandled eventId", + device.ToString(), args.Index, args.EventId, args.Number); + break; + } + } } #region Volume @@ -42,11 +73,10 @@ namespace PepperDash_Essentials_DM.Chassis public int VolumeLevel { get { return _volumeLevel; } - set + private set { var level = value; - - // ScaleWithLimits(inputValue, InputUpperBound, InputLowerBound, OutputUpperBound, OutputLowerBound) + _volumeLevel = CrestronEnvironment.ScaleWithLimits(level, DeviceLevelMax, DeviceLevelMin, CrestronLevelMax, CrestronLevelMin); Debug.Console(2, this, "VolumeFeedback: level-'{0}', scaled-'{1}'", level, _volumeLevel); @@ -59,23 +89,22 @@ namespace PepperDash_Essentials_DM.Chassis public void SetVolume(ushort level) { - // ScaleWithLimits(inputValue, InputUpperBound, InputLowerBound, OutputUpperBound, OutputLowerBound) - var scaled = CrestronEnvironment.ScaleWithLimits(level, CrestronLevelMax, CrestronLevelMin, DeviceLevelMax, DeviceLevelMin); + var levelScaled = CrestronEnvironment.ScaleWithLimits(level, CrestronLevelMax, CrestronLevelMin, DeviceLevelMax, DeviceLevelMin); - Debug.Console(1, this, "SetVolume: level-'{0}', scaled-'{1}'", level, scaled); + Debug.Console(1, this, "SetVolume: level-'{0}', levelScaled-'{1}'", level, levelScaled); - Port.AudioOutput.Volume.ShortValue = (short)scaled; + _mixer.Volume.ShortValue = (short)levelScaled; } public void VolumeUp(bool pressRelease) { if (pressRelease) { - Port.AudioOutput.Volume.CreateSignedRamp(DeviceLevelMax, RampTime); + _mixer.Volume.CreateSignedRamp(DeviceLevelMax, RampTime); } else { - Port.AudioOutput.Volume.StopRamp(); + _mixer.Volume.StopRamp(); } } @@ -83,11 +112,11 @@ namespace PepperDash_Essentials_DM.Chassis { if (pressRelease) { - Port.AudioOutput.Volume.CreateSignedRamp(DeviceLevelMin, RampTime); + _mixer.Volume.CreateSignedRamp(DeviceLevelMin, RampTime); } else { - Port.AudioOutput.Volume.StopRamp(); + _mixer.Volume.StopRamp(); } } @@ -117,12 +146,12 @@ namespace PepperDash_Essentials_DM.Chassis public void MuteOn() { - Port.MuteOn(); + _port.MuteOn(); } public void MuteOff() { - Port.MuteOff(); + _port.MuteOff(); } public void MuteToggle()