/// <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); }
/// <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"); }
/// <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); } }
/// <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); }
/// <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) { }
/// <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)); }
/// <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; }