/// <summary>
        /// Sets up Header Buttons for the EssentialsHuddleSpaceRoom type
        /// </summary>
        public void SetupHeaderButtons(EssentialsHuddlePanelAvFunctionsDriver avDriver, EssentialsHuddleSpaceRoom currentRoom)
        {
            HeaderButtonsAreSetUp = false;

            TriList.SetBool(UIBoolJoin.TopBarHabaneroDynamicVisible, true);

            var roomConf = currentRoom.PropertiesConfig;

            // Register for the PopupInterlock IsShowsFeedback event to tie the header carets subpage visiblity to it
            Parent.AvDriver.PopupInterlock.StatusChanged -= PopupInterlock_StatusChanged;
            Parent.AvDriver.PopupInterlock.StatusChanged += PopupInterlock_StatusChanged;

            SetUpGear(avDriver, currentRoom);

            SetUpHelpButton(roomConf);

            uint nextJoin = 3953;

            nextJoin = SetUpEnvironmentButton(Parent.EnvironmentDriver, nextJoin);

            // blank any that remain
            for (var i = nextJoin; i > 3950; i--)
            {
                TriList.SetString(i, "Blank");
                TriList.SetSigFalseAction(i, () => { });
            }

            HeaderButtonsAreSetUp = true;
        }
Example #2
0
        /// <summary>
        /// Config constructor
        /// </summary>
        public EssentialsTouchpanelController(string key, string name, string type, CrestronTouchpanelPropertiesConfig props, uint id)
            : base(key, name)
        {
            AddPostActivationAction(() =>
            {
                Debug.Console(0, this, "post-activation linking");
                type = type.ToLower();
                try
                {
                    if (type == "crestronapp")
                    {
                        var app = new CrestronApp(id, Global.ControlSystem);
                        app.ParameterProjectName.Value = props.ProjectName;
                        Panel = app;
                    }
                    else if (type == "tsw560")
                    {
                        Panel = new Tsw560(id, Global.ControlSystem);
                    }
                    else if (type == "tsw752")
                    {
                        Panel = new Tsw752(id, Global.ControlSystem);
                    }
                    else if (type == "tsw1052")
                    {
                        Panel = new Tsw1052(id, Global.ControlSystem);
                    }
                    else
                    {
                        Debug.Console(0, this, "WARNING: Cannot create TSW controller with type '{0}'", type);
                        return;
                    }
                }
                catch (Exception e)
                {
                    Debug.Console(0, this, "WARNING: Cannot create TSW base class. Panel will not function: {0}", e.Message);
                    return;
                }

                // Reserved sigs
                if (Panel is TswFt5ButtonSystem)
                {
                    var tsw = Panel as TswFt5ButtonSystem;
                    tsw.ExtenderSystemReservedSigs.Use();
                    tsw.ExtenderSystemReservedSigs.DeviceExtenderSigChange
                        += ExtenderSystemReservedSigs_DeviceExtenderSigChange;
                }

                new CTimer(o =>
                {
                    var regSuccess = Panel.Register();
                    if (regSuccess != eDeviceRegistrationUnRegistrationResponse.Success)
                    {
                        Debug.Console(0, this, "WARNING: Registration failed. Continuing, but panel may not function: {0}", regSuccess);
                    }

                    // Give up cleanly if SGD is not present.
                    var sgdName = @"\NVRAM\Program" + InitialParametersClass.ApplicationNumber
                                  + @"\sgd\" + props.SgdFile;
                    if (!File.Exists(sgdName))
                    {
                        Debug.Console(0, this, "WARNING: Smart object file '{0}' not present. Exiting TSW load", sgdName);
                        return;
                    }

                    Panel.LoadSmartObjects(sgdName);
                    Panel.SigChange += Tsw_SigChange;

                    var mainDriver = new EssentialsPanelMainInterfaceDriver(Panel, props);
                    // Then the AV driver

                    // spin up different room drivers depending on room type
                    var room = DeviceManager.GetDeviceForKey(props.DefaultRoomKey);
                    if (room is EssentialsHuddleSpaceRoom)
                    {
                        Debug.Console(0, this, "Adding huddle space driver");
                        var avDriver            = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, props);
                        avDriver.CurrentRoom    = room as EssentialsHuddleSpaceRoom;
                        avDriver.DefaultRoomKey = props.DefaultRoomKey;
                        mainDriver.AvDriver     = avDriver;
                        LoadAndShowDriver(mainDriver);          // This is a little convoluted.

                        if (Panel is TswFt5ButtonSystem)
                        {
                            var tsw = Panel as TswFt5ButtonSystem;
                            // Wire up hard keys
                            tsw.Power.UserObject = new Action <bool>(b => { if (!b)
                                                                            {
                                                                                avDriver.PowerButtonPressed();
                                                                            }
                                                                     });
                            //tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
                            tsw.Up.UserObject      = new Action <bool>(avDriver.VolumeUpPress);
                            tsw.Down.UserObject    = new Action <bool>(avDriver.VolumeDownPress);
                            tsw.ButtonStateChange += new ButtonEventHandler(Tsw_ButtonStateChange);
                        }
                    }
                    else if (room is EssentialsPresentationRoom)
                    {
                        Debug.Console(0, this, "Adding presentation room driver");
                        var avDriver            = new EssentialsPresentationPanelAvFunctionsDriver(mainDriver, props);
                        avDriver.CurrentRoom    = room as EssentialsPresentationRoom;
                        avDriver.DefaultRoomKey = props.DefaultRoomKey;
                        mainDriver.AvDriver     = avDriver;
                        LoadAndShowDriver(mainDriver);

                        if (Panel is TswFt5ButtonSystem)
                        {
                            var tsw = Panel as TswFt5ButtonSystem;
                            // Wire up hard keys
                            tsw.Power.UserObject = new Action <bool>(b => { if (!b)
                                                                            {
                                                                                avDriver.PowerButtonPressed();
                                                                            }
                                                                     });
                            //tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
                            tsw.Up.UserObject      = new Action <bool>(avDriver.VolumeUpPress);
                            tsw.Down.UserObject    = new Action <bool>(avDriver.VolumeDownPress);
                            tsw.ButtonStateChange += new ButtonEventHandler(Tsw_ButtonStateChange);
                        }
                    }
                    else
                    {
                        Debug.Console(0, this, "ERROR: Cannot load AvFunctionsDriver for room '{0}'", props.DefaultRoomKey);
                    }
                }, 0);
            });
        }
