From ddf2bd4c642a41d1bd0ca128f547d5fbe1075597 Mon Sep 17 00:00:00 2001 From: Trevor Payne Date: Mon, 9 Mar 2020 15:08:14 -0500 Subject: [PATCH] Added IR SetTopBox --- PepperDashEssentials/Bridges/BridgeBase.cs | 5 + .../Bridges/IRSetTopBoxBaseBridge.cs | 128 ++++++++++++++ .../JoinMaps/SetTopBoxControllerJoinMap.cs | 158 ++++++++++++++++++ .../PepperDashEssentials.csproj | 2 + .../SetTopBox/IRSetTopBoxBase.cs | 34 +++- 5 files changed, 324 insertions(+), 3 deletions(-) create mode 100644 PepperDashEssentials/Bridges/IRSetTopBoxBaseBridge.cs create mode 100644 PepperDashEssentials/Bridges/JoinMaps/SetTopBoxControllerJoinMap.cs diff --git a/PepperDashEssentials/Bridges/BridgeBase.cs b/PepperDashEssentials/Bridges/BridgeBase.cs index bea29911..73ede03c 100644 --- a/PepperDashEssentials/Bridges/BridgeBase.cs +++ b/PepperDashEssentials/Bridges/BridgeBase.cs @@ -136,6 +136,11 @@ namespace PepperDash.Essentials.Bridges (device as GenericRelayDevice).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey); continue; } + else if (device is IRSetTopBoxBase) + { + (device as IRSetTopBoxBase).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey); + continue; + } else if (device is IDigitalInput) { (device as IDigitalInput).LinkToApi(Eisc, d.JoinStart, d.JoinMapKey); diff --git a/PepperDashEssentials/Bridges/IRSetTopBoxBaseBridge.cs b/PepperDashEssentials/Bridges/IRSetTopBoxBaseBridge.cs new file mode 100644 index 00000000..68d765bc --- /dev/null +++ b/PepperDashEssentials/Bridges/IRSetTopBoxBaseBridge.cs @@ -0,0 +1,128 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Crestron.SimplSharpPro.DeviceSupport; +using PepperDash.Core; +using PepperDash.Essentials.Core; +using PepperDash.Essentials.Devices.Common; + +using Newtonsoft.Json; + +namespace PepperDash.Essentials.Bridges +{ + public static class IRSetTopBoxBaseApiExtensions + { + public static void LinkToApi(this PepperDash.Essentials.Devices.Common.IRSetTopBoxBase stbDevice, BasicTriList trilist, uint joinStart, string joinMapKey) + { + SetTopBoxControllerJoinMap joinMap = new SetTopBoxControllerJoinMap(); + var joinMapSerialized = JoinMapHelper.GetJoinMapForDevice(joinMapKey); + + if (!string.IsNullOrEmpty(joinMapSerialized)) + joinMap = JsonConvert.DeserializeObject(joinMapSerialized); + + joinMap.OffsetJoinNumbers(joinStart); + + Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); + Debug.Console(0, "Linking to Display: {0}", stbDevice.Name); + + trilist.StringInput[joinMap.Name].StringValue = stbDevice.Name; + + var stbBase = stbDevice as ISetTopBoxControls; + if (stbBase != null) + { + trilist.BooleanInput[joinMap.HasDpad].BoolValue = stbBase.HasDpad; + trilist.BooleanInput[joinMap.HasNumeric].BoolValue = stbBase.HasNumeric; + trilist.BooleanInput[joinMap.HasDvr].BoolValue = stbBase.HasDvr; + trilist.BooleanInput[joinMap.HasPresets].BoolValue = stbBase.HasPresets; + + trilist.SetBoolSigAction(joinMap.DvrList, (b) => stbBase.DvrList(b)); + trilist.SetBoolSigAction(joinMap.Replay, (b) => stbBase.Replay(b)); + + trilist.SetStringSigAction(joinMap.LoadPresets, (s) => stbBase.LoadPresets(s)); + } + + var stbPower = stbDevice as IPower; + if (stbPower != null) + { + trilist.SetSigTrueAction(joinMap.PowerOn, () => stbPower.PowerOn()); + trilist.SetSigTrueAction(joinMap.PowerOff, () => stbPower.PowerOff()); + trilist.SetSigTrueAction(joinMap.PowerToggle, () => stbPower.PowerToggle()); + + } + + var stbDPad = stbDevice as IDPad; + if (stbDPad != null) + { + trilist.SetBoolSigAction(joinMap.Up, (b) => stbDPad.Up(b)); + trilist.SetBoolSigAction(joinMap.Down, (b) => stbDPad.Down(b)); + trilist.SetBoolSigAction(joinMap.Left, (b) => stbDPad.Left(b)); + trilist.SetBoolSigAction(joinMap.Right, (b) => stbDPad.Right(b)); + trilist.SetBoolSigAction(joinMap.Select, (b) => stbDPad.Select(b)); + trilist.SetBoolSigAction(joinMap.Menu, (b) => stbDPad.Menu(b)); + trilist.SetBoolSigAction(joinMap.Exit, (b) => stbDPad.Exit(b)); + } + + var stbChannel = stbDevice as IChannel; + if (stbChannel != null) + { + trilist.SetBoolSigAction(joinMap.ChannelUp, (b) => stbChannel.ChannelUp(b)); + trilist.SetBoolSigAction(joinMap.ChannelDown, (b) => stbChannel.ChannelDown(b)); + trilist.SetBoolSigAction(joinMap.LastChannel, (b) => stbChannel.LastChannel(b)); + trilist.SetBoolSigAction(joinMap.Guide, (b) => stbChannel.Guide(b)); + trilist.SetBoolSigAction(joinMap.Info, (b) => stbChannel.Info(b)); + trilist.SetBoolSigAction(joinMap.Exit, (b) => stbChannel.Exit(b)); + } + + var stbColor = stbDevice as IColor; + if (stbColor != null) + { + trilist.SetBoolSigAction(joinMap.Red, (b) => stbColor.Red(b)); + trilist.SetBoolSigAction(joinMap.Green, (b) => stbColor.Green(b)); + trilist.SetBoolSigAction(joinMap.Yellow, (b) => stbColor.Yellow(b)); + trilist.SetBoolSigAction(joinMap.Blue, (b) => stbColor.Blue(b)); + } + + var stbKeypad = stbDevice as ISetTopBoxNumericKeypad; + if (stbKeypad != null) + { + trilist.StringInput[joinMap.KeypadAccessoryButton1Label].StringValue = stbKeypad.KeypadAccessoryButton1Label; + trilist.StringInput[joinMap.KeypadAccessoryButton2Label].StringValue = stbKeypad.KeypadAccessoryButton2Label; + + trilist.BooleanInput[joinMap.HasKeypadAccessoryButton1].BoolValue = stbKeypad.HasKeypadAccessoryButton1; + trilist.BooleanInput[joinMap.HasKeypadAccessoryButton2].BoolValue = stbKeypad.HasKeypadAccessoryButton2; + + trilist.SetBoolSigAction(joinMap.Digit0, (b) => stbKeypad.Digit0(b)); + trilist.SetBoolSigAction(joinMap.Digit1, (b) => stbKeypad.Digit1(b)); + trilist.SetBoolSigAction(joinMap.Digit2, (b) => stbKeypad.Digit2(b)); + trilist.SetBoolSigAction(joinMap.Digit3, (b) => stbKeypad.Digit3(b)); + trilist.SetBoolSigAction(joinMap.Digit4, (b) => stbKeypad.Digit4(b)); + trilist.SetBoolSigAction(joinMap.Digit5, (b) => stbKeypad.Digit5(b)); + trilist.SetBoolSigAction(joinMap.Digit6, (b) => stbKeypad.Digit6(b)); + trilist.SetBoolSigAction(joinMap.Digit7, (b) => stbKeypad.Digit7(b)); + trilist.SetBoolSigAction(joinMap.Digit8, (b) => stbKeypad.Digit8(b)); + trilist.SetBoolSigAction(joinMap.Digit9, (b) => stbKeypad.Digit9(b)); + trilist.SetBoolSigAction(joinMap.KeypadAccessoryButton1Press, (b) => stbKeypad.KeypadAccessoryButton1(b)); + trilist.SetBoolSigAction(joinMap.KeypadAccessoryButton2Press, (b) => stbKeypad.KeypadAccessoryButton1(b)); + trilist.SetBoolSigAction(joinMap.Dash, (b) => stbKeypad.Dash(b)); + trilist.SetBoolSigAction(joinMap.KeypadEnter, (b) => stbKeypad.KeypadEnter(b)); + } + + var stbTransport = stbDevice as ITransport; + if (stbTransport != null) + { + trilist.SetBoolSigAction(joinMap.Play, (b) => stbTransport.Play(b)); + trilist.SetBoolSigAction(joinMap.Pause, (b) => stbTransport.Pause(b)); + trilist.SetBoolSigAction(joinMap.Rewind, (b) => stbTransport.Rewind(b)); + trilist.SetBoolSigAction(joinMap.FFwd, (b) => stbTransport.FFwd(b)); + trilist.SetBoolSigAction(joinMap.ChapMinus, (b) => stbTransport.ChapMinus(b)); + trilist.SetBoolSigAction(joinMap.ChapPlus, (b) => stbTransport.ChapPlus(b)); + trilist.SetBoolSigAction(joinMap.Stop, (b) => stbTransport.Stop(b)); + trilist.SetBoolSigAction(joinMap.Record, (b) => stbTransport.Record(b)); + + } + + } + } +} \ No newline at end of file diff --git a/PepperDashEssentials/Bridges/JoinMaps/SetTopBoxControllerJoinMap.cs b/PepperDashEssentials/Bridges/JoinMaps/SetTopBoxControllerJoinMap.cs new file mode 100644 index 00000000..7dfc48fd --- /dev/null +++ b/PepperDashEssentials/Bridges/JoinMaps/SetTopBoxControllerJoinMap.cs @@ -0,0 +1,158 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using PepperDash.Essentials.Core; +using Crestron.SimplSharp.Reflection; + + +namespace PepperDash.Essentials.Bridges +{ + public class SetTopBoxControllerJoinMap : JoinMapBase + { + #region Digitals + public uint DvrList { get; set; } // + public uint Replay { get; set; } + public uint Up { get; set; } // + public uint Down { get; set; } // + public uint Left { get; set; } // + public uint Right { get; set; } // + public uint Select { get; set; } // + public uint Menu { get; set; } // + public uint Exit { get; set; } // + public uint Digit0 { get; set; } // + public uint Digit1 { get; set; } // + public uint Digit2 { get; set; } // + public uint Digit3 { get; set; } // + public uint Digit4 { get; set; } // + public uint Digit5 { get; set; } // + public uint Digit6 { get; set; } // + public uint Digit7 { get; set; } // + public uint Digit8 { get; set; } // + public uint Digit9 { get; set; } // + public uint Dash { get; set; } // + public uint KeypadEnter { get; set; } // + public uint ChannelUp { get; set; } // + public uint ChannelDown { get; set; } // + public uint LastChannel { get; set; } // + public uint Guide { get; set; } // + public uint Info { get; set; } // + public uint Red { get; set; } // + public uint Green { get; set; } // + public uint Yellow { get; set; } // + public uint Blue { get; set; } // + public uint ChapMinus { get; set; } + public uint ChapPlus { get; set; } + public uint FFwd { get; set; } // + public uint Pause { get; set; } // + public uint Play { get; set; } // + public uint Record { get; set; } + public uint Rewind { get; set; } // + public uint Stop { get; set; } // + + public uint PowerOn { get; set; } // + public uint PowerOff { get; set; } // + public uint PowerToggle { get; set; } // + + public uint HasKeypadAccessoryButton1 { get; set; } + public uint HasKeypadAccessoryButton2 { get; set; } + + public uint KeypadAccessoryButton1Press { get; set; } + public uint KeypadAccessoryButton2Press { get; set; } + + + public uint HasDvr { get; set; } + public uint HasPresets { get; set; } + public uint HasNumeric { get; set; } + public uint HasDpad { get; set; } + + + #endregion + + #region Analogs + + #endregion + + #region Strings + public uint Name { get; set; } + public uint LoadPresets { get; set; } + public uint KeypadAccessoryButton1Label { get; set; } + public uint KeypadAccessoryButton2Label { get; set; } + + #endregion + + public SetTopBoxControllerJoinMap() + { + PowerOn = 1; + PowerOff = 2; + PowerToggle = 3; + + HasDpad = 4; + Up = 4; + Down = 5; + Left = 6; + Right = 7; + Select = 8; + Menu = 9; + Exit = 10; + + HasNumeric = 11; + Digit0 = 11; + Digit1 = 12; + Digit2 = 13; + Digit3 = 14; + Digit4 = 15; + Digit5 = 16; + Digit6 = 17; + Digit7 = 18; + Digit8 = 19; + Digit9 = 20; + Dash = 21; + KeypadEnter = 22; + ChannelUp = 23; + ChannelDown = 24; + LastChannel = 25; + + Guide = 26; + Info = 27; + Red = 28; + Green = 29; + Yellow = 30; + Blue = 31; + + HasDvr = 32; + DvrList = 32; + Play = 33; + Pause = 34; + Stop = 35; + FFwd = 36; + Rewind = 37; + ChapPlus = 38; + ChapMinus = 39; + Replay = 40; + Record = 41; + HasKeypadAccessoryButton1 = 42; + KeypadAccessoryButton1Press = 42; + HasKeypadAccessoryButton2 = 43; + KeypadAccessoryButton2Press = 43; + + Name = 1; + KeypadAccessoryButton1Label = 42; + KeypadAccessoryButton2Label = 43; + + LoadPresets = 50; + } + + public override void OffsetJoinNumbers(uint joinStart) + { + var joinOffset = joinStart - 1; + var properties = this.GetType().GetCType().GetProperties().Where(o => o.PropertyType == typeof(uint)).ToList(); + foreach (var property in properties) + { + property.SetValue(this, (uint)property.GetValue(this, null) + joinOffset, null); + } + } + + } +} \ No newline at end of file diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj index b7b73cb8..612bdf10 100644 --- a/PepperDashEssentials/PepperDashEssentials.csproj +++ b/PepperDashEssentials/PepperDashEssentials.csproj @@ -123,6 +123,7 @@ + @@ -155,6 +156,7 @@ + diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs index 5af965fe..318b63cd 100644 --- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs +++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/SetTopBox/IRSetTopBoxBase.cs @@ -12,7 +12,7 @@ using PepperDash.Essentials.Core.Routing; namespace PepperDash.Essentials.Devices.Common { - public class IRSetTopBoxBase : Device, ISetTopBoxControls, IUiDisplayInfo, IRoutingOutputs, IUsageTracking + public class IRSetTopBoxBase : Device, ISetTopBoxControls, IUiDisplayInfo, IRoutingOutputs, IUsageTracking, IPower { public IrOutputPortController IrPort { get; private set; } @@ -338,6 +338,34 @@ namespace PepperDash.Essentials.Devices.Common public UsageTracking UsageTracker { get; set; } - #endregion - } + #endregion + + #region IPower Members + + public void PowerOn() + { + IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_ON, true); + IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_ON, false); + + } + + public void PowerOff() + { + IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_OFF, true); + IrPort.PressRelease(IROutputStandardCommands.IROut_POWER_OFF, false); + + } + + public void PowerToggle() + { + throw new NotImplementedException(); + } + + public BoolFeedback PowerIsOnFeedback + { + get { throw new NotImplementedException(); } + } + + #endregion + } } \ No newline at end of file