diff --git a/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs b/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs index ceb79207..06d198d7 100644 --- a/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs +++ b/Essentials Core/PepperDashEssentialsBase/Monitoring/GenericCommunicationMonitor.cs @@ -112,7 +112,7 @@ namespace PepperDash.Essentials.Core StartErrorTimers(); if (Client.IsConnected) { - Debug.Console(2, this, "Polling"); + //Debug.Console(2, this, "Polling"); if(PollAction != null) PollAction.Invoke(); else diff --git a/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs b/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs index b8f03e59..37dced42 100644 --- a/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs +++ b/Essentials Core/PepperDashEssentialsBase/Routing/IRoutingInputsExtensions.cs @@ -30,7 +30,7 @@ namespace PepperDash.Essentials.Core var newRoute = destination.GetRouteToSource(source, signalType); if (newRoute == null) return; RouteDescriptorCollection.DefaultCollection.AddRouteDescriptor(newRoute); - Debug.Console(1, destination, "Executing new route"); + //Debug.Console(1, destination, "Executing new route"); newRoute.ExecuteRoutes(); } @@ -80,7 +80,7 @@ namespace PepperDash.Essentials.Core routeDescr = null; } - Debug.Console(1, destination, "Route{0} discovered", routeDescr == null ? " NOT" : ""); + //Debug.Console(1, destination, "Route{0} discovered", routeDescr == null ? " NOT" : ""); return routeDescr; } @@ -102,7 +102,7 @@ namespace PepperDash.Essentials.Core eRoutingSignalType signalType, int cycle, RouteDescriptor routeTable) { cycle++; - Debug.Console(2, destination, "SelectInput-cycle {1}. Finding {2} route back to {0}", source.Key, cycle, signalType); + Debug.Console(2, destination, "*#* SelectInput-cycle {1}. Finding {2} route back to {0}", source.Key, cycle, signalType); var destDevInputTies = TieLineCollection.Default.Where(t => t.DestinationPort.ParentDevice == destination && (t.Type == signalType || t.Type == eRoutingSignalType.AudioVideo)); @@ -114,7 +114,7 @@ namespace PepperDash.Essentials.Core RoutingInputPort goodInputPort = null; if (directTie != null) // Found a tie directly to the source { - Debug.Console(2, destination, "Found direct tie to {0}**", source.Key); + Debug.Console(2, destination, "*#* Found direct tie to {0}**", source.Key); goodInputPort = directTie.DestinationPort; } else // no direct-connect. Walk back devices. @@ -149,7 +149,7 @@ namespace PepperDash.Essentials.Core // we have a route on corresponding inputPort. *** Do the route *** if (goodInputPort != null) { - Debug.Console(2, destination, "adding RouteDescriptor"); + //Debug.Console(2, destination, "adding RouteDescriptor"); if (outputPortToUse == null) { // it's a sink device @@ -161,7 +161,7 @@ namespace PepperDash.Essentials.Core } else // device is merely IRoutingInputOutputs Debug.Console(2, destination, " No routing. Passthrough device"); - Debug.Console(2, destination, "Exiting cycle {0}", cycle); + //Debug.Console(2, destination, "Exiting cycle {0}", cycle); return true; } diff --git a/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs b/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs index e6a125bf..64d1487e 100644 --- a/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs +++ b/Essentials Devices Common/Essentials Devices Common/Display/SamsungMDCDisplay.cs @@ -24,7 +24,6 @@ namespace PepperDash.Essentials.Devices.Displays bool _PowerIsOn; - bool _PowerValueIncomingWaitingForCheck; bool _IsWarmingUp; bool _IsCoolingDown; ushort _VolumeLevelForSig; @@ -34,6 +33,7 @@ namespace PepperDash.Essentials.Devices.Displays byte[] IncomingBuffer = new byte[]{}; ActionIncrementer VolumeIncrementer; bool VolumeIsRamping; + public bool IsInStandby { get; private set; } protected override Func PowerIsOnFeedbackFunc { get { return () => _PowerIsOn; } } protected override Func IsCoolingDownFeedbackFunc { get { return () => _IsCoolingDown; } } @@ -181,7 +181,7 @@ namespace PepperDash.Essentials.Devices.Displays // Good length, grab the message var message = newBytes.Skip(4).Take(msgLen).ToArray(); - Debug.Console(2, this, "Parsing input: {0}", ComTextHelper.GetEscapedText(message)); + Debug.Console(2, this, "*#* Parsing input: {0}", ComTextHelper.GetEscapedText(message)); // At this point, the ack/nak is the first byte if (message[0] == 0x41) @@ -244,13 +244,20 @@ namespace PepperDash.Essentials.Devices.Displays /// /// Updates power status from general updates where source is included. /// Compensates for errant standby / power off hiccups by ignoring - /// power off states with input < 0x10 + /// power off states with input < 0x10 /// void UpdatePowerFB(byte powerByte, byte inputByte) { // This should reject errant power feedbacks when switching away from input on standby. - if (powerByte == 0x00 && inputByte < 0x10) + if (powerByte == 0x01 && inputByte < 0x10) + IsInStandby = true; + if (powerByte == 0x00 && IsInStandby) // Ignore power off if coming from standby - glitch + { + Debug.Console(2, this, "*#* STANDBY GLITCH - IGNORING"); + IsInStandby = false; return; + } + UpdatePowerFB(powerByte); } @@ -311,7 +318,7 @@ namespace PepperDash.Essentials.Devices.Displays checksum = checksum & 0x000000FF; // mask off MSBs 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)); + Debug.Console(2, this, "*#* Sending:{0}", ComTextHelper.GetEscapedText(b)); Communication.SendBytes(b); } @@ -364,7 +371,7 @@ namespace PepperDash.Essentials.Devices.Displays // Fake cool-down cycle CooldownTimer = new CTimer(o => { - Debug.Console(2, this, "Cooldown timer ending"); + Debug.Console(2, this, "*#* Cooldown timer ending"); _IsCoolingDown = false; IsCoolingDownFeedback.FireUpdate(); }, CooldownTime); @@ -446,8 +453,8 @@ namespace PepperDash.Essentials.Devices.Displays /// public override void ExecuteSwitch(object selector) { - if (!(selector is Action)) - Debug.Console(1, this, "WARNING: ExecuteSwitch cannot handle type {0}", selector.GetType()); + //if (!(selector is Action)) + // Debug.Console(1, this, "WARNING: ExecuteSwitch cannot handle type {0}", selector.GetType()); if (_PowerIsOn) (selector as Action)(); diff --git a/Essentials/PepperDashEssentials/FOR REFERENCE Room/HuddleSpaceRoom.cs b/Essentials/PepperDashEssentials/FOR REFERENCE Room/HuddleSpaceRoom.cs deleted file mode 100644 index d093a0f0..00000000 --- a/Essentials/PepperDashEssentials/FOR REFERENCE Room/HuddleSpaceRoom.cs +++ /dev/null @@ -1,378 +0,0 @@ -//using System; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using Crestron.SimplSharp; -//using Crestron.SimplSharpPro; - -//using PepperDash.Core; -//using PepperDash.Essentials.Core; - -//namespace PepperDash.Essentials -//{ -// //*************************************************************************************************** - -// public class HuddleSpaceRoom : EssentialsRoom -// { -// public override BoolFeedback RoomIsOnFeedback { get; protected set; } -// public override BoolFeedback IsWarmingUpFeedback { get; protected set; } -// public override BoolFeedback IsCoolingDownFeedback { get; protected set; } -// public override BoolFeedback RoomIsOnStandby { get; protected set; } -// public override BoolFeedback RoomIsOccupied { get; protected set; } - -// public override uint WarmupTime -// { -// get -// { -// if (_Display != null) -// return _Display.WarmupTime; -// return base.WarmupTime; -// } -// } -// public override uint CooldownTime -// { -// get -// { -// if (_Display != null) -// return _Display.CooldownTime; -// return base.CooldownTime; -// } -// } - -// bool NoDisplayRoomIsOn = false; - -// public DisplayBase DefaultDisplay // PROTECT --------------------------------------------- -// { -// get -// { -// if (_Display == null) -// _Display = TwoWayDisplayBase.DefaultDisplay; -// return _Display; -// } -// set -// { -// // Disconnect current display -// if (_Display != null) -// { -// _Display.PowerIsOnFeedback.OutputChange -= Display_Various_OutputChange; -// _Display.IsCoolingDownFeedback.OutputChange -= Display_Various_OutputChange; -// _Display.IsWarmingUpFeedback.OutputChange -= Display_Various_OutputChange; -// } -// _Display = value; -// if (value != null) -// { -// _Display.PowerIsOnFeedback.OutputChange += Display_Various_OutputChange; -// _Display.IsCoolingDownFeedback.OutputChange += Display_Various_OutputChange; -// _Display.IsWarmingUpFeedback.OutputChange += Display_Various_OutputChange; -// } -// CurrentAudioDevice = (value as IBasicVolumeControls); -// } -// } -// DisplayBase _Display; - -// public IBasicVolumeControls DefaultVolumeControls -// { -// get { return DefaultDisplay as IBasicVolumeControls; } -// } - - -// public IntFeedback SourcesCount { get; private set; } -// public StringFeedback CurrentSourceName { get; private set; } - -// public string SourceListKey { get; set; } -// string LastSourceKey; - -// public HuddleSpaceRoom(string key, string name) -// : base(key, name) -// { -// // Return the state of the display, unless no display, then return -// // a local or default state. - -// RoomIsOnFeedback = new BoolFeedback(RoomCue.RoomIsOn, -// () => DefaultDisplay != null ? DefaultDisplay.PowerIsOnFeedback.BoolValue : NoDisplayRoomIsOn); -// IsWarmingUpFeedback = new BoolFeedback(RoomCue.RoomIsWarmingUp, -// () => DefaultDisplay != null ? DefaultDisplay.IsWarmingUpFeedback.BoolValue : false); -// IsCoolingDownFeedback = new BoolFeedback(RoomCue.RoomIsCoolingDown, -// () => DefaultDisplay != null ? DefaultDisplay.IsCoolingDownFeedback.BoolValue : false); -// RoomIsOnStandby = new BoolFeedback(RoomCue.RoomIsOnStandby, -// () => false); -// RoomIsOccupied = new BoolFeedback(RoomCue.RoomIsOccupied, -// () => true); - -// Sources = new Dictionary(); - -// SourcesCount = new IntFeedback(RoomCue.SourcesCount, -// () => Sources.Count); -// CurrentSourceName = new StringFeedback(() => CurrentPresentationSourceInfo.PreferredName);// CurrentPresentationSource.Name); -// //CurrentSourceType = new IntOutput(RoomCue.CurrentSourceType, -// // () => CurrentPresentationSource.Type); - -// UnattendedShutdownTimeMs = 60000; -// } - -// public override void RoomOn() -// { -// Debug.Console(0, this, "Room on"); -// if (IsCoolingDownFeedback.BoolValue || IsWarmingUpFeedback.BoolValue) -// { -// Debug.Console(2, this, "Room is warming or cooling. Ignoring room on"); -// return; -// } -// if (!RoomIsOnFeedback.BoolValue) -// { -// // Setup callback when powerOn happens -// EventHandler oneTimeHandler = null; -// oneTimeHandler = (o, a) => -// { -// Debug.Console(0, this, "RoomOn received display power on: {0}", -// DefaultDisplay.PowerIsOnFeedback.BoolValue); -// // if it's power on -// if (DefaultDisplay.PowerIsOnFeedback.BoolValue) -// { -// (DefaultDisplay as TwoWayDisplayBase).PowerIsOnFeedback.OutputChange -= oneTimeHandler; -// Debug.Console(1, this, "Display has powered on"); -// RoomIsOnFeedback.FireUpdate(); -// //if (callback != null) -// // callback(); -// } -// }; -// DefaultDisplay.PowerIsOnFeedback.OutputChange += oneTimeHandler; -// DefaultDisplay.PowerOn(); -// } -// } - -// public override void RoomOff() -// { -// if (!RoomIsOnFeedback.BoolValue) -// { -// Debug.Console(2, this, "Room is already off"); -// return; -// } -// Debug.Console(0, this, "Room off"); -// DefaultDisplay.PowerOff(); - -// //RoomIsOn.FireUpdate(); ---Display will provide this in huddle -// //OnPresentationSourceChange(null); -// //CurrentPresentationSource = null; -// } - - -// public override void SelectSource(uint sourceNum) -// { -// // Run this on a separate thread -// new CTimer(o => -// { -// var routeKey = "source-" + sourceNum; -// Debug.Console(1, this, "Run room action '{0}'", routeKey); -// if (string.IsNullOrEmpty(SourceListKey)) -// { -// Debug.Console(1, this, "WARNING: No source/action list defined for this room"); -// return; -// } - -// // Try to get the list from the config object, using SourceListKey string -// if (!ConfigReader.ConfigObject.SourceLists.ContainsKey(SourceListKey)) -// { -// Debug.Console(1, this, "WARNING: Config source list '{0}' not found", SourceListKey); -// return; -// } -// var list = ConfigReader.ConfigObject.SourceLists[SourceListKey]; - -// // Try to get the list item by it's string key -// if (!list.ContainsKey(routeKey)) -// { -// Debug.Console(1, this, "WARNING: No item '{0}' found on config list '{1}'", -// routeKey, SourceListKey); -// return; -// } - -// var item = list[routeKey]; -// Debug.Console(2, this, "Action {0} has {1} steps", -// item.SourceKey, item.RouteList.Count); - -// // Let's run it -// if (routeKey.ToLower() != "roomoff") -// LastSourceKey = routeKey; - -// foreach (var route in item.RouteList) -// { -// // if there is a $defaultAll on route, run two separate -// if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) -// { -// var tempAudio = new SourceRouteListItem -// { -// DestinationKey = "$defaultDisplay", -// SourceKey = route.SourceKey, -// Type = eRoutingSignalType.Video -// }; -// DoRoute(tempAudio); - -// var tempVideo = new SourceRouteListItem -// { -// DestinationKey = "$defaultAudio", -// SourceKey = route.SourceKey, -// Type = eRoutingSignalType.Audio -// }; -// DoRoute(tempVideo); -// continue; -// } -// else -// DoRoute(route); -// } - -// // Set volume control on room, using default if non provided -// IBasicVolumeControls volDev = null; -// // Handle special cases for volume control -// if (string.IsNullOrEmpty(item.VolumeControlKey) -// || item.VolumeControlKey.Equals("$defaultAudio", StringComparison.OrdinalIgnoreCase)) -// volDev = DefaultVolumeControls; -// else if (item.VolumeControlKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) -// volDev = DefaultDisplay as IBasicVolumeControls; -// // Or a specific device, probably rarely used. -// else -// { -// var dev = DeviceManager.GetDeviceForKey(item.VolumeControlKey); -// if (dev is IBasicVolumeControls) -// volDev = dev as IBasicVolumeControls; -// else if (dev is IHasVolumeDevice) -// volDev = (dev as IHasVolumeDevice).VolumeDevice; -// } -// CurrentAudioDevice = volDev; - -// // store the name and UI info for routes -// if (item.SourceKey != null) -// CurrentPresentationSourceInfo = item; -// // And finally, set the "control". This will trigger event -// //CurrentControlDevice = DeviceManager.GetDeviceForKey(item.SourceKey) as Device; - -// RoomIsOnFeedback.FireUpdate(); - -// }, 0); // end of CTimer - -// //Debug.Console(1, this, "Checking for source {0}", sourceNum); -// //if (Sources.ContainsKey(sourceNum)) -// //{ -// // var newSrc = Sources[sourceNum]; -// // if (!RoomIsOn.BoolValue) -// // { -// // EventHandler oneTimeHandler = null; -// // oneTimeHandler = (o, a) => -// // { -// // RoomIsOn.OutputChange -= oneTimeHandler; -// // FinishSourceSelection(newSrc); -// // }; -// // RoomIsOn.OutputChange -= oneTimeHandler; -// // RoomIsOn.OutputChange += oneTimeHandler; -// // RoomOn(); -// // } -// // else FinishSourceSelection(newSrc); -// //} -// } - -// /// -// /// -// /// -// /// -// /// -// bool DoRoute(SourceRouteListItem route) -// { -// IRoutingSinkNoSwitching dest = null; - -// if (route.DestinationKey.Equals("$defaultDisplay", StringComparison.OrdinalIgnoreCase)) -// dest = DefaultDisplay; -// else -// dest = DeviceManager.GetDeviceForKey(route.DestinationKey) as IRoutingSinkNoSwitching; - -// if (dest == null) -// { -// Debug.Console(1, this, "Cannot route, unknown destination '{0}'", route.DestinationKey); -// return false; -// } - -// if (route.SourceKey.Equals("$off", StringComparison.OrdinalIgnoreCase)) -// { -// dest.ReleaseRoute(); -// if (dest is IPower) -// (dest as IPower).PowerOff(); -// } -// else -// { -// var source = DeviceManager.GetDeviceForKey(route.SourceKey) as IRoutingOutputs; -// if (source == null) -// { -// Debug.Console(1, this, "Cannot route unknown source '{0}' to {1}", route.SourceKey, route.DestinationKey); -// return false; -// } -// dest.ReleaseAndMakeRoute(source, route.Type); -// } -// return true; -// } - -// ///// -// ///// -// ///// -// ///// -// //public override void SelectSource(IPresentationSource newSrc) -// //{ -// // if (Sources.ContainsValue(newSrc)) -// // { -// // if (!RoomIsOn.BoolValue) -// // { -// // EventHandler oneTimeHandler = null; -// // oneTimeHandler = (o, a) => -// // { -// // RoomIsOn.OutputChange -= oneTimeHandler; -// // FinishSourceSelection(newSrc); -// // }; -// // RoomIsOn.OutputChange -= oneTimeHandler; -// // RoomIsOn.OutputChange += oneTimeHandler; -// // RoomOn(); -// // } -// // else FinishSourceSelection(newSrc); -// // } -// //} - -// void Display_Various_OutputChange(object sender, EventArgs e) -// { -// // Bounce through the output changes -// if (sender == DefaultDisplay.PowerIsOnFeedback) -// this.RoomIsOnFeedback.FireUpdate(); -// else if (sender == DefaultDisplay.IsCoolingDownFeedback) -// this.IsCoolingDownFeedback.FireUpdate(); -// else if (sender == DefaultDisplay.IsWarmingUpFeedback) -// this.IsWarmingUpFeedback.FireUpdate(); -// } - -//// void FinishSourceSelection(IPresentationSource newSource) -//// { -//// Debug.Console(1, this, "Selecting source {0}", newSource.Key); -//// // Notify anyone watching source that it's leaving -//// OnPresentationSourceChange(newSource); -//// CurrentPresentationSource = newSource; -//// var routeableSource = CurrentPresentationSource as IRoutingOutputs; -//// if (routeableSource != null) -////#warning source route type will need clarification -//// DefaultDisplay.GetRouteToSource(routeableSource, eRoutingSignalType.AudioVideo); -//// else -//// Debug.Console(1, this, "New selected source {0} is not routeable", CurrentPresentationSource); - -//// CurrentSourceName.FireUpdate(); -//// //CurrentSourceType.FireUpdate(); -//// } - -// public override List Feedbacks -// { -// get -// { -// var feedbacks = new List -// { -// SourcesCount, -// CurrentSourceName, -// //CurrentSourceType, -// }; -// feedbacks.AddRange(base.Feedbacks); -// return feedbacks; -// } -// } -// } -//} \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Room/EssentialsHuddleSpaceRoom.cs b/Essentials/PepperDashEssentials/Room/EssentialsHuddleSpaceRoom.cs index 9fce49ad..327582fc 100644 --- a/Essentials/PepperDashEssentials/Room/EssentialsHuddleSpaceRoom.cs +++ b/Essentials/PepperDashEssentials/Room/EssentialsHuddleSpaceRoom.cs @@ -25,7 +25,6 @@ namespace PepperDash.Essentials && CurrentSourceInfo.Type == eSourceListItemType.Route && disp != null && disp.PowerIsOnFeedback.BoolValue; - Debug.Console(2, this, "Display power={0}, has CurrentSource={1}", disp.PowerIsOnFeedback, CurrentSourceInfo != null); return val; }; } @@ -221,7 +220,7 @@ namespace PepperDash.Essentials // Run this on a separate thread new CTimer(o => { - Debug.Console(1, this, "Run room action '{0}'", routeKey); + Debug.Console(1, this, "Run route action '{0}'", routeKey); var dict = ConfigReader.ConfigObject.GetSourceListForKey(SourceListKey); if(dict == null) { @@ -238,8 +237,8 @@ namespace PepperDash.Essentials } var item = dict[routeKey]; - Debug.Console(2, this, "Action {0} has {1} steps", - item.SourceKey, item.RouteList.Count); + //Debug.Console(2, this, "Action {0} has {1} steps", + // item.SourceKey, item.RouteList.Count); // End usage timer on last source if (!string.IsNullOrEmpty(LastSourceKey)) @@ -253,7 +252,7 @@ namespace PepperDash.Essentials } catch (Exception e) { - Debug.Console(1, this, "EXCEPTION in end usage tracking (257):\r{0}", e); + Debug.Console(1, this, "*#* EXCEPTION in end usage tracking (257):\r{0}", e); } } @@ -273,22 +272,23 @@ namespace PepperDash.Essentials // if there is a $defaultAll on route, run two separate if (route.DestinationKey.Equals("$defaultAll", StringComparison.OrdinalIgnoreCase)) { - var tempAudio = new SourceRouteListItem + // Going to assume a single-path route for now + var tempVideo = new SourceRouteListItem { DestinationKey = "$defaultDisplay", SourceKey = route.SourceKey, Type = eRoutingSignalType.Video }; - DoRoute(tempAudio); + DoRoute(tempVideo); - var tempVideo = new SourceRouteListItem - { - DestinationKey = "$defaultAudio", - SourceKey = route.SourceKey, - Type = eRoutingSignalType.Audio - }; - DoRoute(tempVideo); - continue; + //var tempAudio = new SourceRouteListItem + //{ + // DestinationKey = "$defaultAudio", + // SourceKey = route.SourceKey, + // Type = eRoutingSignalType.Audio + //}; + //DoRoute(tempAudio); + //continue; -- not sure why this was here } else DoRoute(route); @@ -321,7 +321,12 @@ namespace PepperDash.Essentials CurrentVolumeControls = volDev; // store the name and UI info for routes - if (item.SourceKey != null) + if (item.SourceKey == "$off") + { + CurrentSourceInfoKey = routeKey; + CurrentSourceInfo = null; + } + else if (item.SourceKey != null) { CurrentSourceInfoKey = routeKey; CurrentSourceInfo = item; diff --git a/Essentials/PepperDashEssentials/Room/EssentialsPresentationRoom.cs b/Essentials/PepperDashEssentials/Room/EssentialsPresentationRoom.cs index f0420b30..698013be 100644 --- a/Essentials/PepperDashEssentials/Room/EssentialsPresentationRoom.cs +++ b/Essentials/PepperDashEssentials/Room/EssentialsPresentationRoom.cs @@ -302,8 +302,8 @@ namespace PepperDash.Essentials } var item = dict[routeKey]; - Debug.Console(2, this, "Action {0} has {1} steps", - item.SourceKey, item.RouteList.Count); + //Debug.Console(2, this, "Action {0} has {1} steps", + // item.SourceKey, item.RouteList.Count); // Let's run it if (routeKey.ToLower() != "roomoff") diff --git a/Release Package/PepperDashEssentials.cpz b/Release Package/PepperDashEssentials.cpz index 88d2a896..d2e28568 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 3167386e..231641c7 100644 Binary files a/Release Package/PepperDashEssentials.dll and b/Release Package/PepperDashEssentials.dll differ