Compare commits

..

40 Commits

Author SHA1 Message Date
Andrew Welker
ba0bae3c4e chore: update PD Core to 1.1.3 2022-11-16 10:51:48 -07:00
Andrew Welker
5e797db096 fix: add check for missing/empty roomId 2022-11-11 16:26:37 -07:00
Andrew Welker
57eeeec0fb Merge branch 'main' into hotfix/PD-core-update-for-vc4 2022-11-11 16:23:12 -07:00
Andrew Welker
db19da124c fix: set debug level to 2 on startup
Some plugins and devices are doing their own filtering based on the
debug level that's normally set using the `appdebug` console command.
On VC-4, there's no way to set that value. With this change, when
Essentials starts on a server, the debug level will be set to 2, so that
any of the messages that might be filtered based on the debug level
won't be filtered.
2022-11-11 14:37:46 -07:00
Andrew Welker
c07f52b06f feat: update VC-4 client to use correct RoomID 2022-11-10 12:51:04 -07:00
Neil Dorin
b6675477be Merge pull request #1029 from PepperDash/hotfix/zoom-passcode-and-incoming-call-prompt-states-on-cancel
Update Zoom polling/sending blocks for more scenarios
2022-11-09 09:27:07 -07:00
Andrew Welker
fc3840173e chore: Update PD Core version 2022-11-08 08:44:39 -07:00
Andrew Welker
ce51a62d97 chore: update PD Core version 2022-11-04 14:01:11 -06:00
Andrew Welker
2be42f88bc chore: update PD Core version
In order to fix issues with debug file location for VC-4, the PD Core version needs to be updated
2022-11-04 09:48:17 -06:00
jdevito
6f9a9ee255 fix: moved setting set in event before null check 2022-10-28 16:47:43 -05:00
jdevito
a09212417c fix: removed property sets as recommended in discussion; removed 'if' statements before property sets in leave and end call methods 2022-10-28 16:20:49 -05:00
jdevito
4d6da37c60 fix: added additional evaluations for prompt property tracking and set/reset to handled unknown user scenarios 2022-10-28 08:38:16 -05:00
Andrew Welker
95627df1a6 Merge pull request #1026 from PepperDash/hotfix/zoomroom-block-commands-on-incoming-call
fix(essentials): Block all commands to ZoomRoom on incoming call
2022-10-25 13:40:32 -06:00
Neil Dorin
bef07fe41b fix(essentials): Block all commands to ZoomRoom on incoming call 2022-10-25 10:30:02 -06:00
Andrew Welker
83d2497264 Merge pull request #1021 from PepperDash/hotfix/848-camera-preset-bridge-issue
fix: max number of presets now uses join span rather than join start.
2022-10-20 11:17:39 -06:00
Andrew Welker
50f5145a89 Merge branch 'main' into hotfix/848-camera-preset-bridge-issue 2022-10-20 10:58:10 -06:00
Neil Dorin
a734a869c1 Merge pull request #1023 from PepperDash/hotfix/zoomrooms-passcode-required-prohibits-polling
fix: added bool property tracking if meeting is require, added poll m…
2022-10-20 10:30:14 -06:00
Neil Dorin
c6495577e7 Merge branch 'main' into hotfix/zoomrooms-passcode-required-prohibits-polling 2022-10-20 10:15:46 -06:00
jdevito
5359604098 fix: added bool property tracking if meeting is require, added poll method and updated GetBookings to reference bool property that prohibits polling when meeting password is required 2022-10-20 11:11:07 -05:00
Jason Alborough
70d2633eb0 fix: max number of presets now uses join span rather than join start. 2022-10-20 09:52:58 -04:00
Andrew Welker
6715a680cc Merge pull request #1019 from PepperDash/hotfix/xSigUpdateActiveCall-Fix
fix: update xSig Method for active call status
2022-10-18 10:21:11 -06:00
Trevor Payne
f3fc0f2b26 fix: update xSig Method for active call status 2022-10-18 10:51:24 -05:00
Neil Dorin
26b968463b Merge pull request #1015 from PepperDash/hotfix/shade-interface-updates
fix(essentials): Updates to shade interfaces to clarify functionality
2022-10-06 12:44:21 -06:00
Andrew Welker
d33b89f232 Merge branch 'main' into hotfix/shade-interface-updates 2022-10-06 12:29:27 -06:00
Andrew Welker
c19ab76a4c Merge pull request #1013 from PepperDash/hotfix/VideoCodecBase-Xsig-Fixes
Hotfix/video codec base xsig fixes
2022-10-06 11:02:03 -06:00
Neil Dorin
040c57b5e1 fix(essentials): Updates to shade interfaces to clarify functionality 2022-10-06 10:05:44 -06:00
Trevor Payne
d6864bf214 Merge branch 'hotfix/VideoCodecBase-Xsig-Fixes' of https://github.com/PepperDash/Essentials into hotfix/VideoCodecBase-Xsig-Fixes 2022-10-06 00:38:15 -05:00
Trevor Payne
62275890cb style: changed tracking variable in UpdateCallStatusXsig 2022-10-06 00:38:02 -05:00
Trevor Payne
2a6b845fde Merge branch 'main' into hotfix/VideoCodecBase-Xsig-Fixes 2022-10-05 16:51:11 -05:00
Trevor Payne
4fb2d6d755 fix: updated XSig methods in VideoCodecBase 2022-10-05 16:13:53 -05:00
Neil Dorin
5994704fbd Merge pull request #1010 from PepperDash/hotfix/zoomroom-default-layout
Hotfix/zoomroom default layout
2022-09-30 08:27:03 -06:00
Neil Dorin
ca1cbb6e05 fix(essentials): Resolves null ref in LinkZoomRoomToApi 2022-09-29 14:11:41 -06:00
Neil Dorin
f82b7f8f12 refactor(essentials): cleans up some args names for clarity 2022-09-29 13:33:15 -06:00
Neil Dorin
dbd77f5f9f fix(essentials): Switch to SetSigTrueAction for a few joins 2022-09-29 12:35:05 -06:00
Neil Dorin
55031d16af docs(essentials): Add join name to printjoinmap and update description on StartMeetingNow join 2022-09-29 12:33:42 -06:00
Andrew Welker
93435b60b5 Merge pull request #1005 from PepperDash/release/1.11.0
Release/1.11.0
2022-09-26 14:48:51 -06:00
Andrew Welker
b67eb6325b Merge pull request #1003 from PepperDash/hotfix/add-zoomroom-share-info
Hotfix/add zoomroom share info
2022-09-26 08:40:36 -06:00
Andrew Welker
38cb86218c Merge branch 'development' into hotfix/add-zoomroom-share-info 2022-09-26 08:29:05 -06:00
Andrew Welker
c0c67f6c15 Merge pull request #996 from PepperDash/hotfix/zoom-room-privacy-mute-notincall
Hotfix/zoom room privacy mute notincall
2022-09-08 16:08:13 -06:00
Andrew Welker
eb3922aa43 Merge branch 'development' into hotfix/zoom-room-privacy-mute-notincall 2022-09-08 15:08:44 -06:00
13 changed files with 160 additions and 71 deletions

