/// <summary> /// Links the plugin device to the EISC bridge /// </summary> /// <param name="trilist"></param> /// <param name="joinStart"></param> /// <param name="joinMapKey"></param> /// <param name="bridge"></param> public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { var joinMap = new EssentialsPluginBridgeJoinMapTemplate(joinStart); // This adds the join map to the collection on the bridge if (bridge != null) { bridge.AddJoinMap(Key, joinMap); } var customJoins = JoinMapHelper.TryGetJoinMapAdvancedForDevice(joinMapKey); if (customJoins != null) { joinMap.SetCustomJoinData(customJoins); } Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); Debug.Console(0, "Linking to Bridge Type {0}", GetType().Name); // TODO [ ] Implement bridge links as needed // links to bridge trilist.SetString(joinMap.DeviceName.JoinNumber, Name); trilist.OnlineStatusChange += (o, a) => { if (!a.DeviceOnLine) { return; } trilist.SetString(joinMap.DeviceName.JoinNumber, Name); }; }
private void SetLanguageInfo(BasicTriList trilist, I18NUtilityJoinMap joinMap) { if (_languagesConfig == null) { Debug.Console(0, this, Debug.ErrorLogLevel.Notice, "No Language configs loaded."); return; } Debug.Console(1, this, "Setting supported language information"); ushort i = 0; if (_languagesConfig.LanguageDefinitions.Count == 0) { return; } foreach (var lang in _languagesConfig.LanguageDefinitions.Select(language => language.Value)) { Debug.Console(1, this, "Setting supported language information for locale {0}", lang.LocaleName); trilist.SetBool(joinMap.SupportedLanguageEnable.JoinNumber + i, lang.Enable); trilist.SetString(joinMap.SupportedLanguagesStart.JoinNumber + i, lang.LocaleName); trilist.SetString(joinMap.SupportedLanguagesDescriptionStart.JoinNumber + i, lang.FriendlyName); i++; } }
/// <summary> /// Links the plugin device to the EISC bridge /// </summary> /// <param name="trilist"></param> /// <param name="joinStart"></param> /// <param name="joinMapKey"></param> /// <param name="bridge"></param> public void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { var joinMap = new RVCDisplayBridgeJoinMap(joinStart); // This adds the join map to the collection on the bridge if (bridge != null) { bridge.AddJoinMap(Key, joinMap); } // TODO: figure out how best way to handle base and override class maps and ranges LinkDisplayToApi(this, trilist, joinStart, joinMapKey, null); var customJoins = JoinMapHelper.TryGetJoinMapAdvancedForDevice(joinMapKey); if (customJoins != null) { joinMap.SetCustomJoinData(customJoins); } Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); Debug.Console(0, "Linking to Bridge Type {0}", GetType().Name); // links to bridge /// eJoinCapabilities.ToFromSIMPL - FromSIMPL action //trilist.SetBoolSigAction(joinMap.Connect.JoinNumber, sig => Connect = sig); /// eJoinCapabilities.ToFromSIMPL - ToSIMPL subscription //ConnectFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Connect.JoinNumber]); /// eJoinCapabilities.ToFromSIMPL - ToSIMPL subscription StatusFeedback.LinkInputSig(trilist.UShortInput[joinMap.Status.JoinNumber]); /// eJoinCapabilities.ToSIMPL - set string once as this is not changeble info trilist.SetString(joinMap.Driver.JoinNumber, _display.GetType().AssemblyQualifiedName); UpdateFeedbacks(); /// Propagate String/Serial values through eisc when it becomes online trilist.OnlineStatusChange += (o, a) => { if (!a.DeviceOnLine) { return; } trilist.SetString(joinMap.Driver.JoinNumber, _display.GetType().AssemblyQualifiedName); UpdateFeedbacks(); }; }
public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { var joinMap = new IBasicCommunicationJoinMap(joinStart); var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey); if (!string.IsNullOrEmpty(joinMapSerialized)) { joinMap = JsonConvert.DeserializeObject <IBasicCommunicationJoinMap>(joinMapSerialized); } bridge.AddJoinMap(Key, joinMap); if (CommPort == null) { Debug.Console(1, this, "Unable to link device '{0}'. CommPort is null", Key); return; } Debug.Console(1, this, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); // this is a permanent event handler. This cannot be -= from event CommPort.TextReceived += (s, a) => { Debug.Console(2, this, "RX: {0}", a.Text); trilist.SetString(joinMap.TextReceived.JoinNumber, a.Text); }; trilist.SetStringSigAction(joinMap.SendText.JoinNumber, s => CommPort.SendText(s)); trilist.SetStringSigAction(joinMap.SetPortConfig.JoinNumber, SetPortConfig); var sComm = CommPort as ISocketStatus; if (sComm == null) { return; } sComm.ConnectionChange += (s, a) => { trilist.SetUshort(joinMap.Status.JoinNumber, (ushort)(a.Client.ClientStatus)); trilist.SetBool(joinMap.Connected.JoinNumber, a.Client.ClientStatus == SocketStatus.SOCKET_STATUS_CONNECTED); }; trilist.SetBoolSigAction(joinMap.Connect.JoinNumber, b => { if (b) { sComm.Connect(); } else { sComm.Disconnect(); } }); }
public static void LinkToApi(this GenericComm comm, BasicTriList trilist, uint joinStart, string joinMapKey) { IBasicCommunicationJoinMap joinMap = new IBasicCommunicationJoinMap(); var joinMapSerialized = JoinMapHelper.GetSerializedJoinMapForDevice(joinMapKey); if (!string.IsNullOrEmpty(joinMapSerialized)) { joinMap = JsonConvert.DeserializeObject <IBasicCommunicationJoinMap>(joinMapSerialized); } joinMap.OffsetJoinNumbers(joinStart); if (comm.CommPort == null) { Debug.Console(1, comm, "Unable to link device '{0}'. CommPort is null", comm.Key); return; } Debug.Console(1, comm, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); // this is a permanent event handler. This cannot be -= from event comm.CommPort.TextReceived += (s, a) => { Debug.Console(2, comm, "RX: {0}", a.Text); trilist.SetString(joinMap.TextReceived, a.Text); }; trilist.SetStringSigAction(joinMap.SendText, new Action <string>(s => comm.CommPort.SendText(s))); trilist.SetStringSigAction(joinMap.SetPortConfig, new Action <string>(s => comm.SetPortConfig(s))); var sComm = comm.CommPort as ISocketStatus; if (sComm != null) { sComm.ConnectionChange += (s, a) => { trilist.SetUshort(joinMap.Status, (ushort)(a.Client.ClientStatus)); trilist.SetBool(joinMap.Connected, a.Client.ClientStatus == Crestron.SimplSharp.CrestronSockets.SocketStatus.SOCKET_STATUS_CONNECTED); }; trilist.SetBoolSigAction(joinMap.Connect, new Action <bool>(b => { if (b) { sComm.Connect(); } else { sComm.Disconnect(); } })); } }
protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) { appServerController.AddAction(MessagePath + "/fullStatus", new Action(() => { SendRoutingFullMessageObject(EISC.GetString(JoinStart + StringJoin.CurrentSource)); })); appServerController.AddAction(MessagePath + "/source", new Action <SourceSelectMessageContent>(c => { EISC.SetString(JoinStart + StringJoin.CurrentSource, c.SourceListItem); })); }
/// <summary> /// Links the plugin device to the EISC bridge /// </summary> /// <param name="trilist"></param> /// <param name="joinStart"></param> /// <param name="joinMapKey"></param> /// <param name="bridge"></param> public override void LinkToApi(BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { var joinMap = new MockOccupancyDetectorPluginBridgeJoinMap(joinStart); // This adds the join map to the collection on the bridge if (bridge != null) { bridge.AddJoinMap(Key, joinMap); } var customJoins = JoinMapHelper.TryGetJoinMapAdvancedForDevice(joinMapKey); if (customJoins != null) { joinMap.SetCustomJoinData(customJoins); } Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); Debug.Console(0, "Linking to Bridge Type {0}", GetType().Name); // TODO [ ] Implement bridge links as needed // links to bridge trilist.SetString(joinMap.DeviceName.JoinNumber, Name); //trilist.SetBoolSigAction(joinMap.Connect.JoinNumber, sig => Connect = sig); //ConnectFeedback.LinkInputSig(trilist.BooleanInput[joinMap.Connect.JoinNumber]); //StatusFeedback.LinkInputSig(trilist.UShortInput[joinMap.Status.JoinNumber]); //OnlineFeedback.LinkInputSig(trilist.BooleanInput[joinMap.IsOnline.JoinNumber]); //UpdateFeedbacks(); //trilist.OnlineStatusChange += (o, a) => //{ // if (!a.DeviceOnLine) return; // trilist.SetString(joinMap.DeviceName.JoinNumber, Name); // UpdateFeedbacks(); //}; }
protected void LinkCameraToApi(CameraBase cameraDevice, BasicTriList trilist, uint joinStart, string joinMapKey, EiscApiAdvanced bridge) { CameraControllerJoinMap joinMap = new CameraControllerJoinMap(joinStart); // Adds the join map to the bridge bridge.AddJoinMap(cameraDevice.Key, joinMap); var customJoins = JoinMapHelper.TryGetJoinMapAdvancedForDevice(joinMapKey); if (customJoins != null) { joinMap.SetCustomJoinData(customJoins); } Debug.Console(1, "Linking to Trilist '{0}'", trilist.ID.ToString("X")); Debug.Console(0, "Linking to Bridge Type {0}", cameraDevice.GetType().Name.ToString()); var commMonitor = cameraDevice as ICommunicationMonitor; commMonitor.CommunicationMonitor.IsOnlineFeedback.LinkInputSig( trilist.BooleanInput[joinMap.IsOnline.JoinNumber]); var ptzCamera = cameraDevice as IHasCameraPtzControl; if (ptzCamera != null) { trilist.SetBoolSigAction(joinMap.PanLeft.JoinNumber, (b) => { if (b) { ptzCamera.PanLeft(); } else { ptzCamera.PanStop(); } }); trilist.SetBoolSigAction(joinMap.PanRight.JoinNumber, (b) => { if (b) { ptzCamera.PanRight(); } else { ptzCamera.PanStop(); } }); trilist.SetBoolSigAction(joinMap.TiltUp.JoinNumber, (b) => { if (b) { ptzCamera.TiltUp(); } else { ptzCamera.TiltStop(); } }); trilist.SetBoolSigAction(joinMap.TiltDown.JoinNumber, (b) => { if (b) { ptzCamera.TiltDown(); } else { ptzCamera.TiltStop(); } }); trilist.SetBoolSigAction(joinMap.ZoomIn.JoinNumber, (b) => { if (b) { ptzCamera.ZoomIn(); } else { ptzCamera.ZoomStop(); } }); trilist.SetBoolSigAction(joinMap.ZoomOut.JoinNumber, (b) => { if (b) { ptzCamera.ZoomOut(); } else { ptzCamera.ZoomStop(); } }); } if (cameraDevice is IPower) { var powerCamera = cameraDevice as IPower; trilist.SetSigTrueAction(joinMap.PowerOn.JoinNumber, () => powerCamera.PowerOn()); trilist.SetSigTrueAction(joinMap.PowerOff.JoinNumber, () => powerCamera.PowerOff()); powerCamera.PowerIsOnFeedback.LinkInputSig(trilist.BooleanInput[joinMap.PowerOn.JoinNumber]); powerCamera.PowerIsOnFeedback.LinkComplementInputSig(trilist.BooleanInput[joinMap.PowerOff.JoinNumber]); } if (cameraDevice is ICommunicationMonitor) { var monitoredCamera = cameraDevice as ICommunicationMonitor; monitoredCamera.CommunicationMonitor.IsOnlineFeedback.LinkInputSig( trilist.BooleanInput[joinMap.IsOnline.JoinNumber]); } if (cameraDevice is IHasCameraPresets) { // Set the preset lables when they change var presetsCamera = cameraDevice as IHasCameraPresets; presetsCamera.PresetsListHasChanged += new EventHandler <EventArgs>((o, a) => { for (int i = 1; i <= joinMap.NumberOfPresets.JoinNumber; i++) { int tempNum = i - 1; string label = ""; var preset = presetsCamera.Presets.FirstOrDefault(p => p.ID.Equals(i)); if (preset != null) { label = preset.Description; } trilist.SetString((ushort)(joinMap.PresetLabelStart.JoinNumber + tempNum), label); } }); for (int i = 0; i < joinMap.NumberOfPresets.JoinNumber; i++) { int tempNum = i; trilist.SetSigTrueAction((ushort)(joinMap.PresetRecallStart.JoinNumber + tempNum), () => { presetsCamera.PresetSelect(tempNum); }); trilist.SetSigTrueAction((ushort)(joinMap.PresetSaveStart.JoinNumber + tempNum), () => { var label = trilist.GetString((ushort)(joinMap.PresetLabelStart.JoinNumber + tempNum)); presetsCamera.PresetStore(tempNum, label); }); } } }
/// <summary> /// /// </summary> /// <param name="appServerController"></param> protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) { var asc = appServerController; EISC.SetStringSigAction(SHookState, s => { CurrentCallItem.Status = (eCodecCallStatus)Enum.Parse(typeof(eCodecCallStatus), s, true); PostFullStatus(); // SendCallsList(); }); EISC.SetStringSigAction(SCurrentCallNumber, s => { CurrentCallItem.Number = s; PostCallsList(); }); EISC.SetStringSigAction(SCurrentCallName, s => { CurrentCallItem.Name = s; PostCallsList(); }); EISC.SetStringSigAction(SCallDirection, s => { CurrentCallItem.Direction = (eCodecCallDirection)Enum.Parse(typeof(eCodecCallDirection), s, true); PostCallsList(); }); EISC.SetBoolSigAction(BCallIncoming, b => { if (b) { var ica = new CodecActiveCallItem() { Direction = eCodecCallDirection.Incoming, Id = "-video-incoming", Name = EISC.GetString(SIncomingCallName), Number = EISC.GetString(SIncomingCallNumber), Status = eCodecCallStatus.Ringing, Type = eCodecCallType.Video }; IncomingCallItem = ica; } else { IncomingCallItem = null; } PostCallsList(); }); EISC.SetBoolSigAction(BCameraSupportsAutoMode, b => { PostStatusMessage(new { cameraSupportsAutoMode = b }); }); EISC.SetBoolSigAction(BCameraSupportsOffMode, b => { PostStatusMessage(new { cameraSupportsOffMode = b }); }); // Directory insanity EISC.SetUShortSigAction(UDirectoryRowCount, u => { // The length of the list comes in before the list does. // Splice the sig change operation onto the last string sig that will be changing // when the directory entries make it through. if (PreviousDirectoryLength > 0) { EISC.ClearStringSigAction(SDirectoryEntriesStart + PreviousDirectoryLength - 1); } EISC.SetStringSigAction(SDirectoryEntriesStart + u - 1, s => PostDirectory()); PreviousDirectoryLength = u; }); EISC.SetStringSigAction(SDirectoryEntrySelectedName, s => { PostStatusMessage(new { directoryContactSelected = new { name = EISC.GetString(SDirectoryEntrySelectedName), } }); }); EISC.SetStringSigAction(SDirectoryEntrySelectedNumber, s => { PostStatusMessage(new { directoryContactSelected = new { number = EISC.GetString(SDirectoryEntrySelectedNumber), } }); }); EISC.SetStringSigAction(SDirectorySelectedFolderName, s => PostStatusMessage(new { directorySelectedFolderName = EISC.GetString(SDirectorySelectedFolderName) })); EISC.SetSigTrueAction(BCameraModeAuto, () => PostCameraMode()); EISC.SetSigTrueAction(BCameraModeManual, () => PostCameraMode()); EISC.SetSigTrueAction(BCameraModeOff, () => PostCameraMode()); EISC.SetBoolSigAction(BCameraSelfView, b => PostStatusMessage(new { cameraSelfView = b })); EISC.SetUShortSigAction(UCameraNumberSelect, (u) => PostSelectedCamera()); // Add press and holds using helper action Action <string, uint> addPHAction = (s, u) => AppServerController.AddAction(MessagePath + s, new PressAndHoldAction(b => EISC.SetBool(u, b))); addPHAction("/cameraUp", BCameraControlUp); addPHAction("/cameraDown", BCameraControlDown); addPHAction("/cameraLeft", BCameraControlLeft); addPHAction("/cameraRight", BCameraControlRight); addPHAction("/cameraZoomIn", BCameraControlZoomIn); addPHAction("/cameraZoomOut", BCameraControlZoomOut); // Add straight pulse calls using helper action Action <string, uint> addAction = (s, u) => AppServerController.AddAction(MessagePath + s, new Action(() => EISC.PulseBool(u, 100))); addAction("/endCallById", BDialHangup); addAction("/endAllCalls", BDialHangup); addAction("/acceptById", BIncomingAnswer); addAction("/rejectById", BIncomingReject); addAction("/speedDial1", BSpeedDial1); addAction("/speedDial2", BSpeedDial2); addAction("/speedDial3", BSpeedDial3); addAction("/speedDial4", BSpeedDial4); addAction("/cameraModeAuto", BCameraModeAuto); addAction("/cameraModeManual", BCameraModeManual); addAction("/cameraModeOff", BCameraModeOff); addAction("/cameraSelfView", BCameraSelfView); addAction("/cameraLayout", BCameraLayout); asc.AddAction("/cameraSelect", new Action <string>(SelectCamera)); // camera presets for (uint i = 0; i < 6; i++) { addAction("/cameraPreset" + (i + 1), BCameraPresetStart + i); } asc.AddAction(MessagePath + "/isReady", new Action(PostIsReady)); // Get status asc.AddAction(MessagePath + "/fullStatus", new Action(PostFullStatus)); // Dial on string asc.AddAction(MessagePath + "/dial", new Action <string>(s => EISC.SetString(SCurrentDialString, s))); // Pulse DTMF asc.AddAction(MessagePath + "/dtmf", new Action <string>(s => { if (DTMFMap.ContainsKey(s)) { EISC.PulseBool(DTMFMap[s], 100); } })); // Directory madness asc.AddAction(MessagePath + "/directoryRoot", new Action(() => EISC.PulseBool(BDirectoryRoot))); asc.AddAction(MessagePath + "/directoryBack", new Action(() => EISC.PulseBool(BDirectoryFolderBack))); asc.AddAction(MessagePath + "/directoryById", new Action <string>(s => { // the id should contain the line number to forward to simpl try { var u = ushort.Parse(s); EISC.SetUshort(UDirectorySelectRow, u); EISC.PulseBool(BDirectoryLineSelected); } catch (Exception) { Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "/directoryById request contains non-numeric ID incompatible with DDVC bridge"); } })); asc.AddAction(MessagePath + "/directorySelectContact", new Action <string>(s => { try { var u = ushort.Parse(s); EISC.SetUshort(UDirectorySelectRow, u); EISC.PulseBool(BDirectoryLineSelected); } catch { } })); asc.AddAction(MessagePath + "/directoryDialContact", new Action(() => { EISC.PulseBool(BDirectoryDialSelectedLine); })); asc.AddAction(MessagePath + "/getDirectory", new Action(() => { if (EISC.GetUshort(UDirectoryRowCount) > 0) { PostDirectory(); } else { EISC.PulseBool(BDirectoryRoot); } })); }
/// <summary> /// /// </summary> /// <param name="appServerController"></param> protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) { //EISC.SetStringSigAction(SCurrentDialString, s => PostStatusMessage(new { currentDialString = s })); EISC.SetStringSigAction(SHookState, s => { CurrentCallItem.Status = (eCodecCallStatus)Enum.Parse(typeof(eCodecCallStatus), s, true); //GetCurrentCallList(); SendFullStatus(); }); EISC.SetStringSigAction(SCurrentCallNumber, s => { CurrentCallItem.Number = s; SendCallsList(); }); EISC.SetStringSigAction(SCurrentCallName, s => { CurrentCallItem.Name = s; SendCallsList(); }); EISC.SetStringSigAction(SCallDirection, s => { CurrentCallItem.Direction = (eCodecCallDirection)Enum.Parse(typeof(eCodecCallDirection), s, true); SendCallsList(); }); // Add press and holds using helper Action <string, uint> addPHAction = (s, u) => AppServerController.AddAction(MessagePath + s, new PressAndHoldAction(b => EISC.SetBool(u, b))); // Add straight pulse calls Action <string, uint> addAction = (s, u) => AppServerController.AddAction(MessagePath + s, new Action(() => EISC.PulseBool(u, 100))); addAction("/endCallById", BDialHangupOnHook); addAction("/endAllCalls", BDialHangupOnHook); addAction("/acceptById", BIncomingAnswer); addAction("/rejectById", BIncomingReject); addAction("/speedDial1", BSpeedDial1); addAction("/speedDial2", BSpeedDial2); addAction("/speedDial3", BSpeedDial3); addAction("/speedDial4", BSpeedDial4); // Get status AppServerController.AddAction(MessagePath + "/fullStatus", new Action(SendFullStatus)); // Dial on string AppServerController.AddAction(MessagePath + "/dial", new Action <string>(s => EISC.SetString(SCurrentDialString, s))); // Pulse DTMF AppServerController.AddAction(MessagePath + "/dtmf", new Action <string>(s => { if (DTMFMap.ContainsKey(s)) { EISC.PulseBool(DTMFMap[s], 100); } })); }
private void SetLanguageStrings(BasicTriList trilist, I18NUtilityJoinMap joinMap) { LanguageDefinition languageDefinition; if (!_languagesConfig.LanguageDefinitions.TryGetValue(_currentLanguageString, out languageDefinition)) { Debug.Console(0, this, Debug.ErrorLogLevel.Warning, "Language definition for selected locale {0} not found", _currentLanguageString); return; } if (languageDefinition.UiLabels != null) { foreach (var label in languageDefinition.UiLabels) { Debug.Console(2, this, "Setting join {0} to {1}", (joinMap.UiLabelsStart.JoinNumber + label.JoinNumber) - 1, label.DisplayText); var stringInputSig = trilist.StringInput[joinMap.UiLabelsStart.JoinNumber + label.JoinNumber - 1]; stringInputSig.StringEncoding = eStringEncoding.eEncodingUTF16; trilist.SetString((joinMap.UiLabelsStart.JoinNumber + label.JoinNumber) - 1, label.DisplayText); } } if (languageDefinition.Sources != null) { foreach (var label in languageDefinition.Sources) { var langLabel = label as LanguageLabel; if (langLabel == null) { continue; } Debug.Console(2, this, "Setting join {0} to {1}", (joinMap.SourceLabelsStart.JoinNumber + langLabel.JoinNumber) - 1, label.DisplayText); var stringInputSig = trilist.StringInput[joinMap.SourceLabelsStart.JoinNumber + langLabel.JoinNumber - 1]; stringInputSig.StringEncoding = eStringEncoding.eEncodingUTF16; trilist.SetString((joinMap.SourceLabelsStart.JoinNumber + langLabel.JoinNumber) - 1, label.DisplayText); } } if (languageDefinition.Destinations == null) { return; } foreach (var label in languageDefinition.Destinations) { var langLabel = label as LanguageLabel; if (langLabel == null) { continue; } Debug.Console(2, this, "Setting join {0} to {1}", (joinMap.DestinationLabelsStart.JoinNumber + langLabel.JoinNumber) - 1, label.DisplayText); var stringInputSig = trilist.StringInput[joinMap.DestinationLabelsStart.JoinNumber + langLabel.JoinNumber - 1]; stringInputSig.StringEncoding = eStringEncoding.eEncodingUTF16; trilist.SetString((joinMap.DestinationLabelsStart.JoinNumber + langLabel.JoinNumber) - 1, label.DisplayText); } }
/// <summary> /// /// </summary> /// <param name="appServerController"></param> protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) { var asc = appServerController; EISC.SetStringSigAction(JoinMap.HookState.JoinNumber, s => { CurrentCallItem.Status = (eCodecCallStatus)Enum.Parse(typeof(eCodecCallStatus), s, true); PostFullStatus(); // SendCallsList(); }); EISC.SetStringSigAction(JoinMap.CurrentCallNumber.JoinNumber, s => { CurrentCallItem.Number = s; PostCallsList(); }); EISC.SetStringSigAction(JoinMap.CurrentCallName.JoinNumber, s => { CurrentCallItem.Name = s; PostCallsList(); }); EISC.SetStringSigAction(JoinMap.CallDirection.JoinNumber, s => { CurrentCallItem.Direction = (eCodecCallDirection)Enum.Parse(typeof(eCodecCallDirection), s, true); PostCallsList(); }); EISC.SetBoolSigAction(JoinMap.IncomingCall.JoinNumber, b => { if (b) { var ica = new CodecActiveCallItem() { Direction = eCodecCallDirection.Incoming, Id = "-video-incoming", Name = EISC.GetString(JoinMap.IncomingCallName.JoinNumber), Number = EISC.GetString(JoinMap.IncomingCallNumber.JoinNumber), Status = eCodecCallStatus.Ringing, Type = eCodecCallType.Video }; IncomingCallItem = ica; } else { IncomingCallItem = null; } PostCallsList(); }); EISC.SetBoolSigAction(JoinMap.CameraSupportsAutoMode.JoinNumber, b => { PostStatusMessage(new { cameraSupportsAutoMode = b }); }); EISC.SetBoolSigAction(JoinMap.CameraSupportsOffMode.JoinNumber, b => { PostStatusMessage(new { cameraSupportsOffMode = b }); }); // Directory insanity EISC.SetUShortSigAction(JoinMap.DirectoryRowCount.JoinNumber, u => { // The length of the list comes in before the list does. // Splice the sig change operation onto the last string sig that will be changing // when the directory entries make it through. if (PreviousDirectoryLength > 0) { EISC.ClearStringSigAction(JoinMap.DirectoryEntriesStart.JoinNumber + PreviousDirectoryLength - 1); } EISC.SetStringSigAction(JoinMap.DirectoryEntriesStart.JoinNumber + u - 1, s => PostDirectory()); PreviousDirectoryLength = u; }); EISC.SetStringSigAction(JoinMap.DirectoryEntrySelectedName.JoinNumber, s => { PostStatusMessage(new { directoryContactSelected = new { name = EISC.GetString(JoinMap.DirectoryEntrySelectedName.JoinNumber), } }); }); EISC.SetStringSigAction(JoinMap.DirectoryEntrySelectedNumber.JoinNumber, s => { PostStatusMessage(new { directoryContactSelected = new { number = EISC.GetString(JoinMap.DirectoryEntrySelectedNumber.JoinNumber), } }); }); EISC.SetStringSigAction(JoinMap.DirectorySelectedFolderName.JoinNumber, s => PostStatusMessage(new { directorySelectedFolderName = EISC.GetString(JoinMap.DirectorySelectedFolderName.JoinNumber) })); EISC.SetSigTrueAction(JoinMap.CameraModeAuto.JoinNumber, () => PostCameraMode()); EISC.SetSigTrueAction(JoinMap.CameraModeManual.JoinNumber, () => PostCameraMode()); EISC.SetSigTrueAction(JoinMap.CameraModeOff.JoinNumber, () => PostCameraMode()); EISC.SetBoolSigAction(JoinMap.CameraSelfView.JoinNumber, b => PostStatusMessage(new { cameraSelfView = b })); EISC.SetUShortSigAction(JoinMap.CameraNumberSelect.JoinNumber, (u) => PostSelectedCamera()); // Add press and holds using helper action Action <string, uint> addPHAction = (s, u) => AppServerController.AddAction(MessagePath + s, new PressAndHoldAction(b => EISC.SetBool(u, b))); addPHAction("/cameraUp", JoinMap.CameraTiltUp.JoinNumber); addPHAction("/cameraDown", JoinMap.CameraTiltDown.JoinNumber); addPHAction("/cameraLeft", JoinMap.CameraPanLeft.JoinNumber); addPHAction("/cameraRight", JoinMap.CameraPanRight.JoinNumber); addPHAction("/cameraZoomIn", JoinMap.CameraZoomIn.JoinNumber); addPHAction("/cameraZoomOut", JoinMap.CameraZoomOut.JoinNumber); // Add straight pulse calls using helper action Action <string, uint> addAction = (s, u) => AppServerController.AddAction(MessagePath + s, new Action(() => EISC.PulseBool(u, 100))); addAction("/endCallById", JoinMap.EndCall.JoinNumber); addAction("/endAllCalls", JoinMap.EndCall.JoinNumber); addAction("/acceptById", JoinMap.IncomingAnswer.JoinNumber); addAction("/rejectById", JoinMap.IncomingReject.JoinNumber); var speeddialStart = JoinMap.SpeedDialStart.JoinNumber; var speeddialEnd = JoinMap.SpeedDialStart.JoinNumber + JoinMap.SpeedDialStart.JoinSpan; var speedDialIndex = 1; for (uint i = speeddialStart; i < speeddialEnd; i++) { addAction(string.Format("/speedDial{0}", speedDialIndex), i); speedDialIndex++; } addAction("/cameraModeAuto", JoinMap.CameraModeAuto.JoinNumber); addAction("/cameraModeManual", JoinMap.CameraModeManual.JoinNumber); addAction("/cameraModeOff", JoinMap.CameraModeOff.JoinNumber); addAction("/cameraSelfView", JoinMap.CameraSelfView.JoinNumber); addAction("/cameraLayout", JoinMap.CameraLayout.JoinNumber); asc.AddAction("/cameraSelect", new Action <string>(SelectCamera)); // camera presets for (uint i = 0; i < 6; i++) { addAction("/cameraPreset" + (i + 1), JoinMap.CameraPresetStart.JoinNumber + i); } asc.AddAction(MessagePath + "/isReady", new Action(PostIsReady)); // Get status asc.AddAction(MessagePath + "/fullStatus", new Action(PostFullStatus)); // Dial on string asc.AddAction(MessagePath + "/dial", new Action <string>(s => EISC.SetString(JoinMap.CurrentDialString.JoinNumber, s))); // Pulse DTMF AppServerController.AddAction(MessagePath + "/dtmf", new Action <string>(s => { var join = JoinMap.Joins[s]; if (join != null) { if (join.JoinNumber > 0) { EISC.PulseBool(join.JoinNumber, 100); } } })); // Directory madness asc.AddAction(MessagePath + "/directoryRoot", new Action(() => EISC.PulseBool(JoinMap.DirectoryRoot.JoinNumber))); asc.AddAction(MessagePath + "/directoryBack", new Action(() => EISC.PulseBool(JoinMap.DirectoryFolderBack.JoinNumber))); asc.AddAction(MessagePath + "/directoryById", new Action <string>(s => { // the id should contain the line number to forward to simpl try { var u = ushort.Parse(s); EISC.SetUshort(JoinMap.DirectorySelectRow.JoinNumber, u); EISC.PulseBool(JoinMap.DirectoryLineSelected.JoinNumber); } catch (Exception) { Debug.Console(1, this, Debug.ErrorLogLevel.Warning, "/directoryById request contains non-numeric ID incompatible with DDVC bridge"); } })); asc.AddAction(MessagePath + "/directorySelectContact", new Action <string>(s => { try { var u = ushort.Parse(s); EISC.SetUshort(JoinMap.DirectorySelectRow.JoinNumber, u); EISC.PulseBool(JoinMap.DirectoryLineSelected.JoinNumber); } catch { } })); asc.AddAction(MessagePath + "/directoryDialContact", new Action(() => { EISC.PulseBool(JoinMap.DirectoryDialSelectedLine.JoinNumber); })); asc.AddAction(MessagePath + "/getDirectory", new Action(() => { if (EISC.GetUshort(JoinMap.DirectoryRowCount.JoinNumber) > 0) { PostDirectory(); } else { EISC.PulseBool(JoinMap.DirectoryRoot.JoinNumber); } })); }
/// <summary> /// /// </summary> /// <param name="appServerController"></param> protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) { //EISC.SetStringSigAction(SCurrentDialString, s => PostStatusMessage(new { currentDialString = s })); EISC.SetStringSigAction(JoinMap.HookState.JoinNumber, s => { CurrentCallItem.Status = (eCodecCallStatus)Enum.Parse(typeof(eCodecCallStatus), s, true); //GetCurrentCallList(); SendFullStatus(); }); EISC.SetStringSigAction(JoinMap.CurrentCallNumber.JoinNumber, s => { CurrentCallItem.Number = s; SendCallsList(); }); EISC.SetStringSigAction(JoinMap.CurrentCallName.JoinNumber, s => { CurrentCallItem.Name = s; SendCallsList(); }); EISC.SetStringSigAction(JoinMap.CallDirection.JoinNumber, s => { CurrentCallItem.Direction = (eCodecCallDirection)Enum.Parse(typeof(eCodecCallDirection), s, true); SendCallsList(); }); // Add press and holds using helper Action <string, uint> addPHAction = (s, u) => AppServerController.AddAction(MessagePath + s, new PressAndHoldAction(b => EISC.SetBool(u, b))); // Add straight pulse calls Action <string, uint> addAction = (s, u) => AppServerController.AddAction(MessagePath + s, new Action(() => EISC.PulseBool(u, 100))); addAction("/endCallById", JoinMap.EndCall.JoinNumber); addAction("/endAllCalls", JoinMap.EndCall.JoinNumber); addAction("/acceptById", JoinMap.IncomingAnswer.JoinNumber); addAction("/rejectById", JoinMap.IncomingReject.JoinNumber); var speeddialStart = JoinMap.SpeedDialStart.JoinNumber; var speeddialEnd = JoinMap.SpeedDialStart.JoinNumber + JoinMap.SpeedDialStart.JoinSpan; var speedDialIndex = 1; for (uint i = speeddialStart; i < speeddialEnd; i++) { addAction(string.Format("/speedDial{0}", speedDialIndex), i); speedDialIndex++; } // Get status AppServerController.AddAction(MessagePath + "/fullStatus", new Action(SendFullStatus)); // Dial on string AppServerController.AddAction(MessagePath + "/dial", new Action <string>(s => EISC.SetString(JoinMap.CurrentDialString.JoinNumber, s))); // Pulse DTMF AppServerController.AddAction(MessagePath + "/dtmf", new Action <string>(s => { var join = JoinMap.Joins[s]; if (join != null) { if (join.JoinNumber > 0) { EISC.PulseBool(join.JoinNumber, 100); } } })); }