using System; using System.Collections.Generic; using System.Linq; using System.Text; using Crestron.SimplSharp; using Crestron.SimplSharpPro.DeviceSupport; using Crestron.SimplSharpPro.EthernetCommunication; using PepperDash.Core; using PepperDash.Essentials.Core; using PepperDash.Essentials.Devices.Common.Cameras; namespace PepperDash.Essentials.AppServer.Messengers { public class SIMPLCameraBaseMessenger : MessengerBase { BasicTriList EISC; CameraBase Camera; uint JoinStart; /// /// 811 /// const uint BCameraControlUp = 1; /// /// 812 /// const uint BCameraControlDown = 2; /// /// 813 /// const uint BCameraControlLeft = 3; /// /// 814 /// const uint BCameraControlRight = 4; /// /// 815 /// const uint BCameraControlZoomIn = 5; /// /// 816 /// const uint BCameraControlZoomOut = 6; /// /// 821 - 826 /// const uint BCameraPresetStart = 11; /// /// 831 /// const uint BCameraModeAuto = 21; /// /// 832 /// const uint BCameraModeManual = 22; /// /// 833 /// const uint BCameraModeOff = 23; public SIMPLCameraBaseMessenger(string key, CameraBase camera, BasicTriList eisc, string messagePath, uint joinStart) : base(key, messagePath) { if (camera == null) throw new ArgumentNullException("camera"); EISC = eisc; Camera = camera; JoinStart = joinStart; var presetsCamera = Camera as IHasCameraPresets; if (presetsCamera != null) { presetsCamera.PresetsListHasChanged += new EventHandler(presetsCamera_PresetsListHasChanged); } } void presetsCamera_PresetsListHasChanged(object sender, EventArgs e) { var presetsCamera = Camera as IHasCameraPresets; var presetList = new List(); if (presetsCamera != null) presetList = presetsCamera.Presets; PostStatusMessage(new { presets = presetList }); } protected override void CustomRegisterWithAppServer(MobileControlSystemController appServerController) { var asc = appServerController; // Add press and holds using helper action Action addPHAction = (s, u) => AppServerController.AddAction(MessagePath + s, new PressAndHoldAction(b => EISC.SetBool(u, b))); addPHAction("/cameraUp", BCameraControlUp + JoinStart); addPHAction("/cameraDown", BCameraControlDown + JoinStart); addPHAction("/cameraLeft", BCameraControlLeft + JoinStart); addPHAction("/cameraRight", BCameraControlRight + JoinStart); addPHAction("/cameraZoomIn", BCameraControlZoomIn + JoinStart); addPHAction("/cameraZoomOut", BCameraControlZoomOut + JoinStart); Action addAction = (s, u) => AppServerController.AddAction(MessagePath + s, new Action(() => EISC.PulseBool(u, 100))); addAction("/cameraModeAuto", BCameraModeAuto); addAction("/cameraModeManual", BCameraModeManual); addAction("/cameraModeOff", BCameraModeOff); // camera presets for (uint i = 0; i < 6; i++) { addAction("/cameraPreset" + (i + 1), BCameraPresetStart + i); } asc.AddAction(MessagePath + "/fullStatus", new Action(SendCameraFullMessageObject)); } /// /// Helper method to update the full status of the camera /// void SendCameraFullMessageObject() { var presetsCamera = Camera as IHasCameraPresets; var presetList = new List(); if (presetsCamera != null) presetList = presetsCamera.Presets; PostStatusMessage(new { cameraMode = GetCameraMode(), hasPresets = Camera is IHasCameraPresets, presets = presetList }); } /// /// /// void PostCameraMode() { PostStatusMessage(new { cameraMode = GetCameraMode() }); } /// /// Computes the current camera mode /// /// string GetCameraMode() { string m; if (EISC.GetBool(BCameraModeAuto)) m = eCameraControlMode.Auto.ToString().ToLower(); else if (EISC.GetBool(BCameraModeManual)) m = eCameraControlMode.Manual.ToString().ToLower(); else m = eCameraControlMode.Off.ToString().ToLower(); return m; } } }