mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-02-15 20:54:55 +00:00
Merge branch 'feature/ecs-407' of http://code.pepperdash.net/scm/pec/essentials into feature/cisco-spark-2
Conflicts: Essentials Devices Common/Essentials Devices Common/Codec/iHasScheduleAwareness.cs
This commit is contained in:
@@ -73,6 +73,40 @@ namespace PepperDash.Essentials.Core
|
|||||||
return SetSigHeldAction(tl, sigNum, heldMs, heldAction, null);
|
return SetSigHeldAction(tl, sigNum, heldMs, heldAction, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets an action to a held sig as well as a released-without-hold action
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static BoolOutputSig SetSigHeldAction(this BoolOutputSig sig, uint heldMs, Action heldAction, Action releaseAction)
|
||||||
|
{
|
||||||
|
CTimer heldTimer = null;
|
||||||
|
bool wasHeld = false;
|
||||||
|
return sig.SetBoolSigAction(press =>
|
||||||
|
{
|
||||||
|
if (press)
|
||||||
|
{
|
||||||
|
wasHeld = false;
|
||||||
|
// Could insert a pressed action here
|
||||||
|
heldTimer = new CTimer(o =>
|
||||||
|
{
|
||||||
|
// if still held and there's an action
|
||||||
|
if (sig.BoolValue && heldAction != null)
|
||||||
|
{
|
||||||
|
wasHeld = true;
|
||||||
|
// Hold action here
|
||||||
|
heldAction();
|
||||||
|
}
|
||||||
|
}, heldMs);
|
||||||
|
}
|
||||||
|
else if (!wasHeld) // released
|
||||||
|
{
|
||||||
|
heldTimer.Stop();
|
||||||
|
if (releaseAction != null)
|
||||||
|
releaseAction();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sets an action to a held sig as well as a released-without-hold action
|
/// Sets an action to a held sig as well as a released-without-hold action
|
||||||
@@ -80,35 +114,9 @@ namespace PepperDash.Essentials.Core
|
|||||||
/// <returns>The sig</returns>
|
/// <returns>The sig</returns>
|
||||||
public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction, Action releaseAction)
|
public static BoolOutputSig SetSigHeldAction(this BasicTriList tl, uint sigNum, uint heldMs, Action heldAction, Action releaseAction)
|
||||||
{
|
{
|
||||||
CTimer heldTimer = null;
|
return tl.BooleanOutput[sigNum].SetSigHeldAction(heldMs, heldAction, releaseAction);
|
||||||
bool wasHeld = false;
|
|
||||||
return tl.SetBoolSigAction(sigNum, press =>
|
|
||||||
{
|
|
||||||
if (press)
|
|
||||||
{
|
|
||||||
wasHeld = false;
|
|
||||||
// Could insert a pressed action here
|
|
||||||
heldTimer = new CTimer(o =>
|
|
||||||
{
|
|
||||||
// if still held and there's an action
|
|
||||||
if (tl.BooleanOutput[sigNum].BoolValue && heldAction != null)
|
|
||||||
{
|
|
||||||
wasHeld = true;
|
|
||||||
// Hold action here
|
|
||||||
heldAction();
|
|
||||||
}
|
|
||||||
}, heldMs);
|
|
||||||
}
|
|
||||||
else if(!wasHeld) // released
|
|
||||||
{
|
|
||||||
heldTimer.Stop();
|
|
||||||
if (releaseAction != null)
|
|
||||||
releaseAction();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -6,15 +6,6 @@ using Crestron.SimplSharp;
|
|||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common.Codec
|
namespace PepperDash.Essentials.Devices.Common.Codec
|
||||||
{
|
{
|
||||||
public enum eMeetingEventChangeType
|
|
||||||
{
|
|
||||||
Unkown = 0,
|
|
||||||
MeetingStartWarning,
|
|
||||||
MeetingStart,
|
|
||||||
MeetingEndWarning,
|
|
||||||
MeetingEnd
|
|
||||||
}
|
|
||||||
|
|
||||||
public interface IHasScheduleAwareness
|
public interface IHasScheduleAwareness
|
||||||
{
|
{
|
||||||
CodecScheduleAwareness CodecSchedule { get; }
|
CodecScheduleAwareness CodecSchedule { get; }
|
||||||
@@ -22,52 +13,11 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||||||
|
|
||||||
public class CodecScheduleAwareness
|
public class CodecScheduleAwareness
|
||||||
{
|
{
|
||||||
public event EventHandler<MeetingEventArgs> MeetingEventChange;
|
|
||||||
|
|
||||||
public event EventHandler<EventArgs> MeetingsListHasChanged;
|
|
||||||
|
|
||||||
public List<Meeting> Meetings { get; set; }
|
public List<Meeting> Meetings { get; set; }
|
||||||
|
|
||||||
private CTimer ScheduleChecker;
|
|
||||||
|
|
||||||
public CodecScheduleAwareness()
|
public CodecScheduleAwareness()
|
||||||
{
|
{
|
||||||
Meetings = new List<Meeting>();
|
Meetings = new List<Meeting>();
|
||||||
|
|
||||||
ScheduleChecker = new CTimer(CheckSchedule, null, 1000, 1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void OnMeetingChange(eMeetingEventChangeType changeType, Meeting meeting)
|
|
||||||
{
|
|
||||||
var handler = MeetingEventChange;
|
|
||||||
if (handler != null)
|
|
||||||
{
|
|
||||||
handler(this, new MeetingEventArgs() { ChangeType = changeType, Meeting = meeting });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void CheckSchedule(object o)
|
|
||||||
{
|
|
||||||
// Iterate the meeting list and check if any meeting need to do anythingk
|
|
||||||
|
|
||||||
foreach (Meeting m in Meetings)
|
|
||||||
{
|
|
||||||
eMeetingEventChangeType changeType = eMeetingEventChangeType.Unkown;
|
|
||||||
|
|
||||||
if (m.TimeToMeetingStart.TotalMinutes == m.MeetingWarningMinutes.TotalMinutes) // Meeting is about to start
|
|
||||||
changeType = eMeetingEventChangeType.MeetingStartWarning;
|
|
||||||
else if (m.TimeToMeetingStart.TotalMinutes == 0) // Meeting Start
|
|
||||||
changeType = eMeetingEventChangeType.MeetingStart;
|
|
||||||
else if (m.TimeToMeetingEnd.TotalMinutes == m.MeetingWarningMinutes.TotalMinutes) // Meeting is about to end
|
|
||||||
changeType = eMeetingEventChangeType.MeetingEndWarning;
|
|
||||||
else if (m.TimeToMeetingEnd.TotalMinutes == 0) // Meeting has ended
|
|
||||||
changeType = eMeetingEventChangeType.MeetingEnd;
|
|
||||||
|
|
||||||
if(changeType != eMeetingEventChangeType.Unkown)
|
|
||||||
OnMeetingChange(changeType, m);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,25 +26,10 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class Meeting
|
public class Meeting
|
||||||
{
|
{
|
||||||
public TimeSpan MeetingWarningMinutes = TimeSpan.FromMinutes(5);
|
|
||||||
|
|
||||||
public string Id { get; set; }
|
public string Id { get; set; }
|
||||||
public string Organizer { get; set; }
|
public string Organizer { get; set; }
|
||||||
public string Title { get; set; }
|
public string Title { get; set; }
|
||||||
public string Agenda { get; set; }
|
public string Agenda { get; set; }
|
||||||
public TimeSpan TimeToMeetingStart {
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return StartTime - DateTime.Now;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public TimeSpan TimeToMeetingEnd
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
return EndTime - DateTime.Now;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public DateTime StartTime { get; set; }
|
public DateTime StartTime { get; set; }
|
||||||
public DateTime EndTime { get; set; }
|
public DateTime EndTime { get; set; }
|
||||||
public TimeSpan Duration
|
public TimeSpan Duration
|
||||||
@@ -109,20 +44,11 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
// Meeting is joinable from 5 minutes before start until 5 minutes before end
|
return StartTime.AddMinutes(-5) <= DateTime.Now
|
||||||
if (TimeToMeetingStart.TotalMinutes <= MeetingWarningMinutes.TotalMinutes && TimeToMeetingEnd.TotalMinutes >= MeetingWarningMinutes.TotalMinutes)
|
&& DateTime.Now <= EndTime.AddMinutes(-5);
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public string ConferenceNumberToDial { get; set; }
|
public string ConferenceNumberToDial { get; set; }
|
||||||
public string ConferencePassword { get; set; }
|
public string ConferencePassword { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class MeetingEventArgs : EventArgs
|
|
||||||
{
|
|
||||||
public eMeetingEventChangeType ChangeType { get; set; }
|
|
||||||
public Meeting Meeting { get; set; }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Devices.Displays
|
||||||
|
{
|
||||||
|
public interface IInputHdmi1 { void InputHdmi1(); }
|
||||||
|
public interface IInputHdmi2 { void InputHdmi2(); }
|
||||||
|
public interface IInputHdmi3 { void InputHdmi3(); }
|
||||||
|
public interface IInputHdmi4 { void InputHdmi4(); }
|
||||||
|
public interface IInputDisplayPort1 { void InputDisplayPort1(); }
|
||||||
|
public interface IInputDisplayPort2 { void InputDisplayPort2(); }
|
||||||
|
|
||||||
|
}
|
||||||
@@ -14,7 +14,8 @@ namespace PepperDash.Essentials.Devices.Displays
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public class SamsungMDC : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor
|
public class SamsungMDC : TwoWayDisplayBase, IBasicVolumeWithFeedback, ICommunicationMonitor, IInputDisplayPort1, IInputDisplayPort2,
|
||||||
|
IInputHdmi1, IInputHdmi2, IInputHdmi3, IInputHdmi4
|
||||||
{
|
{
|
||||||
public IBasicCommunication Communication { get; private set; }
|
public IBasicCommunication Communication { get; private set; }
|
||||||
|
|
||||||
|
|||||||
@@ -116,6 +116,7 @@
|
|||||||
<Compile Include="Codec\iHasScheduleAwareness.cs" />
|
<Compile Include="Codec\iHasScheduleAwareness.cs" />
|
||||||
<Compile Include="Crestron\Gateways\CenRfgwController.cs" />
|
<Compile Include="Crestron\Gateways\CenRfgwController.cs" />
|
||||||
<Compile Include="Display\ComTcpDisplayBase.cs" />
|
<Compile Include="Display\ComTcpDisplayBase.cs" />
|
||||||
|
<Compile Include="Display\InputInterfaces.cs" />
|
||||||
<Compile Include="Display\SamsungMDCDisplay.cs" />
|
<Compile Include="Display\SamsungMDCDisplay.cs" />
|
||||||
<Compile Include="Display\DeviceFactory.cs" />
|
<Compile Include="Display\DeviceFactory.cs" />
|
||||||
<Compile Include="Display\NecPaSeriesProjector.cs" />
|
<Compile Include="Display\NecPaSeriesProjector.cs" />
|
||||||
|
|||||||
@@ -262,13 +262,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||||||
HdmiIn1 = new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource1), this);
|
HdmiIn1 = new RoutingInputPort(RoutingPortNames.HdmiIn1, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource1), this);
|
||||||
HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource2), this);
|
HdmiIn2 = new RoutingInputPort(RoutingPortNames.HdmiIn2, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, new Action(SelectPresentationSource2), this);
|
||||||
|
|
||||||
HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this);
|
HdmiOut = new RoutingOutputPort(RoutingPortNames.HdmiOut, eRoutingSignalType.AudioVideo, eRoutingPortConnectionType.Hdmi, null, this);
|
||||||
|
|
||||||
InputPorts.Add(CodecOsdIn);
|
InputPorts.Add(CodecOsdIn);
|
||||||
InputPorts.Add(HdmiIn1);
|
InputPorts.Add(HdmiIn1);
|
||||||
InputPorts.Add(HdmiIn2);
|
InputPorts.Add(HdmiIn2);
|
||||||
OutputPorts.Add(HdmiOut);
|
OutputPorts.Add(HdmiOut);
|
||||||
|
|
||||||
|
|
||||||
string prefix = "xFeedback register ";
|
string prefix = "xFeedback register ";
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ using PepperDash.Essentials.Devices.Common.Codec;
|
|||||||
|
|
||||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
||||||
{
|
{
|
||||||
public class MockVC : VideoCodecBase, IRoutingSource
|
public class MockVC : VideoCodecBase, IRoutingSource, IHasCallHistory, IHasScheduleAwareness
|
||||||
{
|
{
|
||||||
public RoutingInputPort CodecOsdIn { get; private set; }
|
public RoutingInputPort CodecOsdIn { get; private set; }
|
||||||
public RoutingInputPort HdmiIn1 { get; private set; }
|
public RoutingInputPort HdmiIn1 { get; private set; }
|
||||||
@@ -43,6 +43,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||||||
InputPorts.Add(HdmiIn2);
|
InputPorts.Add(HdmiIn2);
|
||||||
OutputPorts.Add(HdmiOut);
|
OutputPorts.Add(HdmiOut);
|
||||||
|
|
||||||
|
CallHistory = new CodecCallHistory();
|
||||||
|
for (int i = 0; i < 10; i++)
|
||||||
|
{
|
||||||
|
var call = new CodecCallHistory.CallHistoryEntry();
|
||||||
|
call.Name = "Call " + i;
|
||||||
|
call.Number = i + "@call.com";
|
||||||
|
CallHistory.RecentCalls.Add(call);
|
||||||
|
}
|
||||||
|
// eventually fire history event here
|
||||||
|
|
||||||
SetIsReady();
|
SetIsReady();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -302,7 +312,39 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||||||
Debug.Console(1, this, "TestFarEndHangup");
|
Debug.Console(1, this, "TestFarEndHangup");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
#region IHasCallHistory Members
|
||||||
|
|
||||||
|
public CodecCallHistory CallHistory { get; private set; }
|
||||||
|
|
||||||
|
public void RemoveCallHistoryEntry(CodecCallHistory.CallHistoryEntry entry)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region IHasScheduleAwareness Members
|
||||||
|
|
||||||
|
public CodecScheduleAwareness CodecSchedule
|
||||||
|
{
|
||||||
|
get {
|
||||||
|
var sch = new CodecScheduleAwareness();
|
||||||
|
for(int i = 0; i < 5; i++)
|
||||||
|
{
|
||||||
|
var m = new Meeting();
|
||||||
|
m.StartTime = DateTime.Now.AddMinutes(3).AddHours(i);
|
||||||
|
m.EndTime = DateTime.Now.AddHours(i).AddMinutes(30);
|
||||||
|
m.Title = "Meeting " + i;
|
||||||
|
m.ConferenceNumberToDial = i + "meeting@fake.com";
|
||||||
|
sch.Meetings.Add(m);
|
||||||
|
}
|
||||||
|
return sch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Implementation for the mock VC
|
/// Implementation for the mock VC
|
||||||
|
|||||||
@@ -144,6 +144,7 @@
|
|||||||
<Compile Include="Room\Config\EssentialsPresentationPropertiesConfig.cs" />
|
<Compile Include="Room\Config\EssentialsPresentationPropertiesConfig.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsHuddleRoomPropertiesConfig.cs" />
|
<Compile Include="Room\Config\EssentialsHuddleRoomPropertiesConfig.cs" />
|
||||||
<Compile Include="Room\Config\EssentialsHuddleVtc1PropertiesConfig.cs" />
|
<Compile Include="Room\Config\EssentialsHuddleVtc1PropertiesConfig.cs" />
|
||||||
|
<Compile Include="Room\Config\EssentialsRoomEmergencyConfig.cs" />
|
||||||
<Compile Include="Room\Cotija\CotijaConfig.cs" />
|
<Compile Include="Room\Cotija\CotijaConfig.cs" />
|
||||||
<Compile Include="Room\Cotija\CotijaRoomBridge.cs" />
|
<Compile Include="Room\Cotija\CotijaRoomBridge.cs" />
|
||||||
<Compile Include="Room\Cotija\DeviceTypeInterfaces\IChannelExtensions.cs" />
|
<Compile Include="Room\Cotija\DeviceTypeInterfaces\IChannelExtensions.cs" />
|
||||||
@@ -154,6 +155,7 @@
|
|||||||
<Compile Include="Room\Cotija\DeviceTypeInterfaces\IPowerExtensions.cs" />
|
<Compile Include="Room\Cotija\DeviceTypeInterfaces\IPowerExtensions.cs" />
|
||||||
<Compile Include="Room\Cotija\DeviceTypeInterfaces\ISetTopBoxControlsExtensions.cs" />
|
<Compile Include="Room\Cotija\DeviceTypeInterfaces\ISetTopBoxControlsExtensions.cs" />
|
||||||
<Compile Include="Room\Cotija\DeviceTypeInterfaces\ITransportExtensions.cs" />
|
<Compile Include="Room\Cotija\DeviceTypeInterfaces\ITransportExtensions.cs" />
|
||||||
|
<Compile Include="Room\Emergency\EsentialsRoomEmergencyContactClosure.cs" />
|
||||||
<Compile Include="Room\Types\EssentialsHuddleVtc1Room.cs" />
|
<Compile Include="Room\Types\EssentialsHuddleVtc1Room.cs" />
|
||||||
<Compile Include="Room\Types\EssentialsPresentationRoom.cs" />
|
<Compile Include="Room\Types\EssentialsPresentationRoom.cs" />
|
||||||
<Compile Include="Room\Types\EssentialsRoomBase.cs" />
|
<Compile Include="Room\Types\EssentialsRoomBase.cs" />
|
||||||
@@ -168,6 +170,7 @@
|
|||||||
<Compile Include="UIDrivers\EssentialsHuddleVTC\EssentialsHuddlePresentationUiDriver.cs" />
|
<Compile Include="UIDrivers\EssentialsHuddleVTC\EssentialsHuddlePresentationUiDriver.cs" />
|
||||||
<Compile Include="UIDrivers\EssentialsHuddleVTC\EssentialsHuddleTechPageDriver.cs" />
|
<Compile Include="UIDrivers\EssentialsHuddleVTC\EssentialsHuddleTechPageDriver.cs" />
|
||||||
<Compile Include="UI\HttpLogoServer.cs" />
|
<Compile Include="UI\HttpLogoServer.cs" />
|
||||||
|
<Compile Include="UI\SmartObjectHeaderButtonList.cs" />
|
||||||
<Compile Include="UI\SubpageReferenceListCallStagingItem.cs" />
|
<Compile Include="UI\SubpageReferenceListCallStagingItem.cs" />
|
||||||
<Compile Include="UIDrivers\VC\EssentialsVideoCodecUiDriver.cs" />
|
<Compile Include="UIDrivers\VC\EssentialsVideoCodecUiDriver.cs" />
|
||||||
<Compile Include="UIDrivers\JoinedSigInterlock.cs" />
|
<Compile Include="UIDrivers\JoinedSigInterlock.cs" />
|
||||||
|
|||||||
@@ -69,11 +69,30 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
rm.DefaultSourceItem = props.DefaultSourceItem;
|
rm.DefaultSourceItem = props.DefaultSourceItem;
|
||||||
rm.DefaultVolume = (ushort)(props.Volumes.Master.Level * 65535 / 100);
|
rm.DefaultVolume = (ushort)(props.Volumes.Master.Level * 65535 / 100);
|
||||||
|
|
||||||
|
rm.Emergency = GetEmergency(props, rm); // Get emergency object, if any
|
||||||
|
|
||||||
return rm;
|
return rm;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets and operating, standalone emergegncy object that can be plugged into a room.
|
||||||
|
/// Returns null if there is no emergency defined
|
||||||
|
/// </summary>
|
||||||
|
EssentialsRoomEmergencyBase GetEmergency(EssentialsRoomPropertiesConfig props, EssentialsRoomBase room)
|
||||||
|
{
|
||||||
|
// This emergency
|
||||||
|
var emergency = props.Emergency;
|
||||||
|
if (emergency != null)
|
||||||
|
{
|
||||||
|
//switch on emergency type here. Right now only contact and shutdown
|
||||||
|
var e = new EssentialsRoomEmergencyContactClosure(room.Key + "-emergency", props.Emergency, room);
|
||||||
|
DeviceManager.AddDevice(e);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -81,6 +100,7 @@ namespace PepperDash.Essentials.Room.Config
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public class EssentialsRoomPropertiesConfig
|
public class EssentialsRoomPropertiesConfig
|
||||||
{
|
{
|
||||||
|
public EssentialsRoomEmergencyConfig Emergency { get; set; }
|
||||||
public string HelpMessage { get; set; }
|
public string HelpMessage { get; set; }
|
||||||
public string Description { get; set; }
|
public string Description { get; set; }
|
||||||
public int ShutdownVacancySeconds { get; set; }
|
public int ShutdownVacancySeconds { get; set; }
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Room.Config
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public class EssentialsRoomEmergencyConfig
|
||||||
|
{
|
||||||
|
public EssentialsRoomEmergencyTriggerConfig Trigger { get; set; }
|
||||||
|
|
||||||
|
public string Behavior { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public class EssentialsRoomEmergencyTriggerConfig
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// contact,
|
||||||
|
/// </summary>
|
||||||
|
public string Type { get; set; }
|
||||||
|
/// <summary>
|
||||||
|
/// Input number if contact
|
||||||
|
/// </summary>
|
||||||
|
public int Number { get; set; }
|
||||||
|
|
||||||
|
public bool TriggerOnClose { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,66 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
using Crestron.SimplSharpPro;
|
||||||
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
|
|
||||||
|
using PepperDash.Core;
|
||||||
|
using PepperDash.Essentials.Core;
|
||||||
|
using PepperDash.Essentials.Room.Config;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials.Room
|
||||||
|
{
|
||||||
|
public abstract class EssentialsRoomEmergencyBase : IKeyed
|
||||||
|
{
|
||||||
|
public string Key { get; private set; }
|
||||||
|
|
||||||
|
public EssentialsRoomEmergencyBase(string key)
|
||||||
|
{
|
||||||
|
Key = key;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public class EssentialsRoomEmergencyContactClosure : EssentialsRoomEmergencyBase
|
||||||
|
{
|
||||||
|
EssentialsRoomBase Room;
|
||||||
|
string Behavior;
|
||||||
|
bool TriggerOnClose;
|
||||||
|
|
||||||
|
public EssentialsRoomEmergencyContactClosure(string key, EssentialsRoomEmergencyConfig config, EssentialsRoomBase room) :
|
||||||
|
base(key)
|
||||||
|
{
|
||||||
|
Room = room;
|
||||||
|
var cs = Global.ControlSystem;
|
||||||
|
|
||||||
|
if (config.Trigger.Type.Equals("contact", StringComparison.OrdinalIgnoreCase))
|
||||||
|
{
|
||||||
|
var portNum = (uint)config.Trigger.Number;
|
||||||
|
if (portNum <= cs.NumberOfDigitalInputPorts)
|
||||||
|
{
|
||||||
|
cs.DigitalInputPorts[portNum].Register();
|
||||||
|
cs.DigitalInputPorts[portNum].StateChange += EsentialsRoomEmergencyContactClosure_StateChange;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Behavior = config.Behavior;
|
||||||
|
TriggerOnClose = config.Trigger.TriggerOnClose;
|
||||||
|
}
|
||||||
|
|
||||||
|
void EsentialsRoomEmergencyContactClosure_StateChange(DigitalInput digitalInput, DigitalInputEventArgs args)
|
||||||
|
{
|
||||||
|
if (args.State && TriggerOnClose || !args.State && !TriggerOnClose)
|
||||||
|
RunEmergencyBehavior();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
public void RunEmergencyBehavior()
|
||||||
|
{
|
||||||
|
if (Behavior.Equals("shutdown"))
|
||||||
|
Room.Shutdown();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -182,7 +182,13 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// "codecOsd"
|
/// "codecOsd"
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string DefaultCodecRouteString { get { return "codecOsd"; } }
|
public string DefaultCodecRouteString { get { return "codecOsd"; } }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Temporary implementation. Returns the schedule-ready object or null if none. Fow now,
|
||||||
|
/// always returns the VideoCodec if it is capable
|
||||||
|
/// </summary>
|
||||||
|
public IHasScheduleAwareness ScheduleSource { get { return VideoCodec as IHasScheduleAwareness; } }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
@@ -218,6 +224,10 @@ namespace PepperDash.Essentials
|
|||||||
CurrentSourceInfo = null;
|
CurrentSourceInfo = null;
|
||||||
OnFeedback.FireUpdate();
|
OnFeedback.FireUpdate();
|
||||||
}
|
}
|
||||||
|
if (disp.PowerIsOnFeedback.BoolValue)
|
||||||
|
{
|
||||||
|
SetDefaultLevels();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
disp.IsWarmingUpFeedback.OutputChange += (o, a) =>
|
disp.IsWarmingUpFeedback.OutputChange += (o, a) =>
|
||||||
@@ -291,9 +301,9 @@ namespace PepperDash.Essentials
|
|||||||
/// route or commands
|
/// route or commands
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="name"></param>
|
/// <param name="name"></param>
|
||||||
public void RunRouteAction(string routeKey, Action successCallback)
|
public void RunRouteAction(string routeKey, Action successCallback)
|
||||||
{
|
{
|
||||||
// Run this on a separate thread
|
// Run this on a separate thread
|
||||||
new CTimer(o =>
|
new CTimer(o =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@@ -336,7 +346,10 @@ namespace PepperDash.Essentials
|
|||||||
// Let's run it
|
// Let's run it
|
||||||
var item = dict[routeKey];
|
var item = dict[routeKey];
|
||||||
if (routeKey.ToLower() != "roomoff")
|
if (routeKey.ToLower() != "roomoff")
|
||||||
|
{
|
||||||
|
|
||||||
LastSourceKey = routeKey;
|
LastSourceKey = routeKey;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
CurrentSourceInfoKey = null;
|
CurrentSourceInfoKey = null;
|
||||||
|
|
||||||
@@ -375,17 +388,6 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
|
|
||||||
}, 0); // end of CTimer
|
}, 0); // end of CTimer
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Does what it says
|
|
||||||
/// </summary>
|
|
||||||
public override void SetDefaultLevels()
|
|
||||||
{
|
|
||||||
Debug.Console(1, this, "Restoring default levels");
|
|
||||||
var vc = CurrentVolumeControls as IBasicVolumeWithFeedback;
|
|
||||||
if (vc != null)
|
|
||||||
vc.SetVolume(DefaultVolume);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -450,7 +452,17 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Does what it says
|
||||||
|
/// </summary>
|
||||||
|
public override void SetDefaultLevels()
|
||||||
|
{
|
||||||
|
Debug.Console(1, this, "Restoring default levels");
|
||||||
|
var vc = CurrentVolumeControls as IBasicVolumeWithFeedback;
|
||||||
|
if (vc != null)
|
||||||
|
vc.SetVolume(DefaultVolume);
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Will power the room on with the last-used source
|
/// Will power the room on with the last-used source
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ namespace PepperDash.Essentials
|
|||||||
public int ShutdownVacancySeconds { get; set; }
|
public int ShutdownVacancySeconds { get; set; }
|
||||||
public ShutdownType ShutdownType { get; private set; }
|
public ShutdownType ShutdownType { get; private set; }
|
||||||
|
|
||||||
|
public PepperDash.Essentials.Room.EssentialsRoomEmergencyBase Emergency { get; set; }
|
||||||
|
|
||||||
public string LogoUrl { get; set; }
|
public string LogoUrl { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -346,6 +346,9 @@ namespace PepperDash.Essentials
|
|||||||
/// 12345
|
/// 12345
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint AvNoControlsSubVisible = 12345;
|
public const uint AvNoControlsSubVisible = 12345;
|
||||||
|
|
||||||
|
// 10000 - 14999 are general "source" pages
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15001
|
/// 15001
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -402,6 +405,10 @@ namespace PepperDash.Essentials
|
|||||||
/// 15017
|
/// 15017
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint StagingPageAdditionalArrowsVisible = 15017;
|
public const uint StagingPageAdditionalArrowsVisible = 15017;
|
||||||
|
/// <summary>
|
||||||
|
/// 15018 The Header with dynamic buttons
|
||||||
|
/// </summary>
|
||||||
|
public const uint TopBarHabaneroDynamicVisible = 15018;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15020
|
/// 15020
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -417,31 +424,31 @@ namespace PepperDash.Essentials
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15023
|
/// 15023
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint LightsHeaderButtonVisible = 15023;
|
public const uint HeaderLightsButtonVisible = 15023;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15024
|
/// 15024
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint CallRightHeaderButtonVisible = 15024;
|
public const uint HeaderCallRightButtonVisible = 15024;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15025
|
/// 15025
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint CallLeftHeaderButtonVisible = 15025;
|
public const uint HeaderCallLeftButtonVisible = 15025;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15026
|
/// 15026
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint LightsHeaderButtonPress = 15026;
|
public const uint HeaderLightsButtonPress = 15026;
|
||||||
/// <summary>[-
|
/// <summary>[-
|
||||||
/// 15027
|
/// 15027
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint CallHeaderButtonPress = 15027;
|
public const uint HeaderCallButtonPress = 15027;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15028 The gear button in header
|
/// 15028 The gear button in header
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint GearHeaderButtonPress = 15028;
|
public const uint HeaderGearButtonPress = 15028;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15029 the room button in header
|
/// 15029 the room button in header
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint RoomHeaderButtonPress = 15029;
|
public const uint HeaderRoomButtonPress = 15029;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15030 Visibility for room data popup
|
/// 15030 Visibility for room data popup
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -510,6 +517,10 @@ namespace PepperDash.Essentials
|
|||||||
/// 15045 - Visibility for the bar containing call navigation button list
|
/// 15045 - Visibility for the bar containing call navigation button list
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint CallStagingBarVisible = 15045;
|
public const uint CallStagingBarVisible = 15045;
|
||||||
|
/// <summary>
|
||||||
|
/// 15046
|
||||||
|
/// </summary>
|
||||||
|
public const uint MeetingsListVisible = 15046;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15051
|
/// 15051
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -610,5 +621,36 @@ namespace PepperDash.Essentials
|
|||||||
/// 15091
|
/// 15091
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint SetupFullDistrib = 15091;
|
public const uint SetupFullDistrib = 15091;
|
||||||
|
|
||||||
|
// PIN dialogs ************************************
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 15201
|
||||||
|
/// </summary>
|
||||||
|
public const uint PinDialog4DigitVisible = 15201;
|
||||||
|
/// <summary>
|
||||||
|
/// 15206
|
||||||
|
/// </summary>
|
||||||
|
public const uint PinDialogCancelPress = 15206;
|
||||||
|
/// <summary>
|
||||||
|
/// 15207
|
||||||
|
/// </summary>
|
||||||
|
public const uint PinDialogErrorVisible = 15207;
|
||||||
|
/// <summary>
|
||||||
|
/// 15211
|
||||||
|
/// </summary>
|
||||||
|
public const uint PinDialogDot1 = 15211;
|
||||||
|
/// <summary>
|
||||||
|
/// 15212
|
||||||
|
/// </summary>
|
||||||
|
public const uint PinDialogDot2 = 15212;
|
||||||
|
/// <summary>
|
||||||
|
/// 15213
|
||||||
|
/// </summary>
|
||||||
|
public const uint PinDialogDot3 = 15213;
|
||||||
|
/// <summary>
|
||||||
|
/// 15214
|
||||||
|
/// </summary>
|
||||||
|
public const uint PinDialogDot4 = 15214;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -16,7 +16,19 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint VCDialKeypad = 1201;
|
public const uint VCDialKeypad = 1201;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 1202
|
||||||
|
/// </summary>
|
||||||
public const uint VCDirectoryList = 1202;
|
public const uint VCDirectoryList = 1202;
|
||||||
|
/// <summary>
|
||||||
|
/// 1203
|
||||||
|
/// </summary>
|
||||||
|
public const uint VCRecentsList = 1203;
|
||||||
|
/// <summary>
|
||||||
|
/// 1204
|
||||||
|
/// </summary>
|
||||||
|
public const uint VCFavoritesList = 1204;
|
||||||
|
|
||||||
|
|
||||||
//******************************************************
|
//******************************************************
|
||||||
// General
|
// General
|
||||||
@@ -26,10 +38,6 @@
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint SourceStagingSRL = 3200;
|
public const uint SourceStagingSRL = 3200;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 15022 The main activity footer
|
|
||||||
/// </summary>
|
|
||||||
public const uint ActivityFooterSRL = 15022;
|
|
||||||
/// <summary>
|
|
||||||
/// 3901 The Tech page menu list
|
/// 3901 The Tech page menu list
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint TechMenuList = 3901;
|
public const uint TechMenuList = 3901;
|
||||||
@@ -37,6 +45,25 @@
|
|||||||
/// 3902 Tech page statuses
|
/// 3902 Tech page statuses
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint TechStatusList = 3902;
|
public const uint TechStatusList = 3902;
|
||||||
|
/// <summary>
|
||||||
|
/// 3903
|
||||||
|
/// </summary>
|
||||||
|
public const uint TechPinDialogKeypad = 3903;
|
||||||
|
/// <summary>
|
||||||
|
/// 3904 - Display controls on the tech page
|
||||||
|
/// </summary>
|
||||||
|
public const uint TechDisplayControlsList = 3904;
|
||||||
|
/// <summary>
|
||||||
|
/// 15018
|
||||||
|
/// </summary>
|
||||||
|
public const uint HeaderButtonList = 15018;
|
||||||
|
/// <summary>
|
||||||
|
/// 15022 The main activity footer
|
||||||
|
/// </summary>
|
||||||
|
public const uint ActivityFooterSRL = 15022;
|
||||||
|
/// <summary>
|
||||||
|
/// 15023 - The header meetings SRL
|
||||||
|
/// </summary>
|
||||||
|
public const uint MeetingListSRL = 15023;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -20,6 +20,11 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint CodecAddressEntryText = 1001;
|
public const uint CodecAddressEntryText = 1001;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 1201 - 1230 range of joins for recents list
|
||||||
|
/// </summary>
|
||||||
|
public const uint VCRecentListTextStart = 1201;
|
||||||
|
|
||||||
|
|
||||||
//******************************************************
|
//******************************************************
|
||||||
// Keyboard
|
// Keyboard
|
||||||
@@ -106,6 +111,10 @@ namespace PepperDash.Essentials
|
|||||||
/// 3915
|
/// 3915
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint NotificationRibbonText = 3915;
|
public const uint NotificationRibbonText = 3915;
|
||||||
|
/// <summary>
|
||||||
|
/// 3916 The "active call" label
|
||||||
|
/// </summary>
|
||||||
|
public const uint HeaderCallLabel = 3916;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 3922
|
/// 3922
|
||||||
|
|||||||
@@ -0,0 +1,58 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Text;
|
||||||
|
using Crestron.SimplSharp;
|
||||||
|
using Crestron.SimplSharpPro;
|
||||||
|
using Crestron.SimplSharpPro.DeviceSupport;
|
||||||
|
|
||||||
|
using PepperDash.Essentials.Core;
|
||||||
|
using PepperDash.Essentials.Core.SmartObjects;
|
||||||
|
|
||||||
|
namespace PepperDash.Essentials
|
||||||
|
{
|
||||||
|
public class SmartObjectHeaderButtonList : SmartObjectHelperBase
|
||||||
|
{
|
||||||
|
|
||||||
|
public SmartObjectHeaderButtonList(SmartObject so)
|
||||||
|
: base(so, true)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public class HeaderListButton
|
||||||
|
{
|
||||||
|
public BoolInputSig SelectedSig { get; private set; }
|
||||||
|
public BoolInputSig VisibleSig { get; private set; }
|
||||||
|
public BoolOutputSig OutputSig { get; private set; }
|
||||||
|
StringInputSig IconSig;
|
||||||
|
|
||||||
|
public HeaderListButton(SmartObjectHeaderButtonList list, uint index)
|
||||||
|
{
|
||||||
|
var so = list.SmartObject;
|
||||||
|
OutputSig = so.BooleanOutput["Item " + index + " Pressed"];
|
||||||
|
SelectedSig = so.BooleanInput["Item " + index + " Selected"];
|
||||||
|
VisibleSig = so.BooleanInput["Item " + index + " Visible"];
|
||||||
|
IconSig = so.StringInput["Set Item " + index + " Icon Serial"];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetIcon(string i)
|
||||||
|
{
|
||||||
|
IconSig.StringValue = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void ClearIcon()
|
||||||
|
{
|
||||||
|
IconSig.StringValue = "Blank";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static string Calendar = "Calendar";
|
||||||
|
public static string Camera = "Camera";
|
||||||
|
public static string Gear = "Gear";
|
||||||
|
public static string Lights = "Lights";
|
||||||
|
public static string Help = "Help";
|
||||||
|
public static string OnHook = "Phone Down";
|
||||||
|
public static string Phone = "Phone";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -218,7 +218,7 @@ namespace PepperDash.Essentials
|
|||||||
// ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible));
|
// ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible));
|
||||||
|
|
||||||
// Setup button
|
// Setup button
|
||||||
TriList.SetSigHeldAction(UIBoolJoin.GearHeaderButtonPress, 2000,
|
TriList.SetSigHeldAction(UIBoolJoin.HeaderGearButtonPress, 2000,
|
||||||
() => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.TechPanelSetupVisible));// ShowInterlockedModal(UIBoolJoin.TechPanelSetupVisible));
|
() => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.TechPanelSetupVisible));// ShowInterlockedModal(UIBoolJoin.TechPanelSetupVisible));
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () =>
|
TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () =>
|
||||||
PopupInterlock.HideAndClear()); // HideCurrentInterlockedModal());
|
PopupInterlock.HideAndClear()); // HideCurrentInterlockedModal());
|
||||||
|
|||||||
@@ -229,10 +229,10 @@ namespace PepperDash.Essentials
|
|||||||
ShowInterlockedModal(UIBoolJoin.HelpPageVisible);
|
ShowInterlockedModal(UIBoolJoin.HelpPageVisible);
|
||||||
});
|
});
|
||||||
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.RoomHeaderButtonPress, () =>
|
TriList.SetSigFalseAction(UIBoolJoin.HeaderRoomButtonPress, () =>
|
||||||
ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible));
|
ShowInterlockedModal(UIBoolJoin.RoomHeaderPageVisible));
|
||||||
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.GearHeaderButtonPress, () =>
|
TriList.SetSigFalseAction(UIBoolJoin.HeaderGearButtonPress, () =>
|
||||||
ShowInterlockedModal(UIBoolJoin.VolumesPageVisible));
|
ShowInterlockedModal(UIBoolJoin.VolumesPageVisible));
|
||||||
|
|
||||||
// power-related functions
|
// power-related functions
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ using PepperDash.Essentials;
|
|||||||
using PepperDash.Essentials.Core;
|
using PepperDash.Essentials.Core;
|
||||||
using PepperDash.Essentials.Core.SmartObjects;
|
using PepperDash.Essentials.Core.SmartObjects;
|
||||||
using PepperDash.Essentials.Core.Touchpanels.Keyboards;
|
using PepperDash.Essentials.Core.Touchpanels.Keyboards;
|
||||||
|
using PepperDash.Essentials.Devices.Displays;
|
||||||
|
|
||||||
namespace PepperDash.Essentials.UIDrivers
|
namespace PepperDash.Essentials.UIDrivers
|
||||||
{
|
{
|
||||||
@@ -25,6 +26,10 @@ namespace PepperDash.Essentials.UIDrivers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
SubpageReferenceList StatusList;
|
SubpageReferenceList StatusList;
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
/// The list of display controls
|
||||||
|
/// </summary>
|
||||||
|
SubpageReferenceList DisplayList;
|
||||||
|
/// <summary>
|
||||||
/// References lines in the list against device instances
|
/// References lines in the list against device instances
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Dictionary<ICommunicationMonitor, uint> StatusListDeviceIndexes;
|
Dictionary<ICommunicationMonitor, uint> StatusListDeviceIndexes;
|
||||||
@@ -42,6 +47,16 @@ namespace PepperDash.Essentials.UIDrivers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public const uint JoinText = 1;
|
public const uint JoinText = 1;
|
||||||
|
|
||||||
|
CTimer PinAuthorizedTimer;
|
||||||
|
|
||||||
|
string Pin;
|
||||||
|
|
||||||
|
StringBuilder PinEntryBuilder = new StringBuilder(4);
|
||||||
|
|
||||||
|
bool IsAuthorized;
|
||||||
|
|
||||||
|
SmartObjectNumeric PinKeypad;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -49,10 +64,12 @@ namespace PepperDash.Essentials.UIDrivers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="trilist"></param>
|
/// <param name="trilist"></param>
|
||||||
/// <param name="parent"></param>
|
/// <param name="parent"></param>
|
||||||
public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, IAVDriver parent)
|
public EssentialsHuddleTechPageDriver(BasicTriListWithSmartObject trilist, IAVDriver parent, string pin)
|
||||||
: base(trilist)
|
: base(trilist)
|
||||||
{
|
{
|
||||||
Parent = parent;
|
Parent = parent;
|
||||||
|
Pin = pin;
|
||||||
|
|
||||||
PagesInterlock = new JoinedSigInterlock(trilist);
|
PagesInterlock = new JoinedSigInterlock(trilist);
|
||||||
PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible);
|
PagesInterlock.SetButDontShow(UIBoolJoin.TechSystemStatusVisible);
|
||||||
|
|
||||||
@@ -83,6 +100,10 @@ namespace PepperDash.Essentials.UIDrivers
|
|||||||
MenuList.Count = 3;
|
MenuList.Count = 3;
|
||||||
|
|
||||||
BuildStatusList();
|
BuildStatusList();
|
||||||
|
|
||||||
|
BuildDisplayList();
|
||||||
|
|
||||||
|
SetupPinModal();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -90,9 +111,21 @@ namespace PepperDash.Essentials.UIDrivers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public override void Show()
|
public override void Show()
|
||||||
{
|
{
|
||||||
TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
|
// divert to PIN if we need auth
|
||||||
PagesInterlock.Show();
|
if (IsAuthorized)
|
||||||
base.Show();
|
{
|
||||||
|
// Cancel the auth timer so we don't deauth after coming back in
|
||||||
|
if (PinAuthorizedTimer != null)
|
||||||
|
PinAuthorizedTimer.Stop();
|
||||||
|
|
||||||
|
TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, true);
|
||||||
|
PagesInterlock.Show();
|
||||||
|
base.Show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -100,11 +133,93 @@ namespace PepperDash.Essentials.UIDrivers
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public override void Hide()
|
public override void Hide()
|
||||||
{
|
{
|
||||||
|
// Leave it authorized for 60 seconds.
|
||||||
|
if (IsAuthorized)
|
||||||
|
PinAuthorizedTimer = new CTimer(o => {
|
||||||
|
IsAuthorized = false;
|
||||||
|
PinAuthorizedTimer = null;
|
||||||
|
}, 60000);
|
||||||
TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false);
|
TriList.SetBool(UIBoolJoin.TechCommonItemsVisbible, false);
|
||||||
PagesInterlock.Hide();
|
PagesInterlock.Hide();
|
||||||
base.Hide();
|
base.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Wire up the keypad and buttons
|
||||||
|
/// </summary>
|
||||||
|
void SetupPinModal()
|
||||||
|
{
|
||||||
|
TriList.SetSigFalseAction(UIBoolJoin.PinDialogCancelPress, CancelPinDialog);
|
||||||
|
PinKeypad = new SmartObjectNumeric(TriList.SmartObjects[UISmartObjectJoin.TechPinDialogKeypad], true);
|
||||||
|
PinKeypad.Digit0.UserObject = new Action<bool>(b => { if (b)DialPinDigit('0'); });
|
||||||
|
PinKeypad.Digit1.UserObject = new Action<bool>(b => { if (b)DialPinDigit('1'); });
|
||||||
|
PinKeypad.Digit2.UserObject = new Action<bool>(b => { if (b)DialPinDigit('2'); });
|
||||||
|
PinKeypad.Digit3.UserObject = new Action<bool>(b => { if (b)DialPinDigit('3'); });
|
||||||
|
PinKeypad.Digit4.UserObject = new Action<bool>(b => { if (b)DialPinDigit('4'); });
|
||||||
|
PinKeypad.Digit5.UserObject = new Action<bool>(b => { if (b)DialPinDigit('5'); });
|
||||||
|
PinKeypad.Digit6.UserObject = new Action<bool>(b => { if (b)DialPinDigit('6'); });
|
||||||
|
PinKeypad.Digit7.UserObject = new Action<bool>(b => { if (b)DialPinDigit('7'); });
|
||||||
|
PinKeypad.Digit8.UserObject = new Action<bool>(b => { if (b)DialPinDigit('8'); });
|
||||||
|
PinKeypad.Digit9.UserObject = new Action<bool>(b => { if (b)DialPinDigit('9'); });
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="d"></param>
|
||||||
|
void DialPinDigit(char d)
|
||||||
|
{
|
||||||
|
PinEntryBuilder.Append(d);
|
||||||
|
var len = PinEntryBuilder.Length;
|
||||||
|
SetPinDotsFeedback(len);
|
||||||
|
|
||||||
|
// check it!
|
||||||
|
if (len == 4)
|
||||||
|
{
|
||||||
|
if (Pin == PinEntryBuilder.ToString())
|
||||||
|
{
|
||||||
|
IsAuthorized = true;
|
||||||
|
SetPinDotsFeedback(0);
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
|
||||||
|
Show();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
SetPinDotsFeedback(0);
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, true);
|
||||||
|
new CTimer(o =>
|
||||||
|
{
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialogErrorVisible, false);
|
||||||
|
}, 1500);
|
||||||
|
}
|
||||||
|
|
||||||
|
PinEntryBuilder.Remove(0, len); // clear it either way
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Draws the dots as pin is entered
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="len"></param>
|
||||||
|
void SetPinDotsFeedback(int len)
|
||||||
|
{
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialogDot1, len >= 1);
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialogDot2, len >= 2);
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialogDot3, len >= 3);
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialogDot4, len == 4);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Does what it says
|
||||||
|
/// </summary>
|
||||||
|
void CancelPinDialog()
|
||||||
|
{
|
||||||
|
PinEntryBuilder.Remove(0, PinEntryBuilder.Length);
|
||||||
|
TriList.SetBool(UIBoolJoin.PinDialog4DigitVisible, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -131,6 +246,47 @@ namespace PepperDash.Essentials.UIDrivers
|
|||||||
StatusList.Count = (ushort)i;
|
StatusList.Count = (ushort)i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Builds the list of display controls
|
||||||
|
/// </summary>
|
||||||
|
void BuildDisplayList()
|
||||||
|
{
|
||||||
|
DisplayList = new SubpageReferenceList(TriList, UISmartObjectJoin.TechDisplayControlsList, 10, 3, 3);
|
||||||
|
|
||||||
|
var devKeys = ConfigReader.ConfigObject.Devices.Where(d =>
|
||||||
|
d.Group.Equals("display", StringComparison.OrdinalIgnoreCase)
|
||||||
|
|| d.Group.Equals("projector", StringComparison.OrdinalIgnoreCase))
|
||||||
|
.Select(dd => dd.Key);
|
||||||
|
Debug.Console(1, "#################### Config has {0} displays", devKeys.Count());
|
||||||
|
var disps = DeviceManager.AllDevices.Where(d =>
|
||||||
|
devKeys.Contains(d.Key));
|
||||||
|
Debug.Console(1, "#################### Devices has {0} displays", disps.Count());
|
||||||
|
ushort i = 0;
|
||||||
|
foreach (var disp in disps)
|
||||||
|
{
|
||||||
|
var display = disp as DisplayBase;
|
||||||
|
if (display != null)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
DisplayList.StringInputSig(i, 1).StringValue = display.Name;
|
||||||
|
DisplayList.GetBoolFeedbackSig(i, 1).SetSigFalseAction(display.PowerOn);
|
||||||
|
DisplayList.GetBoolFeedbackSig(i, 2).SetSigFalseAction(display.PowerOff);
|
||||||
|
DisplayList.GetBoolFeedbackSig(i, 3).SetSigFalseAction(() =>
|
||||||
|
{ if (display is IInputHdmi1) (display as IInputHdmi1).InputHdmi1(); });
|
||||||
|
DisplayList.GetBoolFeedbackSig(i, 4).SetSigFalseAction(() =>
|
||||||
|
{ if (display is IInputHdmi2) (display as IInputHdmi2).InputHdmi2(); });
|
||||||
|
DisplayList.GetBoolFeedbackSig(i, 5).SetSigFalseAction(() =>
|
||||||
|
{ if (display is IInputHdmi3) (display as IInputHdmi3).InputHdmi3(); });
|
||||||
|
DisplayList.GetBoolFeedbackSig(i, 6).SetSigFalseAction(() =>
|
||||||
|
{ if (display is IInputHdmi4) (display as IInputHdmi4).InputHdmi4(); });
|
||||||
|
DisplayList.GetBoolFeedbackSig(i, 7).SetSigFalseAction(() =>
|
||||||
|
{ if (display is IInputDisplayPort1) (display as IInputDisplayPort1).InputDisplayPort1(); });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
DisplayList.Count = i;
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ using PepperDash.Essentials.Core;
|
|||||||
using PepperDash.Essentials.Core.SmartObjects;
|
using PepperDash.Essentials.Core.SmartObjects;
|
||||||
using PepperDash.Essentials.Core.PageManagers;
|
using PepperDash.Essentials.Core.PageManagers;
|
||||||
using PepperDash.Essentials.Room.Config;
|
using PepperDash.Essentials.Room.Config;
|
||||||
|
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
||||||
|
|
||||||
namespace PepperDash.Essentials
|
namespace PepperDash.Essentials
|
||||||
{
|
{
|
||||||
@@ -85,6 +86,16 @@ namespace PepperDash.Essentials
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
SubpageReferenceList ActivityFooterSrl;
|
SubpageReferenceList ActivityFooterSrl;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
SubpageReferenceList MeetingsSrl;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The list of buttons on the header. Managed with visibility only
|
||||||
|
/// </summary>
|
||||||
|
SmartObjectHeaderButtonList HeaderButtonsList;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The AV page mangagers that have been used, to keep them alive for later
|
/// The AV page mangagers that have been used, to keep them alive for later
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -139,7 +150,8 @@ namespace PepperDash.Essentials
|
|||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (_TechDriver == null)
|
if (_TechDriver == null)
|
||||||
_TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, this);
|
#warning Make PIN come from config!
|
||||||
|
_TechDriver = new PepperDash.Essentials.UIDrivers.EssentialsHuddleTechPageDriver(TriList, this, "1234");
|
||||||
return _TechDriver;
|
return _TechDriver;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -182,6 +194,12 @@ namespace PepperDash.Essentials
|
|||||||
ShareButtonSig = ActivityFooterSrl.BoolInputSig(1, 1);
|
ShareButtonSig = ActivityFooterSrl.BoolInputSig(1, 1);
|
||||||
EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(3, 1);
|
EndMeetingButtonSig = ActivityFooterSrl.BoolInputSig(3, 1);
|
||||||
|
|
||||||
|
MeetingsSrl = new SubpageReferenceList(TriList, UISmartObjectJoin.MeetingListSRL, 3, 3, 5);
|
||||||
|
|
||||||
|
|
||||||
|
// buttons are added in SetCurrentRoom
|
||||||
|
HeaderButtonsList = new SmartObjectHeaderButtonList(TriList.SmartObjects[UISmartObjectJoin.HeaderButtonList]);
|
||||||
|
|
||||||
SetupActivityFooterWhenRoomOff();
|
SetupActivityFooterWhenRoomOff();
|
||||||
|
|
||||||
ShowVolumeGauge = true;
|
ShowVolumeGauge = true;
|
||||||
@@ -213,7 +231,7 @@ namespace PepperDash.Essentials
|
|||||||
if (Config.HeaderStyle == UiHeaderStyle.Habanero)
|
if (Config.HeaderStyle == UiHeaderStyle.Habanero)
|
||||||
{
|
{
|
||||||
TriList.SetString(UIStringJoin.CurrentRoomName, CurrentRoom.Name);
|
TriList.SetString(UIStringJoin.CurrentRoomName, CurrentRoom.Name);
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.RoomHeaderButtonPress, () =>
|
TriList.SetSigFalseAction(UIBoolJoin.HeaderRoomButtonPress, () =>
|
||||||
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.RoomHeaderPageVisible));
|
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.RoomHeaderPageVisible));
|
||||||
}
|
}
|
||||||
else if (Config.HeaderStyle == UiHeaderStyle.Verbose)
|
else if (Config.HeaderStyle == UiHeaderStyle.Verbose)
|
||||||
@@ -234,7 +252,9 @@ namespace PepperDash.Essentials
|
|||||||
TriList.SetBool(UIBoolJoin.DateAndTimeVisible, Config.ShowDate && Config.ShowTime);
|
TriList.SetBool(UIBoolJoin.DateAndTimeVisible, Config.ShowDate && Config.ShowTime);
|
||||||
TriList.SetBool(UIBoolJoin.DateOnlyVisible, Config.ShowDate && !Config.ShowTime);
|
TriList.SetBool(UIBoolJoin.DateOnlyVisible, Config.ShowDate && !Config.ShowTime);
|
||||||
TriList.SetBool(UIBoolJoin.TimeOnlyVisible, !Config.ShowDate && Config.ShowTime);
|
TriList.SetBool(UIBoolJoin.TimeOnlyVisible, !Config.ShowDate && Config.ShowTime);
|
||||||
TriList.SetBool(UIBoolJoin.TopBarHabaneroVisible, true);
|
|
||||||
|
TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true);
|
||||||
|
|
||||||
TriList.SetBool(UIBoolJoin.ActivityFooterVisible, true);
|
TriList.SetBool(UIBoolJoin.ActivityFooterVisible, true);
|
||||||
|
|
||||||
// Privacy mute button
|
// Privacy mute button
|
||||||
@@ -258,60 +278,47 @@ namespace PepperDash.Essentials
|
|||||||
// Generic "close" button for these modals
|
// Generic "close" button for these modals
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.InterlockedModalClosePress, PopupInterlock.HideAndClear);
|
TriList.SetSigFalseAction(UIBoolJoin.InterlockedModalClosePress, PopupInterlock.HideAndClear);
|
||||||
|
|
||||||
// Help button and popup
|
//// Help button and popup
|
||||||
if (CurrentRoom.Config.Help != null)
|
//if (CurrentRoom.Config.Help != null)
|
||||||
{
|
//{
|
||||||
TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message);
|
// TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message);
|
||||||
TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton);
|
// TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton);
|
||||||
TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText);
|
// TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText);
|
||||||
if(roomConf.Help.ShowCallButton)
|
// if(roomConf.Help.ShowCallButton)
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN
|
// TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN
|
||||||
else
|
// else
|
||||||
TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress);
|
// TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress);
|
||||||
}
|
//}
|
||||||
else // older config
|
//else // older config
|
||||||
{
|
//{
|
||||||
TriList.SetString(UIStringJoin.HelpMessage, CurrentRoom.Config.HelpMessage);
|
// TriList.SetString(UIStringJoin.HelpMessage, CurrentRoom.Config.HelpMessage);
|
||||||
TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false);
|
// TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false);
|
||||||
TriList.SetString(UIStringJoin.HelpPageCallButtonText, null);
|
// TriList.SetString(UIStringJoin.HelpPageCallButtonText, null);
|
||||||
TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress);
|
// TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress);
|
||||||
}
|
//}
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.HelpPress, () =>
|
//TriList.SetSigFalseAction(UIBoolJoin.HelpPress, () =>
|
||||||
{
|
//{
|
||||||
string message = null;
|
// string message = null;
|
||||||
var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey)
|
// var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey)
|
||||||
as EssentialsHuddleSpaceRoom;
|
// as EssentialsHuddleSpaceRoom;
|
||||||
if (room != null)
|
// if (room != null)
|
||||||
message = room.Config.HelpMessage;
|
// message = room.Config.HelpMessage;
|
||||||
else
|
// else
|
||||||
message = "Sorry, no help message available. No room connected.";
|
// message = "Sorry, no help message available. No room connected.";
|
||||||
//TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message;
|
// //TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message;
|
||||||
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible);
|
// PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible);
|
||||||
});
|
//});
|
||||||
|
|
||||||
// Lights button
|
//// Lights button
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.LightsHeaderButtonPress, () => // ******************** FILL IN
|
//TriList.SetSigFalseAction(UIBoolJoin.HeaderLightsButtonPress, () => // ******************** FILL IN
|
||||||
{ });
|
// { });
|
||||||
|
|
||||||
// Call header button
|
//// Setup button - shows volumes with default button OR hold for tech page
|
||||||
if(roomConf.OneButtonMeeting != null && roomConf.OneButtonMeeting.Enable)
|
//TriList.SetSigHeldAction(UIBoolJoin.HeaderGearButtonPress, 2000,
|
||||||
{
|
// ShowTech,
|
||||||
TriList.SetBool(UIBoolJoin.CalendarHeaderButtonVisible, true);
|
// () => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible));
|
||||||
TriList.SetBool(UIBoolJoin.CallLeftHeaderButtonVisible, true);
|
//TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () =>
|
||||||
}
|
// PopupInterlock.HideAndClear());
|
||||||
else
|
|
||||||
TriList.SetBool(UIBoolJoin.CallRightHeaderButtonVisible, true);
|
|
||||||
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.CallHeaderButtonPress, () =>
|
|
||||||
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible));
|
|
||||||
|
|
||||||
|
|
||||||
// Setup button - shows volumes with default button OR hold for tech page
|
|
||||||
TriList.SetSigHeldAction(UIBoolJoin.GearHeaderButtonPress, 2000,
|
|
||||||
ShowTech,
|
|
||||||
() => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible));
|
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () =>
|
|
||||||
PopupInterlock.HideAndClear());
|
|
||||||
|
|
||||||
// Volume related things
|
// Volume related things
|
||||||
TriList.SetSigFalseAction(UIBoolJoin.VolumeDefaultPress, () => CurrentRoom.SetDefaultLevels());
|
TriList.SetSigFalseAction(UIBoolJoin.VolumeDefaultPress, () => CurrentRoom.SetDefaultLevels());
|
||||||
@@ -369,7 +376,7 @@ namespace PepperDash.Essentials
|
|||||||
public override void Hide()
|
public override void Hide()
|
||||||
{
|
{
|
||||||
HideAndClearCurrentDisplayModeSigsInUse();
|
HideAndClearCurrentDisplayModeSigsInUse();
|
||||||
TriList.BooleanInput[UIBoolJoin.TopBarHabaneroVisible].BoolValue = false;
|
TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, false);
|
||||||
TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = false;
|
TriList.BooleanInput[UIBoolJoin.ActivityFooterVisible].BoolValue = false;
|
||||||
TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false;
|
TriList.BooleanInput[UIBoolJoin.StartPageVisible].BoolValue = false;
|
||||||
TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false;
|
TriList.BooleanInput[UIBoolJoin.TapToBeginVisible].BoolValue = false;
|
||||||
@@ -410,6 +417,15 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Calendar should only be visible when it's supposed to
|
||||||
|
/// </summary>
|
||||||
|
void CalendarPress()
|
||||||
|
{
|
||||||
|
RefreshMeetingsList();
|
||||||
|
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.MeetingsListVisible);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Reveals the tech page and puts away anything that's in the way.
|
/// Reveals the tech page and puts away anything that's in the way.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -774,7 +790,7 @@ namespace PepperDash.Essentials
|
|||||||
_CurrentRoom.ShutdownPromptTimer.HasFinished += ShutdownPromptTimer_HasFinished;
|
_CurrentRoom.ShutdownPromptTimer.HasFinished += ShutdownPromptTimer_HasFinished;
|
||||||
_CurrentRoom.ShutdownPromptTimer.WasCancelled += ShutdownPromptTimer_WasCancelled;
|
_CurrentRoom.ShutdownPromptTimer.WasCancelled += ShutdownPromptTimer_WasCancelled;
|
||||||
|
|
||||||
// Link up all the change events from the room
|
// Link up all the change events from the room
|
||||||
_CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange;
|
_CurrentRoom.OnFeedback.OutputChange += CurrentRoom_OnFeedback_OutputChange;
|
||||||
CurrentRoom_SyncOnFeedback();
|
CurrentRoom_SyncOnFeedback();
|
||||||
_CurrentRoom.IsWarmingUpFeedback.OutputChange += CurrentRoom_IsWarmingFeedback_OutputChange;
|
_CurrentRoom.IsWarmingUpFeedback.OutputChange += CurrentRoom_IsWarmingFeedback_OutputChange;
|
||||||
@@ -784,6 +800,8 @@ namespace PepperDash.Essentials
|
|||||||
RefreshAudioDeviceConnections();
|
RefreshAudioDeviceConnections();
|
||||||
_CurrentRoom.CurrentSingleSourceChange += CurrentRoom_SourceInfoChange;
|
_CurrentRoom.CurrentSingleSourceChange += CurrentRoom_SourceInfoChange;
|
||||||
RefreshSourceInfo();
|
RefreshSourceInfo();
|
||||||
|
|
||||||
|
SetupHeaderButtons();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -792,10 +810,120 @@ namespace PepperDash.Essentials
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// For room on/off changes
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void CurrentRoom_OnFeedback_OutputChange(object sender, EventArgs e)
|
void SetupHeaderButtons()
|
||||||
|
{
|
||||||
|
TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true);
|
||||||
|
|
||||||
|
var roomConf = CurrentRoom.Config;
|
||||||
|
//
|
||||||
|
var setupButton = new HeaderListButton(HeaderButtonsList, 5);
|
||||||
|
setupButton.SetIcon(HeaderListButton.Gear);
|
||||||
|
setupButton.OutputSig.SetSigHeldAction(2000,
|
||||||
|
ShowTech,
|
||||||
|
() => PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.VolumesPageVisible));
|
||||||
|
|
||||||
|
TriList.SetSigFalseAction(UIBoolJoin.TechExitButton, () =>
|
||||||
|
PopupInterlock.HideAndClear());
|
||||||
|
|
||||||
|
// Help button and popup
|
||||||
|
if (CurrentRoom.Config.Help != null)
|
||||||
|
{
|
||||||
|
TriList.SetString(UIStringJoin.HelpMessage, roomConf.Help.Message);
|
||||||
|
TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, roomConf.Help.ShowCallButton);
|
||||||
|
TriList.SetString(UIStringJoin.HelpPageCallButtonText, roomConf.Help.CallButtonText);
|
||||||
|
if (roomConf.Help.ShowCallButton)
|
||||||
|
TriList.SetSigFalseAction(UIBoolJoin.HelpPageShowCallButtonPress, () => { }); // ************ FILL IN
|
||||||
|
else
|
||||||
|
TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress);
|
||||||
|
}
|
||||||
|
else // older config
|
||||||
|
{
|
||||||
|
TriList.SetString(UIStringJoin.HelpMessage, CurrentRoom.Config.HelpMessage);
|
||||||
|
TriList.SetBool(UIBoolJoin.HelpPageShowCallButtonVisible, false);
|
||||||
|
TriList.SetString(UIStringJoin.HelpPageCallButtonText, null);
|
||||||
|
TriList.ClearBoolSigAction(UIBoolJoin.HelpPageShowCallButtonPress);
|
||||||
|
}
|
||||||
|
var helpButton = new HeaderListButton(HeaderButtonsList, 4);
|
||||||
|
helpButton.SetIcon(HeaderListButton.Help);
|
||||||
|
helpButton.OutputSig.SetSigFalseAction(() =>
|
||||||
|
{
|
||||||
|
string message = null;
|
||||||
|
var room = DeviceManager.GetDeviceForKey(Config.DefaultRoomKey)
|
||||||
|
as EssentialsHuddleSpaceRoom;
|
||||||
|
if (room != null)
|
||||||
|
message = room.Config.HelpMessage;
|
||||||
|
else
|
||||||
|
message = "Sorry, no help message available. No room connected.";
|
||||||
|
//TriList.StringInput[UIStringJoin.HelpMessage].StringValue = message;
|
||||||
|
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HelpPageVisible);
|
||||||
|
});
|
||||||
|
uint nextIndex = 3;
|
||||||
|
|
||||||
|
// Lights button
|
||||||
|
//if (WHATEVER MAKES LIGHTS WORK)
|
||||||
|
//{
|
||||||
|
// // do lights
|
||||||
|
// nextIndex--;
|
||||||
|
//}
|
||||||
|
|
||||||
|
// Calendar button
|
||||||
|
if (_CurrentRoom.ScheduleSource != null) // ******************* Do we need a config option here as well?
|
||||||
|
{
|
||||||
|
var calBut = new HeaderListButton(HeaderButtonsList, nextIndex);
|
||||||
|
calBut.SetIcon(HeaderListButton.Calendar);
|
||||||
|
calBut.OutputSig.SetSigFalseAction(CalendarPress);
|
||||||
|
nextIndex--;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Call button
|
||||||
|
var callBut = new HeaderListButton(HeaderButtonsList, nextIndex);
|
||||||
|
callBut.SetIcon(HeaderListButton.OnHook);
|
||||||
|
callBut.OutputSig.SetSigFalseAction(() =>
|
||||||
|
PopupInterlock.ShowInterlockedWithToggle(UIBoolJoin.HeaderActiveCallsListVisible));
|
||||||
|
nextIndex--;
|
||||||
|
|
||||||
|
// blank any that remain
|
||||||
|
for (var i = nextIndex; i > 0; i--)
|
||||||
|
{
|
||||||
|
var blankBut = new HeaderListButton(HeaderButtonsList, i);
|
||||||
|
blankBut.ClearIcon();
|
||||||
|
blankBut.OutputSig.SetSigFalseAction(() => { });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
void RefreshMeetingsList()
|
||||||
|
{
|
||||||
|
ushort i = 0;
|
||||||
|
foreach (var m in CurrentRoom.ScheduleSource.CodecSchedule.Meetings)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
MeetingsSrl.StringInputSig(i, 1).StringValue = m.StartTime.ToShortTimeString();
|
||||||
|
MeetingsSrl.StringInputSig(i, 2).StringValue = m.EndTime.ToShortTimeString();
|
||||||
|
MeetingsSrl.StringInputSig(i, 3).StringValue = m.Title;
|
||||||
|
MeetingsSrl.StringInputSig(i, 4).StringValue = "Join";
|
||||||
|
MeetingsSrl.BoolInputSig(i, 2).BoolValue = m.Joinable;
|
||||||
|
var mm = m; // lambda scope
|
||||||
|
MeetingsSrl.GetBoolFeedbackSig(i, 1).SetSigFalseAction(() =>
|
||||||
|
{
|
||||||
|
PopupInterlock.Hide();
|
||||||
|
var d = CurrentRoom.ScheduleSource as VideoCodecBase;
|
||||||
|
if (d != null)
|
||||||
|
d.Dial(mm.ConferenceNumberToDial);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
MeetingsSrl.Count = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// For room on/off changes
|
||||||
|
/// </summary>
|
||||||
|
void CurrentRoom_OnFeedback_OutputChange(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
CurrentRoom_SyncOnFeedback();
|
CurrentRoom_SyncOnFeedback();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,17 +47,19 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
/// <summary>
|
/// <summary>
|
||||||
/// For the different staging bars: Active, inactive
|
/// For the different staging bars: Active, inactive
|
||||||
/// </summary>
|
/// </summary>
|
||||||
JoinedSigInterlock StagingBarInterlock;
|
JoinedSigInterlock StagingBarsInterlock;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// For the staging button feedbacks
|
/// For the staging button feedbacks
|
||||||
/// </summary>
|
/// </summary>
|
||||||
JoinedSigInterlock StagingButtonFeedbackInterlock;
|
JoinedSigInterlock StagingButtonsFeedbackInterlock;
|
||||||
|
|
||||||
SmartObjectNumeric DialKeypad;
|
SmartObjectNumeric DialKeypad;
|
||||||
|
|
||||||
SubpageReferenceList ActiveCallsSRL;
|
SubpageReferenceList ActiveCallsSRL;
|
||||||
|
|
||||||
|
SmartObjectDynamicList RecentCallsList;
|
||||||
|
|
||||||
// These are likely temp until we get a keyboard built
|
// These are likely temp until we get a keyboard built
|
||||||
StringFeedback DialStringFeedback;
|
StringFeedback DialStringFeedback;
|
||||||
StringBuilder DialStringBuilder = new StringBuilder();
|
StringBuilder DialStringBuilder = new StringBuilder();
|
||||||
@@ -82,6 +84,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
SetupCallStagingPopover();
|
SetupCallStagingPopover();
|
||||||
SetupDialKeypad();
|
SetupDialKeypad();
|
||||||
ActiveCallsSRL = new SubpageReferenceList(TriList, UISmartObjectJoin.CodecActiveCallsHeaderList, 3, 3, 3);
|
ActiveCallsSRL = new SubpageReferenceList(TriList, UISmartObjectJoin.CodecActiveCallsHeaderList, 3, 3, 3);
|
||||||
|
SetupRecentCallsList();
|
||||||
|
|
||||||
codec.CallStatusChange += new EventHandler<CodecCallStatusItemChangeEventArgs>(Codec_CallStatusChange);
|
codec.CallStatusChange += new EventHandler<CodecCallStatusItemChangeEventArgs>(Codec_CallStatusChange);
|
||||||
|
|
||||||
@@ -97,11 +100,11 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
VCControlsInterlock = new JoinedSigInterlock(triList);
|
VCControlsInterlock = new JoinedSigInterlock(triList);
|
||||||
VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadVisible);
|
VCControlsInterlock.SetButDontShow(UIBoolJoin.VCKeypadVisible);
|
||||||
|
|
||||||
StagingBarInterlock = new JoinedSigInterlock(triList);
|
StagingBarsInterlock = new JoinedSigInterlock(triList);
|
||||||
StagingBarInterlock.SetButDontShow(UIBoolJoin.VCStagingInactivePopoverVisible);
|
StagingBarsInterlock.SetButDontShow(UIBoolJoin.VCStagingInactivePopoverVisible);
|
||||||
|
|
||||||
StagingButtonFeedbackInterlock = new JoinedSigInterlock(triList);
|
StagingButtonsFeedbackInterlock = new JoinedSigInterlock(triList);
|
||||||
StagingButtonFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCRecentsVisible);
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
||||||
|
|
||||||
// Return formatted when dialing, straight digits when in call
|
// Return formatted when dialing, straight digits when in call
|
||||||
DialStringFeedback = new StringFeedback(() =>
|
DialStringFeedback = new StringFeedback(() =>
|
||||||
@@ -153,6 +156,8 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
DialStringFeedback.FireUpdate();
|
DialStringFeedback.FireUpdate();
|
||||||
TriList.SetBool(UIBoolJoin.VCKeypadBackspaceVisible, false);
|
TriList.SetBool(UIBoolJoin.VCKeypadBackspaceVisible, false);
|
||||||
Parent.ShowNotificationRibbon("Connected", 2000);
|
Parent.ShowNotificationRibbon("Connected", 2000);
|
||||||
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
||||||
|
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible);
|
||||||
break;
|
break;
|
||||||
case eCodecCallStatus.Connecting:
|
case eCodecCallStatus.Connecting:
|
||||||
// fire at SRL item
|
// fire at SRL item
|
||||||
@@ -196,7 +201,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
TriList.UShortInput[UIUshortJoin.VCStagingConnectButtonMode].UShortValue = (ushort)(Codec.IsInCall ? 1 : 0);
|
TriList.UShortInput[UIUshortJoin.VCStagingConnectButtonMode].UShortValue = (ushort)(Codec.IsInCall ? 1 : 0);
|
||||||
StagingBarInterlock.ShowInterlocked(Codec.IsInCall ?
|
StagingBarsInterlock.ShowInterlocked(Codec.IsInCall ?
|
||||||
UIBoolJoin.VCStagingActivePopoverVisible : UIBoolJoin.VCStagingInactivePopoverVisible);
|
UIBoolJoin.VCStagingActivePopoverVisible : UIBoolJoin.VCStagingInactivePopoverVisible);
|
||||||
|
|
||||||
// Set mode of header button
|
// Set mode of header button
|
||||||
@@ -268,7 +273,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
public override void Show()
|
public override void Show()
|
||||||
{
|
{
|
||||||
VCControlsInterlock.Show();
|
VCControlsInterlock.Show();
|
||||||
StagingBarInterlock.Show();
|
StagingBarsInterlock.Show();
|
||||||
DialStringFeedback.FireUpdate();
|
DialStringFeedback.FireUpdate();
|
||||||
base.Show();
|
base.Show();
|
||||||
}
|
}
|
||||||
@@ -279,7 +284,7 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
public override void Hide()
|
public override void Hide()
|
||||||
{
|
{
|
||||||
VCControlsInterlock.Hide();
|
VCControlsInterlock.Hide();
|
||||||
StagingBarInterlock.Hide();
|
StagingBarsInterlock.Hide();
|
||||||
base.Hide();
|
base.Hide();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -333,6 +338,41 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
TriList.ID, UISmartObjectJoin.VCDialKeypad);
|
TriList.ID, UISmartObjectJoin.VCDialKeypad);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
void SetupRecentCallsList()
|
||||||
|
{
|
||||||
|
var codec = Codec as IHasCallHistory;
|
||||||
|
codec.CallHistory.RecentCallsListHasChanged += (o, a) => RefreshRecentCallsList();
|
||||||
|
if (codec != null)
|
||||||
|
{
|
||||||
|
// EVENT??????????????? Pointed at refresh
|
||||||
|
RefreshRecentCallsList();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
///
|
||||||
|
/// </summary>
|
||||||
|
void RefreshRecentCallsList()
|
||||||
|
{
|
||||||
|
var codec = Codec as IHasCallHistory;
|
||||||
|
if (codec != null)
|
||||||
|
{
|
||||||
|
RecentCallsList = new SmartObjectDynamicList(TriList.SmartObjects[UISmartObjectJoin.VCRecentsList], true, 1200);
|
||||||
|
ushort i = 0;
|
||||||
|
foreach (var c in codec.CallHistory.RecentCalls)
|
||||||
|
{
|
||||||
|
i++;
|
||||||
|
RecentCallsList.SetItemMainText(i, c.Name);
|
||||||
|
var call = c; // for lambda scope
|
||||||
|
RecentCallsList.SetItemButtonAction(i, b => { if(!b) Codec.Dial(call.Number); });
|
||||||
|
}
|
||||||
|
RecentCallsList.Count = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
///
|
///
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -384,28 +424,28 @@ namespace PepperDash.Essentials.UIDrivers.VC
|
|||||||
void ShowCameraControls()
|
void ShowCameraControls()
|
||||||
{
|
{
|
||||||
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCCameraVisible);
|
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCCameraVisible);
|
||||||
StagingButtonFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingCameraPress);
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingCameraPress);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowKeypad()
|
void ShowKeypad()
|
||||||
{
|
{
|
||||||
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible);
|
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCKeypadVisible);
|
||||||
StagingButtonFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingKeypadPress);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowDirectory()
|
void ShowDirectory()
|
||||||
{
|
{
|
||||||
// populate directory
|
// populate directory
|
||||||
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCDirectoryVisible);
|
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCDirectoryVisible);
|
||||||
StagingButtonFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingDirectoryPress);
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingDirectoryPress);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ShowRecents()
|
void ShowRecents()
|
||||||
{
|
{
|
||||||
//populate recents
|
//populate recents
|
||||||
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCDirectoryVisible);
|
VCControlsInterlock.ShowInterlocked(UIBoolJoin.VCRecentsVisible);
|
||||||
StagingButtonFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingRecentsPress);
|
StagingButtonsFeedbackInterlock.ShowInterlocked(UIBoolJoin.VCStagingRecentsPress);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
@@ -17,3 +17,5 @@ devjson:1 {"deviceKey":"mockVc-1", "methodName":"TestIncomingAudioCall", "params
|
|||||||
devjson:1 {"deviceKey":"mockVc-1", "methodName":"TestIncomingVideoCall", "params": ["444-444-4444"]}
|
devjson:1 {"deviceKey":"mockVc-1", "methodName":"TestIncomingVideoCall", "params": ["444-444-4444"]}
|
||||||
|
|
||||||
devjson:1 {"deviceKey":"mockVc-1", "methodName":"ListCalls"}
|
devjson:1 {"deviceKey":"mockVc-1", "methodName":"ListCalls"}
|
||||||
|
|
||||||
|
devjson:1 {"deviceKey":"room1-emergency", "methodName":"RunEmergencyBehavior"}
|
||||||
Reference in New Issue
Block a user