public void ProcessLoadOffEvent(LoadOffEvent offEvent)
        {
            var index = pagedLoads.FindIndex(x => x.LoadID == offEvent.Load.LoadID);

            if (index >= 0)
            {
                this._view.SetLoadOff((uint)index);

                if (offEvent.Load.Type == eLoadType.Dimmer)
                {
                    this._view.RampLoadToLevel((uint)index, 0, offEvent.Time);
                }
            }
        }
Example #2
0
        public void Off()
        {
            //Level Feedback should occur to process even to set _level
            //No need to set it here

            _crestronLoad.FullOff();

            var hub = MessageHub.Instance;

            LoadOffEvent offMessage = new LoadOffEvent(this);

            offMessage.Time = _offFadeTime;


            //Might be better to send this with a CTimer event
            hub.Publish <LoadOffEvent>(offMessage);

            LoadIsOffEvent isOffMessage = new LoadIsOffEvent(this);

            hub.Publish <LoadIsOffEvent>(isOffMessage);
        }
Example #3
0
        void load_LoadEventHandler(LightingBase currentDevice, LoadEventArgs args)
        {
            //Need to review this code/handler to better support multiple loads on device
            var hub = MessageHub.Instance;

            //if (EventIds.ContainsKey(args.EventId))
            //    CrestronConsole.PrintLine("MessgeID: {0} Device {1}: {2}", sequence++, currentDevice.ID, EventIds[args.EventId]);

            // use this structure to react to the different events
            switch (args.EventId)
            {
            case LoadEventIds.IsOnEventId:
            {
                //Shouldn't matter if Switch vs Dimmer
                if (this.IsOn())
                {
                    LoadIsOnEvent message = new LoadIsOnEvent(this);
                    hub.Publish <LoadIsOnEvent>(message);
                }
                else
                {
                    LoadIsOffEvent message = new LoadIsOffEvent(this);
                    hub.Publish <LoadIsOffEvent>(message);
                }
            }
            break;

            case LoadEventIds.LevelChangeEventId:
            {
                //If Level is/was 65535
                //You can expect two level events with no prior warning (This means button was pressed);

                var dimmer = ((ClwDimmingLoad)(args.Load));
                _levelFB = dimmer.LevelFeedback.UShortValue;

                if (currentState == LoadState.Raise || currentState == LoadState.Lower ||
                    currentState == LoadState.StopLower || currentState == LoadState.StopRaise)
                {
                    if (expectedMessageCount == 3)
                    {
                        //Swallow the initial Level Message (for now);
                        _startLevel = _levelFB;
                        expectedMessageCount--;
                        break;
                    }
                    else if (expectedMessageCount == 2)
                    {
                        expectedMessageCount--;
                        break;
                        //Next to last message (pulse)
                    }
                    else if (expectedMessageCount == 1)
                    {
                        //Final state (store in Level);
                        _endLevel = _levelFB;
                        expectedMessageCount--;
                        _level = dimmer.LevelFeedback.UShortValue;
                        SetLevelFB(_level);
                        currentState = LoadState.Steady;
                        break;
                    }
                }
                else if (currentState == LoadState.Toggle)
                {
                    if (expectedMessageCount == 2)
                    {
                        //Swallow first level
                        _startLevel = _levelFB;
                        expectedMessageCount--;
                        break;
                    }
                    else if (expectedMessageCount == 1)
                    {
                        expectedMessageCount--;
                        _endLevel = _levelFB;
                        _level    = _levelFB;
                        SetLevelFB(_level);
                        currentState = LoadState.Steady;
                        break;
                    }
                }
                else
                {
                    if (currentState == LoadState.Steady)
                    {
                        //This only gets called when load is at MAX 65535 and we keep pushing to go max again
                        //This really shouldn't trigger an event (as we already should have this level)
                        //Let's process it anyway
                        _startLevel          = _levelFB;
                        currentState         = LoadState.Toggle;
                        expectedMessageCount = 1;
                        break;
                    }
                }
            }
            break;

            case LoadEventIds.LevelInputChangedEventId:
            {
            }
            break;

            case LoadEventIds.PresetLoadIsAtEventId:
            {
            }
            break;

            case LoadEventIds.FastOffEventId:
            {         //We must handle this
                currentState         = LoadState.Toggle;
                expectedMessageCount = 2;

                LoadOffEvent message = new LoadOffEvent(this);
                message.Time = _fastOnOffTime;

                hub.Publish <LoadOffEvent>(message);
            }
            break;

            case LoadEventIds.FastFullOnEventId:
            {
                //Need to handle this
                var dimmer = ((ClwDimmingLoad)(args.Load));
                // var last1Preset = dimmer12.LastPresetCalled();

                currentState         = LoadState.Toggle;
                expectedMessageCount = 2;

                LoadOnEvent message = new LoadOnEvent(this);
                message.Time = _fastOnOffTime;
                //lpresetMessage.PresetNumber = last1Preset.Number;

                hub.Publish <LoadOnEvent>(message);
            }

            break;

            case LoadEventIds.LastPresetCalledEventId:
            {
                //This is preset to go full on
                //I'm not handling other presets right now
                //Switch somehow has "PressOn" triggered to preset

                var dimmer     = ((ClwDimmingLoad)(args.Load));
                var lastPreset = dimmer.LastPresetCalled();

                currentState         = LoadState.Toggle;
                expectedMessageCount = 2;


                if (lastPreset != null)
                {
                    LoadOnEvent message = new LoadOnEvent(this);
                    message.Time = _presetFadeTime;
                    // presetMessage.PresetNumber = lastPreset.Number;

                    hub.Publish <LoadOnEvent>(message);
                }
                else
                {
                }
            }
            break;

            case LoadEventIds.LowerEventId:
            {
                //Basic lower

                if (currentState == LoadState.Lower)
                {
                    currentState = LoadState.StopLower;
                }
                else
                {
                    currentState         = LoadState.Lower;
                    expectedMessageCount = 3;
                }

                LoadLowerEvent message = new LoadLowerEvent(this);
                hub.Publish <LoadLowerEvent>(message);
            }
            break;

            case LoadEventIds.RaiseEventId:
            {         //Basic Raise
                if (currentState == LoadState.Raise)
                {
                    currentState = LoadState.StopRaise;
                }
                else
                {
                    currentState         = LoadState.Raise;
                    expectedMessageCount = 3;
                }

                LoadRaiseEvent message = new LoadRaiseEvent(this);
                hub.Publish <LoadRaiseEvent>(message);
            }
            break;

            case LoadEventIds.OffReleaseEventId:
            {
                //Off Release
                //We don't do anything with Off Press?
                //Holding Off just triggers a lower

                currentState         = LoadState.Toggle;
                expectedMessageCount = 2;

                LoadOffEvent message = new LoadOffEvent(this);
                message.Time = _offFadeTime;

                hub.Publish <LoadOffEvent>(message);
            }
            break;

            default:
            {
            }
            break;
            }
        }