diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index 6218edb..2b2dde0 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -166,7 +166,7 @@ jobs: - name: Add nuget.exe uses: nuget/setup-nuget@v1 - name: Add Github Packages source - run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} + run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash-engineering/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} - name: Create nuget package run: nuget pack "./epi-essentials-mobile-control.nuspec" -version ${{ env.VERSION }} - name: Publish nuget package to Github registry @@ -313,7 +313,7 @@ jobs: - name: Add nuget.exe uses: nuget/setup-nuget@v1 - name: Add Github Packages source - run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} + run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash-engineering/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} - name: Create nuget package run: nuget pack "./epi-essentials-mobile-control.nuspec" -version ${{ env.VERSION }} - name: Publish nuget package to Github registry diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 32a4213..1c63fb5 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -150,7 +150,7 @@ jobs: - name: Add nuget.exe uses: nuget/setup-nuget@v1 - name: Add Github Packages source - run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} + run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash-engineering/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} - name: Create nuget package run: nuget pack "./epi-essentials-mobile-control.nuspec" -version ${{ env.VERSION }} - name: Publish nuget package to Github registry @@ -283,7 +283,7 @@ jobs: - name: Add nuget.exe uses: nuget/setup-nuget@v1 - name: Add Github Packages source - run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} + run: nuget sources add -name github -source https://nuget.pkg.github.com/pepperdash-engineering/index.json -username Pepperdash -password ${{ secrets.GITHUB_TOKEN }} - name: Create nuget package run: nuget pack "./epi-essentials-mobile-control.nuspec" -version ${{ env.VERSION }} - name: Publish nuget package to Github registry diff --git a/3-series/RoomBridges/MobileControlSIMPLRoomBridge.cs b/3-series/RoomBridges/MobileControlSIMPLRoomBridge.cs index cc735a4..64b1d5d 100644 --- a/3-series/RoomBridges/MobileControlSIMPLRoomBridge.cs +++ b/3-series/RoomBridges/MobileControlSIMPLRoomBridge.cs @@ -14,12 +14,17 @@ using PepperDash.Essentials.Devices.Common.Codec; using PepperDash.Essentials.Devices.Common.Cameras; using PepperDash.Essentials.Room.Config; -using PepperDash.Essentials.Core.DeviceTypeInterfaces; - +using System.Linq; +using PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom; +using PepperDash.Essentials.Core.Lighting; +using PepperDash.Essentials.Core.Shades; +using PepperDash.Essentials.Devices.Common; +using PepperDash.Essentials.Devices.Common.VideoCodec; +using PepperDash.Essentials.Devices.Common.AudioCodec; namespace PepperDash.Essentials.Room.MobileControl { -// ReSharper disable once InconsistentNaming + // ReSharper disable once InconsistentNaming public class MobileControlSIMPLRoomBridge : MobileControlBridgeBase, IDelayedConfiguration { private const int SupportedDisplayCount = 10; @@ -33,9 +38,6 @@ public class MobileControlSIMPLRoomBridge : MobileControlBridgeBase, IDelayedCon public MobileControlSIMPLRoomJoinMap JoinMap { get; private set; } - public Dictionary DeviceMessengers { get; private set; } - - /// /// /// @@ -70,7 +72,7 @@ public override string RoomKey /// /// public MobileControlSIMPLRoomBridge(string key, string name, uint ipId) - : base(key, "/room/room1") + : base(key, "/room/room1/status") { Eisc = new ThreeSeriesTcpIpEthernetIntersystemCommunications(ipId, "127.0.0.2", Global.ControlSystem); var reg = Eisc.Register(); @@ -82,7 +84,7 @@ public MobileControlSIMPLRoomBridge(string key, string name, uint ipId) _sourceBridge = new MobileControlSimplDeviceBridge(key + "-sourceBridge", "SIMPL source bridge", Eisc); DeviceManager.AddDevice(_sourceBridge); - CrestronConsole.AddNewConsoleCommand((s) => JoinMap.PrintJoinMapInfo(), "printmobilejoinmap", "Prints the MobileControlSIMPLRoomBridge JoinMap", ConsoleAccessLevelEnum.AccessOperator); + CrestronConsole.AddNewConsoleCommand((s) => JoinMap.PrintJoinMapInfo(), "mobileprintjoinmap", "Prints the MobileControlSIMPLRoomBridge JoinMap", ConsoleAccessLevelEnum.AccessOperator); AddPostActivationAction(() => { @@ -156,7 +158,7 @@ public override bool CustomActivate() // TODO: Update Source Bridge to use new JoinMap scheme //_sourceBridge.JoinMap.PrintJoinMapInfo(); - }, "printmobilebridge", "Prints MC-SIMPL bridge EISC data", ConsoleAccessLevelEnum.AccessOperator); + }, "mobileprintbridge", "Prints MC-SIMPL bridge EISC data", ConsoleAccessLevelEnum.AccessOperator); return base.CustomActivate(); } @@ -195,7 +197,7 @@ private void SetupFunctions() Parent.AddAction(@"/room/room1/clientJoined", new Action(() => Eisc.PulseBool(JoinMap.ClientJoined.JoinNumber))); - Parent.AddAction(@"/room/room1/status", new Action(SendFullStatus)); + Parent.AddAction(@"/room/room1/status", new ClientSpecificUpdateRequest((id) => SendFullStatus(id))); Parent.AddAction(@"/room/room1/source", new Action(c => { @@ -466,6 +468,12 @@ private void LoadConfigValues() Parent.SystemUrl = Eisc.StringOutput[JoinMap.PortalSystemUrl.JoinNumber].StringValue; } + + if(co.Info == null) + { + co.Info = new InfoConfig(); + } + co.Info.RuntimeInfo.AppName = Assembly.GetExecutingAssembly().GetName().Name; var version = Assembly.GetExecutingAssembly().GetName().Version; co.Info.RuntimeInfo.AssemblyVersion = string.Format("{0}.{1}.{2}", version.Major, version.Minor, @@ -500,21 +508,40 @@ private void LoadConfigValues() Message = Eisc.StringOutput[JoinMap.ConfigHelpMessage.JoinNumber].StringValue }; + rmProps.HelpMessage = Eisc.StringOutput[JoinMap.ConfigHelpMessage.JoinNumber].StringValue; + rmProps.Environment = new EssentialsEnvironmentPropertiesConfig(); // enabled defaults to false + var environmentKeySigs = Eisc.StringOutput.Where(s => s.Number >= JoinMap.EnvironmentalDevicesKey.JoinNumber && s.Number < JoinMap.EnvironmentalDevicesKey.JoinNumber + JoinMap.EnvironmentalDevicesKey.JoinSpan); + + if (environmentKeySigs.Any(s => !string.IsNullOrEmpty(s.StringValue))) + { + rmProps.Environment.Enabled = true; + rmProps.Environment.DeviceKeys = environmentKeySigs.Where(s => !string.IsNullOrEmpty(s.StringValue)).Select(s => s.StringValue).ToList(); + } + rmProps.RoomPhoneNumber = Eisc.StringOutput[JoinMap.ConfigRoomPhoneNumber.JoinNumber].StringValue; rmProps.RoomURI = Eisc.StringOutput[JoinMap.ConfigRoomUri.JoinNumber].StringValue; rmProps.SpeedDials = new List(); + if(rmProps.UiBehavior == null) + { + rmProps.UiBehavior = new EssentialsRoomUiBehaviorConfig(); + } + + rmProps.UiBehavior.DisableActivityButtonsWhileWarmingCooling = Eisc.BooleanOutput[JoinMap.ActivityLockoutOnStateChange.JoinNumber].BoolValue; + + var essentialsAudioCodecKey = Eisc.StringOutput[JoinMap.AudioCodecKey.JoinNumber].StringValue; + var essentialsVideoCodecKey = Eisc.StringOutput[JoinMap.VideoCodecKey.JoinNumber].StringValue; // This MAY need a check if (Eisc.BooleanOutput[JoinMap.ActivityPhoneCallEnable.JoinNumber].BoolValue) - { - rmProps.AudioCodecKey = "audioCodec"; + { + rmProps.AudioCodecKey = string.IsNullOrEmpty(essentialsAudioCodecKey) ? "audioCodec" : essentialsAudioCodecKey; } if (Eisc.BooleanOutput[JoinMap.ActivityVideoCallEnable.JoinNumber].BoolValue) - { - rmProps.VideoCodecKey = "videoCodec"; + { + rmProps.VideoCodecKey = string.IsNullOrEmpty(essentialsVideoCodecKey) ? "videoCodec" : essentialsVideoCodecKey; } // volume control names @@ -530,7 +557,7 @@ private void LoadConfigValues() if (co.Devices == null) co.Devices = new List(); - // clear out previous SIMPL devices + // clear out previous SIMPL devices co.Devices.RemoveAll(d => d.Key.StartsWith("source-", StringComparison.OrdinalIgnoreCase) || d.Key.Equals("audioCodec", StringComparison.OrdinalIgnoreCase) @@ -636,7 +663,7 @@ private void LoadConfigValues() // Build "audioCodec" config if we need if (!string.IsNullOrEmpty(rmProps.AudioCodecKey)) - { + { var acFavs = new List(); for (uint i = 0; i < 4; i++) { @@ -849,9 +876,7 @@ private void CreateDestinationList(BasicConfig co) /// Iterates device config and adds messengers as neede for each device type /// private void SetupDeviceMessengers() - { - DeviceMessengers = new Dictionary(); - + { try { foreach (var device in ConfigReader.ConfigObject.Devices) @@ -895,9 +920,7 @@ private void SetupDeviceMessengers() if (messenger != null) { - DeviceManager.AddDevice(messenger); - DeviceMessengers.Add(device.Key, messenger); - messenger.RegisterWithAppServer(Parent); + Parent.AddDeviceMessenger(messenger); } else { @@ -915,13 +938,63 @@ private void SetupDeviceMessengers() { var camDevice = dev as CameraBase; Debug.Console(1, this, "Adding CameraBaseMessenger for device: {0}", dev.Key); - var cameraMessenger = new CameraBaseMessenger(device.Key + "-" + Parent.Key, camDevice, + var messenger = new CameraBaseMessenger(device.Key + "-" + Parent.Key, camDevice, "/device/" + device.Key); - DeviceMessengers.Add(device.Key, cameraMessenger); - DeviceManager.AddDevice(cameraMessenger); - cameraMessenger.RegisterWithAppServer(Parent); + Parent.AddDeviceMessenger(messenger); continue; } + + if (dev is ZoomRoom) + { + var zoomDevice = dev as ZoomRoom; + + Debug.Console(1, this, "Adding ZoomRoomMessenger for device: {0}", dev.Key); + + var zoomMessenger = new ZoomRoomMessenger(device.Key + "-" + Parent.Key, zoomDevice, "/device/" + dev.Key); + Parent.AddDeviceMessenger(zoomMessenger); + continue; + } + + if(dev is VideoCodecBase) + { + var vcBase = dev as VideoCodecBase; + + var messenger = new VideoCodecBaseMessenger(dev.Key + "-" + Parent.Key, vcBase, string.Format("/devices/{0}", dev.Key)); + Parent.AddDeviceMessenger(messenger); + continue; + } + + if(dev is AudioCodecBase) + { + var acBase = dev as AudioCodecBase; + + var messenger = new AudioCodecBaseMessenger(dev.Key + "-" + Parent.Key, acBase, string.Format("/devices/{0}", dev.Key)); + Parent.AddDeviceMessenger(messenger); + continue; + } + + if (dev is LightingBase) + { + var deviceKey = device.Key; + var lightingDevice = dev as LightingBase; + Debug.Console(1, this, "Adding LightingBaseMessenger for device: {0}", deviceKey); + var messenger = new LightingBaseMessenger(deviceKey + "-" + Parent.Key, + lightingDevice, string.Format("/device/{0}", deviceKey)); + Parent.AddDeviceMessenger(messenger); + continue; + } + + if (dev is ShadeBase) + { + var deviceKey = device.Key; + var shadeDevice = dev as ShadeBase; + Debug.Console(1, this, "Adding ShadeBaseMessenger for device: {0}", deviceKey); + var messenger = new ShadeBaseMessenger(deviceKey + "-" + Parent.Key, + shadeDevice, string.Format("/device/{0}", deviceKey)); + Parent.AddDeviceMessenger(messenger); + continue; + } + } } } @@ -935,7 +1008,7 @@ private void SetupDeviceMessengers() /// /// /// - private void SendFullStatus() + private void SendFullStatus(string id) { if (ConfigIsLoaded) { @@ -977,17 +1050,42 @@ private void SendFullStatus() NumberOfAuxFaders = Eisc.UShortInput[JoinMap.NumberOfAuxFaders.JoinNumber].UShortValue }; - // TODO: Add property to status message to indicate if advanced sharing is supported and if users can change share mode + var roomConfig = GetRoomConfiguration(ConfigReader.ConfigObject); - PostStatus(new + var state = new RoomStateMessage { - activityMode = GetActivityMode(), - isOn = Eisc.BooleanOutput[JoinMap.RoomIsOn.JoinNumber].BoolValue, - selectedSourceKey = Eisc.StringOutput[JoinMap.CurrentSourceKey.JoinNumber].StringValue, - volumes, - supportsAdvancedSharing = Eisc.BooleanOutput[JoinMap.SupportsAdvancedSharing.JoinNumber].BoolValue, - userCanChangeShareMode = Eisc.BooleanOutput[JoinMap.UserCanChangeShareMode.JoinNumber].BoolValue, - }); + Configuration = roomConfig, + ActivityMode = GetActivityMode(), + IsOn = Eisc.BooleanOutput[JoinMap.RoomIsOn.JoinNumber].BoolValue, + IsWarmingUp = Eisc.BooleanOutput[JoinMap.IsWarming.JoinNumber].BoolValue, + IsCoolingDown = Eisc.BooleanOutput[JoinMap.IsCooling.JoinNumber].BoolValue, + SelectedSourceKey = Eisc.StringOutput[JoinMap.CurrentSourceKey.JoinNumber].StringValue, + Volumes = volumes, + Key = ConfigReader.ConfigObject.Rooms[0].Key, + AdvancedSharingActive = Eisc.BooleanOutput[_directRouteMessenger.JoinMap.AdvancedSharingModeFb.JoinNumber].BoolValue, + SupportsAdvancedSharing = Eisc.BooleanOutput[JoinMap.SupportsAdvancedSharing.JoinNumber].BoolValue, + UserCanChangeShareMode = Eisc.BooleanOutput[JoinMap.UserCanChangeShareMode.JoinNumber].BoolValue + }; + + var vtcDev = DeviceManager.GetDeviceForKey(roomConfig.VideoCodecKey) as VideoCodecBase; + + if (vtcDev != null) + { + state.IsInCall = vtcDev.IsInCall; + } + else if (_vtcMessenger != null) + { + state.IsInCall = Eisc.BooleanOutput[_vtcMessenger.JoinMap.HookState.JoinNumber].BoolValue; + } + + var messageObject = new MobileControlResponseMessage + { + Type = MessagePath, + ClientId = id, + Content = state, + }; + + PostStatusMessage(messageObject); } else { @@ -1016,11 +1114,7 @@ private int GetActivityMode() /// The contents of the content object private void PostStatus(object contentObject) { - Parent.SendMessageObject(new - { - type = "/room/room1/status/", - content = contentObject - }); + Parent.SendMessageObject(contentObject); } /// @@ -1100,5 +1194,114 @@ protected override void UserCodeChange() Eisc.StringInput[JoinMap.QrCodeUrl.JoinNumber].StringValue = QrCodeUrl; } + + private RoomConfiguration GetRoomConfiguration(EssentialsConfig config) + { + var roomConfiguration = new RoomConfiguration(); + + if(config.Rooms.Count ==0 ) + { + Debug.Console(0, this, "No SIMPL Rooms configured"); + + return roomConfiguration; + } + + if (config.Rooms[0].Properties == null) + { + Debug.Console(0, this, "Room Properties Missing."); + return roomConfiguration; + } + + var properties = config.Rooms[0].Properties.ToObject(); + + if(properties == null) + { + Debug.Console(0, this, "Unable to convert properties"); + return roomConfiguration; + } + + roomConfiguration.HelpMessage = properties.HelpMessage; + + if (!string.IsNullOrEmpty(properties.VideoCodecKey)) //has video codec + { + roomConfiguration.HasVideoConferencing = true; + roomConfiguration.VideoCodecKey = properties.VideoCodecKey; + + var vcDev = DeviceManager.GetDeviceForKey(properties.VideoCodecKey); + + roomConfiguration.VideoCodecIsZoomRoom = vcDev != null && vcDev is ZoomRoom; + } + + roomConfiguration.UiBehavior = properties.UiBehavior; + + if (!string.IsNullOrEmpty(properties.AudioCodecKey)) + { + roomConfiguration.HasAudioConferencing = true; + roomConfiguration.AudioCodecKey = properties.AudioCodecKey; + } + + if (properties.Environment.Enabled) + { + roomConfiguration.HasEnvironmentalControls = true; + + var dev = properties.Environment.DeviceKeys + .Select(k => DeviceManager.GetDeviceForKey(k)) + .Select(d => + { + if (d != null && (d is LightingBase || d is ShadeBase || d is ShadeController)) + { + return d; + } else + { + return null; + } + }); + + var shadeConfigs = dev + .Where(d => d is ShadeBase) + .Cast() + .Select(d => new EnvironmentalDeviceConfiguration(d.Key, eEnvironmentalDeviceTypes.Shade)); + var shadeControllerConfigs = dev + .Where(d => d is ShadeController) + .Cast() + .Select(d => new EnvironmentalDeviceConfiguration(d.Key, eEnvironmentalDeviceTypes.ShadeController)); + var lightingConfigs = dev + .Where(d => d is LightingBase) + .Cast() + .Select(d => new EnvironmentalDeviceConfiguration(d.Key, eEnvironmentalDeviceTypes.Lighting)); + + roomConfiguration.EnvironmentalDevices = shadeConfigs.Concat(shadeControllerConfigs).Concat(lightingConfigs).ToList(); + } + + if (!string.IsNullOrEmpty(properties.DefaultDisplayKey)) + { + roomConfiguration.DefaultDisplayKey = properties.DefaultDisplayKey; + } + + if (!string.IsNullOrEmpty(properties.DestinationListKey)) //assuming having a destination list means having multiple destinations + { + Dictionary destList; + + if(config.DestinationLists.TryGetValue(properties.DestinationListKey, out destList)) + { + roomConfiguration.DisplayKeys = destList.Values.Select(dl => dl.SinkKey).ToList(); + } + } + + var sourceList = ConfigReader.ConfigObject.GetSourceListForKey(properties.SourceListKey); + + if (sourceList != null) + { + roomConfiguration.SourceList = sourceList; + roomConfiguration.HasRoutingControls = true; + + roomConfiguration.HasSetTopBoxControls = sourceList.Values.Any(sl => sl.SourceDevice is IRSetTopBoxBase); + + roomConfiguration.HasCameraControls = sourceList.Values.Any(sl => sl.SourceDevice is CameraBase); + } + + + return roomConfiguration; + } } } \ No newline at end of file diff --git a/3-series/SIMPLJoinMaps/MobileControlSIMPLRoomJoinMap.cs b/3-series/SIMPLJoinMaps/MobileControlSIMPLRoomJoinMap.cs index 5702e1d..a84fa1a 100644 --- a/3-series/SIMPLJoinMaps/MobileControlSIMPLRoomJoinMap.cs +++ b/3-series/SIMPLJoinMaps/MobileControlSIMPLRoomJoinMap.cs @@ -3,11 +3,11 @@ namespace PepperDash.Essentials.AppServer { -// ReSharper disable once InconsistentNaming + // ReSharper disable once InconsistentNaming public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced { [JoinName("QrCodeUrl")] public JoinDataComplete QrCodeUrl = - new JoinDataComplete(new JoinData {JoinNumber = 403, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 403, JoinSpan = 1 }, new JoinMetadata { Description = "QR Code URL", @@ -26,7 +26,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("MasterVolume")] public JoinDataComplete MasterVolume = - new JoinDataComplete(new JoinData {JoinNumber = 1, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 1, JoinSpan = 1 }, new JoinMetadata { Description = "Master Volume Mute Toggle/FB/Level/Label", @@ -35,7 +35,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("VolumeJoinStart")] public JoinDataComplete VolumeJoinStart = - new JoinDataComplete(new JoinData {JoinNumber = 2, JoinSpan = 8}, + new JoinDataComplete(new JoinData { JoinNumber = 2, JoinSpan = 8 }, new JoinMetadata { Description = "Volume Mute Toggle/FB/Level/Label", @@ -44,7 +44,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("PrivacyMute")] public JoinDataComplete PrivacyMute = - new JoinDataComplete(new JoinData {JoinNumber = 12, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 12, JoinSpan = 1 }, new JoinMetadata { Description = "Privacy Mute Toggle/FB", @@ -53,7 +53,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("PromptForCode")] public JoinDataComplete PromptForCode = - new JoinDataComplete(new JoinData {JoinNumber = 41, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 41, JoinSpan = 1 }, new JoinMetadata { Description = "Prompt User for Code", @@ -62,7 +62,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("ClientJoined")] public JoinDataComplete ClientJoined = - new JoinDataComplete(new JoinData {JoinNumber = 42, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 42, JoinSpan = 1 }, new JoinMetadata { Description = "Client Joined", @@ -91,7 +91,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("ActivityShare")] public JoinDataComplete ActivityShare = - new JoinDataComplete(new JoinData {JoinNumber = 51, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 51, JoinSpan = 1 }, new JoinMetadata { Description = "Activity Share", @@ -100,7 +100,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("ActivityPhoneCall")] public JoinDataComplete ActivityPhoneCall = - new JoinDataComplete(new JoinData {JoinNumber = 52, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 52, JoinSpan = 1 }, new JoinMetadata { Description = "Activity Phone Call", @@ -109,7 +109,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("ActivityVideoCall")] public JoinDataComplete ActivityVideoCall = - new JoinDataComplete(new JoinData {JoinNumber = 53, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 53, JoinSpan = 1 }, new JoinMetadata { Description = "Activity Video Call", @@ -118,7 +118,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("ShutdownPromptDuration")] public JoinDataComplete ShutdownPromptDuration = - new JoinDataComplete(new JoinData {JoinNumber = 61, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 61, JoinSpan = 1 }, new JoinMetadata { Description = "Shutdown Cancel", @@ -127,7 +127,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("ShutdownCancel")] public JoinDataComplete ShutdownCancel = - new JoinDataComplete(new JoinData {JoinNumber = 61, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 61, JoinSpan = 1 }, new JoinMetadata { Description = "Shutdown Cancel", @@ -136,7 +136,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("ShutdownEnd")] public JoinDataComplete ShutdownEnd = - new JoinDataComplete(new JoinData {JoinNumber = 62, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 62, JoinSpan = 1 }, new JoinMetadata { Description = "Shutdown End", @@ -145,7 +145,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); [JoinName("ShutdownStart")] public JoinDataComplete ShutdownStart = - new JoinDataComplete(new JoinData {JoinNumber = 63, JoinSpan = 1}, + new JoinDataComplete(new JoinData { JoinNumber = 63, JoinSpan = 1 }, new JoinMetadata { Description = "Shutdown Start", @@ -153,6 +153,35 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + [JoinName("isWarming")] + public JoinDataComplete IsWarming = + new JoinDataComplete(new JoinData { JoinNumber = 64, JoinSpan = 1 }, + new JoinMetadata + { + Description = "Room is powering on", + JoinCapabilities = eJoinCapabilities.FromSIMPL, + JoinType = eJoinType.Digital + }); + + [JoinName("isCooling")] + public JoinDataComplete IsCooling = + new JoinDataComplete(new JoinData { JoinNumber = 65, JoinSpan = 1 }, + new JoinMetadata + { + Description = "Room is powering off", + JoinCapabilities = eJoinCapabilities.FromSIMPL, + JoinType = eJoinType.Digital + }); + + [JoinName("EnableActivityLockoutOnPowerStateChange")] + public JoinDataComplete ActivityLockoutOnStateChange = + new JoinDataComplete(new JoinData { JoinNumber = 64, JoinSpan = 1 }, new JoinMetadata + { + Description = "Disable Activity Buttons on Power On/Off. High = disable buttons", + JoinCapabilities = eJoinCapabilities.FromSIMPL, + JoinType = eJoinType.Digital + }); + [JoinName("SourceHasChanged")] public JoinDataComplete SourceHasChanged = new JoinDataComplete(new JoinData {JoinNumber = 71, JoinSpan = 1}, new JoinMetadata @@ -176,7 +205,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced new JoinDataComplete(new JoinData {JoinNumber = 100, JoinSpan = 1}, new JoinMetadata { - Description = "Config is local to Essentials", + Description = "Use Essentials Configuration", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); @@ -294,7 +323,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced new JoinDataComplete(new JoinData { JoinNumber = 500, JoinSpan = 1 }, new JoinMetadata { - Description = "Config info from SIMPL is ready", + Description = "MC Is Online and authorized", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); @@ -303,7 +332,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced new JoinDataComplete(new JoinData {JoinNumber = 501, JoinSpan = 1}, new JoinMetadata { - Description = "Config info from SIMPL is ready", + Description = "SIPML Configuration is ready", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinType = eJoinType.Digital }); @@ -313,7 +342,7 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced new JoinDataComplete(new JoinData { JoinNumber = 501, JoinSpan = 1 }, new JoinMetadata { - Description = "Config info from SIMPL is ready", + Description = "MC is ready for SIMPL Config", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinType = eJoinType.Digital }); @@ -345,6 +374,16 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced JoinType = eJoinType.Digital }); + [JoinName("LockoutActivityButtonsOnStateChange")] + public JoinDataComplete LockoutActivityButtonsOnStateChange = + new JoinDataComplete(new JoinData { JoinNumber = 508, JoinSpan = 1 }, + new JoinMetadata + { + Description = "Lockout Activity buttons when Room power State changes", + JoinCapabilities = eJoinCapabilities.FromSIMPL, + JoinType = eJoinType.Digital + }); + [JoinName("SourceShareDisableJoinStart")] public JoinDataComplete SourceShareDisableJoinStart = new JoinDataComplete(new JoinData {JoinNumber = 601, JoinSpan = 20}, @@ -522,6 +561,36 @@ public class MobileControlSIMPLRoomJoinMap : JoinMapBaseAdvanced }); #endregion + [JoinName("EssentialsVideoCodecKey")] + public JoinDataComplete VideoCodecKey = + new JoinDataComplete(new JoinData { JoinNumber = 51, JoinSpan = 1 }, + new JoinMetadata + { + Description = "Essentials Video Codec Device Name", + JoinCapabilities = eJoinCapabilities.FromSIMPL, + JoinType = eJoinType.Serial, + }); + + [JoinName("EssentialsAudioCodecKey")] + public JoinDataComplete AudioCodecKey = + new JoinDataComplete(new JoinData { JoinNumber = 52, JoinSpan = 1 }, + new JoinMetadata + { + Description = "Essentials Audio Codec Device Name", + JoinCapabilities = eJoinCapabilities.FromSIMPL, + JoinType = eJoinType.Serial, + }); + + [JoinName("EnvironmentalDeviceKey")] + public JoinDataComplete EnvironmentalDevicesKey = + new JoinDataComplete(new JoinData { JoinNumber = 61, JoinSpan = 10 }, + new JoinMetadata + { + Description = "Essentials Video Codec Device Name", + JoinCapabilities = eJoinCapabilities.FromSIMPL, + JoinType = eJoinType.Serial, + }); + public MobileControlSIMPLRoomJoinMap(uint joinStart) : base(joinStart, typeof(MobileControlSIMPLRoomJoinMap)) { diff --git a/3-series/epi-essentials-mobile-control.nuspec b/3-series/epi-essentials-mobile-control.nuspec index aa8e8ce..059e658 100644 --- a/3-series/epi-essentials-mobile-control.nuspec +++ b/3-series/epi-essentials-mobile-control.nuspec @@ -5,7 +5,7 @@ 2.0.2 Mobile Control Essentials Plugin PepperDash Technologies - pepperdash + PepperDash-Engineering false MIT https://github.com/PepperDash-Engineering/epi-essentials-mobile-control diff --git a/4-series/epi-essentials-mobile-control.nuspec b/4-series/epi-essentials-mobile-control.nuspec index 538733a..13004de 100644 --- a/4-series/epi-essentials-mobile-control.nuspec +++ b/4-series/epi-essentials-mobile-control.nuspec @@ -5,7 +5,7 @@ 2.0.2 Mobile Control Essentials Plugin PepperDash Technologies - pepperdash + PepperDash-Engineering false MIT https://github.com/PepperDash-Engineering/epi-essentials-mobile-control