Ejemplo n.º 1
0
        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));
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        public object Clone()
        {
            var clone = new PHCCInputState
            {
                DigitalInputs = (bool[])DigitalInputs.Clone(),
                AnalogInputs  = (short[])AnalogInputs.Clone()
            };

            return(clone);
        }