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); } } }
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); }
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; } }