diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks.cs index d06b78c1..446577f6 100644 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks.cs +++ b/Essentials Core/PepperDashEssentialsBase/Devices/IHasFeedbacks.cs @@ -21,32 +21,39 @@ namespace PepperDash.Essentials.Core { public static void DumpFeedbacksToConsole(this IHasFeedback source, bool getCurrentStates) { - var outputs = source.Feedbacks.OrderBy(x => x.Type); - if (outputs != null) + var feedbacks = source.Feedbacks.OrderBy(x => x.Type); + if (feedbacks != null) { - Debug.Console(0, source, "\n\nAvailable outputs:"); - foreach (var o in outputs) + Debug.Console(0, source, "\n\nAvailable feedbacks:"); + foreach (var f in feedbacks) { string val = ""; if (getCurrentStates) { - switch (o.Type) - { - case eCueType.Bool: - val = " = " + o.BoolValue; - break; - case eCueType.Int: - val = " = " + o.IntValue; - break; - case eCueType.String: - val = " = " + o.StringValue; - break; - //case eOutputType.Other: - // break; - } + if (f is BoolFeedback) + val = " = " + f.BoolValue; + else if(f is IntFeedback) + val = " = " + f.IntValue; + else if(f is StringFeedback) + val = " = " + f.StringValue; + + //switch (f.Type) + //{ + // case eCueType.Bool: + // val = " = " + f.BoolValue; + // break; + // case eCueType.Int: + // val = " = " + f.IntValue; + // break; + // case eCueType.String: + // val = " = " + f.StringValue; + // break; + // //case eOutputType.Other: + // // break; + //} } - Debug.Console(0, "{0,-8} {1,5} {2}{3}", o.Type, o.Cue.Number, - (string.IsNullOrEmpty(o.Cue.Name) ? "-none-" : o.Cue.Name), val); + Debug.Console(0, "{0,-8} {1}{2}", f.GetType(), + (string.IsNullOrEmpty(f.Cue.Name) ? "-none-" : f.Cue.Name), val); } } else diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs index 39cbb8a1..1901f7c5 100644 --- a/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs +++ b/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs @@ -24,6 +24,7 @@ namespace PepperDash.Essentials.Core long PollTime; CTimer PollTimer; string PollString; + Action PollAction; /// /// @@ -47,6 +48,30 @@ namespace PepperDash.Essentials.Core PollString = pollString; } + /// + /// Poll is a provided action instead of string + /// + /// + /// + /// + /// + /// + /// + public GenericCommunicationMonitor(IKeyed parent, IBasicCommunication client, long pollTime, + long warningTime, long errorTime, Action pollAction) : + base(parent, warningTime, errorTime) + { + if (pollTime > warningTime || pollTime > errorTime) + throw new ArgumentException("pollTime must be less than warning or errorTime"); + if (pollTime < 5000) + throw new ArgumentException("pollTime cannot be less than 5000 ms"); + + Client = client; + PollTime = pollTime; + PollAction = pollAction; + } + + /// /// Build the monitor from a config object /// @@ -88,7 +113,10 @@ namespace PepperDash.Essentials.Core if (Client.IsConnected) { Debug.Console(2, Client, "Monitor, Polling"); - Client.SendText(PollString); + if(PollAction != null) + PollAction.Invoke(); + else + Client.SendText(PollString); } else { diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorBase.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorBase.cs index 66382979..12afe560 100644 --- a/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorBase.cs +++ b/Essentials Core/PepperDashEssentialsBase/Monitoring/StatusMonitorBase.cs @@ -29,7 +29,6 @@ namespace PepperDash.Essentials.Core _Status = value; OnStatusChange(value); } - } } MonitorStatus _Status; @@ -96,5 +95,12 @@ namespace PepperDash.Essentials.Core ErrorTimer = null; } + public void ResetErrorTimers() + { + if(WarningTimer != null) + WarningTimer.Reset(WarningTime, WarningTime); + if(ErrorTimer != null) + ErrorTimer.Reset(ErrorTime, ErrorTime); + } } } \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo index a021f162..3474b16a 100644 Binary files a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo and b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.projectinfo differ diff --git a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo index 8dddc239..19a1fae9 100644 Binary files a/Essentials DM/Essentials_DM/Essentials_DM.projectinfo and b/Essentials DM/Essentials_DM/Essentials_DM.projectinfo differ diff --git a/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs b/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs index fe9606ae..4b020868 100644 --- a/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs +++ b/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs @@ -16,72 +16,18 @@ namespace PepperDash.Essentials.Devices.Displays public class SamsungMDC : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor { public IBasicCommunication Communication { get; private set; } - public CommunicationGather PortGather { get; private set; } - public StatusMonitorBase CommunicationMonitor { get; private set; } - - private StringBuilder Buffer = new StringBuilder(); - - #region Command constants - - public string Ack { get; private set; } - public string Nak { get; private set; } - - // Volume Commands - - //public string MuteGetCmd { get; private set; } - - //public string MuteOnCmd { get; private set; } - - //public string MuteOffCmd { get; private set; } - - //public string VolumeGetCmd { get; private set; } - - /// - /// To be appended with the requested volume level. Does not include checksum calculation - /// - public string VolumeLevelPartialCmd { get; private set; } - - #endregion - + + public StatusMonitorBase CommunicationMonitor { get; private set; } public byte ID { get; private set; } - /// - /// Builds the command by including the ID of the display and calculating the checksum - /// - /// - /// - private string AppendChecksum(string command) - { - int checksum = 0; - - //var bytes = command.ToCharArray(); - - byte[] bytes = Encoding.ASCII.GetBytes(command); - - for (int i = 1; i < bytes.Length; i++) /*Convert.ToByte(bytes[i]*/ - { - checksum = checksum + bytes[i]; - } - - if (checksum >= 0x100) // Check if value is greater than 0x100 and if so, remove the first digit by subtracting 0x100 - checksum = checksum - 0x100; - - var checksumByte = Convert.ToByte(checksum); - Debug.Console(2, "Append checksum: command={0}, checksum={1}", ComTextHelper.GetEscapedText(command), checksumByte); - - string result = string.Format("{0}{1}", command, (char)checksumByte); - - return result; - - } - bool _PowerIsOn; bool _IsWarmingUp; bool _IsCoolingDown; ushort _VolumeLevel; bool _IsMuted; RoutingInputPort _CurrentInputPort; + //CTimer StatusTimer; protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } } protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } } @@ -96,14 +42,13 @@ namespace PepperDash.Essentials.Devices.Displays : base(key, name) { Communication = comm; - Communication.TextReceived += new EventHandler(Communication_TextReceived); + //Communication.TextReceived += new EventHandler(Communication_TextReceived); + Communication.BytesReceived += new EventHandler(Communication_BytesReceived); + ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor Init(); } - - - /// /// Constructor for TCP /// @@ -111,7 +56,7 @@ namespace PepperDash.Essentials.Devices.Displays : base(key, name) { Communication = new GenericTcpIpClient(key + "-tcp", hostname, port, 5000); - Communication.TextReceived += new EventHandler(Communication_TextReceived); + //Communication.TextReceived += new EventHandler(Communication_TextReceived); ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor Init(); } @@ -124,90 +69,58 @@ namespace PepperDash.Essentials.Devices.Displays : base(key, name) { Communication = new ComPortController(key + "-com", port, spec); - Communication.TextReceived += new EventHandler(Communication_TextReceived); + //Communication.TextReceived += new EventHandler(Communication_TextReceived); + ID = id == null ? (byte)0x01 : Convert.ToByte(id, 16); // If id is null, set default value of 0x01, otherwise assign value passed in constructor Init(); } - void AddRoutingInputPort(RoutingInputPort port, string cmdPrefix, byte fbMatch) + void AddRoutingInputPort(RoutingInputPort port, byte fbMatch) { port.FeedbackMatchObject = fbMatch; InputPorts.Add(port); - } void Init() { - - CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, AppendChecksum(string.Format("\x11{0}\x01\x01", ID))); - - // Build Command Strings - - Ack = AppendChecksum(string.Format("\xAA\xFF{0}\x03A", ID)); - - Nak = AppendChecksum(string.Format("\xAA\xFF{0}\x03N", ID)); - - string cmdPrefix = string.Format("\x14{0}\x01", ID); + WarmupTime = 10000; + CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, StatusGet); AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi1), this), cmdPrefix, 0x21); + eRoutingPortConnectionType.Hdmi, new Action(InputHdmi1), this), 0x21); AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi2), this), cmdPrefix, 0x23); + eRoutingPortConnectionType.Hdmi, new Action(InputHdmi2), this), 0x23); AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.HdmiIn3, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Hdmi, new Action(InputHdmi3), this), cmdPrefix, 0x32); + eRoutingPortConnectionType.Hdmi, new Action(InputHdmi3), this), 0x32); AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.DisplayPortIn1, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.DisplayPort, new Action(InputDisplayPort1), this), cmdPrefix, 0x25); + eRoutingPortConnectionType.DisplayPort, new Action(InputDisplayPort1), this), 0x25); AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.DviIn, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Dvi, new Action(InputDvi1), this), cmdPrefix, 0x18); + eRoutingPortConnectionType.Dvi, new Action(InputDvi1), this), 0x18); AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.CompositeIn, eRoutingSignalType.AudioVideo, - eRoutingPortConnectionType.Composite, new Action(InputVideo1), this), cmdPrefix, 0x08); + eRoutingPortConnectionType.Composite, new Action(InputVideo1), this), 0x08); AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.RgbIn1, eRoutingSignalType.Video, - eRoutingPortConnectionType.Vga, new Action(InputRgb1), this), cmdPrefix, 0x14); + eRoutingPortConnectionType.Vga, new Action(InputRgb1), this), 0x14); AddRoutingInputPort(new RoutingInputPort(RoutingPortNames.RgbIn2, eRoutingSignalType.Video, - eRoutingPortConnectionType.Rgb, new Action(new Action(InputRgb2)), this), cmdPrefix, 0x1E); - - // Mute Commands - - //MuteGetCmd = AppendChecksum(string.Format("\x13{0}\x00", ID)); - - //MuteOnCmd = AppendChecksum(string.Format("\x13{0}\x01\x01", ID)); - - //MuteOffCmd = AppendChecksum(string.Format("\x13{0}\x01\x00", ID)); - - // Volume Commands - - //VolumeGetCmd = AppendChecksum(string.Format("\x12{0}\x00", ID)); - - VolumeLevelPartialCmd = string.Format("\x12{0}\x01", ID); + eRoutingPortConnectionType.Rgb, new Action(new Action(InputRgb2)), this), 0x1E); VolumeLevelFeedback = new IntFeedback(() => { return _VolumeLevel; }); MuteFeedback = new BoolFeedback(() => _IsMuted); - // Query initial device status - - //Send(PowerGetCmd); - PowerGet(); - - InputGet(); - //Send(InputGetCmd); - - VolumeGet(); - - MuteGet(); - } - - ~SamsungMDC() - { - PortGather = null; + StatusGet(); + //StatusTimer = new CTimer(o => StatusGet(), null, 0, 30000); } + /// + /// + /// + /// public override bool CustomActivate() { Communication.Connect(); @@ -223,136 +136,105 @@ namespace PepperDash.Essentials.Devices.Displays var list = base.Feedbacks; list.AddRange(new List { - + VolumeLevelFeedback, + MuteFeedback, + CurrentInputFeedback }); return list; } } - void Communication_TextReceived(object sender, GenericCommMethodReceiveTextArgs e) + /// + /// / + /// + /// + /// + void Communication_BytesReceived(object sender, GenericCommMethodReceiveBytesArgs e) { - Buffer.Append(e.Text); - - if (Debug.Level == 2) - Debug.Console(2, this, "Received: '{0}'", ComTextHelper.GetEscapedText(e.Text)); - - ParseData(); - } - - void ParseData() - { - if(Buffer.Length < 8) // Message length must be > 8 bytes - return; - - var sample = Buffer.ToString(); - - var messageStart = sample.IndexOf("\xAA\xFF"); - - if (messageStart > -1) + var b = e.Bytes; + Debug.Console(0, this, "Parsing: {0}", ComTextHelper.GetEscapedText(b)); + if (b[0] == 0xAA && b[1] == 0xFF) { - StringBuilder garbage; - - if(messageStart > 0) // Check for leftover bytes before first full message and remove - garbage = Buffer.Remove(0, messageStart - 1); - - var chunk = Buffer.Remove(messageStart, 8); // Remove first message - - var message = chunk.ToString(); - - if (message.IndexOf(Ack) > -1) // Check to see if Ack message + if (b[4] == 0x41) { - var bytes = message.ToCharArray(); - - var commandByte = bytes[5]; - - var dataByte = bytes[6]; - - switch (commandByte) + var typeByte = b[5]; + switch (typeByte) { - case '\x11': // Power State - { - var currentState = _PowerIsOn; + case 0x00: // General status + UpdatePowerFB(b[6]); + UpdateVolumeFB(b[7]); + UpdateMuteFb(b[8]); + UpdateInputFb(b[9]); + break; - if (dataByte == '\x00') - _PowerIsOn = false; + case 0x11: + UpdatePowerFB(b[6]); + break; - else if (dataByte == '\x01') - _PowerIsOn = true; + case 0x12: + UpdateVolumeFB(b[6]); + break; + + case 0x13: + UpdateMuteFb(b[6]); + break; - if(currentState != _PowerIsOn) - PowerIsOnFeedback.FireUpdate(); + case 0x14: + UpdateInputFb(b[6]); + break; - break; - } - case '\x12': // Volume Level - { - _VolumeLevel = (ushort)Scale(dataByte, 0, 100, 0, 65535); - - VolumeLevelFeedback.FireUpdate(); - break; - } - case '\x13': // Mute State - { - if (dataByte == '\x00') - { - _IsMuted = false; - } - else if (dataByte == '\x01') - { - _IsMuted = true; - } - - - MuteFeedback.FireUpdate(); - break; - } - case '\x14': // Input State - { - var currentInput = InputPorts.FirstOrDefault(i => i.FeedbackMatchObject.Equals(dataByte)); - - if (currentInput != null) - { - _CurrentInputPort = currentInput; - - CurrentInputFeedback.FireUpdate(); - } - - break; - } - case '\x15': // Aspect Ratio - { - // Not implemented yet - - break; - } default: - { - Debug.Console(2, this, "Unreckocnized Response Command Type: {0}", commandByte); - break; - } + break; } } - else if (message.IndexOf(Nak) > -1) - { - Debug.Console(2, this, "Nak received"); - } + } + } + void UpdatePowerFB(byte b) + { + var newVal = b == 1; + if (newVal != _PowerIsOn) + { + _PowerIsOn = newVal; + PowerIsOnFeedback.FireUpdate(); + } + + } + + void UpdateVolumeFB(byte b) + { + var newVol = (ushort)Scale((double)b, 0, 100, 0, 65535); + if (newVol != _VolumeLevel) + { + _VolumeLevel = newVol; + VolumeLevelFeedback.FireUpdate(); + } + } + + void UpdateMuteFb(byte b) + { + var newMute = b == 1; + if (newMute != _IsMuted) + { + _IsMuted = newMute; + MuteFeedback.FireUpdate(); + } + } + + void UpdateInputFb(byte b) + { + var newInput = InputPorts.FirstOrDefault(i => i.FeedbackMatchObject.Equals(b)); + if (newInput != null && newInput != _CurrentInputPort) + { + _CurrentInputPort = newInput; + CurrentInputFeedback.FireUpdate(); } } /// - /// Append checksup and send command to device + /// Formats an outgoing message. Replaces third byte with ID and replaces last byte with checksum /// - /// - void Send(string s) - { - var cmd = AppendChecksum(s); - - if (Debug.Level == 2) - Debug.Console(2, this, "Send: '{0}'", ComTextHelper.GetEscapedText(cmd)); - Communication.SendText(cmd); - } - + /// void SendBytes(byte[] b) { b[2] = ID; @@ -366,13 +248,22 @@ namespace PepperDash.Essentials.Devices.Displays b[b.Length - 1] = (byte)checksum; if(Debug.Level == 2) // This check is here to prevent following string format from building unnecessarily on level 0 or 1 Debug.Console(2, this, "Sending:{0}", ComTextHelper.GetEscapedText(b)); + CommunicationMonitor.ResetErrorTimers(); // Helps prevent message collisions Communication.SendBytes(b); } + /// + /// + /// + public void StatusGet() + { + SendBytes(new byte[] { 0xAA, 0x00, 0x00, 0x00, 0x00 }); + } - - + /// + /// + /// public override void PowerOn() { //Send(PowerOnCmd); @@ -429,12 +320,12 @@ namespace PepperDash.Essentials.Devices.Displays public void InputHdmi1() { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x21, 0x00 }); + SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x22, 0x00 }); } public void InputHdmi2() { - SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x23, 0x00 }); + SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x24, 0x00 }); } public void InputHdmi3() @@ -452,6 +343,11 @@ namespace PepperDash.Essentials.Devices.Displays SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x25, 0x00 }); } + public void InputDisplayPort2() + { + SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x26, 0x00 }); + } + public void InputDvi1() { SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x01, 0x18, 0x00 }); @@ -477,35 +373,56 @@ namespace PepperDash.Essentials.Devices.Displays SendBytes(new byte[] { 0xAA, 0x14, 0x00, 0x00, 0x00 }); } + /// + /// Executes a switch, turning on display if necessary. + /// + /// public override void ExecuteSwitch(object selector) { - if (selector is Action) - (selector as Action).Invoke(); - else + if (!(selector is Action)) Debug.Console(1, this, "WARNING: ExecuteSwitch cannot handle type {0}", selector.GetType()); - //Send((string)selector); + + if (_PowerIsOn) + (selector as Action)(); + else // if power is off, wait until we get on FB to send it. + { + // One-time event handler to wait for power on before executing switch + EventHandler handler = null; // necessary to allow reference inside lambda to handler + handler = (o, a) => + { + if (!_IsWarmingUp) // Done warming + { + IsWarmingUpFeedback.OutputChange -= handler; + (selector as Action)(); + } + }; + IsWarmingUpFeedback.OutputChange += handler; // attach and wait for on FB + PowerOn(); + } } /// /// Scales the level to the range of the display and sends the command /// /// - void SetVolume(ushort level) + public void SetVolume(ushort level) { - var scaledLevel = Scale(level, 0, 65535, 0, 100); - - var levelString = string.Format("{0}{1}", VolumeLevelPartialCmd, Convert.ToByte(scaledLevel)); - Debug.Console(2, this, "Volume:{0}", ComTextHelper.GetEscapedText(levelString)); - - var volByte = BitConverter.GetBytes(scaledLevel) FIX THIS HERE!!!!!!!!!!! - Send(levelString); - _VolumeLevel = level; - VolumeLevelFeedback.FireUpdate(); + var volByte = Convert.ToByte(Scale(level, 0, 65535, 0, 100)); // The inputs to Scale ensures it won't overflow + SendBytes(new byte[] { 0xAA, 0x12, 0x00, 0x01, volByte, 0x00 }); } + /// + /// + /// + /// + /// + /// + /// + /// + /// double Scale(double input, double inMin, double inMax, double outMin, double outMax) { - Debug.Console(2, this, "Scaling (double) input '{0}' with min '{1}'/max '{2}' to output range min '{3}'/max '{4}'", input, inMin, inMax, outMin, outMax); + //Debug.Console(2, this, "Scaling (double) input '{0}' with min '{1}'/max '{2}' to output range min '{3}'/max '{4}'", input, inMin, inMax, outMin, outMax); double inputRange = inMax - inMin; @@ -518,13 +435,13 @@ namespace PepperDash.Essentials.Devices.Displays var output = (((input - inMin) * outputRange) / inputRange) + outMin; - Debug.Console(2, this, "Scaled output '{0}'", output); + // Debug.Console(2, this, "Scaled output '{0}'", output); return output; } #region IBasicVolumeWithFeedback Members - + public IntFeedback VolumeLevelFeedback { get; private set; } public BoolFeedback MuteFeedback { get; private set; } @@ -553,15 +470,6 @@ namespace PepperDash.Essentials.Devices.Displays SendBytes(new byte[] { 0xAA, 0x13, 0x00, 0x00, 0x00 }); } - ///// - ///// - ///// - ///// - //void SetVolume(ushort level) - //{ - // SetVolume(level); - //} - #endregion #region IBasicVolumeControls Members @@ -583,19 +491,16 @@ namespace PepperDash.Essentials.Devices.Displays /// public void VolumeDown(bool pressRelease) { - //throw new NotImplementedException(); -//#warning need incrementer for these - SetVolume(_VolumeLevel++); + throw new NotImplementedException(); } /// - /// / + /// /// /// public void VolumeUp(bool pressRelease) { - //throw new NotImplementedException(); - SetVolume(_VolumeLevel--); + throw new NotImplementedException(); } public void VolumeGet() diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo index 6c28a83f..9165cf54 100644 Binary files a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo and b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.projectinfo differ diff --git a/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo index 5bb20eff..c62b1c1b 100644 Binary files a/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo and b/Essentials/PepperDashEssentials/PepperDashEssentials.projectinfo differ diff --git a/Essentials/PepperDashEssentials/UI Drivers/EssentialsHuddlePanelAvFunctionsDriver.cs b/Essentials/PepperDashEssentials/UI Drivers/EssentialsHuddlePanelAvFunctionsDriver.cs index 721b2524..f8462186 100644 --- a/Essentials/PepperDashEssentials/UI Drivers/EssentialsHuddlePanelAvFunctionsDriver.cs +++ b/Essentials/PepperDashEssentials/UI Drivers/EssentialsHuddlePanelAvFunctionsDriver.cs @@ -212,6 +212,7 @@ namespace PepperDash.Essentials ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible)); #warning Add press and hold to gear button here + TriList.BooleanInput[UIBoolJoin.GearButtonVisible].BoolValue = false; TriList.SetSigFalseAction(UIBoolJoin.GearHeaderButtonPress, () => ShowInterlockedModal(UIBoolJoin.VolumesPageVisible)); @@ -700,7 +701,7 @@ namespace PepperDash.Essentials if (this.IsVisible) ShowCurrentSource(); - if (routeInfo == null || !CurrentRoom.OnFeedback.BoolValue) + if (routeInfo == null)// || !CurrentRoom.OnFeedback.BoolValue) { // Check for power off and insert "Room is off" TriList.StringInput[UIStringJoin.CurrentSourceName].StringValue = "Room is off"; diff --git a/Essentials/PepperDashEssentials/UI Drivers/UIBoolJoin.cs b/Essentials/PepperDashEssentials/UI Drivers/UIBoolJoin.cs index 396fa0b5..86bcb20f 100644 --- a/Essentials/PepperDashEssentials/UI Drivers/UIBoolJoin.cs +++ b/Essentials/PepperDashEssentials/UI Drivers/UIBoolJoin.cs @@ -249,6 +249,10 @@ namespace PepperDash.Essentials /// public const uint VolumeGaugePopupVisible = 15036; /// + /// 15037 + /// + public const uint GearButtonVisible = 15037; + /// /// 15040 /// public const uint CallStatusPageVisible = 15040; diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz index 823cf52a..fa36e86d 100644 Binary files a/Release Package/PepperDashEssentials.cpz and b/Release Package/PepperDashEssentials.cpz differ diff --git a/Release Package/PepperDashEssentials.dll b/Release Package/PepperDashEssentials.dll index 8b32c9ec..889f587c 100644 Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