diff --git a/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs b/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs index 2df7e390..0948816c 100644 --- a/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs +++ b/Essentials Core/PepperDashEssentialsBase/Constants/CommonCues.cs @@ -54,7 +54,6 @@ namespace PepperDash.Essentials.Core public static readonly Cue SmartApps = new Cue("SmartApps", 143, eCueType.Bool); public static readonly Cue Dvr = new Cue("Dvr", 144, eCueType.Bool); - public static readonly Cue Play = new Cue("Play", 145, eCueType.Bool); public static readonly Cue Pause = new Cue("Pause", 146, eCueType.Bool); public static readonly Cue Stop = new Cue("Stop", 147, eCueType.Bool); @@ -78,13 +77,13 @@ namespace PepperDash.Essentials.Core public static readonly Cue RStep = new Cue("RStep", 165, eCueType.Bool); public static readonly Cue FStep = new Cue("FStep", 166, eCueType.Bool); - public static readonly Cue IsConnected = new Cue("IsConnected", 281, eCueType.Bool); + public static readonly Cue IsConnected = new Cue("IsConnected", 281, eCueType.Bool); public static readonly Cue IsOk = new Cue("IsOk", 282, eCueType.Bool); public static readonly Cue InWarning = new Cue("InWarning", 283, eCueType.Bool); public static readonly Cue InError = new Cue("InError", 284, eCueType.Bool); - public static readonly Cue StatusUnknown = new Cue("StatusUnknown", 285, eCueType.Bool); - - public static readonly Cue VolumeUp = new Cue("VolumeUp", 401, eCueType.Bool); + public static readonly Cue StatusUnknown = new Cue("StatusUnknown", 285, eCueType.Bool); + + public static readonly Cue VolumeUp = new Cue("VolumeUp", 401, eCueType.Bool); public static readonly Cue VolumeDown = new Cue("VolumeDown", 402, eCueType.Bool); public static readonly Cue MuteOn = new Cue("MuteOn", 403, eCueType.Bool); public static readonly Cue MuteOff = new Cue("MuteOff", 404, eCueType.Bool); @@ -110,9 +109,9 @@ namespace PepperDash.Essentials.Core public static readonly Cue Vga2 = new Cue("Vga2", 466, eCueType.Bool); public static readonly Cue Rgb1 = new Cue("Rgb1", 467, eCueType.Bool); public static readonly Cue Rgb2 = new Cue("Rgb2", 468, eCueType.Bool); - public static readonly Cue Antenna = new Cue("Antenna", 469, eCueType.Bool); - - + public static readonly Cue Antenna = new Cue("Antenna", 469, eCueType.Bool); + + public static readonly Cue InCall = new Cue("InCall", 501, eCueType.Bool); } public static class CommonIntCue diff --git a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IPower.cs b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IPower.cs index 863e138d..23b67bc1 100644 --- a/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IPower.cs +++ b/Essentials Core/PepperDashEssentialsBase/DeviceTypeInterfaces/IPower.cs @@ -45,24 +45,4 @@ namespace PepperDash.Essentials.Core dev.PowerIsOnFeedback.UnlinkInputSig(triList.BooleanInput[101]); } } -/* - public static class IFusionPowerExtensions - { - public static void LinkAttributes(this IPower dev, FusionRoom room) - { - dev.PowerIsOnFeedback.LinkInputSig(room.DisplayPowerOn.InputSig); - - room.DisplayPowerOn.OutputSig.SetSigFalseAction(dev.PowerOn); - room.DisplayPowerOff.OutputSig.SetSigFalseAction(dev.PowerOff); - } - - public static void UnlinkAttributes(this IPower dev, FusionRoom room) - { - dev.PowerIsOnFeedback.UnlinkInputSig(room.DisplayPowerOn.InputSig); - - room.DisplayPowerOn.OutputSig.SetSigFalseAction(null); - room.DisplayPowerOff.OutputSig.SetSigFalseAction(null); - } - } -*/ } \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IHasDialer.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IHasDialer.cs new file mode 100644 index 00000000..ecb0863c --- /dev/null +++ b/Essentials Core/PepperDashEssentialsBase/Devices/IHasDialer.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +namespace PepperDash.Essentials.Core +{ + /// + /// Requirements for a device that has dialing capabilities + /// + public interface IHasDialer + { + // Add requirements for Dialer functionality + + void Dial(); + void EndCall(); + + BoolFeedback InCallFeedback { get; } + + } +} \ No newline at end of file diff --git a/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs b/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs index 02786ba7..6eab587d 100644 --- a/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs +++ b/Essentials Core/PepperDashEssentialsBase/Devices/IVolumeAndAudioInterfaces.cs @@ -66,7 +66,32 @@ namespace PepperDash.Essentials.Core IntFeedback TrebleFeedback { get; } IntFeedback MaxVolumeFeedback { get; } IntFeedback DefaultVolumeFeedback { get; } - } + } + + /// + /// Defines minimum volume controls for a codec device with dialing capabilities + /// + public interface ICodecAudio + { + void SetReceiveVolume(ushort level); + void ReceiveMuteOn(); + void ReceiveMuteOff(); + void ReceiveMuteToggle(); + IntFeedback ReceiveLevelFeedback { get; } + BoolFeedback ReceiveMuteIsOnFeedback { get; } + + void SetTransmitVolume(ushort level); + void TransmitMuteOn(); + void TransmitMuteOff(); + void TransmitMuteToggle(); + IntFeedback TransmitLevelFeedback { get; } + BoolFeedback TransmitMuteIsOnFeedback { get; } + + void PrivacyModeOn(); + void PrivacyModeOff(); + void PrivacyModeToggle(); + BoolFeedback PrivacyModeIsOnFeedback { get; } + } diff --git a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj index f963a171..b7649ac6 100644 --- a/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj +++ b/Essentials Core/PepperDashEssentialsBase/PepperDash_Essentials_Core.csproj @@ -103,6 +103,7 @@ + diff --git a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj index ec400ffb..751e3656 100644 --- a/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj +++ b/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj @@ -46,6 +46,14 @@ off + + False + ..\..\..\CodeBlue\libraries\Cisco CODEC\Cisco One Button To Push\Cisco One Button To Push\bin\Cisco One Button To Push.dll + + + False + ..\..\..\CodeBlue\libraries\Cisco CODEC\Cisco SX80 Corporate Phone Book\Cisco SX80 Corporate Phone Book\bin\Cisco SX80 Corporate Phone Book.dll + False ..\..\..\..\..\..\..\ProgramData\Crestron\SDK\SSPDevices\Crestron.SimplSharpPro.DeviceSupport.dll @@ -119,6 +127,8 @@ + + diff --git a/Essentials Devices Common/Essentials Devices Common/VC/CiscoCodec.cs b/Essentials Devices Common/Essentials Devices Common/VC/CiscoCodec.cs new file mode 100644 index 00000000..74ec8dfd --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/VC/CiscoCodec.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; +using Cisco_One_Button_To_Push; +using Cisco_SX80_Corporate_Phone_Book; + +namespace PepperDash.Essentials.Devices.VC +{ + public class CiscoCodec : VcCodecBase + { + private CiscoOneButtonToPush Codec; + + private Corporate_Phone_Book PhoneBook; + + public CiscoCodec(string key, string name) + : base(key, name) + { + Codec = new CiscoOneButtonToPush(); + + PhoneBook = new Corporate_Phone_Book(); + + Codec.Initialize(); + + Codec.GetMeetings(); + + + } + + + + public override void ExecuteSwitch(object selector) + { + throw new NotImplementedException(); + } + + protected override Func InCallFeedbackFunc + { + get { throw new NotImplementedException(); } + } + + protected override Func TransmitMuteFeedbackFunc + { + get { throw new NotImplementedException(); } + } + + protected override Func ReceiveMuteFeedbackFunc + { + get { throw new NotImplementedException(); } + } + + protected override Func PrivacyModeFeedbackFunc + { + get { throw new NotImplementedException(); } + } + + public override void Dial() + { + throw new NotImplementedException(); + } + + public override void EndCall() + { + throw new NotImplementedException(); + } + + public override void ReceiveMuteOff() + { + throw new NotImplementedException(); + } + + public override void ReceiveMuteOn() + { + throw new NotImplementedException(); + } + + public override void ReceiveMuteToggle() + { + throw new NotImplementedException(); + } + + public override void SetReceiveVolume(ushort level) + { + throw new NotImplementedException(); + } + + public override void TransmitMuteOff() + { + throw new NotImplementedException(); + } + + public override void TransmitMuteOn() + { + throw new NotImplementedException(); + } + + public override void TransmitMuteToggle() + { + throw new NotImplementedException(); + } + + public override void SetTransmitVolume(ushort level) + { + throw new NotImplementedException(); + } + + public override void PrivacyModeOn() + { + throw new NotImplementedException(); + } + + public override void PrivacyModeOff() + { + throw new NotImplementedException(); + } + + public override void PrivacyModeToggle() + { + throw new NotImplementedException(); + } + } +} \ No newline at end of file diff --git a/Essentials Devices Common/Essentials Devices Common/VC/VcCodecBase.cs b/Essentials Devices Common/Essentials Devices Common/VC/VcCodecBase.cs new file mode 100644 index 00000000..bf61aa00 --- /dev/null +++ b/Essentials Devices Common/Essentials Devices Common/VC/VcCodecBase.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using Crestron.SimplSharp; + +using PepperDash.Core; +using PepperDash.Essentials.Core; + +namespace PepperDash.Essentials.Devices.VC +{ + public abstract class VcCodecBase : Device, IHasFeedback, IRoutingSinkWithSwitching, IUsageTracking, IHasDialer//, ICodecAudio + { + #region IUsageTracking Members + + public UsageTracking UsageTracker { get; set; } + + #endregion + + #region IRoutingInputs Members + + public RoutingPortCollection InputPorts { get; private set; } + + #endregion + + public BoolFeedback InCallFeedback { get; protected set; } + + abstract protected Func InCallFeedbackFunc { get; } + abstract protected Func TransmitMuteFeedbackFunc { get; } + abstract protected Func ReceiveMuteFeedbackFunc { get; } + abstract protected Func PrivacyModeFeedbackFunc { get; } + + public VcCodecBase(string key, string name) + : base(key, name) + { + InCallFeedback = new BoolFeedback(InCallFeedbackFunc); + ReceiveMuteIsOnFeedback = new BoolFeedback(ReceiveMuteFeedbackFunc); + TransmitMuteIsOnFeedback = new BoolFeedback(TransmitMuteFeedbackFunc); + PrivacyModeIsOnFeedback = new BoolFeedback(PrivacyModeFeedbackFunc); + + InputPorts = new RoutingPortCollection(); + + InCallFeedback.OutputChange += new EventHandler(InCallFeedback_OutputChange); + } + + void InCallFeedback_OutputChange(object sender, EventArgs e) + { + if (UsageTracker != null) + { + if (InCallFeedback.BoolValue) + UsageTracker.StartDeviceUsage(); + else + UsageTracker.EndDeviceUsage(); + } + } + + public abstract void Dial(); + public abstract void EndCall(); + + public virtual List Feedbacks + { + get + { + return new List + { + InCallFeedback, + ReceiveMuteIsOnFeedback, + TransmitMuteIsOnFeedback, + PrivacyModeIsOnFeedback + }; + } + } + + public abstract void ExecuteSwitch(object selector); + + #region ICodecAudio Members + + public IntFeedback ReceiveLevelFeedback { get; private set; } + public BoolFeedback ReceiveMuteIsOnFeedback { get; private set; } + public abstract void ReceiveMuteOff(); + public abstract void ReceiveMuteOn(); + public abstract void ReceiveMuteToggle(); + public abstract void SetReceiveVolume(ushort level); + + public IntFeedback TransmitLevelFeedback { get; private set; } + public BoolFeedback TransmitMuteIsOnFeedback { get; private set; } + public abstract void TransmitMuteOff(); + public abstract void TransmitMuteOn(); + public abstract void TransmitMuteToggle(); + public abstract void SetTransmitVolume(ushort level); + + public abstract void PrivacyModeOn(); + public abstract void PrivacyModeOff(); + public abstract void PrivacyModeToggle(); + public BoolFeedback PrivacyModeIsOnFeedback { get; private set; } + + #endregion + } +} \ No newline at end of file diff --git a/Essentials/PepperDashEssentials/Fusion/FusionEventHandlers.cs b/Essentials/PepperDashEssentials/Fusion/FusionEventHandlers.cs index 9825b603..7c7b5168 100644 --- a/Essentials/PepperDashEssentials/Fusion/FusionEventHandlers.cs +++ b/Essentials/PepperDashEssentials/Fusion/FusionEventHandlers.cs @@ -8,7 +8,7 @@ namespace PepperDash.Essentials.Fusion { public class ScheduleChangeEventArgs : EventArgs { - public RoomSchedule MyProperty { get; set; } + public RoomSchedule Schedule { get; set; } } public class MeetingChangeEventArgs : EventArgs diff --git a/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs b/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs index 23d0eace..31cdc74a 100644 --- a/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs +++ b/Essentials/PepperDashEssentials/Fusion/FusionSystemController.cs @@ -25,9 +25,9 @@ namespace PepperDash.Essentials.Fusion { public class EssentialsHuddleSpaceFusionSystemController : Device { - //public event EventHandler ScheduleChange; - //public event EventHandler MeetingEndWarning; - //public event EventHandler NextMeetingBeginWarning; + public event EventHandler ScheduleChange; + public event EventHandler MeetingEndWarning; + public event EventHandler NextMeetingBeginWarning; FusionRoom FusionRoom; EssentialsHuddleSpaceRoom Room; @@ -788,6 +788,15 @@ namespace PepperDash.Essentials.Fusion if (!IsRegisteredForSchedulePushNotifications) PollTimer.Reset(SchedulePollInterval, SchedulePollInterval); + + // Fire Schedule Change Event + var handler = ScheduleChange; + + if (handler != null) + { + handler(this, new ScheduleChangeEventArgs() { Schedule = CurrentSchedule }); + } + } } @@ -806,20 +815,26 @@ namespace PepperDash.Essentials.Fusion } + /// + /// Prints today's schedule to console for debugging + /// void PrintTodaysSchedule() { - if (CurrentSchedule.Meetings.Count > 0) + if (Debug.Level > 1) { - Debug.Console(1, this, "Today's Schedule for '{0}'\n", Room.Name); - - foreach (Event e in CurrentSchedule.Meetings) + if (CurrentSchedule.Meetings.Count > 0) { - Debug.Console(1, this, "Subject: {0}", e.Subject); - Debug.Console(1, this, "Organizer: {0}", e.Organizer); - Debug.Console(1, this, "MeetingID: {0}", e.MeetingID); - Debug.Console(1, this, "Start Time: {0}", e.dtStart); - Debug.Console(1, this, "End Time: {0}", e.dtEnd); - Debug.Console(1, this, "Duration: {0}\n", e.DurationInMinutes); + Debug.Console(1, this, "Today's Schedule for '{0}'\n", Room.Name); + + foreach (Event e in CurrentSchedule.Meetings) + { + Debug.Console(1, this, "Subject: {0}", e.Subject); + Debug.Console(1, this, "Organizer: {0}", e.Organizer); + Debug.Console(1, this, "MeetingID: {0}", e.MeetingID); + Debug.Console(1, this, "Start Time: {0}", e.dtStart); + Debug.Console(1, this, "End Time: {0}", e.dtEnd); + Debug.Console(1, this, "Duration: {0}\n", e.DurationInMinutes); + } } } } @@ -964,7 +979,7 @@ namespace PepperDash.Essentials.Fusion attrName = "Online - Touch Panel " + attrNum; attrNum += 150; } - else if (dev is Crestron.SimplSharpPro.UI.XpanelForSmartGraphics) + else if ((dev as EssentialsTouchpanelController).Panel is Crestron.SimplSharpPro.UI.XpanelForSmartGraphics) { if (attrNum > 10) continue;