Example #3
0
        public override EssentialsDevice BuildDevice(DeviceConfig dc)
        {
            var comm  = CommFactory.GetControlPropertiesConfig(dc);
            var props = Newtonsoft.Json.JsonConvert.DeserializeObject <CrestronTouchpanelPropertiesConfig>(dc.Properties.ToString());

            Debug.Console(1, "Factory Attempting to create new Generic Comm Device");

            var panelController = new EssentialsTouchpanelController(dc.Key, dc.Name, dc.Type, props, comm.IpIdInt);

            panelController.AddPostActivationAction(() =>
            {
                var mainDriver = new EssentialsPanelMainInterfaceDriver(panelController.Panel, props);
                // Then the sub drivers

                // spin up different room drivers depending on room type
                var room = DeviceManager.GetDeviceForKey(props.DefaultRoomKey);
                if (room is EssentialsHuddleSpaceRoom)
                {
                    // Header Driver
                    Debug.Console(0, panelController, "Adding header driver");
                    mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props);

                    // AV Driver
                    Debug.Console(0, panelController, "Adding huddle space AV driver");
                    var avDriver            = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, props);
                    avDriver.DefaultRoomKey = props.DefaultRoomKey;
                    mainDriver.AvDriver     = avDriver;
                    avDriver.CurrentRoom    = room as EssentialsHuddleSpaceRoom;

                    // Environment Driver
                    if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
                    {
                        Debug.Console(0, panelController, "Adding environment driver");
                        mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props);

                        mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
                    }

                    mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom);

                    panelController.LoadAndShowDriver(mainDriver);  // This is a little convoluted.

                    if (panelController.Panel is TswFt5ButtonSystem)
                    {
                        var tsw = panelController.Panel as TswFt5ButtonSystem;
                        // Wire up hard keys
                        tsw.Power.UserObject = new Action <bool>(b => { if (!b)
                                                                        {
                                                                            avDriver.PowerButtonPressed();
                                                                        }
                                                                 });
                        //tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
                        if (mainDriver.EnvironmentDriver != null)
                        {
                            tsw.Lights.UserObject = new Action <bool>(b =>
                            {
                                if (!b)
                                {
                                    //mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin);
                                    mainDriver.EnvironmentDriver.Toggle();
                                }
                            });
                        }
                        tsw.Up.UserObject   = new Action <bool>(avDriver.VolumeUpPress);
                        tsw.Down.UserObject = new Action <bool>(avDriver.VolumeDownPress);
                    }
                }
                else if (room is EssentialsHuddleVtc1Room)
                {
                    Debug.Console(0, panelController, "Adding huddle space VTC AV driver");

                    // Header Driver
                    mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props);

                    // AV Driver
                    var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, props);

                    var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(panelController.Panel, avDriver,
                                                                                                          (room as EssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver);
                    avDriver.SetVideoCodecDriver(codecDriver);
                    avDriver.DefaultRoomKey = props.DefaultRoomKey;
                    mainDriver.AvDriver     = avDriver;
                    avDriver.CurrentRoom    = room as EssentialsHuddleVtc1Room;

                    // Environment Driver
                    if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
                    {
                        Debug.Console(0, panelController, "Adding environment driver");
                        mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props);

                        mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
                    }

                    mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom);

                    panelController.LoadAndShowDriver(mainDriver);  // This is a little convoluted.

                    if (panelController.Panel is TswFt5ButtonSystem)
                    {
                        var tsw = panelController.Panel as TswFt5ButtonSystem;
                        // Wire up hard keys
                        tsw.Power.UserObject = new Action <bool>(b => { if (!b)
                                                                        {
                                                                            avDriver.EndMeetingPress();
                                                                        }
                                                                 });
                        //tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
                        if (mainDriver.EnvironmentDriver != null)
                        {
                            tsw.Lights.UserObject = new Action <bool>(b =>
                            {
                                if (!b)
                                {
                                    //mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin);
                                    mainDriver.EnvironmentDriver.Toggle();
                                }
                            });
                        }
                        tsw.Up.UserObject   = new Action <bool>(avDriver.VolumeUpPress);
                        tsw.Down.UserObject = new Action <bool>(avDriver.VolumeDownPress);
                    }
                }
                else
                {
                    Debug.Console(0, panelController, "ERROR: Cannot load AvFunctionsDriver for room '{0}'", props.DefaultRoomKey);
                }
            });

            return(panelController);
        }
