/// <summary> /// Tells the logical layer that the update output message was successfully sent /// Allows the Logical layer to then update the ui with that information /// </summary> /// <param name="inEvent"></param> public void updateOutputSent(UpdateOutputEvent inEvent) { if (_updateUIDelegate != null) { _updateUIDelegate.updateOutputState(inEvent); } }
private void changeOutput(DIOPins pinToChange, bool shouldSetHigh) { UpdateOutputEvent clickTarget = new UpdateOutputEvent(pinToChange, shouldSetHigh); if (_uiDelegate != null) { log.Debug(string.Format("Adding UpdateOutputEvent (pin to set : {0} should set high : {1}) to UIProcessing queue", pinToChange, shouldSetHigh)); _uiDelegate.enqueueEvent(clickTarget); } }
public void updateOutputState(UpdateOutputEvent inEvent) { switch (inEvent._pinToUpdate) { case DIOPins.Heater_AN1: if (inEvent._shouldBeHigh) { Dispatcher.Invoke((Action) delegate() { heaterIOBox.IsChecked = true; }); } else { Dispatcher.Invoke((Action) delegate() { heaterIOBox.IsChecked = false; }); } break; case DIOPins.AirSolenoid_AN0: if (inEvent._shouldBeHigh) { Dispatcher.Invoke((Action) delegate() { airIOBox.IsChecked = true; }); } else { Dispatcher.Invoke((Action) delegate() { airIOBox.IsChecked = false; }); } break; case DIOPins.WaterPump_AN2: if (inEvent._shouldBeHigh) { Dispatcher.Invoke((Action) delegate() { waterIOBox.IsChecked = true; }); } else { Dispatcher.Invoke((Action) delegate() { waterIOBox.IsChecked = false; }); } break; case DIOPins.AirPump_AN3: if (inEvent._shouldBeHigh) { Dispatcher.Invoke((Action) delegate() { airPumpIOBox.IsChecked = true; }); } else { Dispatcher.Invoke((Action) delegate() { airPumpIOBox.IsChecked = false; }); } break; default: break; } }
public void controlOutput(UpdateOutputEvent inEvent) { if (_deviceConnected) { log.Debug(string.Format("Trying to set pin {0} to state {1}", inEvent._pinToUpdate, inEvent._shouldBeHigh)); bool oldValue; _pinStates.TryGetValue(inEvent._pinToUpdate, out oldValue); _physicalLayer.setOutputState(inEvent); _pinStates.TryUpdate(inEvent._pinToUpdate, inEvent._shouldBeHigh, oldValue); } else { log.Error("Can not control output pins because device is not connected"); } }
public void setOutputState(UpdateOutputEvent inEvent) { int newPinState; if (inEvent._shouldBeHigh) { newPinState = 0x01; } else { newPinState = 0x00; } log.Debug(string.Format("Sending DigitalIOControl message to turn pin {0} to state {1}", (int)inEvent._pinToUpdate, newPinState)); sendMessage(inEvent, buildMessage(new List <int> { 0x05, 0x35, (int)inEvent._pinToUpdate, 0x00, newPinState })); }
//*************************** EventInterface End **************************************************// /// <summary> /// Method which the processing thread will execute in order to /// process the ui event queue. /// /// Will stop when the _shouldStop flag is set /// </summary> private void processQueue() { while (!_shouldStop) { //Get out the newest event log.Debug("Waiting for new event in UIHandle_LLSL processing queue"); _enqueueEvent.WaitOne(100); if (_eventQueue.Count() < 1) { continue; } log.Debug("UIHandle_LLSL processing thread received item enqueued event"); Event newEvent; bool dequeueSuccessful = _eventQueue.TryDequeue(out newEvent); if (!dequeueSuccessful) { continue; } log.Info(string.Format("UIHandle_LLSL processing queue dequeued event {0}", newEvent.getEventIdentifier())); //Decide what to do with the event switch (newEvent.getEventIdentifier()) { case EventIdentifier.GenericEvent: break; case EventIdentifier.ConnectRequest: log.Debug("Handling ConnectRequest ui event"); handleConnectEvent(); break; case EventIdentifier.ToggleLEDRequest: log.Debug("Handling toggleLED ui event"); handleToggleLEDEvent(); break; case EventIdentifier.FlashLEDRequest: log.Debug("Handling flashLED ui event"); handleFlashLEDEvent(); break; case EventIdentifier.ChangeLEDStateRequest: ChangeLEDStateEvent changeLEDEvent = (ChangeLEDStateEvent)newEvent; bool ledIsHigh = changeLEDEvent._isHigh; log.Debug(string.Format("Handling changeLED (setting high: {0}) ui event", changeLEDEvent._isHigh)); handleChangeLEDStateEvent(ledIsHigh); break; case EventIdentifier.ToggleOutputRequest: ToggleOutputEvent toggleOutputEvent = (ToggleOutputEvent)newEvent; DIOPins pinToToggle = toggleOutputEvent._pinToToggle; log.Debug(string.Format("Handling toggleOutput (toggle pin: {0}) ui event", toggleOutputEvent._pinToToggle)); handleToggleOutputEvent(pinToToggle); break; case EventIdentifier.StartSequencerRequest: log.Debug("Handling startTestSequence ui event"); StartSequencerEvent sequencerEvent = (StartSequencerEvent)newEvent; handleStartSequencerEvent(sequencerEvent); break; case EventIdentifier.UpdateOutputRequest: log.Debug("Handling updateOutput UI Event"); UpdateOutputEvent updateOutput = (UpdateOutputEvent)newEvent; DIOPins pinToChange = updateOutput._pinToUpdate; bool shouldSetHigh = updateOutput._shouldBeHigh; handleUpdateOutputEvent(pinToChange, shouldSetHigh); break; default: break; } } }