diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs
index 75c4fc1a..d1dbdf5f 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/CodecActiveCallItem.cs
@@ -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; }
///
/// Returns true when this call is any status other than
/// Unknown, Disconnected, Disconnecting
///
- [JsonProperty("isActiveCall")]
+ [JsonProperty("isActiveCall", NullValueHandling = NullValueHandling.Ignore)]
public bool IsActiveCall
{
get
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/IHasCallHold.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/IHasCallHold.cs
new file mode 100644
index 00000000..78211841
--- /dev/null
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Codec/IHasCallHold.cs
@@ -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
+ {
+ ///
+ /// Put the specified call on hold
+ ///
+ ///
+ void HoldCall(CodecActiveCallItem activeCall);
+
+ ///
+ /// Resume the specified call
+ ///
+ ///
+ void ResumeCall(CodecActiveCallItem activeCall);
+ }
+}
\ No newline at end of file
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
index 1fcffff2..b3f78d0e 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/Essentials Devices Common.csproj
@@ -108,6 +108,7 @@
+
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
index 2d3645f0..99021350 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/CiscoSparkCodec.cs
@@ -30,7 +30,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
IHasScheduleAwareness, IOccupancyStatusProvider, IHasCodecLayouts, IHasCodecSelfView,
ICommunicationMonitor, IRouting, IHasCodecCameras, IHasCameraAutoMode, IHasCodecRoomPresets,
IHasExternalSourceSwitching, IHasBranding, IHasCameraOff, IHasCameraMute, IHasDoNotDisturbMode,
- IHasHalfWakeMode
+ IHasHalfWakeMode, IHasCallHold
{
private bool _externalSourceChangeRequested;
@@ -847,6 +847,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
changeDetected = true;
}
}
+ if(call.Duration != null)
+ {
+ if(!string.IsNullOrEmpty(call.Duration.Value))
+ {
+ tempActiveCall.Duration = call.Duration.DurationValue;
+ changeDetected = true;
+ }
+ }
+ if(call.PlacedOnHold != null)
+ {
+ tempActiveCall.IsOnHold = call.PlacedOnHold.BoolValue;
+ changeDetected = true;
+ }
if (changeDetected)
{
@@ -865,7 +878,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
Name = call.DisplayName.Value,
Number = call.RemoteNumber.Value,
Type = CodecCallType.ConvertToTypeEnum(call.CallType.Value),
- Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value)
+ Direction = CodecCallDirection.ConvertToDirectionEnum(call.Direction.Value),
+ Duration = call.Duration.DurationValue,
+ IsOnHold = call.PlacedOnHold.BoolValue,
};
// Add it to the ActiveCalls List
@@ -1348,7 +1363,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
{
SendText(string.Format("xCommand Dial Number: \"{0}\" Protocol: {1} CallRate: {2} CallType: {3} BookingId: {4}", number, protocol, callRate, callType, meetingId));
}
-
+
+
public override void EndCall(CodecActiveCallItem activeCall)
{
SendText(string.Format("xCommand Call Disconnect CallId: {0}", activeCall.Id));
@@ -1372,6 +1388,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
SendText("xCommand Call Reject");
}
+ #region IHasCallHold Members
+
+ public void HoldCall(CodecActiveCallItem activeCall)
+ {
+ SendText(string.Format("xCommand Call Hold CallId: {0}", activeCall.Id));
+ }
+
+ public void ResumeCall(CodecActiveCallItem activeCall)
+ {
+ SendText(string.Format("xCommand Call Resume CallId: {0}", activeCall.Id));
+ }
+
+ #endregion
+
public override void SendDtmf(string s)
{
SendText(string.Format("xCommand Call DTMFSend CallId: {0} DTMFString: \"{1}\"", GetCallId(), s));
diff --git a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
index 29b9f260..eadc4c32 100644
--- a/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
+++ b/essentials-framework/Essentials Devices Common/Essentials Devices Common/VideoCodec/CiscoCodec/xStatus.cs
@@ -1949,9 +1949,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 +1985,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
@@ -2014,6 +2045,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.Cisco
{
CallType = new CallType();
Status = new Status2();
+ Duration = new Duration();
}
}