Example #1
0
        public override void Process()
        {
            if (_attrStartAt.TypedGet() == SustainMode.StartAtFallingEdge)
            {
                foreach (var tuple in _portIn.Read().ZipWithValueInput(_portThresh))
                {
                    if (tuple.Sample >= tuple.Scalar)
                    {
                        _timeBecomeInactive = tuple.Stamp.Increment(_attrActiveDurationMillis.TypedGet() / 1000.0);
                        if (_active == TristateActive.Inactive)
                        {
                            _active = TristateActive.Active;
                            _portOut.BufferForTransfer(new TimeLocatedValue <double>(1, tuple.Stamp));
                        }
                    }
                    else
                    {
                        if (_active == TristateActive.Active && _timeBecomeInactive <= tuple.Stamp)
                        {
                            _active = TristateActive.Inactive;
                            _portOut.BufferForTransfer(new TimeLocatedValue <double>(0, tuple.Stamp));
                        }
                    }
                }
            }
            else if (_attrStartAt.TypedGet() == SustainMode.StartAtRisingEdge)
            {
                foreach (var tuple in _portIn.Read().ZipWithValueInput(_portThresh))
                {
                    if (tuple.Sample >= tuple.Scalar)
                    {
                        if (_active == TristateActive.Inactive)
                        {
                            _timeBecomeInactive = tuple.Stamp.Increment(_attrActiveDurationMillis.TypedGet() / 1000.0);
                            _active             = TristateActive.Active;
                            _portOut.BufferForTransfer(new TimeLocatedValue <double>(1, tuple.Stamp));
                        }
                    }
                    else
                    {
                        if (_active == TristateActive.BecomingInactive)
                        {
                            _active = TristateActive.Inactive;
                        }
                    }

                    if (_active == TristateActive.Active && _timeBecomeInactive <= tuple.Stamp)
                    {
                        _active = TristateActive.BecomingInactive;
                        _portOut.BufferForTransfer(new TimeLocatedValue <double>(0, tuple.Stamp));
                    }
                }
            }
        }
Example #2
0
        public override void Process()
        {
            foreach (var tuple in _portIn.Read().ZipWithValueInput(_portThreshLow, _portThreshHigh))
            {
                switch (_active)
                {
                case TristateActive.Active:
                    if (tuple.Sample < tuple.Scalar && tuple.Scalar < tuple.Scalar2)
                    {
                        _active = TristateActive.Inactive;
                        _portOut.BufferForTransfer(new TimeLocatedValue <double>(0, tuple.Stamp));
                    }
                    break;

                case TristateActive.Inactive:
                    if (tuple.Sample > tuple.Scalar2 && tuple.Scalar < tuple.Scalar2)
                    {
                        _active = TristateActive.Active;
                        _portOut.BufferForTransfer(new TimeLocatedValue <double>(1, tuple.Stamp));
                    }
                    break;
                }
            }
        }
Example #3
0
        public override void Process()
        {
            var count = _portIn.Count;

            for (int i = 0; i < count; i++)
            {
                TimeLocatedValue <double> value;
                if (_portIn.TryDequeue(out value))
                {
                    _portOut.BufferForTransfer(new TimeLocatedValue <double>(value.Value, value.Stamp.Increment(_attrMillisDelay.TypedGet() / 1000.0)));
                }
                else
                {
                    break;
                }
            }
        }