/// <summary> /// Builds an instance of the device and returns it /// </summary> /// <param name="dc">Device Configuration</param> /// <returns>Instance of Device</returns> public static PanasonicDisplay BuildDevice(DeviceConfig dc) { var comm = CommFactory.CreateCommForDevice(dc); // No use in creating the display if we can't communicate with it if (comm != null) { // Deserialize the Properties object so we can access any custom properties var config = JsonConvert.DeserializeObject <PanasonicDisplayConfigObject>(dc.Properties.ToString()); var newDisplay = new PanasonicDisplay(dc.Key, dc.Name, comm, dc); return(newDisplay); } else { Debug.Console(0, Debug.ErrorLogLevel.Warning, "Unable to create Communication device for device with key '{0}'", dc.Key); return(null); } }
public static void LinkToApiExt(this PanasonicDisplay displayDevice, BasicTriList trilist, uint joinStart, string joinMapKey) { DisplayControllerJoinMap joinMap = new DisplayControllerJoinMap(); var JoinMapSerialized = JoinMapHelper.GetJoinMapForDevice(joinMapKey); if (!string.IsNullOrEmpty(JoinMapSerialized)) { joinMap = JsonConvert.DeserializeObject <DisplayControllerJoinMap>(JoinMapSerialized); } joinMap.OffsetJoinNumbers(joinStart); Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); Debug.Console(0, "Linking to Display: {0}", displayDevice.Name); trilist.StringInput[joinMap.Name].StringValue = displayDevice.Name; var commMonitor = displayDevice as ICommunicationMonitor; if (commMonitor != null) { commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]); } displayDevice.InputNumberFeedback.LinkInputSig(trilist.UShortInput[joinMap.InputSelect]); // Two way feedbacks var twoWayDisplay = displayDevice as PepperDash.Essentials.Core.TwoWayDisplayBase; if (twoWayDisplay != null) { trilist.SetBool(joinMap.IsTwoWayDisplay, true); twoWayDisplay.CurrentInputFeedback.OutputChange += new EventHandler <FeedbackEventArgs>(CurrentInputFeedback_OutputChange); } // Power Off trilist.SetSigTrueAction(joinMap.PowerOff, () => { displayDevice.PowerOff(); }); displayDevice.PowerIsOnFeedback.OutputChange += new EventHandler <FeedbackEventArgs>(PowerIsOnFeedback_OutputChange); displayDevice.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff]); // PowerOn trilist.SetSigTrueAction(joinMap.PowerOn, () => { displayDevice.PowerOn(); }); displayDevice.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn]); int count = 1; var displayBase = displayDevice as PepperDash.Essentials.Core.DisplayBase; foreach (var input in displayDevice.InputPorts) { //displayDevice.InputKeys.Add(input.Key.ToString()); //var tempKey = InputKeys.ElementAt(count - 1); trilist.SetSigTrueAction((ushort)(joinMap.InputSelectOffset + count), () => { displayDevice.ExecuteSwitch(displayDevice.InputPorts[input.Key.ToString()].Selector); }); Debug.Console(2, displayDevice, "Setting Input Select Action on Digital Join {0} to Input: {1}", joinMap.InputSelectOffset + count, displayDevice.InputPorts[input.Key.ToString()].Key.ToString()); trilist.StringInput[(ushort)(joinMap.InputNamesOffset + count)].StringValue = input.Key.ToString(); count++; } Debug.Console(2, displayDevice, "Setting Input Select Action on Analog Join {0}", joinMap.InputSelect); trilist.SetUShortSigAction(joinMap.InputSelect, (a) => { if (a == 0) { displayDevice.PowerOff(); } else if (a > 0 && a < displayDevice.InputPorts.Count) { displayDevice.ExecuteSwitch(displayDevice.InputPorts.ElementAt(a - 1).Selector); } else if (a == 102) { displayDevice.PowerToggle(); } Debug.Console(2, displayDevice, "InputChange {0}", a); }); var volumeDisplay = displayDevice as IBasicVolumeControls; if (volumeDisplay != null) { trilist.SetBoolSigAction(joinMap.VolumeUp, (b) => volumeDisplay.VolumeUp(b)); trilist.SetBoolSigAction(joinMap.VolumeDown, (b) => volumeDisplay.VolumeDown(b)); trilist.SetSigTrueAction(joinMap.VolumeMute, () => volumeDisplay.MuteToggle()); var volumeDisplayWithFeedback = volumeDisplay as IBasicVolumeWithFeedback; if (volumeDisplayWithFeedback != null) { volumeDisplayWithFeedback.VolumeLevelFeedback.LinkInputSig(trilist.UShortInput[joinMap.VolumeLevelFB]); volumeDisplayWithFeedback.MuteFeedback.LinkInputSig(trilist.BooleanInput[joinMap.VolumeMute]); } } }