View File

@@ -195,6 +195,8 @@ namespace PepperDash.Essentials
} }
else // Handles Linux OS (Virtual Control) else // Handles Linux OS (Virtual Control)
{ {
Debug.SetDebugLevel(2);
Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on Virtual Control Server", Global.AssemblyVersion); Debug.Console(0, Debug.ErrorLogLevel.Notice, "Starting Essentials v{0} on Virtual Control Server", Global.AssemblyVersion);
// Set path to User/ // Set path to User/

View File

@@ -97,10 +97,10 @@ namespace PepperDash.Essentials
{ {
TriList.SetSigFalseAction(ButtonPressJoinBase + 1, ShadeDevice.Open); TriList.SetSigFalseAction(ButtonPressJoinBase + 1, ShadeDevice.Open);
TriList.SetSigFalseAction(ButtonPressJoinBase + 2, (ShadeDevice as IShadesOpenCloseStop).StopOrPreset); TriList.SetSigFalseAction(ButtonPressJoinBase + 2, (ShadeDevice as IShadesOpenCloseStop).Stop);
if(ShadeDevice is RelayControlledShade) if (ShadeDevice is IShadesOpenCloseStop)
TriList.SetString(StringJoinBase + 2, (ShadeDevice as RelayControlledShade).StopOrPresetButtonLabel); TriList.SetString(StringJoinBase + 2, "Stop");
TriList.SetSigFalseAction(ButtonPressJoinBase + 3, ShadeDevice.Close); TriList.SetSigFalseAction(ButtonPressJoinBase + 3, ShadeDevice.Close);
} }

View File

@@ -394,35 +394,51 @@ namespace PepperDash.Essentials.Core.Bridges
var controlProperties = CommFactory.GetControlPropertiesConfig(dc); var controlProperties = CommFactory.GetControlPropertiesConfig(dc);
BasicTriList eisc;
switch (dc.Type.ToLower()) switch (dc.Type.ToLower())
{ {
case "eiscapiadv": case "eiscapiadv":
case "eiscapiadvanced": case "eiscapiadvanced":
{ {
var eisc = new ThreeSeriesTcpIpEthernetIntersystemCommunications(controlProperties.IpIdInt, eisc = new ThreeSeriesTcpIpEthernetIntersystemCommunications(controlProperties.IpIdInt,
controlProperties.TcpSshProperties.Address, Global.ControlSystem); controlProperties.TcpSshProperties.Address, Global.ControlSystem);
return new EiscApiAdvanced(dc, eisc); break;
} }
case "eiscapiadvancedserver": case "eiscapiadvancedserver":
{ {
var eisc = new EISCServer(controlProperties.IpIdInt, Global.ControlSystem); eisc = new EISCServer(controlProperties.IpIdInt, Global.ControlSystem);
return new EiscApiAdvanced(dc, eisc); break;
} }
case "eiscapiadvancedclient": case "eiscapiadvancedclient":
{ {
var eisc = new EISCClient(controlProperties.IpIdInt, controlProperties.TcpSshProperties.Address, Global.ControlSystem); eisc = new EISCClient(controlProperties.IpIdInt, controlProperties.TcpSshProperties.Address, Global.ControlSystem);
return new EiscApiAdvanced(dc, eisc); break;
} }
case "vceiscapiadv": case "vceiscapiadv":
case "vceiscapiadvanced": case "vceiscapiadvanced":
{ {
var eisc = new VirtualControlEISCClient(controlProperties.IpIdInt, InitialParametersClass.RoomId, if (string.IsNullOrEmpty(controlProperties.RoomId))
{
Debug.Console(0, Debug.ErrorLogLevel.Error, "Unable to build VC-4 EISC Client for device {0}. Room ID is missing or empty", dc.Key);
eisc = null;
break;
}
eisc = new VirtualControlEISCClient(controlProperties.IpIdInt, controlProperties.RoomId,
Global.ControlSystem); Global.ControlSystem);
return new EiscApiAdvanced(dc, eisc); break;
} }
default: default:
eisc = null;
break;
}
if (eisc == null)
{
return null; return null;
} }
return new EiscApiAdvanced(dc, eisc);
} }
} }

