mirror of
https://github.com/PepperDash/Essentials.git
synced 2026-04-12 20:17:03 +00:00
Merge pull request #1061 from PepperDash/development
Bring Dev 2.0.0 branch up-to-date with dev
This commit is contained in:
commit
7a9f76ee12
145 changed files with 12791 additions and 4490 deletions
|
|
@ -29,6 +29,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
|
|||
|
||||
public abstract class CameraBase : ReconfigurableDevice, IRoutingOutputs
|
||||
{
|
||||
[JsonProperty("controlMode", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public eCameraControlMode ControlMode { get; protected set; }
|
||||
|
||||
#region IRoutingOutputs Members
|
||||
|
|
@ -37,6 +38,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
|
|||
|
||||
#endregion
|
||||
|
||||
[JsonProperty("canPan", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool CanPan
|
||||
{
|
||||
get
|
||||
|
|
@ -44,7 +46,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
|
|||
return (Capabilities & eCameraCapabilities.Pan) == eCameraCapabilities.Pan;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty("canTilt", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool CanTilt
|
||||
{
|
||||
get
|
||||
|
|
@ -52,7 +54,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
|
|||
return (Capabilities & eCameraCapabilities.Tilt) == eCameraCapabilities.Tilt;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty("canZoom", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool CanZoom
|
||||
{
|
||||
get
|
||||
|
|
@ -60,7 +62,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
|
|||
return (Capabilities & eCameraCapabilities.Zoom) == eCameraCapabilities.Zoom;
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty("canFocus", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool CanFocus
|
||||
{
|
||||
get
|
||||
|
|
@ -221,7 +223,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
|
|||
|
||||
SendCameraPresetNamesToApi(presetsCamera, joinMap, trilist);
|
||||
|
||||
for (int i = 0; i < joinMap.NumberOfPresets.JoinNumber; i++)
|
||||
for (int i = 0; i < joinMap.NumberOfPresets.JoinSpan; i++)
|
||||
{
|
||||
int tempNum = i;
|
||||
|
||||
|
|
|
|||
|
|
@ -57,6 +57,11 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
|
|||
void CameraMuteToggle();
|
||||
}
|
||||
|
||||
public interface IHasCameraMuteWithUnmuteReqeust : IHasCameraMute
|
||||
{
|
||||
event EventHandler VideoUnmuteRequested;
|
||||
}
|
||||
|
||||
public class CameraSelectedEventArgs : EventArgs
|
||||
{
|
||||
public CameraBase SelectedCamera { get; private set; }
|
||||
|
|
|
|||
|
|
@ -12,34 +12,40 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
{
|
||||
public class CodecActiveCallItem
|
||||
{
|
||||
[JsonProperty("name")]
|
||||
[JsonProperty("name", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public string Name { get; set; }
|
||||
|
||||
[JsonProperty("number")]
|
||||
[JsonProperty("number", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public string Number { get; set; }
|
||||
|
||||
[JsonProperty("type")]
|
||||
[JsonProperty("type", NullValueHandling = NullValueHandling.Ignore)]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public eCodecCallType Type { get; set; }
|
||||
|
||||
[JsonProperty("status")]
|
||||
[JsonProperty("status", NullValueHandling = NullValueHandling.Ignore)]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public eCodecCallStatus Status { get; set; }
|
||||
|
||||
[JsonProperty("direction")]
|
||||
[JsonProperty("direction", NullValueHandling = NullValueHandling.Ignore)]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public eCodecCallDirection Direction { get; set; }
|
||||
|
||||
[JsonProperty("id")]
|
||||
[JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public string Id { get; set; }
|
||||
|
||||
[JsonProperty("isOnHold", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool IsOnHold { get; set; }
|
||||
|
||||
[JsonProperty("duration", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public TimeSpan Duration { get; set; }
|
||||
|
||||
//public object CallMetaData { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Returns true when this call is any status other than
|
||||
/// Unknown, Disconnected, Disconnecting
|
||||
/// </summary>
|
||||
[JsonProperty("isActiveCall")]
|
||||
[JsonProperty("isActiveCall", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public bool IsActiveCall
|
||||
{
|
||||
get
|
||||
|
|
|
|||
|
|
@ -0,0 +1,23 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.Codec
|
||||
{
|
||||
public interface IHasCallHold
|
||||
{
|
||||
/// <summary>
|
||||
/// Put the specified call on hold
|
||||
/// </summary>
|
||||
/// <param name="activeCall"></param>
|
||||
void HoldCall(CodecActiveCallItem activeCall);
|
||||
|
||||
/// <summary>
|
||||
/// Resume the specified call
|
||||
/// </summary>
|
||||
/// <param name="activeCall"></param>
|
||||
void ResumeCall(CodecActiveCallItem activeCall);
|
||||
}
|
||||
}
|
||||
|
|
@ -23,9 +23,9 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
public enum eCodecOccurrenceType
|
||||
{
|
||||
Unknown = 0,
|
||||
Placed,
|
||||
Received,
|
||||
NoAnswer
|
||||
Placed = 1,
|
||||
Received = 2,
|
||||
NoAnswer = 3,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -49,6 +49,7 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
Stack<CodecDirectory> DirectoryBrowseHistoryStack { get; }
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
///
|
||||
/// </summary>
|
||||
|
|
@ -65,8 +66,9 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
{
|
||||
/// <summary>
|
||||
/// Represents the contents of the directory
|
||||
/// We don't want to serialize this for messages to MobileControl. MC can combine Contacts and Folders to get the same data
|
||||
/// </summary>
|
||||
[JsonProperty("directoryResults")]
|
||||
[JsonIgnore]
|
||||
public List<DirectoryItem> CurrentDirectoryResults { get; private set; }
|
||||
|
||||
[JsonProperty("contacts")]
|
||||
|
|
|
|||
|
|
@ -211,7 +211,7 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
get
|
||||
{
|
||||
var joinable = StartTime.AddMinutes(-MinutesBeforeMeeting) <= DateTime.Now
|
||||
&& DateTime.Now <= EndTime.AddMinutes(-5);
|
||||
&& DateTime.Now <= EndTime.AddSeconds(-_joinableCooldownSeconds);
|
||||
//Debug.Console(2, "Meeting Id: {0} joinable: {1}", Id, joinable);
|
||||
return joinable;
|
||||
}
|
||||
|
|
@ -231,11 +231,23 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
[JsonIgnore]
|
||||
public eMeetingEventChangeType NotifiedChangeTypes { get; set; }
|
||||
|
||||
[JsonIgnore] private readonly int _joinableCooldownSeconds;
|
||||
|
||||
|
||||
public Meeting()
|
||||
{
|
||||
Calls = new List<Call>();
|
||||
_joinableCooldownSeconds = 300;
|
||||
}
|
||||
|
||||
public Meeting(int joinableCooldownSeconds)
|
||||
{
|
||||
Calls = new List<Call>();
|
||||
_joinableCooldownSeconds = joinableCooldownSeconds;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region Overrides of Object
|
||||
|
||||
public override string ToString()
|
||||
|
|
|
|||
|
|
@ -99,7 +99,7 @@ namespace PepperDash.Essentials.Devices.Displays
|
|||
WarmupTime = 10000;
|
||||
CooldownTime = 8000;
|
||||
|
||||
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 2000, 120000, 300000, StatusGet);
|
||||
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 2000, 120000, 300000, StatusGet, true);
|
||||
DeviceManager.AddDevice(CommunicationMonitor);
|
||||
|
||||
VolumeIncrementer = new ActionIncrementer(655, 0, 65535, 800, 80,
|
||||
|
|
|
|||
|
|
@ -56,9 +56,9 @@ namespace PepperDash.Essentials.Devices.Common.Environment.Somfy
|
|||
PulseOutput(OpenRelay, RelayPulseTime);
|
||||
}
|
||||
|
||||
public override void StopOrPreset()
|
||||
public override void Stop()
|
||||
{
|
||||
Debug.Console(1, this, "Stopping or recalling preset on Shade: '{0}'", this.Name);
|
||||
Debug.Console(1, this, "Stopping Shade: '{0}'", this.Name);
|
||||
|
||||
PulseOutput(StopOrPresetRelay, RelayPulseTime);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -108,6 +108,8 @@
|
|||
<Compile Include="Codec\eCodecCallStatus.cs" />
|
||||
<Compile Include="Codec\eMeetingPrivacy.cs" />
|
||||
<Compile Include="Codec\iCodecAudio.cs" />
|
||||
<Compile Include="VideoCodec\ConvertiblePreset.cs" />
|
||||
<Compile Include="Codec\IHasCallHold.cs" />
|
||||
<Compile Include="Codec\IHasDoNotDisturb.cs" />
|
||||
<Compile Include="Codec\IHasExternalSourceSwitching.cs" />
|
||||
<Compile Include="ImageProcessors\TVOneCorio.cs" />
|
||||
|
|
@ -131,6 +133,7 @@
|
|||
<Compile Include="VideoCodec\Interfaces\IHasSelfviewSize.cs" />
|
||||
<Compile Include="VideoCodec\Interfaces\IHasStandbyMode.cs" />
|
||||
<Compile Include="VideoCodec\Interfaces\IHasStartMeeting.cs" />
|
||||
<Compile Include="VideoCodec\Interfaces\IJoinCalls.cs" />
|
||||
<Compile Include="VideoCodec\Interfaces\iVideoCodecInfo.cs" />
|
||||
<Compile Include="Codec\iHasCallFavorites.cs" />
|
||||
<Compile Include="Codec\iHasCallHistory.cs" />
|
||||
|
|
@ -182,6 +185,7 @@
|
|||
<Compile Include="VideoCodec\MockVC\MockVC.cs" />
|
||||
<Compile Include="VideoCodec\CiscoCodec\xStatus.cs" />
|
||||
<Compile Include="VideoCodec\VideoCodecBase.cs" />
|
||||
<Compile Include="VideoCodec\ZoomRoom\IZoomWirelessShareInstructions.cs" />
|
||||
<Compile Include="VideoCodec\ZoomRoom\ResponseObjects.cs" />
|
||||
<Compile Include="VideoCodec\ZoomRoom\ZoomRoom.cs" />
|
||||
<Compile Include="VideoCodec\ZoomRoom\ZoomRoomCamera.cs" />
|
||||
|
|
|
|||
|
|
@ -377,5 +377,70 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
|
||||
return meetings;
|
||||
}
|
||||
|
||||
public static List<Meeting> GetGenericMeetingsFromBookingResult(List<Booking> bookings, int joinableCooldownSeconds)
|
||||
{
|
||||
var meetings = new List<Meeting>();
|
||||
|
||||
if (Debug.Level > 0)
|
||||
{
|
||||
Debug.Console(1, "Meetings List:\n");
|
||||
}
|
||||
|
||||
foreach (Booking b in bookings)
|
||||
{
|
||||
var meeting = new Meeting(joinableCooldownSeconds);
|
||||
|
||||
if (b.Id != null)
|
||||
meeting.Id = b.Id.Value;
|
||||
if (b.Organizer != null)
|
||||
meeting.Organizer = string.Format("{0}, {1}", b.Organizer.LastName.Value, b.Organizer.FirstName.Value);
|
||||
if (b.Title != null)
|
||||
meeting.Title = b.Title.Value;
|
||||
if (b.Agenda != null)
|
||||
meeting.Agenda = b.Agenda.Value;
|
||||
if (b.Time != null)
|
||||
{
|
||||
meeting.StartTime = b.Time.StartTime.Value;
|
||||
meeting.EndTime = b.Time.EndTime.Value;
|
||||
}
|
||||
if (b.Privacy != null)
|
||||
meeting.Privacy = CodecCallPrivacy.ConvertToDirectionEnum(b.Privacy.Value);
|
||||
|
||||
//#warning Update this ConnectMode conversion after testing onsite. Expected value is "OBTP", but in PD NYC Test scenarios, "Manual" is being returned for OBTP meetings
|
||||
if (b.DialInfo.ConnectMode != null)
|
||||
if (b.DialInfo.ConnectMode.Value.ToLower() == "obtp" || b.DialInfo.ConnectMode.Value.ToLower() == "manual")
|
||||
meeting.IsOneButtonToPushMeeting = true;
|
||||
|
||||
if (b.DialInfo.Calls.Call != null)
|
||||
{
|
||||
foreach (Call c in b.DialInfo.Calls.Call)
|
||||
{
|
||||
meeting.Calls.Add(new PepperDash.Essentials.Devices.Common.Codec.Call()
|
||||
{
|
||||
Number = c.Number.Value,
|
||||
Protocol = c.Protocol.Value,
|
||||
CallRate = c.CallRate.Value,
|
||||
CallType = c.CallType.Value
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
meetings.Add(meeting);
|
||||
|
||||
if (Debug.Level > 0)
|
||||
{
|
||||
Debug.Console(1, "Title: {0}, ID: {1}, Organizer: {2}, Agenda: {3}", meeting.Title, meeting.Id, meeting.Organizer, meeting.Agenda);
|
||||
Debug.Console(1, " Start Time: {0}, End Time: {1}, Duration: {2}", meeting.StartTime, meeting.EndTime, meeting.Duration);
|
||||
Debug.Console(1, " Joinable: {0}\n", meeting.Joinable);
|
||||
}
|
||||
}
|
||||
|
||||
meetings.OrderBy(m => m.StartTime);
|
||||
|
||||
return meetings;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -41,12 +41,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
|
||||
public void PanLeft()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Call FarEndControl Camera Move Value: Left CallId: {0}", CallId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Call FarEndControl Camera Move Value: Left CallId: {0}", CallId));
|
||||
}
|
||||
|
||||
public void PanRight()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Call FarEndControl Camera Move Value: Right CallId: {0}", CallId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Call FarEndControl Camera Move Value: Right CallId: {0}", CallId));
|
||||
}
|
||||
|
||||
public void PanStop()
|
||||
|
|
@ -60,12 +60,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
|
||||
public void TiltDown()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Call FarEndControl Camera Move Value: Down CallId: {0}", CallId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Call FarEndControl Camera Move Value: Down CallId: {0}", CallId));
|
||||
}
|
||||
|
||||
public void TiltUp()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Call FarEndControl Camera Move Value: Up CallId: {0}", CallId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Call FarEndControl Camera Move Value: Up CallId: {0}", CallId));
|
||||
}
|
||||
|
||||
public void TiltStop()
|
||||
|
|
@ -79,12 +79,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
|
||||
public void ZoomIn()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Call FarEndControl Camera Move Value: ZoomIn CallId: {0}", CallId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Call FarEndControl Camera Move Value: ZoomIn CallId: {0}", CallId));
|
||||
}
|
||||
|
||||
public void ZoomOut()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Call FarEndControl Camera Move Value: ZoomOut CallId: {0}", CallId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Call FarEndControl Camera Move Value: ZoomOut CallId: {0}", CallId));
|
||||
}
|
||||
|
||||
public void ZoomStop()
|
||||
|
|
@ -97,7 +97,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
|
||||
void Stop()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Call FarEndControl Camera Stop CallId: {0}", CallId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Call FarEndControl Camera Stop CallId: {0}", CallId));
|
||||
}
|
||||
|
||||
public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge)
|
||||
|
|
@ -116,7 +116,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
/// <summary>
|
||||
/// The ID of the camera on the codec
|
||||
/// </summary>
|
||||
protected uint CameraId { get; private set; }
|
||||
public uint CameraId { get; private set; }
|
||||
|
||||
/// <summary>
|
||||
/// Valid range 1-15
|
||||
|
|
@ -202,7 +202,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Pan: Left PanSpeed: {1}", CameraId, PanSpeed));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Pan: Left PanSpeed: {1}", CameraId, PanSpeed));
|
||||
isPanning = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -211,14 +211,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Pan: Right PanSpeed: {1}", CameraId, PanSpeed));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Pan: Right PanSpeed: {1}", CameraId, PanSpeed));
|
||||
isPanning = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void PanStop()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Pan: Stop", CameraId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Pan: Stop", CameraId));
|
||||
isPanning = false;
|
||||
}
|
||||
|
||||
|
|
@ -232,7 +232,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Tilt: Down TiltSpeed: {1}", CameraId, TiltSpeed));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Tilt: Down TiltSpeed: {1}", CameraId, TiltSpeed));
|
||||
isTilting = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -241,14 +241,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Tilt: Up TiltSpeed: {1}", CameraId, TiltSpeed));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Tilt: Up TiltSpeed: {1}", CameraId, TiltSpeed));
|
||||
isTilting = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void TiltStop()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Tilt: Stop", CameraId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Tilt: Stop", CameraId));
|
||||
isTilting = false;
|
||||
}
|
||||
|
||||
|
|
@ -260,7 +260,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Zoom: In ZoomSpeed: {1}", CameraId, ZoomSpeed));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Zoom: In ZoomSpeed: {1}", CameraId, ZoomSpeed));
|
||||
isZooming = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -269,14 +269,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Zoom: Out ZoomSpeed: {1}", CameraId, ZoomSpeed));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Zoom: Out ZoomSpeed: {1}", CameraId, ZoomSpeed));
|
||||
isZooming = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void ZoomStop()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Zoom: Stop", CameraId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Zoom: Stop", CameraId));
|
||||
isZooming = false;
|
||||
}
|
||||
|
||||
|
|
@ -288,7 +288,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Focus: Near", CameraId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Focus: Near", CameraId));
|
||||
isFocusing = true;
|
||||
}
|
||||
}
|
||||
|
|
@ -297,20 +297,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
if (!isMoving)
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Focus: Far", CameraId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Focus: Far", CameraId));
|
||||
isFocusing = true;
|
||||
}
|
||||
}
|
||||
|
||||
public void FocusStop()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera Ramp CameraId: {0} Focus: Stop", CameraId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera Ramp CameraId: {0} Focus: Stop", CameraId));
|
||||
isFocusing = false;
|
||||
}
|
||||
|
||||
public void TriggerAutoFocus()
|
||||
{
|
||||
ParentCodec.SendText(string.Format("xCommand Camera TriggerAutofocus CameraId: {0}", CameraId));
|
||||
ParentCodec.EnqueueCommand(string.Format("xCommand Camera TriggerAutofocus CameraId: {0}", CameraId));
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
|||
|
|
@ -9,11 +9,39 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
{
|
||||
#region Digital
|
||||
|
||||
[JoinName("PresentationLocalOnly")]
|
||||
public JoinDataComplete PresentationLocalOnly = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 205,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Presentation Local Only Feedback",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("PresentationLocalRemote")]
|
||||
public JoinDataComplete PresentationLocalRemote = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 206,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Presentation Local and Remote Feedback",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("ActivateDoNotDisturbMode")]
|
||||
public JoinDataComplete ActivateDoNotDisturbMode = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 221,
|
||||
JoinNumber = 241,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
|
|
@ -27,7 +55,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public JoinDataComplete DeactivateDoNotDisturbMode = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 222,
|
||||
JoinNumber = 242,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
|
|
@ -41,7 +69,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public JoinDataComplete ToggleDoNotDisturbMode = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 223,
|
||||
JoinNumber = 243,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
|
|
@ -55,7 +83,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public JoinDataComplete ActivateStandby = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 226,
|
||||
JoinNumber = 246,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
|
|
@ -69,7 +97,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public JoinDataComplete DeactivateStandby = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 227,
|
||||
JoinNumber = 247,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
|
|
@ -83,7 +111,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public JoinDataComplete ActivateHalfWakeMode = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 228,
|
||||
JoinNumber = 248,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
|
|
@ -97,7 +125,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public JoinDataComplete EnteringStandbyMode = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 229,
|
||||
JoinNumber = 249,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
|
|
@ -112,12 +140,55 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
|
||||
#region Analog
|
||||
|
||||
[JoinName("RingtoneVolume")]
|
||||
public JoinDataComplete RingtoneVolume = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 21,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Ringtone volume set/FB. Valid values are 0 - 100 in increments of 5 (5, 10, 15, 20, etc.)",
|
||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||
JoinType = eJoinType.Analog
|
||||
});
|
||||
|
||||
[JoinName("PresentationSource")]
|
||||
public JoinDataComplete PresentationSource = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 201,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Presentation set/FB. Valid values are 0 - 6 depending on the codec model.",
|
||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||
JoinType = eJoinType.Analog
|
||||
});
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region Serials
|
||||
|
||||
[JoinName("CommandToDevice")]
|
||||
public JoinDataComplete CommandToDevice = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 5,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Sends a serial command to the device. Do not include the delimiter, it will be added automatically.",
|
||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
||||
JoinType = eJoinType.Serial
|
||||
});
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -50,8 +50,16 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
public uint PhonebookResultsLimit { get; set; }
|
||||
|
||||
[JsonProperty("UiBranding")]
|
||||
public BrandingLogoProperties UiBranding { get; set; }
|
||||
public BrandingLogoProperties UiBranding { get; set; }
|
||||
|
||||
[JsonProperty("cameraInfo")]
|
||||
public List<CameraInfo> CameraInfo { get; set; }
|
||||
|
||||
|
||||
public CiscoSparkCodecPropertiesConfig()
|
||||
{
|
||||
CameraInfo = new List<CameraInfo>();
|
||||
}
|
||||
}
|
||||
|
||||
public class SharingProperties
|
||||
|
|
@ -68,4 +76,14 @@ namespace PepperDash.Essentials.Devices.Common.Codec
|
|||
[JsonProperty("brandingUrl")]
|
||||
public string BrandingUrl { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Describes configuration information for the near end cameras
|
||||
/// </summary>
|
||||
public class CameraInfo
|
||||
{
|
||||
public int CameraNumber { get; set; }
|
||||
public string Name { get; set; }
|
||||
public int SourceId { get; set; }
|
||||
}
|
||||
}
|
||||
|
|
@ -1,14 +1,9 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core.Presets;
|
||||
using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
||||
{
|
||||
|
|
@ -26,44 +21,24 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
void CodecRoomPresetSelect(int preset);
|
||||
|
||||
void CodecRoomPresetStore(int preset, string description);
|
||||
|
||||
void SelectFarEndPreset(int preset);
|
||||
}
|
||||
|
||||
public static class RoomPresets
|
||||
{
|
||||
/// <summary>
|
||||
/// Converts Cisco RoomPresets to generic CameraPresets
|
||||
/// Converts non-generic RoomPresets to generic CameraPresets
|
||||
/// </summary>
|
||||
/// <param name="presets"></param>
|
||||
/// <returns></returns>
|
||||
public static List<CodecRoomPreset> GetGenericPresets(List<CiscoCodecStatus.RoomPreset> presets)
|
||||
public static List<TDestination> GetGenericPresets<TSource, TDestination>(this List<TSource> presets) where TSource : ConvertiblePreset where TDestination : PresetBase
|
||||
{
|
||||
var cameraPresets = new List<CodecRoomPreset>();
|
||||
|
||||
if (Debug.Level > 0)
|
||||
{
|
||||
Debug.Console(1, "Presets List:");
|
||||
}
|
||||
|
||||
foreach (CiscoCodecStatus.RoomPreset preset in presets)
|
||||
{
|
||||
try
|
||||
{
|
||||
var cameraPreset = new CodecRoomPreset(UInt16.Parse(preset.id), preset.Description.Value, preset.Defined.BoolValue, true);
|
||||
|
||||
cameraPresets.Add(cameraPreset);
|
||||
|
||||
if (Debug.Level > 0)
|
||||
{
|
||||
Debug.Console(1, "Added Preset ID: {0}, Description: {1}, IsDefined: {2}, isDefinable: {3}", cameraPreset.ID, cameraPreset.Description, cameraPreset.Defined, cameraPreset.IsDefinable);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(2, "Unable to convert preset: {0}. Error: {1}", preset.id, e);
|
||||
}
|
||||
}
|
||||
|
||||
return cameraPresets;
|
||||
return
|
||||
presets.Select(preset => preset.ConvertCodecPreset())
|
||||
.Where(newPreset => newPreset != null)
|
||||
.Cast<TDestination>()
|
||||
.ToList();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -112,16 +112,46 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class RingVolume
|
||||
public class RingVolume : ValueProperty
|
||||
{
|
||||
public string valueSpaceRef { get; set; }
|
||||
public string Value { get; set; }
|
||||
|
||||
string _Value;
|
||||
|
||||
/// <summary>
|
||||
/// Sets Value and triggers the action when set
|
||||
/// </summary>
|
||||
public string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Value;
|
||||
}
|
||||
set
|
||||
{
|
||||
_Value = value;
|
||||
OnValueChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public int Volume
|
||||
{
|
||||
get
|
||||
{
|
||||
return Int32.Parse(_Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class SoundsAndAlerts
|
||||
{
|
||||
public RingTone RingTone { get; set; }
|
||||
public RingVolume RingVolume { get; set; }
|
||||
|
||||
public SoundsAndAlerts()
|
||||
{
|
||||
RingVolume = new RingVolume();
|
||||
}
|
||||
}
|
||||
|
||||
public class Audio
|
||||
|
|
@ -131,6 +161,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public Microphones Microphones { get; set; }
|
||||
public Output Output { get; set; }
|
||||
public SoundsAndAlerts SoundsAndAlerts { get; set; }
|
||||
|
||||
|
||||
public Audio()
|
||||
{
|
||||
SoundsAndAlerts = new SoundsAndAlerts();
|
||||
}
|
||||
}
|
||||
|
||||
public class DefaultMode
|
||||
|
|
@ -340,6 +376,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public Delay Delay { get; set; }
|
||||
public Mode9 Mode { get; set; }
|
||||
public Mute2 Mute { get; set; }
|
||||
|
||||
public AutoAnswer()
|
||||
{
|
||||
Mode = new Mode9();
|
||||
Delay = new Delay();
|
||||
Mute = new Mute2();
|
||||
}
|
||||
}
|
||||
|
||||
public class Protocol
|
||||
|
|
@ -440,6 +483,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public MaxTotalTransmitCallRate MaxTotalTransmitCallRate { get; set; }
|
||||
public MaxTransmitCallRate MaxTransmitCallRate { get; set; }
|
||||
public MultiStream MultiStream { get; set; }
|
||||
|
||||
public Conference()
|
||||
{
|
||||
AutoAnswer = new AutoAnswer();
|
||||
}
|
||||
}
|
||||
|
||||
public class LoginName
|
||||
|
|
@ -690,6 +738,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public Assignment Assignment { get; set; }
|
||||
public Gateway Gateway { get; set; }
|
||||
public SubnetMask SubnetMask { get; set; }
|
||||
|
||||
public IPv4()
|
||||
{
|
||||
Address = new Address4();
|
||||
}
|
||||
}
|
||||
|
||||
public class Address5
|
||||
|
|
@ -841,6 +894,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public RemoteAccess RemoteAccess { get; set; }
|
||||
public Speed Speed { get; set; }
|
||||
public VLAN VLAN { get; set; }
|
||||
|
||||
public Network()
|
||||
{
|
||||
IPv4 = new IPv4();
|
||||
}
|
||||
}
|
||||
|
||||
public class Mode19
|
||||
|
|
@ -1797,11 +1855,23 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public UserInterface UserInterface { get; set; }
|
||||
public UserManagement UserManagement { get; set; }
|
||||
public Video2 Video { get; set; }
|
||||
|
||||
public Configuration()
|
||||
{
|
||||
Audio = new Audio();
|
||||
Conference = new Conference();
|
||||
Network = new List<Network>();
|
||||
}
|
||||
}
|
||||
|
||||
public class RootObject
|
||||
{
|
||||
public Configuration Configuration { get; set; }
|
||||
|
||||
public RootObject()
|
||||
{
|
||||
Configuration = new Configuration();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -9,31 +9,32 @@ using Newtonsoft.Json.Linq;
|
|||
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Devices.Common.VideoCodec.CiscoCodec;
|
||||
using PepperDash.Essentials.Core.Presets;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
||||
{
|
||||
// Helper Classes for Proerties
|
||||
public abstract class ValueProperty
|
||||
{
|
||||
/// <summary>
|
||||
/// Triggered when Value is set
|
||||
/// </summary>
|
||||
public Action ValueChangedAction { get; set; }
|
||||
|
||||
protected void OnValueChanged()
|
||||
{
|
||||
var a = ValueChangedAction;
|
||||
if (a != null)
|
||||
a();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// This class exists to capture serialized data sent back by a Cisco codec in JSON output mode
|
||||
/// </summary>
|
||||
public class CiscoCodecStatus
|
||||
{
|
||||
// Helper Classes for Proerties
|
||||
public abstract class ValueProperty
|
||||
{
|
||||
/// <summary>
|
||||
/// Triggered when Value is set
|
||||
/// </summary>
|
||||
public Action ValueChangedAction { get; set; }
|
||||
|
||||
protected void OnValueChanged()
|
||||
{
|
||||
var a = ValueChangedAction;
|
||||
if (a != null)
|
||||
a();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public class ConnectionStatus
|
||||
{
|
||||
|
|
@ -262,11 +263,30 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class DectectedConnector
|
||||
{
|
||||
public string Value { get; set; }
|
||||
|
||||
public int ConnectorId
|
||||
{
|
||||
get
|
||||
{
|
||||
if(!string.IsNullOrEmpty(Value))
|
||||
{
|
||||
return Convert.ToUInt16(Value);
|
||||
}
|
||||
else
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Camera
|
||||
{
|
||||
public string id { get; set; }
|
||||
public Capabilities Capabilities { get; set; }
|
||||
public Connected Connected { get; set; }
|
||||
public DectectedConnector DetectedConnector { get; set; }
|
||||
public Flip Flip { get; set; }
|
||||
public HardwareID HardwareID { get; set; }
|
||||
public MacAddress MacAddress { get; set; }
|
||||
|
|
@ -275,6 +295,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public Position Position { get; set; }
|
||||
public SerialNumber SerialNumber { get; set; }
|
||||
public SoftwareID SoftwareID { get; set; }
|
||||
|
||||
public Camera()
|
||||
{
|
||||
Manufacturer = new Manufacturer();
|
||||
Model = new Model();
|
||||
DetectedConnector = new DectectedConnector();
|
||||
}
|
||||
}
|
||||
|
||||
public class Availability : ValueProperty
|
||||
|
|
@ -298,11 +325,34 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
}
|
||||
}
|
||||
|
||||
public class CallStatus : ValueProperty
|
||||
{
|
||||
string _Value;
|
||||
public bool BoolValue { get; private set; }
|
||||
|
||||
|
||||
public string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Value;
|
||||
}
|
||||
set
|
||||
{
|
||||
// If the incoming value is "Active" it sets the BoolValue true, otherwise sets it false
|
||||
_Value = value;
|
||||
BoolValue = value == "Connected";
|
||||
OnValueChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Status2 : ValueProperty
|
||||
{
|
||||
string _Value;
|
||||
public bool BoolValue { get; private set; }
|
||||
|
||||
|
||||
public string Value
|
||||
{
|
||||
get
|
||||
|
|
@ -558,9 +608,47 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
}
|
||||
}
|
||||
|
||||
public class SendingMode
|
||||
public class SendingMode : ValueProperty
|
||||
{
|
||||
public string Value { get; set; }
|
||||
string _Value;
|
||||
|
||||
/// <summary>
|
||||
/// Sets Value and triggers the action when set
|
||||
/// </summary>
|
||||
public string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Value;
|
||||
}
|
||||
set
|
||||
{
|
||||
_Value = value;
|
||||
OnValueChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public bool LocalOnly
|
||||
{
|
||||
get
|
||||
{
|
||||
if(string.IsNullOrEmpty(_Value))
|
||||
return false;
|
||||
|
||||
return _Value.ToLower() == "localonly";
|
||||
}
|
||||
}
|
||||
|
||||
public bool LocalRemote
|
||||
{
|
||||
get
|
||||
{
|
||||
if(string.IsNullOrEmpty(_Value))
|
||||
return false;
|
||||
|
||||
return _Value.ToLower() == "localremote";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class LocalInstance
|
||||
|
|
@ -573,6 +661,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public LocalInstance()
|
||||
{
|
||||
Source = new Source2();
|
||||
SendingMode = new SendingMode();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -881,6 +970,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public Address4 Address { get; set; }
|
||||
public Gateway Gateway { get; set; }
|
||||
public SubnetMask SubnetMask { get; set; }
|
||||
|
||||
public IPv4()
|
||||
{
|
||||
Address = new Address4();
|
||||
}
|
||||
}
|
||||
|
||||
public class Address5
|
||||
|
|
@ -923,6 +1017,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public IPv4 IPv4 { get; set; }
|
||||
public IPv6 IPv6 { get; set; }
|
||||
public VLAN VLAN { get; set; }
|
||||
|
||||
public Network()
|
||||
{
|
||||
IPv4 = new IPv4();
|
||||
}
|
||||
}
|
||||
|
||||
public class CurrentAddress
|
||||
|
|
@ -1949,9 +2048,30 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class Duration
|
||||
public class Duration : ValueProperty
|
||||
{
|
||||
public string Value { get; set; }
|
||||
private string _Value;
|
||||
|
||||
public string Value
|
||||
{
|
||||
get
|
||||
{
|
||||
return _Value;
|
||||
}
|
||||
set
|
||||
{
|
||||
_Value = value;
|
||||
OnValueChanged();
|
||||
}
|
||||
}
|
||||
|
||||
public TimeSpan DurationValue
|
||||
{
|
||||
get
|
||||
{
|
||||
return new TimeSpan(0, 0, Int32.Parse(_Value));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class FacilityServiceId
|
||||
|
|
@ -1964,9 +2084,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public string Value { get; set; }
|
||||
}
|
||||
|
||||
public class PlacedOnHold
|
||||
public class PlacedOnHold : ValueProperty
|
||||
{
|
||||
public string Value { get; set; }
|
||||
public bool BoolValue { get; private set; }
|
||||
|
||||
public string Value
|
||||
{
|
||||
set
|
||||
{
|
||||
// If the incoming value is "True" it sets the BoolValue true, otherwise sets it false
|
||||
BoolValue = value == "True";
|
||||
OnValueChanged();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Protocol
|
||||
|
|
@ -2007,13 +2137,14 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
public Protocol Protocol { get; set; }
|
||||
public ReceiveCallRate ReceiveCallRate { get; set; }
|
||||
public RemoteNumber RemoteNumber { get; set; }
|
||||
public Status2 Status { get; set; }
|
||||
public CallStatus Status { get; set; }
|
||||
public TransmitCallRate TransmitCallRate { get; set; }
|
||||
|
||||
public Call()
|
||||
{
|
||||
CallType = new CallType();
|
||||
Status = new Status2();
|
||||
Status = new CallStatus();
|
||||
Duration = new Duration();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2055,7 +2186,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
}
|
||||
}
|
||||
|
||||
public class RoomPreset
|
||||
public class RoomPreset : ConvertiblePreset
|
||||
{
|
||||
public string id { get; set; }
|
||||
public Defined Defined { get; set; }
|
||||
|
|
@ -2068,7 +2199,24 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
Description = new Description2();
|
||||
Type = new Type5();
|
||||
}
|
||||
}
|
||||
|
||||
public override PresetBase ConvertCodecPreset()
|
||||
{
|
||||
try
|
||||
{
|
||||
var preset = new CodecRoomPreset(UInt16.Parse(id), Description.Value, Defined.BoolValue, true);
|
||||
|
||||
Debug.Console(2, "Preset ID {0} Converted from Cisco Codec Preset to Essentials Preset");
|
||||
|
||||
return preset;
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
Debug.Console(2, "Unable to convert preset: {0}. Error: {1}", id, e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -2114,6 +2262,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
|
|||
SystemUnit = new SystemUnit();
|
||||
Video = new Video();
|
||||
Conference = new Conference2();
|
||||
Network = new List<Network>();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,9 @@
|
|||
using PepperDash.Essentials.Core.Presets;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
||||
{
|
||||
public abstract class ConvertiblePreset
|
||||
{
|
||||
public abstract PresetBase ConvertCodecPreset();
|
||||
}
|
||||
}
|
||||
|
|
@ -22,6 +22,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
void MinMaxLayoutToggle();
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// Defines the requirements for Zoom Room layout control
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -42,9 +42,13 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
|
|||
public Boolean WaitingForHost { get; private set; }
|
||||
[JsonProperty("isLocked", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public Boolean IsLocked { get; private set; }
|
||||
[JsonProperty("isRecording", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public Boolean IsRecording { get; private set; }
|
||||
[JsonProperty("canRecord", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public Boolean CanRecord { get; private set; }
|
||||
|
||||
|
||||
public MeetingInfo(string id, string name, string host, string password, string shareStatus, bool isHost, bool isSharingMeeting, bool waitingForHost, bool isLocked)
|
||||
public MeetingInfo(string id, string name, string host, string password, string shareStatus, bool isHost, bool isSharingMeeting, bool waitingForHost, bool isLocked, bool isRecording, bool canRecord)
|
||||
{
|
||||
Id = id;
|
||||
Name = name;
|
||||
|
|
@ -55,6 +59,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
|
|||
IsSharingMeeting = isSharingMeeting;
|
||||
WaitingForHost = waitingForHost;
|
||||
IsLocked = isLocked;
|
||||
IsRecording = isRecording;
|
||||
CanRecord = CanRecord;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,4 +15,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
|
|||
void StopRecording();
|
||||
void ToggleRecording();
|
||||
}
|
||||
|
||||
public interface IHasMeetingRecordingWithPrompt : IHasMeetingRecording
|
||||
{
|
||||
BoolFeedback RecordConsentPromptIsVisible { get; }
|
||||
|
||||
/// <summary>
|
||||
/// Used to agree or disagree to the meeting being recorded when prompted
|
||||
/// </summary>
|
||||
/// <param name="agree"></param>
|
||||
void RecordingPromptAcknowledgement(bool agree);
|
||||
}
|
||||
}
|
||||
|
|
@ -24,6 +24,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Interfaces
|
|||
/// </summary>
|
||||
/// <param name="participant"></param>
|
||||
void SetParticipantAsHost(int userId);
|
||||
|
||||
/// <summary>
|
||||
/// Admits a participant from the waiting room
|
||||
/// </summary>
|
||||
/// <param name="userId"></param>
|
||||
void AdmitParticipantFromWaitingRoom(int userId);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
|
|||
|
|
@ -3,9 +3,9 @@
|
|||
public interface IHasPresentationOnlyMeeting
|
||||
{
|
||||
void StartSharingOnlyMeeting();
|
||||
void StartSharingOnlyMeeting(eSharingMeetingMode mode);
|
||||
void StartSharingOnlyMeeting(eSharingMeetingMode mode, ushort duration);
|
||||
void StartSharingOnlyMeeting(eSharingMeetingMode mode, ushort duration, string password);
|
||||
void StartSharingOnlyMeeting(eSharingMeetingMode displayMode);
|
||||
void StartSharingOnlyMeeting(eSharingMeetingMode displayMode, uint duration);
|
||||
void StartSharingOnlyMeeting(eSharingMeetingMode displayMode, uint duration, string password);
|
||||
void StartNormalMeetingFromSharingOnlyMeeting();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
using PepperDash.Essentials.Core;
|
||||
using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
|
||||
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
||||
|
||||
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
using PepperDash.Essentials.Devices.Common.VideoCodec.Cisco;
|
||||
using PepperDash.Essentials.Devices.Common.VideoCodec;
|
||||
|
||||
namespace PepperDash.Essentials.Core.DeviceTypeInterfaces
|
||||
{
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using PepperDash.Essentials.Devices.Common.Codec;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
||||
{
|
||||
public interface IJoinCalls
|
||||
{
|
||||
void JoinCall(CodecActiveCallItem activeCall);
|
||||
void JoinAllCalls();
|
||||
}
|
||||
}
|
||||
|
|
@ -764,6 +764,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
|
|||
SetConfig(Config);
|
||||
}
|
||||
|
||||
public void SelectFarEndPreset(int i)
|
||||
{
|
||||
Debug.Console(1, this, "Selecting Far End Preset: {0}", i);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
protected override void CustomSetConfig(DeviceConfig config)
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -0,0 +1,28 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
using PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
{
|
||||
public class ShareInfoEventArgs : EventArgs
|
||||
{
|
||||
public zStatus.Sharing SharingStatus { get; private set; }
|
||||
|
||||
public ShareInfoEventArgs(zStatus.Sharing status)
|
||||
{
|
||||
SharingStatus = status;
|
||||
}
|
||||
}
|
||||
|
||||
public interface IZoomWirelessShareInstructions
|
||||
{
|
||||
event EventHandler<ShareInfoEventArgs> ShareInfoChanged;
|
||||
|
||||
zStatus.Sharing SharingState { get; }
|
||||
}
|
||||
}
|
||||
|
|
@ -31,10 +31,15 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
|
||||
protected void NotifyPropertyChanged(string propertyName)
|
||||
{
|
||||
if (PropertyChanged != null)
|
||||
{
|
||||
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
var handler = PropertyChanged;
|
||||
if (handler != null)
|
||||
{
|
||||
handler(this, new PropertyChangedEventArgs(propertyName));
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.Console(2, "PropertyChanged event is NULL");
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
@ -298,11 +303,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
{
|
||||
var contact = new InvitableDirectoryContact { Name = c.ScreenName, ContactId = c.Jid };
|
||||
|
||||
contact.ContactMethods.Add(new ContactMethod() { Number = c.Jid, Device = eContactMethodDevice.Video, CallType = eContactMethodCallType.Video, ContactMethodId = c.Jid });
|
||||
contact.ContactMethods.Add(new ContactMethod()
|
||||
{
|
||||
Number = c.Jid,
|
||||
Device = eContactMethodDevice.Video,
|
||||
CallType = eContactMethodCallType.Video,
|
||||
ContactMethodId = c.Jid
|
||||
});
|
||||
|
||||
if (folders.Count > 0)
|
||||
{
|
||||
contact.ParentFolderId = c.IsZoomRoom ? "rooms" : "contacts";
|
||||
contact.ParentFolderId = c.IsZoomRoom
|
||||
? roomFolder.FolderId // "rooms"
|
||||
: contactFolder.FolderId; // "contacts"
|
||||
}
|
||||
|
||||
contacts.Add(contact);
|
||||
|
|
@ -429,13 +442,21 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
public bool supports_Web_Settings_Push { get; set; }
|
||||
}
|
||||
|
||||
public enum eDisplayState
|
||||
{
|
||||
None,
|
||||
Laptop,
|
||||
IOS,
|
||||
}
|
||||
|
||||
public class Sharing : NotifiableObject
|
||||
{
|
||||
private string _dispState;
|
||||
private eDisplayState _dispState;
|
||||
private string _password;
|
||||
private bool _isAirHostClientConnected;
|
||||
private bool _isSharingBlackMagic;
|
||||
private bool _isDirectPresentationConnected;
|
||||
private bool _isBlackMagicConnected;
|
||||
|
||||
|
||||
public string directPresentationPairingCode { get; set; }
|
||||
|
|
@ -443,7 +464,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
/// Laptop client sharing key
|
||||
/// </summary>
|
||||
public string directPresentationSharingKey { get; set; }
|
||||
public string dispState
|
||||
public eDisplayState dispState
|
||||
{
|
||||
get
|
||||
{
|
||||
|
|
@ -472,7 +493,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
}
|
||||
}
|
||||
|
||||
public bool isBlackMagicConnected { get; set; }
|
||||
public bool isBlackMagicConnected
|
||||
{
|
||||
get { return _isBlackMagicConnected; }
|
||||
set
|
||||
{
|
||||
if (value != _isBlackMagicConnected)
|
||||
{
|
||||
_isBlackMagicConnected = value;
|
||||
NotifyPropertyChanged("isBlackMagicConnected");
|
||||
}
|
||||
}
|
||||
}
|
||||
public bool isBlackMagicDataAvailable { get; set; }
|
||||
|
||||
public bool isDirectPresentationConnected
|
||||
|
|
@ -501,8 +533,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// IOS Airplay code
|
||||
/// </summary>
|
||||
|
|
@ -617,6 +647,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
// backer variables
|
||||
private bool _can_Switch_Speaker_View;
|
||||
private bool _can_Switch_Wall_View;
|
||||
private bool _can_Switch_Strip_View;
|
||||
private bool _can_Switch_Share_On_All_Screens;
|
||||
private bool _can_Switch_Floating_Share_Content;
|
||||
private bool _is_In_First_Page;
|
||||
|
|
@ -704,6 +735,23 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
}
|
||||
}
|
||||
|
||||
[JsonProperty("can_Switch_Strip_View")]
|
||||
public bool can_Switch_Strip_View
|
||||
{
|
||||
get
|
||||
{
|
||||
return _can_Switch_Strip_View;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value != _can_Switch_Strip_View)
|
||||
{
|
||||
_can_Switch_Strip_View = value;
|
||||
NotifyPropertyChanged("can_Switch_Strip_View");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
[JsonProperty("is_In_First_Page")]
|
||||
public bool is_In_First_Page
|
||||
{
|
||||
|
|
@ -765,11 +813,43 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
public class CallRecordInfo : NotifiableObject
|
||||
{
|
||||
private bool _meetingIsBeingRecorded;
|
||||
private bool _canRecord;
|
||||
private bool _emailRequired;
|
||||
|
||||
public bool canRecord { get; set; }
|
||||
public bool emailRequired { get; set; }
|
||||
public bool amIRecording { get; set; }
|
||||
|
||||
public bool canRecord
|
||||
{
|
||||
get
|
||||
{
|
||||
return _canRecord;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value != _canRecord)
|
||||
{
|
||||
_canRecord = value;
|
||||
NotifyPropertyChanged("canRecord");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool emailRequired
|
||||
{
|
||||
get
|
||||
{
|
||||
return _emailRequired;
|
||||
}
|
||||
set
|
||||
{
|
||||
if (value != _emailRequired)
|
||||
{
|
||||
_emailRequired = value;
|
||||
NotifyPropertyChanged("emailRequired");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public bool meetingIsBeingRecorded
|
||||
{
|
||||
get
|
||||
|
|
@ -778,13 +858,31 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
}
|
||||
set
|
||||
{
|
||||
//Debug.Console(2, "************************************setting value of meetingIsBeingRecorded to: {0}", value);
|
||||
if (value != _meetingIsBeingRecorded)
|
||||
{
|
||||
_meetingIsBeingRecorded = value;
|
||||
//Debug.Console(2, "********************************set value of meetingIsBeingRecorded to: {0}", _meetingIsBeingRecorded);
|
||||
NotifyPropertyChanged("meetingIsBeingRecorded");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Indicates if recording is allowed (when meeting capable and and email is not required to be entered by the user)
|
||||
/// </summary>
|
||||
public bool AllowRecord
|
||||
{
|
||||
get
|
||||
{
|
||||
return canRecord && !emailRequired;
|
||||
}
|
||||
}
|
||||
|
||||
public CallRecordInfo()
|
||||
{
|
||||
Debug.Console(2, Debug.ErrorLogLevel.Notice, "********************************************* CallRecordInfo() ******************************************");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -7,6 +7,8 @@ using Crestron.SimplSharpPro.DeviceSupport;
|
|||
using PepperDash.Essentials.Core.Bridges;
|
||||
using PepperDash.Essentials.Devices.Common.Cameras;
|
||||
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
{
|
||||
public enum eZoomRoomCameraState
|
||||
|
|
@ -34,7 +36,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
{
|
||||
protected ZoomRoom ParentCodec { get; private set; }
|
||||
|
||||
public int Id = 0; // ID of near end selected camara is always 0
|
||||
[JsonProperty("id", NullValueHandling = NullValueHandling.Ignore)]
|
||||
public int? Id = 0; // ID of near end selected camara is always 0
|
||||
|
||||
private int ContinueTime = 10; // number of milliseconds between issuing continue commands
|
||||
|
||||
|
|
|
|||
|
|
@ -8,9 +8,22 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
{
|
||||
#region Digital
|
||||
|
||||
// TODO [ ] Issue #868
|
||||
[JoinName("ShowPasswordPrompt")]
|
||||
public JoinDataComplete ShowPasswordPrompt = new JoinDataComplete(
|
||||
[JoinName("CancelJoinAttempt")]
|
||||
public JoinDataComplete CancelJoinAttempt = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 5,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Pulse to hide the password prompt",
|
||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("MeetingPasswordRequired")]
|
||||
public JoinDataComplete MeetingPasswordRequired = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 6,
|
||||
|
|
@ -23,7 +36,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
// TODO [ ] Issue #868
|
||||
[JoinName("PasswordIncorrect")]
|
||||
public JoinDataComplete PasswordIncorrect = new JoinDataComplete(
|
||||
new JoinData
|
||||
|
|
@ -38,8 +50,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
// TODO [ ] Issue #868
|
||||
[JoinName("PassowrdLoginFailed")]
|
||||
[JoinName("PasswordLoginFailed")]
|
||||
public JoinDataComplete PasswordLoginFailed = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
|
|
@ -53,7 +64,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
// TODO [ ] Issue #868
|
||||
[JoinName("WaitingForHost")]
|
||||
public JoinDataComplete WaitingForHost = new JoinDataComplete(
|
||||
new JoinData
|
||||
|
|
@ -68,7 +78,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
// TODO [ ] Issue #868
|
||||
[JoinName("IsHost")]
|
||||
public JoinDataComplete IsHost = new JoinDataComplete(
|
||||
new JoinData
|
||||
|
|
@ -83,7 +92,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
// TODO [ ] Issue #868
|
||||
[JoinName("StartMeetingNow")]
|
||||
public JoinDataComplete StartMeetingNow = new JoinDataComplete(
|
||||
new JoinData
|
||||
|
|
@ -93,12 +101,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "FB Indicates the password prompt is active",
|
||||
Description = "Pulse to start an ad-hoc meeting with the default duration",
|
||||
JoinCapabilities = eJoinCapabilities.FromSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
// TODO [ ] Issue #868
|
||||
[JoinName("ShareOnlyMeeting")]
|
||||
public JoinDataComplete ShareOnlyMeeting = new JoinDataComplete(
|
||||
new JoinData
|
||||
|
|
@ -113,7 +120,6 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
// TODO [ ] Issue #868
|
||||
[JoinName("StartNormalMeetingFromSharingOnlyMeeting")]
|
||||
public JoinDataComplete StartNormalMeetingFromSharingOnlyMeeting = new JoinDataComplete(
|
||||
new JoinData
|
||||
|
|
@ -295,8 +301,126 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
Description = "Toggles the selfview pip size, (aka layout size)",
|
||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
});
|
||||
|
||||
[JoinName("StartRecording")]
|
||||
public JoinDataComplete StartRecording = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 241,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Pulse to start the Meeting Recording. FB high if meeting is currently recording",
|
||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("StopRecording")]
|
||||
public JoinDataComplete StopRecording = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 242,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Pulse to stop the Meeting Recording. FB high if meeting is currently NOT recording",
|
||||
JoinCapabilities = eJoinCapabilities.ToFromSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("RecordConsentPromptIsVisible")]
|
||||
public JoinDataComplete RecordConsentPromptIsVisible = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 243,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "When high, indicates that the recording consent prompt is visible on the ZoomRoom UI",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("RecordingPromptAgree")]
|
||||
public JoinDataComplete RecordingPromptAgree = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 244,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Pulse to agree to consent for meeting recording",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("RecordingPromptDisagree")]
|
||||
public JoinDataComplete RecordingPromptDisagree = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 245,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Pulse to disagree to consent for meeting recording",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("MeetingCanRecord")]
|
||||
public JoinDataComplete MeetingCanRecord = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 246,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "When high, indicated that the current meeting can be recorded",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
|
||||
#region Sharing Status
|
||||
|
||||
[JoinName("IsSharingAirplay")]
|
||||
public JoinDataComplete IsSharingAirplay = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 250,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Indicates an Airplay source is sharing",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
[JoinName("IsSharingHdmi")]
|
||||
public JoinDataComplete IsSharingHdmi = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 251,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Indicates an HDMI source is sharing",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Digital
|
||||
});
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
//[JoinName("ParticipantAudioMuteToggleStart")]
|
||||
//public JoinDataComplete ParticipantAudioMuteToggleStart = new JoinDataComplete(
|
||||
// new JoinData
|
||||
|
|
@ -481,6 +605,92 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
|||
JoinType = eJoinType.DigitalSerial
|
||||
});
|
||||
|
||||
[JoinName("DisplayState")]
|
||||
public JoinDataComplete DisplayState = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 250,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Reports the instructions the ZoomRoom is displaying on the monitor. <None | Laptop | IOS>",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Serial
|
||||
});
|
||||
|
||||
[JoinName("AirplayShareCode")]
|
||||
public JoinDataComplete AirplayShareCode = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 251,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Reports the current code for Airplay Sharing.",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Serial
|
||||
});
|
||||
|
||||
[JoinName("LaptopShareKey")]
|
||||
public JoinDataComplete LaptopShareKey = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 252,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "The alpha-only sharing key that users type into a laptop client to share with the Zoom Room.",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Serial
|
||||
});
|
||||
|
||||
[JoinName("LaptopSharePairingCode")]
|
||||
public JoinDataComplete LaptopSharePairingCode = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 253,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "This is the paring code that is broadcast via an ultrasonic signal from the ZRC. It is different than the user-supplied paring code. The ZRC uses a Zoom-proprietary method of advertizing the ultrasonic pairing code, so it\'s not possible to advertize it using commonly available libraries.",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Serial
|
||||
});
|
||||
|
||||
[JoinName("WifiName")]
|
||||
public JoinDataComplete WifiName = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 254,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Reports the Wifi SSID used by the ZoomRoom.",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Serial
|
||||
});
|
||||
|
||||
[JoinName("ServerName")]
|
||||
public JoinDataComplete ServerName = new JoinDataComplete(
|
||||
new JoinData
|
||||
{
|
||||
JoinNumber = 255,
|
||||
JoinSpan = 1
|
||||
},
|
||||
new JoinMetadata
|
||||
{
|
||||
Description = "Reports the namne of the the ZoomRoom.",
|
||||
JoinCapabilities = eJoinCapabilities.ToSIMPL,
|
||||
JoinType = eJoinType.Serial
|
||||
});
|
||||
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
public ZoomRoomJoinMap(uint joinStart)
|
||||
|
|
|
|||
|
|
@ -2,30 +2,43 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
using Crestron.SimplSharp;
|
||||
|
||||
using Crestron.SimplSharp;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using PepperDash.Core;
|
||||
using PepperDash.Essentials.Core;
|
||||
|
||||
namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
|
||||
{
|
||||
public class ZoomRoomPropertiesConfig
|
||||
{
|
||||
public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; }
|
||||
|
||||
public bool DisablePhonebookAutoDownload { get; set; }
|
||||
public bool SupportsCameraAutoMode { get; set; }
|
||||
{
|
||||
[JsonProperty("communicationMonitorProperties")]
|
||||
public CommunicationMonitorConfig CommunicationMonitorProperties { get; set; }
|
||||
|
||||
[JsonProperty("disablePhonebookAutoDownload")]
|
||||
public bool DisablePhonebookAutoDownload { get; set; }
|
||||
|
||||
[JsonProperty("supportsCameraAutoMode")]
|
||||
public bool SupportsCameraAutoMode { get; set; }
|
||||
|
||||
[JsonProperty("supportsCameraOff")]
|
||||
public bool SupportsCameraOff { get; set; }
|
||||
|
||||
//if true, the layouts will be set automatically when sharing starts/ends or a call is joined
|
||||
//if true, the layouts will be set automatically when sharing starts/ends or a call is joined
|
||||
[JsonProperty("autoDefaultLayouts")]
|
||||
public bool AutoDefaultLayouts { get; set; }
|
||||
|
||||
/* This layout will be selected when Sharing starts (either from Far end or locally)*/
|
||||
public string DefaultSharingLayout { get; set; }
|
||||
|
||||
//This layout will be selected when a call is connected and no content is being shared
|
||||
public string DefaultCallLayout { get; set; }
|
||||
/* This layout will be selected when Sharing starts (either from Far end or locally)*/
|
||||
[JsonProperty("defaultSharingLayout")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public zConfiguration.eLayoutStyle DefaultSharingLayout { get; set; }
|
||||
|
||||
//This layout will be selected when a call is connected and no content is being shared
|
||||
[JsonProperty("defaultCallLayout")]
|
||||
[JsonConverter(typeof(StringEnumConverter))]
|
||||
public zConfiguration.eLayoutStyle DefaultCallLayout { get; set; }
|
||||
|
||||
[JsonProperty("minutesBeforeMeetingStart")]
|
||||
public int MinutesBeforeMeetingStart { get; set; }
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue