Example #1
0
        internal GpioPort DeviceGet(Cpu.Pin pin, bool writeTraceOnError)
        {
            // If pin as index is out of range of the _ports array, then we return GpioPortNull for that index
            // In particular it happens for GPOI_PORT_NONE ( -1 )
            if ((int)pin < 0 || (int)pin >= _ports.Length)
            {
                return(new GpioPortNull(pin, GpioPortMode.None));
            }

            GpioPort port = _ports[(int)pin];

            if (port == null)
            {
                port             = new GpioPortNull(pin);
                _ports[(int)pin] = port;
            }

            if (writeTraceOnError && port is GpioPortNull)
            {
                GpioPortNull nullPort = (GpioPortNull)port;

                if (nullPort.DisplayWarning || Emulator.Verbose)
                {
                    Trace.WriteLine("Warning: System attempts to access a GPIO port at pin " + pin + " that was not configured.");
                    nullPort.TurnOffWarning();
                }
            }

            return(port);
        }
Example #2
0
        internal override void UnregisterInternal(EmulatorComponent ec)
        {
            GpioPort gpioPort = ec as GpioPort;

            if (gpioPort != null)
            {
                Debug.Assert(_ports[(int)gpioPort.Pin] == gpioPort);

                _ports[(int)gpioPort.Pin] = null;
                _validPorts.Remove(gpioPort);

                base.UnregisterInternal(ec);
            }
        }
Example #3
0
        internal override void RegisterInternal(EmulatorComponent ec)
        {
            GpioPort port = ec as GpioPort;

            if (port == null)
            {
                throw new Exception("Attempt to register a non GpioPort with GpioPortCollection.");
            }

            Cpu.Pin pin = port.Pin;

            Debug.Assert(!(port is GpioPortNull));

            if (Exists(pin))
            {
                throw new Exception("GPIO port " + pin + " is already set.");
            }

            _ports[(int)pin] = port;
            _validPorts.Add(port);

            base.RegisterInternal(ec);
        }
Example #4
0
        internal bool Exists(Cpu.Pin pin)
        {
            GpioPort port = _ports[(int)pin];

            return((port != null) && ((port is GpioPortNull) == false));
        }