Example #4
0
        public static IKeyed GetUiDevice(DeviceConfig config)
        {
            var comm = CommFactory.GetControlPropertiesConfig(config);

            var typeName = config.Type.ToLower();

            EssentialsTouchpanelController panelController = null;

            var props = JsonConvert.DeserializeObject <CrestronTouchpanelPropertiesConfig>(config.Properties.ToString());

            if (typeName.Contains("dge"))
            {
                Dge100 dgeDevice = null;
                if (typeName == "dge100")
                {
                    dgeDevice = new Dge100(comm.IpIdInt, Global.ControlSystem);
                }
                else if (typeName == "dmdge200c")
                {
                    dgeDevice = new DmDge200C(comm.IpIdInt, Global.ControlSystem);
                }

                if (dgeDevice == null)
                {
                    Debug.Console(1, "Unable to create DGE device");
                    return(null);
                }

                var dgeController = new DgeController(config.Key + "-comPorts", config.Name, dgeDevice, config, props);

                DeviceManager.AddDevice(dgeController);

                panelController = new EssentialsTouchpanelController(config.Key, config.Name, dgeController.DigitalGraphicsEngine,
                                                                     props.ProjectName, props.SgdFile);
            }
            else
            {
                panelController = new EssentialsTouchpanelController(config.Key, config.Name, config.Type, props, comm.IpIdInt);
            }

            panelController.AddPostActivationAction(() =>
            {
                var mainDriver = new EssentialsPanelMainInterfaceDriver(panelController.Panel, props);
                // Then the sub drivers

                // spin up different room drivers depending on room type
                var room = DeviceManager.GetDeviceForKey(props.DefaultRoomKey);
                if (room is EssentialsHuddleSpaceRoom)
                {
                    // Header Driver
                    Debug.Console(0, panelController, "Adding header driver");
                    mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props);

                    // AV Driver
                    Debug.Console(0, panelController, "Adding huddle space AV driver");
                    var avDriver            = new EssentialsHuddlePanelAvFunctionsDriver(mainDriver, props);
                    avDriver.DefaultRoomKey = props.DefaultRoomKey;
                    mainDriver.AvDriver     = avDriver;
                    avDriver.CurrentRoom    = room as EssentialsHuddleSpaceRoom;

                    // Environment Driver
                    if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
                    {
                        Debug.Console(0, panelController, "Adding environment driver");
                        mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props);

                        mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
                    }

                    mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom);

                    panelController.LoadAndShowDriver(mainDriver);      // This is a little convoluted.

                    if (panelController.Panel is TswFt5ButtonSystem)
                    {
                        var tsw = panelController.Panel as TswFt5ButtonSystem;
                        // Wire up hard keys
                        tsw.Power.UserObject = new Action <bool>(b => { if (!b)
                                                                        {
                                                                            avDriver.PowerButtonPressed();
                                                                        }
                                                                 });
                        //tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
                        if (mainDriver.EnvironmentDriver != null)
                        {
                            tsw.Lights.UserObject = new Action <bool>(b =>
                            {
                                if (!b)
                                {
                                    //mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin);
                                    mainDriver.EnvironmentDriver.Toggle();
                                }
                            });
                        }
                        tsw.Up.UserObject   = new Action <bool>(avDriver.VolumeUpPress);
                        tsw.Down.UserObject = new Action <bool>(avDriver.VolumeDownPress);
                    }
                }
                //else if (room is EssentialsPresentationRoom)
                //{
                //    Debug.Console(0, panelController, "Adding presentation room driver");
                //    var avDriver = new EssentialsPresentationPanelAvFunctionsDriver(mainDriver, props);
                //    avDriver.CurrentRoom = room as EssentialsPresentationRoom;
                //    avDriver.DefaultRoomKey = props.DefaultRoomKey;
                //    mainDriver.AvDriver = avDriver ;
                //    mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props);
                //    panelController.LoadAndShowDriver(mainDriver);

                //    if (panelController.Panel is TswFt5ButtonSystem)
                //    {
                //        var tsw = panelController.Panel as TswFt5ButtonSystem;
                //        // Wire up hard keys
                //        tsw.Power.UserObject = new Action<bool>(b => { if (!b) avDriver.PowerButtonPressed(); });
                //        //tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
                //        tsw.Up.UserObject = new Action<bool>(avDriver.VolumeUpPress);
                //        tsw.Down.UserObject = new Action<bool>(avDriver.VolumeDownPress);
                //    }
                //}
                else if (room is EssentialsHuddleVtc1Room)
                {
                    Debug.Console(0, panelController, "Adding huddle space VTC AV driver");

                    // Header Driver
                    mainDriver.HeaderDriver = new EssentialsHeaderDriver(mainDriver, props);

                    // AV Driver
                    var avDriver = new EssentialsHuddleVtc1PanelAvFunctionsDriver(mainDriver, props);

                    var codecDriver = new PepperDash.Essentials.UIDrivers.VC.EssentialsVideoCodecUiDriver(panelController.Panel, avDriver,
                                                                                                          (room as EssentialsHuddleVtc1Room).VideoCodec, mainDriver.HeaderDriver);
                    avDriver.SetVideoCodecDriver(codecDriver);
                    avDriver.DefaultRoomKey = props.DefaultRoomKey;
                    mainDriver.AvDriver     = avDriver;
                    avDriver.CurrentRoom    = room as EssentialsHuddleVtc1Room;

                    // Environment Driver
                    if (avDriver.CurrentRoom.PropertiesConfig.Environment != null && avDriver.CurrentRoom.PropertiesConfig.Environment.DeviceKeys.Count > 0)
                    {
                        Debug.Console(0, panelController, "Adding environment driver");
                        mainDriver.EnvironmentDriver = new EssentialsEnvironmentDriver(mainDriver, props);

                        mainDriver.EnvironmentDriver.GetDevicesFromConfig(avDriver.CurrentRoom.PropertiesConfig.Environment);
                    }

                    mainDriver.HeaderDriver.SetupHeaderButtons(avDriver, avDriver.CurrentRoom);

                    panelController.LoadAndShowDriver(mainDriver);      // This is a little convoluted.

                    if (panelController.Panel is TswFt5ButtonSystem)
                    {
                        var tsw = panelController.Panel as TswFt5ButtonSystem;
                        // Wire up hard keys
                        tsw.Power.UserObject = new Action <bool>(b => { if (!b)
                                                                        {
                                                                            avDriver.EndMeetingPress();
                                                                        }
                                                                 });
                        //tsw.Home.UserObject = new Action<bool>(b => { if (!b) HomePressed(); });
                        if (mainDriver.EnvironmentDriver != null)
                        {
                            tsw.Lights.UserObject = new Action <bool>(b =>
                            {
                                if (!b)
                                {
                                    //mainDriver.AvDriver.PopupInterlock.ShowInterlockedWithToggle(mainDriver.EnvironmentDriver.BackgroundSubpageJoin);
                                    mainDriver.EnvironmentDriver.Toggle();
                                }
                            });
                        }
                        tsw.Up.UserObject   = new Action <bool>(avDriver.VolumeUpPress);
                        tsw.Down.UserObject = new Action <bool>(avDriver.VolumeDownPress);
                    }
                }
                else
                {
                    Debug.Console(0, panelController, "ERROR: Cannot load AvFunctionsDriver for room '{0}'", props.DefaultRoomKey);
                }
            });

            return(panelController);
        }