Esempio n. 1
0
        /// <summary>
        /// Gets the target pin number.
        /// </summary>
        /// <returns>The target pin number.</returns>
        /// <param name="sourcePinNaming">Source pin naming system</param>
        /// <param name="targetPinNaming">Target pin naming system</param>
        /// <param name="pinNumber">Current pin number.</param>
        public static int MapPinNumber(
            this IPinNumberMapping mapping,
            PinNaming sourcePinNaming,
            PinNaming targetPinNaming,
            int pinNumber)
        {
            if (mapping == null)
            {
                throw new ArgumentException("mapping");
            }

            int targetPinNumber;

            if (!mapping.TryGetPinNumber(sourcePinNaming, targetPinNaming, pinNumber, out targetPinNumber))
            {
                var errorMessage = string.Format(
                    CultureInfo.InvariantCulture,
                    "Cannot convert pin number {0} from {1} to {2}",
                    pinNumber,
                    sourcePinNaming,
                    targetPinNaming);
                Trace.TraceError(errorMessage);
                throw new ArgumentException(errorMessage);
            }

            return(targetPinNumber);
        }
Esempio n. 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="Ereadian.RaspberryPi.Library.Hardware.RemoteGpio"/> class.
        /// </summary>
        /// <param name="pinNaming">Pin naming.</param>
        /// <param name="remoteAddress">Remote address.</param>
        /// <param name="port">Port.</param>
        public RemoteGpio(PinNaming pinNaming, string remoteAddress = null, int port = DefaultPort) : base(pinNaming)
        {
            this.socket = null;

            if (string.IsNullOrEmpty(remoteAddress))
            {
                remoteAddress = LocalAddress;
            }

            var addressList = Dns.GetHostAddresses(remoteAddress);

            if ((addressList == null) || (addressList.Length < 1))
            {
                var errorMessage = string.Format(
                    CultureInfo.InvariantCulture,
                    "Bad address: {0} to operation GPIO on remote",
                    remoteAddress);
                Trace.TraceError(errorMessage);
                throw new ArgumentException(errorMessage);
            }

            var endpoint = new IPEndPoint(addressList[0], port);

            this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(endpoint);
            Trace.TraceInformation("Remote GPIO has been connected");
        }
Esempio n. 3
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Ereadian.RaspberryPi.Library.Hardware.Gpio"/> class.
 /// </summary>
 /// <param name="pinNaming">Pin naming.</param>
 /// <param name="useLocal">If set to <c>true</c> use local GPIO operation.</param>
 public Gpio(PinNaming pinNaming, bool useLocal = UseLocal)
 {
     if (useLocal)
     {
         this.implementation = new LocalGpio(pinNaming);
     }
     else
     {
         this.implementation = new RemoteGpio(pinNaming);
     }
 }
Esempio n. 4
0
        /// <summary>
        /// Try to map pin number from one naming system to another.
        /// </summary>
        /// <returns><c>true</c>, if get pin number was mapped successfully, <c>false</c> pin number is not supported.</returns>
        /// <param name="sourceNameing">Source nameing.</param>
        /// <param name="targetNaming">Target naming.</param>
        /// <param name="sourcePinNumber">Source pin number.</param>
        /// <param name="targetPinNumber">Target pin number.</param>
        public bool TryGetPinNumber(
            PinNaming sourceNameing,
            PinNaming targetNaming,
            int sourcePinNumber,
            out int targetPinNumber)
        {
            if (sourceNameing == targetNaming)
            {
                targetPinNumber = sourcePinNumber;
                return(true);
            }

            var sourceType = (int)sourceNameing;
            var targetType = (int)targetNaming;
            var mapping    = mappings[sourceType, targetType];

            targetPinNumber = InvalidPinNumber;
            if ((sourcePinNumber >= 0) && (sourcePinNumber < mapping.Count))
            {
                targetPinNumber = mapping[sourcePinNumber];
            }

            return(targetPinNumber != InvalidPinNumber);
        }
Esempio n. 5
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Ereadian.RaspberryPi.Library.Hardware.LocalGpio"/> class.
 /// </summary>
 /// <param name="pinNaming">Pin naming systerm.</param>
 public LocalGpio(PinNaming pinNaming) : base(pinNaming)
 {
 }
Esempio n. 6
0
        /// <summary>
        /// Gets the target pin number.
        /// </summary>
        /// <returns>The target pin number.</returns>
        /// <param name="pinNumber">Pin number to map.</param>
        /// <param name="targetPinNaming">Target pin naming system</param>
        protected virtual int GetTargetPinNumber(int pinNumber, PinNaming targetPinNaming = PinNaming.WiringPi)
        {
            var mapping = Singleton <PinNumberMapping> .Instance;

            return(mapping.MapPinNumber(this.CurrentPinNaming, targetPinNaming, pinNumber));
        }
Esempio n. 7
0
 /// <summary>
 /// Initializes a new instance of the <see cref="Ereadian.RaspberryPi.Library.Hardware.GpioBase"/> class.
 /// </summary>
 /// <param name="pinNaming">Pin naming.</param>
 public GpioBase(PinNaming pinNaming)
 {
     this.currentPinNaming = pinNaming;
 }