/// <summary>
 /// Reads the status of the specified pins.
 /// </summary>
 /// <param name="pins">The pins.</param>
 /// <returns>
 /// The pins status.
 /// </returns>
 public ProcessorPins Read(ProcessorPins pins)
 {
     return(pins.Enumerate()
            .Select(p => Read(p) ? (ProcessorPins)((uint)1 << (int)p) : ProcessorPins.None)
            .Aggregate(
                ProcessorPins.None,
                (a, p) => a | p));
 }
        /// <summary>
        /// Reads the status of the specified pins.
        /// </summary>
        /// <param name="pins">The pins.</param>
        /// <returns>
        /// The pins status.
        /// </returns>
        public ProcessorPins Read(ProcessorPins pins)
        {
            var result = new ProcessorPins(pins.Count);

            foreach (var p in pins.Enumerate())
            {
                result.Set(p, Read((ProcessorPin)p));
            }
            return(result);
        }
示例#3
0
        /// <summary>
        /// </summary>
        public ProcessorPins Read(ProcessorPins pins)
        {
            // TODO: implement on $KE,RD,ALL
            var result = new ProcessorPins(pins.Count);

            foreach (var p in pins.Enumerate())
            {
                result.Set(p, Read((ProcessorPin)p));
            }
            return(result);
        }
        /// <summary>
        /// Logical AND opertion on pins with int
        /// </summary>
        public static ProcessorPins And(ProcessorPins pins, uint value)
        {
            var result = new ProcessorPins(32);

            foreach (var p in pins.Enumerate())
            {
                var val = ((uint)(1 << (int)p) & value);
                result.Set(p, val > 0 ? true : false);
            }
            return(result);
        }
        private void CheckInputPins()
        {
            var newPinValues = Driver.Read(inputPins);

            var notifiedConfigurations = new List <PinConfiguration>();

            foreach (var processorPin in inputPins.Enumerate())
            {
                var np          = (ProcessorPin)processorPin;
                var oldPinValue = pinRawValues.Get(processorPin);
                var newPinValue = newPinValues.Get(processorPin);

                if (oldPinValue != newPinValue)
                {
                    var pin       = (InputPinConfiguration)pinConfigurations[np];
                    var switchPin = pin as SwitchInputPinConfiguration;

                    if (switchPin != null)
                    {
                        if (pin.GetEffective(newPinValue))
                        {
                            pinValues[np] = !pinValues[np];
                            notifiedConfigurations.Add(pin);
                        }
                    }
                    else
                    {
                        pinValues[np] = pin.GetEffective(newPinValue);
                        notifiedConfigurations.Add(pin);
                    }
                }
            }

            pinRawValues = newPinValues;

            // Only fires events once all states have been modified.
            foreach (var pin in notifiedConfigurations)
            {
                OnPinStatusChanged(new PinStatusEventArgs {
                    Configuration = pin, Enabled = pinValues[pin.Pin]
                });
            }
        }