diff --git a/PepperDashEssentials/AppServer/RoomBridges/MobileControlDdvc01RoomBridge.cs b/PepperDashEssentials/AppServer/RoomBridges/MobileControlSIMPLRoomBridge.cs
similarity index 98%
rename from PepperDashEssentials/AppServer/RoomBridges/MobileControlDdvc01RoomBridge.cs
rename to PepperDashEssentials/AppServer/RoomBridges/MobileControlSIMPLRoomBridge.cs
index b85431fb..d93da71c 100644
--- a/PepperDashEssentials/AppServer/RoomBridges/MobileControlDdvc01RoomBridge.cs
+++ b/PepperDashEssentials/AppServer/RoomBridges/MobileControlSIMPLRoomBridge.cs
@@ -10,6 +10,7 @@ using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using PepperDash.Core;
+using PepperDash.Essentials.AppServer;
using PepperDash.Essentials.AppServer.Messengers;
using PepperDash.Essentials.Core;
using PepperDash.Essentials.Core.Config;
@@ -186,15 +187,7 @@ namespace PepperDash.Essentials.Room.MobileControl
///
/// 402
///
- public const uint ServerUrl = 402;
- ///
- /// 512
- ///
- public const uint RoomSpeedDialNamesJoinStart = 512;
- ///
- /// 516
- ///
- public const uint RoomSpeedDialNumberssJoinStart = 516;
+ public const uint ServerUrl = 402;
///
/// 601
///
@@ -228,6 +221,8 @@ namespace PepperDash.Essentials.Room.MobileControl
public ThreeSeriesTcpIpEthernetIntersystemCommunications EISC { get; private set; }
+ public MobileControlSIMPLRoomJoinMap JoinMap { get; private set; }
+
///
///
///
@@ -263,8 +258,18 @@ namespace PepperDash.Essentials.Room.MobileControl
if (reg != Crestron.SimplSharpPro.eDeviceRegistrationUnRegistrationResponse.Success)
Debug.Console(0, this, "Cannot connect EISC at IPID {0}: \r{1}", ipId, reg);
+ JoinMap = new MobileControlSIMPLRoomJoinMap();
+
+ // TODO: Possibly set up alternate constructor or take in joinMapKey and joinStart properties in constructor
+
+
+ JoinMap.OffsetJoinNumbers(1);
+
SourceBridge = new MobileControlDdvc01DeviceBridge(key + "-sourceBridge", "DDVC01 source bridge", EISC);
DeviceManager.AddDevice(SourceBridge);
+
+
+
}
catch (Exception)
{
diff --git a/PepperDashEssentials/AppServer/SIMPLJoinMaps/MobileControlSIMPLRoomJoinMap.cs b/PepperDashEssentials/AppServer/SIMPLJoinMaps/MobileControlSIMPLRoomJoinMap.cs
new file mode 100644
index 00000000..bcea7845
--- /dev/null
+++ b/PepperDashEssentials/AppServer/SIMPLJoinMaps/MobileControlSIMPLRoomJoinMap.cs
@@ -0,0 +1,124 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using Crestron.SimplSharp;
+
+using PepperDash.Essentials.Core;
+
+
+namespace PepperDash.Essentials.AppServer
+{
+ public class MobileControlSIMPLRoomJoinMap : JoinMapBase
+ {
+ public const string ConfigIsLocal = "ConfigIsLocal";
+ public const string RoomIsOn = "RoomIsOn";
+ public const string PrivacyMute = "PrivacyMute";
+ public const string PromptForCode = "PromptForCode";
+ public const string ClientJoined = "ClientJoined";
+ public const string ActivityShare = "ActivityShare";
+ public const string ActivityPhoneCall = "ActivityPhoneCall";
+ public const string ActivtyVideoCall = "ActivityVideoCall";
+ public const string MasterVolume = "MasterVolumeMute";
+ public const string VolumeJoinStart = "VolumeMutesJoinStart";
+ public const string ShutdownCancel = "ShutdownCancel";
+ public const string ShutdownEnd = "ShutdownEnd";
+ public const string ShutdownStart = "ShutdownStart";
+ public const string SourceHasChanged = "SourceHasChanged";
+ public const string SpeedDialVisibleStartJoin = "SpeedDialVisibleStartJoin";
+ public const string ConfigIsReady = "ConfigIsReady";
+ public const string HideVideoConfRecents = "HideVideoConfRecents";
+ public const string ShowCameraWhenNotInCall = "ShowCameraWhenNotInCall";
+ public const string UseSourceEnabled = "UseSourceEnabled";
+ public const string SourceShareDisableJoinStart = "SourceShareDisableJoinStart";
+ public const string SourceIsEnabledJoinStart = "SourceIsEnabledJoinStart";
+
+ //public const string MasterVolumeLevel = "MasterVolumeLevel";
+ public const string VolumeSlidersJoinStart = "VolumeSlidersJoinStart";
+ public const string ShutdownPromptDuration = "ShutdownPromptDuration";
+ public const string NumberOfAuxFaders = "NumberOfAuxFaders";
+
+ public const string VolumeSliderNamesJoinStart = "VolumeSliderNamesJoinStart";
+ public const string SelectedSourceKey = "SelectedSourceKey";
+ public const string SpeedDialNameStartJoin = "SpeedDialNameStartJoin";
+ public const string SpeedDialNumberStartJoin = "SpeedDialNumberStartJoin";
+ public const string ConfigRoomName = "ConfigRoomName";
+ public const string ConfigHelpMessage = "ConfigHelpMessage";
+ public const string ConfigHelpNumber = "ConfigHelpNumber";
+ public const string ConfigRoomPhoneNumber = "ConfigRoomPhoneNumber";
+ public const string ConfigRoomURI = "ConfigRoomURI";
+ public const string UserCodeToSystem = "UserCodeToSystem";
+ public const string ServerUrl = "ServerUrl";
+ public const string RoomSpeedDialNamesJoinStart = "RoomSpeedDialNamesJoinStart";
+ public const string RoomSpeedDialNumberssJoinStart = "RoomSpeedDialNumberssJoinStart";
+ public const string SourceNameJoinStart = "SourceNameJoinStart";
+ public const string SourceIconJoinStart = "SourceIconJoinStart";
+ public const string SourceKeyJoinStart = "SourceKeyJoinStart";
+ public const string SourceTypeJoinStart = "SourceTypeJoinStart";
+ public const string CameraNearNameStart = "CameraNearNameStart";
+ public const string CameraFarName = "CameraFarName";
+
+ public MobileControlSIMPLRoomJoinMap()
+ {
+ Joins.Add(ConfigIsLocal, new JoinMetadata() { JoinNumber = 100, Label = "Config is local to Essentials", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(RoomIsOn, new JoinMetadata() { JoinNumber = 301, Label = "Room Is On", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(PrivacyMute, new JoinMetadata() { JoinNumber = 12, Label = "Privacy Mute Toggle/FB", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(PromptForCode, new JoinMetadata() { JoinNumber = 41, Label = "Prompt User for Code", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ClientJoined, new JoinMetadata() { JoinNumber = 42, Label = "Client Joined", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ActivityShare, new JoinMetadata() { JoinNumber = 51, Label = "Activity Share", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ActivityPhoneCall, new JoinMetadata() { JoinNumber = 52, Label = "Activity Phone Call", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ActivtyVideoCall, new JoinMetadata() { JoinNumber = 53, Label = "Activity Video Call", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(MasterVolume, new JoinMetadata() { JoinNumber = 1, Label = "Master Volume Mute Toggle/FB/Level/Label", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.DigitalAnalogSerial });
+ Joins.Add(VolumeJoinStart, new JoinMetadata() { JoinNumber = 2, Label = "Volume Mute Toggle/FB/Level/Label", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 9, JoinType = eJoinType.DigitalAnalogSerial });
+ Joins.Add(ShutdownCancel, new JoinMetadata() { JoinNumber = 61, Label = "Shutdown Cancel", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ShutdownEnd, new JoinMetadata() { JoinNumber = 62, Label = "Shutdown End", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ShutdownStart, new JoinMetadata() { JoinNumber = 63, Label = "ShutdownStart", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(SourceHasChanged, new JoinMetadata() { JoinNumber = 71, Label = "Source Changed", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ // Possibly move these to Audio Codec Messenger
+ Joins.Add(SpeedDialVisibleStartJoin, new JoinMetadata() { JoinNumber = 261, Label = "Speed Dial Visible", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 10, JoinType = eJoinType.Digital });
+ Joins.Add(ConfigIsReady, new JoinMetadata() { JoinNumber = 501, Label = "Config info from SIMPL is ready", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(HideVideoConfRecents, new JoinMetadata() { JoinNumber = 502, Label = "Hide Video Conference Recents", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ShowCameraWhenNotInCall, new JoinMetadata() { JoinNumber = 503, Label = "Show camera when not in call", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(UseSourceEnabled, new JoinMetadata() { JoinNumber = 504, Label = "Use Source Enabled Joins", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(SourceShareDisableJoinStart, new JoinMetadata() { JoinNumber = 601, Label = "Source is not sharable", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Digital });
+ Joins.Add(SourceIsEnabledJoinStart, new JoinMetadata() { JoinNumber = 621, Label = "Source is enabled", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Digital });
+
+
+ Joins.Add(ShutdownPromptDuration, new JoinMetadata() { JoinNumber = 61, Label = "Shutdown Prompt Timer Duration", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Analog });
+ Joins.Add(NumberOfAuxFaders, new JoinMetadata() { JoinNumber = 101, Label = "Number of Auxilliary Faders", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Analog });
+
+
+ Joins.Add(SelectedSourceKey, new JoinMetadata() { JoinNumber = 71, Label = "Key of selected source", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+
+ // Possibly move these to Audio Codec Messenger
+ Joins.Add(SpeedDialNameStartJoin, new JoinMetadata() { JoinNumber = 241, Label = "Speed Dial names", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 10, JoinType = eJoinType.Serial });
+ Joins.Add(SpeedDialNumberStartJoin, new JoinMetadata() { JoinNumber = 251, Label = "Speed Dial numbers", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 10, JoinType = eJoinType.Serial });
+ Joins.Add(UserCodeToSystem, new JoinMetadata() { JoinNumber = 401, Label = "User Ccde", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+ Joins.Add(ServerUrl, new JoinMetadata() { JoinNumber = 402, Label = "Server URL", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+ Joins.Add(ConfigRoomName, new JoinMetadata() { JoinNumber = 501, Label = "Room Nnme", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+ Joins.Add(ConfigHelpMessage, new JoinMetadata() { JoinNumber = 502, Label = "Room help message", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+ Joins.Add(ConfigHelpNumber, new JoinMetadata() { JoinNumber = 503, Label = "Room help number", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+ Joins.Add(ConfigRoomPhoneNumber, new JoinMetadata() { JoinNumber = 504, Label = "Room phone number", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+ Joins.Add(ConfigRoomURI, new JoinMetadata() { JoinNumber = 505, Label = "Room URI", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+ Joins.Add(SourceNameJoinStart, new JoinMetadata() { JoinNumber = 601, Label = "Source Names", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Serial });
+ Joins.Add(SourceIconJoinStart, new JoinMetadata() { JoinNumber = 621, Label = "Source Icons", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Serial });
+ Joins.Add(SourceKeyJoinStart, new JoinMetadata() { JoinNumber = 641, Label = "Source Keys", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Serial });
+ Joins.Add(SourceTypeJoinStart, new JoinMetadata() { JoinNumber = 661, Label = "Source Types", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Serial });
+
+ Joins.Add(CameraNearNameStart, new JoinMetadata() { JoinNumber = 761, Label = "Near End Camera Names", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 10, JoinType = eJoinType.Serial });
+ Joins.Add(CameraNearNameStart, new JoinMetadata() { JoinNumber = 770, Label = "Far End Camera Name", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Serial });
+ }
+
+ public override void OffsetJoinNumbers(uint joinStart)
+ {
+ var joinOffset = joinStart - 1;
+
+ foreach (var join in Joins)
+ {
+ join.Value.JoinNumber = join.Value.JoinNumber + joinOffset;
+ }
+
+ PrintJoinMapInfo();
+ }
+ }
+}
\ No newline at end of file
diff --git a/PepperDashEssentials/Bridges/BridgeBase.cs b/PepperDashEssentials/Bridges/BridgeBase.cs
index 784be59f..5a542fa0 100644
--- a/PepperDashEssentials/Bridges/BridgeBase.cs
+++ b/PepperDashEssentials/Bridges/BridgeBase.cs
@@ -55,6 +55,8 @@ namespace PepperDash.Essentials.Bridges
{
public EiscApiPropertiesConfig PropertiesConfig { get; private set; }
+ public Dictionary JoinMaps { get; set; }
+
public ThreeSeriesTcpIpEthernetIntersystemCommunications Eisc { get; private set; }
public EiscApi(DeviceConfig dc) :
diff --git a/PepperDashEssentials/Bridges/CameraControllerBridge.cs b/PepperDashEssentials/Bridges/CameraControllerBridge.cs
index badf9ea0..21a9d3eb 100644
--- a/PepperDashEssentials/Bridges/CameraControllerBridge.cs
+++ b/PepperDashEssentials/Bridges/CameraControllerBridge.cs
@@ -15,7 +15,6 @@ namespace PepperDash.Essentials.Bridges
{
public static class CameraControllerApiExtensions
{
-
public static void LinkToApi(this PepperDash.Essentials.Devices.Common.Cameras.CameraBase cameraDevice, BasicTriList trilist, uint joinStart, string joinMapKey)
{
CameraControllerJoinMap joinMap = new CameraControllerJoinMap();
@@ -31,13 +30,13 @@ namespace PepperDash.Essentials.Bridges
Debug.Console(0, "Linking to Bridge Type {0}", cameraDevice.GetType().Name.ToString());
var commMonitor = cameraDevice as ICommunicationMonitor;
- commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
+ commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.GetJoinForKey(CameraControllerJoinMap.IsOnline)]);
var ptzCamera = cameraDevice as IHasCameraPtzControl;
if (ptzCamera != null)
{
- trilist.SetBoolSigAction(joinMap.Left, (b) =>
+ trilist.SetBoolSigAction(joinMap.GetJoinForKey(CameraControllerJoinMap.PanLeft), (b) =>
{
if (b)
{
@@ -48,7 +47,7 @@ namespace PepperDash.Essentials.Bridges
ptzCamera.PanStop();
}
});
- trilist.SetBoolSigAction(joinMap.Right, (b) =>
+ trilist.SetBoolSigAction(joinMap.GetJoinForKey(CameraControllerJoinMap.PanRight), (b) =>
{
if (b)
{
@@ -60,7 +59,7 @@ namespace PepperDash.Essentials.Bridges
}
});
- trilist.SetBoolSigAction(joinMap.Up, (b) =>
+ trilist.SetBoolSigAction(joinMap.GetJoinForKey(CameraControllerJoinMap.TiltUp), (b) =>
{
if (b)
{
@@ -71,7 +70,7 @@ namespace PepperDash.Essentials.Bridges
ptzCamera.TiltStop();
}
});
- trilist.SetBoolSigAction(joinMap.Down, (b) =>
+ trilist.SetBoolSigAction(joinMap.GetJoinForKey(CameraControllerJoinMap.TiltDown), (b) =>
{
if (b)
{
@@ -83,7 +82,7 @@ namespace PepperDash.Essentials.Bridges
}
});
- trilist.SetBoolSigAction(joinMap.ZoomIn, (b) =>
+ trilist.SetBoolSigAction(joinMap.GetJoinForKey(CameraControllerJoinMap.ZoomIn), (b) =>
{
if (b)
{
@@ -95,7 +94,7 @@ namespace PepperDash.Essentials.Bridges
}
});
- trilist.SetBoolSigAction(joinMap.ZoomOut, (b) =>
+ trilist.SetBoolSigAction(joinMap.GetJoinForKey(CameraControllerJoinMap.ZoomOut), (b) =>
{
if (b)
{
@@ -108,27 +107,57 @@ namespace PepperDash.Essentials.Bridges
});
}
- if (cameraDevice.GetType().Name.ToString().ToLower() == "cameravisca")
+ if (cameraDevice is IPower)
{
- var viscaCamera = cameraDevice as PepperDash.Essentials.Devices.Common.Cameras.CameraVisca;
- trilist.SetSigTrueAction(joinMap.PowerOn, () => viscaCamera.PowerOn());
- trilist.SetSigTrueAction(joinMap.PowerOff, () => viscaCamera.PowerOff());
+ var powerCamera = cameraDevice as IPower;
+ trilist.SetSigTrueAction(joinMap.GetJoinForKey(CameraControllerJoinMap.PowerOn), () => powerCamera.PowerOn());
+ trilist.SetSigTrueAction(joinMap.GetJoinForKey(CameraControllerJoinMap.PowerOff), () => powerCamera.PowerOff());
+
+ powerCamera.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.GetJoinForKey(CameraControllerJoinMap.PowerOn)]);
+ powerCamera.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.GetJoinForKey(CameraControllerJoinMap.PowerOff)]);
+ }
- viscaCamera.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn]);
- viscaCamera.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff]);
+ if (cameraDevice is ICommunicationMonitor)
+ {
+ var monitoredCamera = cameraDevice as ICommunicationMonitor;
+ monitoredCamera.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.GetJoinForKey(CameraControllerJoinMap.IsOnline)]);
+ }
- viscaCamera.CommunicationMonitor.IsOnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline]);
- for (int i = 0; i < joinMap.NumberOfPresets; i++)
+ if (cameraDevice is IHasCameraPresets)
+ {
+ // Set the preset lables when they change
+ var presetsCamera = cameraDevice as IHasCameraPresets;
+ presetsCamera.PresetsListHasChanged += new EventHandler((o, a) =>
+ {
+ for (int i = 1; i <= joinMap.GetJoinForKey(CameraControllerJoinMap.NumberOfPresets); i++)
+ {
+ int tempNum = i - 1;
+
+ string label = "" ;
+
+ var preset = presetsCamera.Presets.FirstOrDefault(p => p.ID.Equals(i));
+
+ if (preset != null)
+ label = preset.Description;
+
+ trilist.SetString((ushort)(joinMap.GetJoinForKey(CameraControllerJoinMap.PresetLabelStart) + tempNum), label);
+ }
+ });
+
+ for (int i = 0; i < joinMap.GetJoinForKey(CameraControllerJoinMap.NumberOfPresets); i++)
{
int tempNum = i;
- trilist.SetSigTrueAction((ushort)(joinMap.PresetRecallOffset + tempNum), () =>
+
+ trilist.SetSigTrueAction((ushort)(joinMap.GetJoinForKey(CameraControllerJoinMap.PresetRecallStart) + tempNum), () =>
{
- viscaCamera.RecallPreset(tempNum);
+ presetsCamera.PresetSelect(tempNum);
+ });
+ trilist.SetSigTrueAction((ushort)(joinMap.GetJoinForKey(CameraControllerJoinMap.PresetSaveStart) + tempNum), () =>
+ {
+ var label = trilist.GetString(joinMap.GetJoinForKey(CameraControllerJoinMap.PresetLabelStart + tempNum));
+
+ presetsCamera.PresetStore(tempNum, label);
});
- trilist.SetSigTrueAction((ushort)(joinMap.PresetSaveOffset + tempNum), () =>
- {
- viscaCamera.SavePreset(tempNum);
- });
}
}
}
diff --git a/PepperDashEssentials/Bridges/JoinMaps/CameraControllerJoinMap.cs b/PepperDashEssentials/Bridges/JoinMaps/CameraControllerJoinMap.cs
index b78ef472..aa86b96d 100644
--- a/PepperDashEssentials/Bridges/JoinMaps/CameraControllerJoinMap.cs
+++ b/PepperDashEssentials/Bridges/JoinMaps/CameraControllerJoinMap.cs
@@ -8,112 +8,70 @@ using PepperDash.Essentials.Core;
namespace PepperDash.Essentials.Bridges
{
+ ///
+ /// Join map for CameraBase devices
+ ///
public class CameraControllerJoinMap : JoinMapBase
{
- public uint IsOnline { get; set; }
- public uint PowerOff { get; set; }
- public uint PowerOn { get; set; }
- public uint Up { get; set; }
- public uint Down { get; set; }
- public uint Left { get; set; }
- public uint Right { get; set; }
- public uint ZoomIn { get; set; }
- public uint ZoomOut { get; set; }
- public uint PresetRecallOffset { get; set; }
- public uint PresetSaveOffset { get; set; }
- public uint NumberOfPresets { get; set; }
-
- public enum eCameraControllerJoinMapKey
- {
- IsOnline,
- PowerOn,
- PowerOff,
- TiltUp,
- TiltDown,
- PanLeft,
- PanRight,
- ZoomIn,
- ZoomOut,
- PresetRecallStart,
- PresetSaveStart,
- PresetLabelStart,
- NumberOfPresets
- }
+ public const string IsOnline = "IsOnline";
+ public const string PowerOff = "PowerOff";
+ public const string PowerOn = "PowerOn";
+ public const string TiltUp = "TiltUp";
+ public const string TiltDown = "TiltDown";
+ public const string PanLeft = "PanLeft";
+ public const string PanRight = "PanRight";
+ public const string ZoomIn = "ZoomIn";
+ public const string ZoomOut = "ZoomOut";
+ public const string PresetRecallStart = "PresetRecallStart";
+ public const string PresetSaveStart = "PresetSaveStart";
+ public const string PresetLabelStart = "PresetReacllStgart";
+ public const string NumberOfPresets = "NumberOfPresets";
public CameraControllerJoinMap()
{
- Joins = new Dictionary();
+ Joins.Add(TiltUp, new JoinMetadata()
+ { JoinNumber = 1, Label = "Tilt Up", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(TiltDown, new JoinMetadata()
+ { JoinNumber = 2, Label = "TiltDown", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(PanLeft, new JoinMetadata()
+ { JoinNumber = 3, Label = "Pan Left", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(PanRight, new JoinMetadata()
+ { JoinNumber = 4, Label = "Pan Right", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ZoomIn, new JoinMetadata()
+ { JoinNumber = 5, Label = "Zoom In", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(ZoomOut, new JoinMetadata()
+ { JoinNumber = 6, Label = "Zoom Out", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.IsOnline.ToString(), new JoinMetadata()
- { JoinNumber = 9, Label = "Is Online", JoinCapabilities = eJoinCapabilities.Read, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.PowerOn.ToString(), new JoinMetadata()
- { JoinNumber = 7, Label = "Power On", JoinCapabilities = eJoinCapabilities.Read | eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.PowerOff.ToString(), new JoinMetadata()
- { JoinNumber = 8, Label = "Power Off", JoinCapabilities = eJoinCapabilities.Read | eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.TiltUp.ToString(), new JoinMetadata()
- { JoinNumber = 1, Label = "Tilt Up", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.TiltDown.ToString(), new JoinMetadata()
- { JoinNumber = 2, Label = "TiltDown", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.PanLeft.ToString(), new JoinMetadata()
- { JoinNumber = 3, Label = "Pan Left", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.PanRight.ToString(), new JoinMetadata()
- { JoinNumber = 4, Label = "Pan Right", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.ZoomIn.ToString(), new JoinMetadata()
- { JoinNumber = 5, Label = "Zoom In", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.ZoomOut.ToString(), new JoinMetadata()
- { JoinNumber = 6, Label = "Zoom Out", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(PowerOn, new JoinMetadata()
+ { JoinNumber = 7, Label = "Power On", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(PowerOff, new JoinMetadata()
+ { JoinNumber = 8, Label = "Power Off", JoinCapabilities = eJoinCapabilities.ToFromSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
+ Joins.Add(IsOnline, new JoinMetadata()
+ { JoinNumber = 9, Label = "Is Online", JoinCapabilities = eJoinCapabilities.ToSIMPL, JoinSpan = 1, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.PresetRecallStart.ToString(), new JoinMetadata()
- { JoinNumber = 11, Label = "Preset Recall Start", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 20, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.PresetLabelStart.ToString(), new JoinMetadata()
- { JoinNumber = 11, Label = "Preset Label Start", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 20, JoinType = eJoinType.Serial });
+ Joins.Add(PresetRecallStart, new JoinMetadata()
+ { JoinNumber = 11, Label = "Preset Recall Start", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Digital });
+ Joins.Add(PresetLabelStart, new JoinMetadata()
+ { JoinNumber = 11, Label = "Preset Label Start", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Serial });
- Joins.Add(eCameraControllerJoinMapKey.PresetSaveStart.ToString(), new JoinMetadata()
- { JoinNumber = 31, Label = "Preset Save Start", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 20, JoinType = eJoinType.Digital });
+ Joins.Add(PresetSaveStart, new JoinMetadata()
+ { JoinNumber = 31, Label = "Preset Save Start", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 20, JoinType = eJoinType.Digital });
- Joins.Add(eCameraControllerJoinMapKey.NumberOfPresets.ToString(), new JoinMetadata()
- { JoinNumber = 5, Label = "Number of Presets", JoinCapabilities = eJoinCapabilities.Write, JoinSpan = 1, JoinType = eJoinType.Analog });
+ Joins.Add(NumberOfPresets, new JoinMetadata()
+ { JoinNumber = 11, Label = "Number of Presets", JoinCapabilities = eJoinCapabilities.FromSIMPL, JoinSpan = 1, JoinType = eJoinType.Analog });
- // Digital
- IsOnline = 9;
- PowerOff = 8;
- PowerOn = 7;
- Up = 1;
- Down = 2;
- Left = 3;
- Right = 4;
- ZoomIn = 5;
- ZoomOut = 6;
- PresetRecallOffset = 10;
- PresetSaveOffset = 30;
-
- // Analog
- NumberOfPresets = 5;
}
public override void OffsetJoinNumbers(uint joinStart)
{
var joinOffset = joinStart - 1;
-
-
+
foreach (var join in Joins)
{
join.Value.JoinNumber = join.Value.JoinNumber + joinOffset;
}
-
-
- IsOnline = IsOnline + joinOffset;
- PowerOff = PowerOff + joinOffset;
- PowerOn = PowerOn + joinOffset;
- Up = Up + joinOffset;
- Down = Down + joinOffset;
- Left = Left + joinOffset;
- Right = Right + joinOffset;
- ZoomIn = ZoomIn + joinOffset;
- ZoomOut = ZoomOut + joinOffset;
- PresetRecallOffset = PresetRecallOffset + joinOffset;
- PresetSaveOffset = PresetSaveOffset + joinOffset;
+ PrintJoinMapInfo();
}
}
}
\ No newline at end of file
diff --git a/PepperDashEssentials/PepperDashEssentials.csproj b/PepperDashEssentials/PepperDashEssentials.csproj
index 3b1679c0..063c3796 100644
--- a/PepperDashEssentials/PepperDashEssentials.csproj
+++ b/PepperDashEssentials/PepperDashEssentials.csproj
@@ -120,6 +120,7 @@
+
@@ -195,7 +196,7 @@
-
+
diff --git a/essentials-framework/Essentials Core/PepperDashEssentialsBase/JoinMaps/JoinMapBase.cs b/essentials-framework/Essentials Core/PepperDashEssentialsBase/JoinMaps/JoinMapBase.cs
index a739511a..6a8dc7ce 100644
--- a/essentials-framework/Essentials Core/PepperDashEssentialsBase/JoinMaps/JoinMapBase.cs
+++ b/essentials-framework/Essentials Core/PepperDashEssentialsBase/JoinMaps/JoinMapBase.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using Crestron.SimplSharp;
+using PepperDash.Core;
using PepperDash.Essentials.Core.Config;
using Newtonsoft.Json;
@@ -42,24 +43,101 @@ namespace PepperDash.Essentials.Core
///
public abstract void OffsetJoinNumbers(uint joinStart);
- public Dictionary Joins { get; set; }
+ ///
+ /// The collection of joins and associated metadata
+ ///
+ public Dictionary Joins = new Dictionary();
+
+ ///
+ /// Prints the join information to console
+ ///
+ public void PrintJoinMapInfo()
+ {
+ Debug.Console(0, "{0}:\n", this.GetType().Name);
+
+ // Get the joins of each type and print them
+ Debug.Console(0, "Digitals:");
+ var digitals = Joins.Where(j => (j.Value.JoinType & eJoinType.Digital) == eJoinType.Digital).ToDictionary(j => j.Key, j => j.Value);
+ PrintJoinList(GetSortedJoins(digitals));
+
+ Debug.Console(0, "Analogs:");
+ var analogs = Joins.Where(j => (j.Value.JoinType & eJoinType.Analog) == eJoinType.Analog).ToDictionary(j => j.Key, j => j.Value);
+ PrintJoinList(GetSortedJoins(analogs));
+
+ Debug.Console(0, "Serials:");
+ var serials = Joins.Where(j => (j.Value.JoinType & eJoinType.Serial) == eJoinType.Serial).ToDictionary(j => j.Key, j => j.Value);
+ PrintJoinList(GetSortedJoins(serials));
+
+ }
+
+ ///
+ /// Returns a sorted list by JoinNumber
+ ///
+ ///
+ ///
+ List> GetSortedJoins(Dictionary joins)
+ {
+ var sortedJoins = joins.ToList();
+
+ sortedJoins.Sort((pair1, pair2) => pair1.Value.JoinNumber.CompareTo(pair2.Value.JoinNumber));
+
+ return sortedJoins;
+ }
+
+ void PrintJoinList(List> joins)
+ {
+ foreach (var join in joins)
+ {
+ Debug.Console(0,
+ @"Join Number: {0} | Label: '{1}' | JoinSpan: '{2}' | Type: '{3}' | Capabilities: '{4}'",
+ join.Value.JoinNumber,
+ join.Value.Label,
+ join.Value.JoinSpan,
+ join.Value.JoinType.ToString(),
+ join.Value.JoinCapabilities.ToString());
+ }
+ }
+
+ ///
+ /// Returns the join number for the join with the specified key
+ ///
+ ///
+ ///
+ public uint GetJoinForKey(string key)
+ {
+ if (Joins.ContainsKey(key))
+ return Joins[key].JoinNumber;
+
+ else return 0;
+ }
+
+
}
///
/// Read = Provides feedback to SIMPL
/// Write = Responds to sig values from SIMPL
///
+ [Flags]
public enum eJoinCapabilities
{
- Read = 1,
- Write = 2
+ None = 0,
+ ToSIMPL = 1,
+ FromSIMPL = 2,
+ ToFromSIMPL = ToSIMPL | FromSIMPL
}
+ [Flags]
public enum eJoinType
{
+ None = 0,
Digital = 1,
Analog = 2,
- Serial = 4
+ Serial = 4,
+ DigitalAnalog = Digital | Analog,
+ DigitalSerial = Digital | Serial,
+ AnalogSerial = Analog | Serial,
+ DigitalAnalogSerial = Digital | Analog | Serial
}
///
@@ -95,7 +173,4 @@ namespace PepperDash.Essentials.Core
}
-
-
-
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraVisca.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraVisca.cs
index bcf6a4f9..3d50079b 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraVisca.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Cameras/CameraVisca.cs
@@ -11,7 +11,7 @@ using Crestron.SimplSharp.Reflection;
namespace PepperDash.Essentials.Devices.Common.Cameras
{
- public class CameraVisca : CameraBase, IHasCameraPtzControl, ICommunicationMonitor, IHasCameraPresets
+ public class CameraVisca : CameraBase, IHasCameraPtzControl, ICommunicationMonitor, IHasCameraPresets, IPower
{
public IBasicCommunication Communication { get; private set; }
public CommunicationGather PortGather { get; private set; }
@@ -135,6 +135,15 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
{
SendBytes(new Byte[] {0x81, 0x01, 0x04, 0x00, 0x03, 0xFF});
}
+
+ public void PowerToggle()
+ {
+ if (PowerIsOnFeedback.BoolValue)
+ PowerOff();
+ else
+ PowerOn();
+ }
+
public void PanLeft()
{
SendPanTiltCommand(new byte[] {0x01, 0x03});
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs
index d0f83115..15d424a2 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/DSP/BiampTesira/BiampTesiraForteDspLevel.cs
@@ -10,6 +10,19 @@ using System.Text.RegularExpressions;
namespace PepperDash.Essentials.Devices.Common.DSP
{
+ public interface IBiampTesiraDspLevelControl : IBasicVolumeWithFeedback
+ {
+ ///
+ /// In BiAmp: Instance Tag, QSC: Named Control, Polycom:
+ ///
+ string ControlPointTag { get; }
+ int Index1 { get; }
+ int Index2 { get; }
+ bool HasMute { get; }
+ bool HasLevel { get; }
+ bool AutomaticUnmuteOnVolumeUp { get; }
+ }
+
public class TesiraForteLevelControl : TesiraForteControlPoint, IBiampTesiraDspLevelControl, IKeyed
{
bool _IsMuted;
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/DSP/DspBase.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/DSP/DspBase.cs
index 36c655d2..cdb832ab 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/DSP/DspBase.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/DSP/DspBase.cs
@@ -49,27 +49,4 @@ namespace PepperDash.Essentials.Devices.Common.DSP
{
}
-
-
- // Main program
- // VTC
- // ATC
- // Mics, unusual
-
- public interface IBiampTesiraDspLevelControl : IBasicVolumeWithFeedback
- {
- ///
- /// In BiAmp: Instance Tag, QSC: Named Control, Polycom:
- ///
- string ControlPointTag { get; }
-#warning I dont think index1 and index2 should be a part of the interface. JTA 2018-07-17
- int Index1 { get; }
- int Index2 { get; }
- bool HasMute { get; }
- bool HasLevel { get; }
- bool AutomaticUnmuteOnVolumeUp { get; }
- }
-
-
-
}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Power Controllers/Digitallogger.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Power Controllers/Digitallogger.cs
index e48a5b7b..5003f795 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Power Controllers/Digitallogger.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Power Controllers/Digitallogger.cs
@@ -103,7 +103,7 @@ namespace PepperDash.Essentials.Devices.Common
});
CircuitIsCritical[circuit] = new BoolFeedback(() =>
{
- if (CircuitStatus[circuit].critical != null)
+ if (CircuitStatus[circuit] != null)
{
return CircuitStatus[circuit].critical;
}
@@ -114,7 +114,7 @@ namespace PepperDash.Essentials.Devices.Common
});
CircuitState[circuit] = new BoolFeedback(() =>
{
- if (CircuitStatus[circuit].state != null)
+ if (CircuitStatus[circuit] != null)
{
return CircuitStatus[circuit].state;
}
diff --git a/essentials-framework/pepperdashcore-builds b/essentials-framework/pepperdashcore-builds
index 45949f09..2d9c383d 160000
--- a/essentials-framework/pepperdashcore-builds
+++ b/essentials-framework/pepperdashcore-builds
@@ -1 +1 @@
-Subproject commit 45949f09bdcf6548be7fdf5c860ea4e3a5cf152d
+Subproject commit 2d9c383db02ef3ef69dee8d42201c746fdfe79ea