private void DeviceInterfaceDigitalInputChanged(object sender, DigitalInputChangedEventArgs e) { lock (_stateLock) { PreviousState = _state; if (PreviousState.HasValue) { _state = (PHCCInputState)((ICloneable)PreviousState).Clone(); } var thisState = new PHCCInputState(); if (_state.HasValue) { thisState = _state.Value; } else { thisState.AnalogInputs = new short[35]; thisState.DigitalInputs = new bool[1024]; } thisState.DigitalInputs[e.Index] = e.NewValue; _state = thisState; StateChanged?.Invoke(this, new PHCCStateChangedEventArgs(_state, PreviousState, ControlType.Button, e.Index)); } }
public PHCCInputState?GetCurrentInputState(bool throwOnFail) { try { if (!_prepared && !_preparing) { Prepare(); } PHCCInputState?newState = null; lock (_stateLock) { try { if (_deviceInterface != null) { var rawAnalogInputs = _deviceInterface.AnalogInputs; var rawDigitalInputs = _deviceInterface.DigitalInputs; var thisState = new PHCCInputState { AnalogInputs = new short[35], DigitalInputs = new bool[1024] }; for (var i = 0; i < rawAnalogInputs.Length; i++) { thisState.AnalogInputs[i] = ScaleRawValue(rawAnalogInputs[i]); } thisState.DigitalInputs = rawDigitalInputs; newState = thisState; } } catch (ApplicationException e) { _log.Debug(e.Message, e); if (throwOnFail) { throw; } } if (newState.HasValue) { PreviousState = _state; _state = newState; } } return(newState); } catch (ApplicationException e) { _log.Debug(e.Message, e); _prepared = false; if (throwOnFail) { throw; } } return(null); }
public object Clone() { var clone = new PHCCInputState { DigitalInputs = (bool[])DigitalInputs.Clone(), AnalogInputs = (short[])AnalogInputs.Clone() }; return(clone); }