/// <summary> /// Creates a static asset for the codec and maps the joins to the main room symbol /// </summary> void SetUpCodec() { try { var codec = (Room as EssentialsHuddleVtc1Room).VideoCodec; if (codec == null) { Debug.Console(1, this, "Cannot link codec to Fusion because codec is null"); return; } codec.UsageTracker = new UsageTracking(codec); codec.UsageTracker.UsageIsTracked = true; codec.UsageTracker.DeviceUsageEnded += UsageTracker_DeviceUsageEnded; var codecPowerOnAction = new Action <bool>(b => { if (!b) { codec.StandbyDeactivate(); } }); var codecPowerOffAction = new Action <bool>(b => { if (!b) { codec.StandbyActivate(); } }); // Map FusionRoom Attributes: // Codec volume var codecVolume = FusionRoom.CreateOffsetUshortSig(50, "Volume - Fader01", eSigIoMask.InputOutputSig); codecVolume.OutputSig.UserObject = new Action <ushort>(b => (codec as IBasicVolumeWithFeedback).SetVolume(b)); (codec as IBasicVolumeWithFeedback).VolumeLevelFeedback.LinkInputSig(codecVolume.InputSig); // In Call Status CodecIsInCall = FusionRoom.CreateOffsetBoolSig(69, "Conf - VC 1 In Call", eSigIoMask.InputSigOnly); codec.CallStatusChange += new EventHandler <PepperDash.Essentials.Devices.Common.Codec.CodecCallStatusItemChangeEventArgs>(codec_CallStatusChange); // Online status if (codec is ICommunicationMonitor) { var c = codec as ICommunicationMonitor; var codecOnline = FusionRoom.CreateOffsetBoolSig(122, "Online - VC 1", eSigIoMask.InputSigOnly); codecOnline.InputSig.BoolValue = c.CommunicationMonitor.Status == MonitorStatus.IsOk; c.CommunicationMonitor.StatusChange += (o, a) => { codecOnline.InputSig.BoolValue = a.Status == MonitorStatus.IsOk; }; Debug.Console(0, this, "Linking '{0}' communication monitor to Fusion '{1}'", codec.Key, "Online - VC 1"); } // Codec IP Address bool codecHasIpInfo = false; var codecComm = codec.Communication; string codecIpAddress = string.Empty; int codecIpPort = 0; StringSigData codecIpAddressSig; StringSigData codecIpPortSig; if (codecComm is GenericSshClient) { codecIpAddress = (codecComm as GenericSshClient).Hostname; codecIpPort = (codecComm as GenericSshClient).Port; codecHasIpInfo = true; } else if (codecComm is GenericTcpIpClient) { codecIpAddress = (codecComm as GenericTcpIpClient).Hostname; codecIpPort = (codecComm as GenericTcpIpClient).Port; codecHasIpInfo = true; } if (codecHasIpInfo) { codecIpAddressSig = FusionRoom.CreateOffsetStringSig(121, "IP Address - VC", eSigIoMask.InputSigOnly); codecIpAddressSig.InputSig.StringValue = codecIpAddress; codecIpPortSig = FusionRoom.CreateOffsetStringSig(150, "IP Port - VC", eSigIoMask.InputSigOnly); codecIpPortSig.InputSig.StringValue = codecIpPort.ToString(); } var tempAsset = new FusionAsset(); var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(c => c.Key.Equals(codec.Key)); if (FusionStaticAssets.ContainsKey(deviceConfig.Uid)) { tempAsset = FusionStaticAssets[deviceConfig.Uid]; } else { // Create a new asset tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), codec.Name, "Codec", ""); FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); } var codecAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display", tempAsset.InstanceId); codecAsset.PowerOn.OutputSig.UserObject = codecPowerOnAction; codecAsset.PowerOff.OutputSig.UserObject = codecPowerOffAction; codec.StandbyIsOnFeedback.LinkComplementInputSig(codecAsset.PowerOn.InputSig); // TODO: Map relevant attributes on asset symbol codecAsset.TrySetMakeModel(codec); codecAsset.TryLinkAssetErrorToCommunication(codec); } catch (Exception e) { Debug.Console(1, this, "Error setting up codec in Fusion: {0}", e); } }
protected override void SetUpDisplay() { try { //Setup Display Usage Monitoring var displays = DeviceManager.AllDevices.Where(d => d is DisplayBase); // Consider updating this in multiple display systems foreach (DisplayBase display in displays) { display.UsageTracker = new UsageTracking(display); display.UsageTracker.UsageIsTracked = true; display.UsageTracker.DeviceUsageEnded += new EventHandler <DeviceUsageEventArgs>(UsageTracker_DeviceUsageEnded); } var defaultDisplay = (Room as EssentialsHuddleVtc1Room).DefaultDisplay as DisplayBase; if (defaultDisplay == null) { Debug.Console(1, this, "Cannot link null display to Fusion because default display is null"); return; } var dispPowerOnAction = new Action <bool>(b => { if (!b) { defaultDisplay.PowerOn(); } }); var dispPowerOffAction = new Action <bool>(b => { if (!b) { defaultDisplay.PowerOff(); } }); // Display to fusion room sigs FusionRoom.DisplayPowerOn.OutputSig.UserObject = dispPowerOnAction; FusionRoom.DisplayPowerOff.OutputSig.UserObject = dispPowerOffAction; defaultDisplay.PowerIsOnFeedback.LinkInputSig(FusionRoom.DisplayPowerOn.InputSig); if (defaultDisplay is IDisplayUsage) { (defaultDisplay as IDisplayUsage).LampHours.LinkInputSig(FusionRoom.DisplayUsage.InputSig); } MapDisplayToRoomJoins(1, 158, defaultDisplay); var deviceConfig = ConfigReader.ConfigObject.Devices.FirstOrDefault(d => d.Key.Equals(defaultDisplay.Key)); //Check for existing asset in GUIDs collection var tempAsset = new FusionAsset(); if (FusionStaticAssets.ContainsKey(deviceConfig.Uid)) { tempAsset = FusionStaticAssets[deviceConfig.Uid]; } else { // Create a new asset tempAsset = new FusionAsset(FusionRoomGuids.GetNextAvailableAssetNumber(FusionRoom), defaultDisplay.Name, "Display", ""); FusionStaticAssets.Add(deviceConfig.Uid, tempAsset); } var dispAsset = FusionRoom.CreateStaticAsset(tempAsset.SlotNumber, tempAsset.Name, "Display", tempAsset.InstanceId); dispAsset.PowerOn.OutputSig.UserObject = dispPowerOnAction; dispAsset.PowerOff.OutputSig.UserObject = dispPowerOffAction; defaultDisplay.PowerIsOnFeedback.LinkInputSig(dispAsset.PowerOn.InputSig); // NO!! display.PowerIsOn.LinkComplementInputSig(dispAsset.PowerOff.InputSig); // Use extension methods dispAsset.TrySetMakeModel(defaultDisplay); dispAsset.TryLinkAssetErrorToCommunication(defaultDisplay); } catch (Exception e) { Debug.Console(1, this, "Error setting up display in Fusion: {0}", e); } }