View File

@@ -283,9 +283,10 @@ namespace PepperDash.Essentials.Core
foreach (var join in joins) foreach (var join in joins)
{ {
Debug.Console(0, Debug.Console(0,
@"Join Number: {0} | JoinSpan: '{1}' | Description: '{2}' | Type: '{3}' | Capabilities: '{4}'", @"Join Number: {0} | JoinSpan: '{1}' | JoinName: {2} | Description: '{3}' | Type: '{4}' | Capabilities: '{5}'",
join.Value.JoinNumber, join.Value.JoinNumber,
join.Value.JoinSpan, join.Value.JoinSpan,
join.Key,
String.IsNullOrEmpty(join.Value.AttributeName) ? join.Value.Metadata.Label : join.Value.AttributeName, String.IsNullOrEmpty(join.Value.AttributeName) ? join.Value.Metadata.Label : join.Value.AttributeName,
join.Value.Metadata.JoinType.ToString(), join.Value.Metadata.JoinType.ToString(),
join.Value.Metadata.JoinCapabilities.ToString()); join.Value.Metadata.JoinCapabilities.ToString());

View File

@@ -19,6 +19,7 @@ namespace PepperDash.Essentials.Core.Shades
/// <summary> /// <summary>
/// Requirements for a device that implements basic Open/Close shade control /// Requirements for a device that implements basic Open/Close shade control
/// </summary> /// </summary>
[Obsolete("Please use IShadesOpenCloseStop instead")]
public interface IShadesOpenClose public interface IShadesOpenClose
{ {
void Open(); void Open();
@@ -28,15 +29,26 @@ namespace PepperDash.Essentials.Core.Shades
/// <summary> /// <summary>
/// Requirements for a device that implements basic Open/Close/Stop shade control (Uses 3 relays) /// Requirements for a device that implements basic Open/Close/Stop shade control (Uses 3 relays)
/// </summary> /// </summary>
public interface IShadesOpenCloseStop : IShadesOpenClose public interface IShadesOpenCloseStop
{ {
void StopOrPreset(); void Open();
void Close();
void Stop();
}
public interface IShadesOpenClosePreset : IShadesOpenCloseStop
{
void RecallPreset(uint presetNumber);
void SavePreset(uint presetNumber);
string StopOrPresetButtonLabel { get; } string StopOrPresetButtonLabel { get; }
event EventHandler PresetSaved;
} }
/// <summary> /// <summary>
/// Requirements for a shade that implements press/hold raise/lower functions /// Requirements for a shade that implements press/hold raise/lower functions
/// </summary> /// </summary>
[Obsolete("Please use IShadesOpenCloseStop instead")]
public interface IShadesRaiseLower public interface IShadesRaiseLower
{ {
void Raise(bool state); void Raise(bool state);
@@ -55,7 +67,7 @@ namespace PepperDash.Essentials.Core.Shades
/// <summary> /// <summary>
/// Requirements for a shade/scene that is open or closed /// Requirements for a shade/scene that is open or closed
/// </summary> /// </summary>
public interface IShadesOpenClosedFeedback: IShadesOpenClose public interface IShadesOpenClosedFeedback: IShadesOpenCloseStop
{ {
BoolFeedback ShadeIsOpenFeedback { get; } BoolFeedback ShadeIsOpenFeedback { get; }
BoolFeedback ShadeIsClosedFeedback { get; } BoolFeedback ShadeIsClosedFeedback { get; }
@@ -64,13 +76,14 @@ namespace PepperDash.Essentials.Core.Shades
/// <summary> /// <summary>
/// ///
/// </summary> /// </summary>
[Obsolete("Please use IShadesOpenCloseStop instead")]
public interface IShadesStop public interface IShadesStop
{ {
void Stop(); void Stop();
} }
/// <summary> /// <summary>
/// /// Used to implement raise/stop/lower/stop from single button
/// </summary> /// </summary>
public interface IShadesStopOrMove public interface IShadesStopOrMove
{ {
@@ -82,7 +95,7 @@ namespace PepperDash.Essentials.Core.Shades
/// <summary> /// <summary>
/// Basic feedback for shades/scene stopped /// Basic feedback for shades/scene stopped
/// </summary> /// </summary>
public interface IShadesStopFeedback public interface IShadesStopFeedback : IShadesOpenCloseStop
{ {
BoolFeedback IsStoppedFeedback { get; } BoolFeedback IsStoppedFeedback { get; }
} }

View File

@@ -12,7 +12,7 @@ namespace PepperDash.Essentials.Core.Shades
/// <summary> /// <summary>
/// Base class for a shade device /// Base class for a shade device
/// </summary> /// </summary>
public abstract class ShadeBase : EssentialsDevice, IShadesOpenClose public abstract class ShadeBase : EssentialsDevice, IShadesOpenCloseStop
{ {
public ShadeBase(string key, string name) public ShadeBase(string key, string name)
: base(key, name) : base(key, name)
@@ -23,7 +23,7 @@ namespace PepperDash.Essentials.Core.Shades
#region iShadesOpenClose Members #region iShadesOpenClose Members
public abstract void Open(); public abstract void Open();
public abstract void StopOrPreset(); public abstract void Stop();
public abstract void Close(); public abstract void Close();
#endregion #endregion

View File

@@ -223,7 +223,7 @@ namespace PepperDash.Essentials.Devices.Common.Cameras
SendCameraPresetNamesToApi(presetsCamera, joinMap, trilist); 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; int tempNum = i;

View File

@@ -56,9 +56,9 @@ namespace PepperDash.Essentials.Devices.Common.Environment.Somfy
PulseOutput(OpenRelay, RelayPulseTime); 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); PulseOutput(StopOrPresetRelay, RelayPulseTime);
} }

View File

@@ -3,9 +3,9 @@
public interface IHasPresentationOnlyMeeting public interface IHasPresentationOnlyMeeting
{ {
void StartSharingOnlyMeeting(); void StartSharingOnlyMeeting();
void StartSharingOnlyMeeting(eSharingMeetingMode mode); void StartSharingOnlyMeeting(eSharingMeetingMode displayMode);
void StartSharingOnlyMeeting(eSharingMeetingMode mode, ushort duration); void StartSharingOnlyMeeting(eSharingMeetingMode displayMode, uint duration);
void StartSharingOnlyMeeting(eSharingMeetingMode mode, ushort duration, string password); void StartSharingOnlyMeeting(eSharingMeetingMode displayMode, uint duration, string password);
void StartNormalMeetingFromSharingOnlyMeeting(); void StartNormalMeetingFromSharingOnlyMeeting();
} }

View File

@@ -1393,11 +1393,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, call.IsOnHold); tokenArray[digitalIndex + 1] = new XSigDigitalToken(digitalIndex + 2, call.IsOnHold);
//serials //serials
tokenArray[arrayIndex + 1] = new XSigSerialToken(stringIndex + 1, call.Name ?? String.Empty); tokenArray[arrayIndex] = new XSigSerialToken(stringIndex + 1, call.Name ?? String.Empty);
tokenArray[arrayIndex + 2] = new XSigSerialToken(stringIndex + 2, call.Number ?? String.Empty); tokenArray[arrayIndex + 1] = new XSigSerialToken(stringIndex + 2, call.Number ?? String.Empty);
tokenArray[arrayIndex + 3] = new XSigSerialToken(stringIndex + 3, call.Direction.ToString()); tokenArray[arrayIndex + 2] = new XSigSerialToken(stringIndex + 3, call.Direction.ToString());
tokenArray[arrayIndex + 4] = new XSigSerialToken(stringIndex + 4, call.Type.ToString()); tokenArray[arrayIndex + 3] = new XSigSerialToken(stringIndex + 4, call.Type.ToString());
tokenArray[arrayIndex + 5] = new XSigSerialToken(stringIndex + 5, call.Status.ToString()); tokenArray[arrayIndex + 4] = new XSigSerialToken(stringIndex + 5, call.Status.ToString());
if(call.Duration != null) if(call.Duration != null)
{ {
// May need to verify correct string format here // May need to verify correct string format here
@@ -1407,9 +1407,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
arrayIndex += offset; arrayIndex += offset;
stringIndex += maxStrings; stringIndex += maxStrings;
digitalIndex++; digitalIndex += maxDigitals;
} }
while (digitalIndex < maxCalls) while (arrayIndex < maxCalls * offset)
{ {
//digitals //digitals
tokenArray[digitalIndex] = new XSigDigitalToken(digitalIndex + 1, false); tokenArray[digitalIndex] = new XSigDigitalToken(digitalIndex + 1, false);
@@ -1417,16 +1417,16 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec
//serials //serials
tokenArray[arrayIndex + 1] = new XSigSerialToken(stringIndex + 1, String.Empty); tokenArray[arrayIndex] = new XSigSerialToken(stringIndex + 1, String.Empty);
tokenArray[arrayIndex + 2] = new XSigSerialToken(stringIndex + 2, String.Empty); tokenArray[arrayIndex + 1] = new XSigSerialToken(stringIndex + 2, String.Empty);
tokenArray[arrayIndex + 3] = new XSigSerialToken(stringIndex + 3, String.Empty); tokenArray[arrayIndex + 2] = new XSigSerialToken(stringIndex + 3, String.Empty);
tokenArray[arrayIndex + 4] = new XSigSerialToken(stringIndex + 4, String.Empty); tokenArray[arrayIndex + 3] = new XSigSerialToken(stringIndex + 4, String.Empty);
tokenArray[arrayIndex + 5] = new XSigSerialToken(stringIndex + 5, String.Empty); tokenArray[arrayIndex + 4] = new XSigSerialToken(stringIndex + 5, String.Empty);
tokenArray[arrayIndex + 6] = new XSigSerialToken(stringIndex + 6, String.Empty); tokenArray[arrayIndex + 5] = new XSigSerialToken(stringIndex + 6, String.Empty);
arrayIndex += offset; arrayIndex += offset;
stringIndex += maxStrings; stringIndex += maxStrings;
digitalIndex++; digitalIndex += maxDigitals;
} }
return GetXSigString(tokenArray); return GetXSigString(tokenArray);

View File

@@ -62,6 +62,17 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
private readonly ZoomRoomPropertiesConfig _props; private readonly ZoomRoomPropertiesConfig _props;
private bool _meetingPasswordRequired;
private bool _waitingForUserToAcceptOrRejectIncomingCall;
public void Poll(string pollString)
{
if(_meetingPasswordRequired || _waitingForUserToAcceptOrRejectIncomingCall) return;
SendText(string.Format("{0}{1}", pollString, SendDelimiter));
}
public ZoomRoom(DeviceConfig config, IBasicCommunication comm) public ZoomRoom(DeviceConfig config, IBasicCommunication comm)
: base(config) : base(config)
{ {
@@ -75,13 +86,12 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
if (_props.CommunicationMonitorProperties != null) if (_props.CommunicationMonitorProperties != null)
{ {
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, _props.CommunicationMonitorProperties.PollInterval, _props.CommunicationMonitorProperties.TimeToWarning, _props.CommunicationMonitorProperties.TimeToError,
_props.CommunicationMonitorProperties); () => Poll(_props.CommunicationMonitorProperties.PollString));
} }
else else
{ {
CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, CommunicationMonitor = new GenericCommunicationMonitor(this, Communication, 30000, 120000, 300000, () => Poll("zStatus SystemUnit"));
"zStatus SystemUnit" + SendDelimiter);
} }
DeviceManager.AddDevice(CommunicationMonitor); DeviceManager.AddDevice(CommunicationMonitor);
@@ -960,6 +970,18 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void SendText(string command) public void SendText(string command)
{ {
if (_meetingPasswordRequired)
{
Debug.Console(2, this, "Blocking commands to ZoomRoom while waiting for user to enter meeting password");
return;
}
if (_waitingForUserToAcceptOrRejectIncomingCall)
{
Debug.Console(2, this, "Blocking commands to ZoomRoom while waiting for user to accept or reject incoming call");
return;
}
if (CommDebuggingIsOn) if (CommDebuggingIsOn)
{ {
Debug.Console(1, this, "Sending: '{0}'", command); Debug.Console(1, this, "Sending: '{0}'", command);
@@ -1584,6 +1606,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
Id = incomingCall.callerJID Id = incomingCall.callerJID
}; };
_waitingForUserToAcceptOrRejectIncomingCall = true;
ActiveCalls.Add(newCall); ActiveCalls.Add(newCall);
OnCallStatusChange(newCall); OnCallStatusChange(newCall);
@@ -1610,6 +1634,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
OnCallStatusChange(existingCall); OnCallStatusChange(existingCall);
} }
_waitingForUserToAcceptOrRejectIncomingCall = false;
UpdateCallStatus(); UpdateCallStatus();
} }
@@ -1992,6 +2018,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
/// </summary> /// </summary>
private void GetBookings() private void GetBookings()
{ {
if (_meetingPasswordRequired || _waitingForUserToAcceptOrRejectIncomingCall) return;
SendText("zCommand Bookings List"); SendText("zCommand Bookings List");
} }
@@ -2179,6 +2207,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
); );
} }
_meetingPasswordRequired = false;
base.OnCallStatusChange(item); base.OnCallStatusChange(item);
Debug.Console(1, this, "[OnCallStatusChange] Current Call Status: {0}", Debug.Console(1, this, "[OnCallStatusChange] Current Call Status: {0}",
@@ -2250,6 +2279,9 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
} }
} }
/// <summary>
/// Starts sharing HDMI source
/// </summary>
public override void StartSharing() public override void StartSharing()
{ {
SendText("zCommand Call Sharing HDMI Start"); SendText("zCommand Call Sharing HDMI Start");
@@ -2397,8 +2429,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
{ {
var meetingInfoCodec = this as IHasMeetingInfo; var meetingInfoCodec = this as IHasMeetingInfo;
if (meetingInfoCodec != null) if (meetingInfoCodec != null)
{
if (meetingInfoCodec.MeetingInfo != null)
{ {
trilist.SetBool(joinMap.MeetingCanRecord.JoinNumber, meetingInfoCodec.MeetingInfo.CanRecord); trilist.SetBool(joinMap.MeetingCanRecord.JoinNumber, meetingInfoCodec.MeetingInfo.CanRecord);
}
meetingInfoCodec.MeetingInfoChanged += (o, a) => meetingInfoCodec.MeetingInfoChanged += (o, a) =>
{ {
@@ -2520,13 +2555,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
//trilist.SetString(joinMap.CurrentSource.JoinNumber, args.Info.ShareStatus); //trilist.SetString(joinMap.CurrentSource.JoinNumber, args.Info.ShareStatus);
}; };
trilist.SetSigTrueAction(joinMap.StartMeetingNow.JoinNumber, () => StartMeeting(0)); trilist.SetSigFalseAction(joinMap.StartMeetingNow.JoinNumber, () => StartMeeting(0));
trilist.SetSigTrueAction(joinMap.ShareOnlyMeeting.JoinNumber, StartSharingOnlyMeeting); trilist.SetSigFalseAction(joinMap.ShareOnlyMeeting.JoinNumber, StartSharingOnlyMeeting);
trilist.SetSigTrueAction(joinMap.StartNormalMeetingFromSharingOnlyMeeting.JoinNumber, StartNormalMeetingFromSharingOnlyMeeting); trilist.SetSigFalseAction(joinMap.StartNormalMeetingFromSharingOnlyMeeting.JoinNumber, StartNormalMeetingFromSharingOnlyMeeting);
trilist.SetStringSigAction(joinMap.SubmitPassword.JoinNumber, SubmitPassword); trilist.SetStringSigAction(joinMap.SubmitPassword.JoinNumber, SubmitPassword);
//trilist.SetSigFalseAction(joinMap.CancelPasswordPrompt.JoinNumber, () =>
// OnPasswordRequired(false, false, true, ""));
// Subscribe to call status to clear ShowPasswordPrompt when in meeting // Subscribe to call status to clear ShowPasswordPrompt when in meeting
this.CallStatusChange += (o, a) => this.CallStatusChange += (o, a) =>
@@ -2545,7 +2578,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
PasswordRequired += (devices, args) => PasswordRequired += (devices, args) =>
{ {
Debug.Console(0, this, "***********************************PaswordRequired. Message: {0} Cancelled: {1} Last Incorrect: {2} Failed: {3}", args.Message, args.LoginAttemptCancelled, args.LastAttemptWasIncorrect, args.LoginAttemptFailed); Debug.Console(2, this, "***********************************PaswordRequired. Message: {0} Cancelled: {1} Last Incorrect: {2} Failed: {3}", args.Message, args.LoginAttemptCancelled, args.LastAttemptWasIncorrect, args.LoginAttemptFailed);
if (args.LoginAttemptCancelled) if (args.LoginAttemptCancelled)
{ {
@@ -2584,8 +2617,11 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
var wirelessInfoCodec = this as IZoomWirelessShareInstructions; var wirelessInfoCodec = this as IZoomWirelessShareInstructions;
if (wirelessInfoCodec != null) if (wirelessInfoCodec != null)
{
if (Status != null && Status.Sharing != null)
{ {
SetSharingStateJoins(Status.Sharing, trilist, joinMap); SetSharingStateJoins(Status.Sharing, trilist, joinMap);
}
wirelessInfoCodec.ShareInfoChanged += (o, a) => wirelessInfoCodec.ShareInfoChanged += (o, a) =>
{ {
@@ -2619,6 +2655,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void AcceptCall() public void AcceptCall()
{ {
_waitingForUserToAcceptOrRejectIncomingCall = false;
var incomingCall = var incomingCall =
ActiveCalls.FirstOrDefault( ActiveCalls.FirstOrDefault(
c => c.Status.Equals(eCodecCallStatus.Ringing) && c.Direction.Equals(eCodecCallDirection.Incoming)); c => c.Status.Equals(eCodecCallStatus.Ringing) && c.Direction.Equals(eCodecCallDirection.Incoming));
@@ -2628,6 +2666,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public override void AcceptCall(CodecActiveCallItem call) public override void AcceptCall(CodecActiveCallItem call)
{ {
_waitingForUserToAcceptOrRejectIncomingCall = false;
SendText(string.Format("zCommand Call Accept callerJID: {0}", call.Id)); SendText(string.Format("zCommand Call Accept callerJID: {0}", call.Id));
call.Status = eCodecCallStatus.Connected; call.Status = eCodecCallStatus.Connected;
@@ -2639,6 +2679,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void RejectCall() public void RejectCall()
{ {
_waitingForUserToAcceptOrRejectIncomingCall = false;
var incomingCall = var incomingCall =
ActiveCalls.FirstOrDefault( ActiveCalls.FirstOrDefault(
c => c.Status.Equals(eCodecCallStatus.Ringing) && c.Direction.Equals(eCodecCallDirection.Incoming)); c => c.Status.Equals(eCodecCallStatus.Ringing) && c.Direction.Equals(eCodecCallDirection.Incoming));
@@ -2648,6 +2690,8 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public override void RejectCall(CodecActiveCallItem call) public override void RejectCall(CodecActiveCallItem call)
{ {
_waitingForUserToAcceptOrRejectIncomingCall = false;
SendText(string.Format("zCommand Call Reject callerJID: {0}", call.Id)); SendText(string.Format("zCommand Call Reject callerJID: {0}", call.Id));
call.Status = eCodecCallStatus.Disconnected; call.Status = eCodecCallStatus.Disconnected;
@@ -2774,16 +2818,25 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void LeaveMeeting() public void LeaveMeeting()
{ {
_meetingPasswordRequired = false;
_waitingForUserToAcceptOrRejectIncomingCall = false;
SendText("zCommand Call Leave"); SendText("zCommand Call Leave");
} }
public override void EndCall(CodecActiveCallItem call) public override void EndCall(CodecActiveCallItem call)
{ {
_meetingPasswordRequired = false;
_waitingForUserToAcceptOrRejectIncomingCall = false;
SendText("zCommand Call Disconnect"); SendText("zCommand Call Disconnect");
} }
public override void EndAllCalls() public override void EndAllCalls()
{ {
_meetingPasswordRequired = false;
_waitingForUserToAcceptOrRejectIncomingCall = false;
SendText("zCommand Call Disconnect"); SendText("zCommand Call Disconnect");
} }
@@ -3433,16 +3486,20 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
public void SubmitPassword(string password) public void SubmitPassword(string password)
{ {
_meetingPasswordRequired = false;
Debug.Console(2, this, "Password Submitted: {0}", password); Debug.Console(2, this, "Password Submitted: {0}", password);
Dial(_lastDialedMeetingNumber, password); Dial(_lastDialedMeetingNumber, password);
//OnPasswordRequired(false, false, true, "");
} }
void OnPasswordRequired(bool lastAttemptIncorrect, bool loginFailed, bool loginCancelled, string message) void OnPasswordRequired(bool lastAttemptIncorrect, bool loginFailed, bool loginCancelled, string message)
{ {
_meetingPasswordRequired = !loginFailed || !loginCancelled;
var handler = PasswordRequired; var handler = PasswordRequired;
if (handler != null) if (handler != null)
{ {
Debug.Console(2, this, "Meeting Password Required: {0}", _meetingPasswordRequired);
handler(this, new PasswordPromptEventArgs(lastAttemptIncorrect, loginFailed, loginCancelled, message)); handler(this, new PasswordPromptEventArgs(lastAttemptIncorrect, loginFailed, loginCancelled, message));
} }
} }
@@ -3482,19 +3539,19 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
StartSharingOnlyMeeting(eSharingMeetingMode.None, 30, String.Empty); StartSharingOnlyMeeting(eSharingMeetingMode.None, 30, String.Empty);
} }
public void StartSharingOnlyMeeting(eSharingMeetingMode mode) public void StartSharingOnlyMeeting(eSharingMeetingMode displayMode)
{ {
StartSharingOnlyMeeting(mode, 30, String.Empty); StartSharingOnlyMeeting(displayMode, DefaultMeetingDurationMin, String.Empty);
} }
public void StartSharingOnlyMeeting(eSharingMeetingMode mode, ushort duration) public void StartSharingOnlyMeeting(eSharingMeetingMode displayMode, uint duration)
{ {
StartSharingOnlyMeeting(mode, duration, String.Empty); StartSharingOnlyMeeting(displayMode, duration, String.Empty);
} }
public void StartSharingOnlyMeeting(eSharingMeetingMode mode, ushort duration, string password) public void StartSharingOnlyMeeting(eSharingMeetingMode displayMode, uint duration, string password)
{ {
SendText(String.Format("zCommand Dial Sharing Duration: {0} DisplayState: {1} Password: {2}", duration, mode, password)); SendText(String.Format("zCommand Dial Sharing Duration: {0} DisplayState: {1} Password: {2}", duration, displayMode, password));
} }
public void StartNormalMeetingFromSharingOnlyMeeting() public void StartNormalMeetingFromSharingOnlyMeeting()

View File

@@ -101,7 +101,7 @@ namespace PepperDash.Essentials.Devices.Common.VideoCodec.ZoomRoom
}, },
new JoinMetadata 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, JoinCapabilities = eJoinCapabilities.FromSIMPL,
JoinType = eJoinType.Digital JoinType = eJoinType.Digital
}); });

View File

@@ -1,3 +1,3 @@
<packages> <packages>
<package id="PepperDashCore" version="1.1.1" targetFramework="net35" allowedVersions="[1.0,2.0)"/> <package id="PepperDashCore" version="1.1.3" targetFramework="net35" allowedVersions="[1.0,2.0)"/>
</packages> </packages>