Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 0 additions & 7 deletions src/System.Device.Gpio.Tests/MockableGpioDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,6 @@ public void FireEventHandler(int forPin, PinEventTypes eventTypes)
_event?.Invoke(this, new PinValueChangedEventArgs(eventTypes, forPin));
}

public abstract int ConvertPinNumberToLogicalNumberingSchemeEx(int pinNumber);

protected override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber)
{
return ConvertPinNumberToLogicalNumberingSchemeEx(pinNumber);
}

public abstract void OpenPinEx(int pinNumber);

protected override void OpenPin(int pinNumber)
Expand Down
14 changes: 14 additions & 0 deletions src/System.Device.Gpio/CompatibilitySuppressions.xml
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,18 @@
<Right>lib/net8.0/System.Device.Gpio.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:System.Device.Gpio.GpioController.GetLogicalPinNumber(System.Int32)</Target>
<Left>lib/net8.0/System.Device.Gpio.dll</Left>
<Right>lib/net8.0/System.Device.Gpio.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
<Suppression>
<DiagnosticId>CP0002</DiagnosticId>
<Target>M:System.Device.Gpio.GpioDriver.ConvertPinNumberToLogicalNumberingScheme(System.Int32)</Target>
<Left>lib/net8.0/System.Device.Gpio.dll</Left>
<Right>lib/net8.0/System.Device.Gpio.dll</Right>
<IsBaselineSuppression>true</IsBaselineSuppression>
</Suppression>
</Suppressions>
Original file line number Diff line number Diff line change
Expand Up @@ -218,10 +218,6 @@ private bool IsListeningEvent(int pinNumber)
return _pinNumberToEventHandler.ContainsKey(pinNumber);
}

/// <inheritdoc/>
protected internal override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber) =>
throw ExceptionHelper.GetPlatformNotSupportedException(ExceptionResource.ConvertPinNumberingSchemaError);

/// <inheritdoc/>
protected internal override PinMode GetPinMode(int pinNumber)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,14 +87,6 @@ public static IList<GpioChipInfo> GetAvailableChips()
return ret;
}

/// <inheritdoc/>
protected internal override int ConvertPinNumberToLogicalNumberingScheme(int lineOffset)
{
throw new NotSupportedException($"{nameof(LibGpiodV2Driver)} uses GPIO line numbering. For more information please refer to " +
$"https://docs.kernel.org/driver-api/gpio/using-gpio.html or consider using the gpioinfo cmd line tool provided by libgpiod to " +
$"find out more about present GPIO lines on the system");
}

/// <inheritdoc/>
/// <remarks>This only requests the line for it to be reserved and the consumer to be set.</remarks>
protected internal override void OpenPin(int lineOffset)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -176,13 +176,7 @@ private GpioDriver InternalDriver
/// <inheritdoc/>
protected internal override void ClosePin(int pinNumber) => InternalDriver.ClosePin(pinNumber);

/// <inheritdoc/>
protected internal override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber)
{
return InternalDriver.ConvertPinNumberToLogicalNumberingScheme(pinNumber);
}

/// <inheritdoc/>
/// <inheritdoc />
protected internal override PinMode GetPinMode(int pinNumber) => InternalDriver.GetPinMode(pinNumber);

/// <inheritdoc/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,47 +65,6 @@ private void ValidatePinNumber(int pinNumber)
}
}

/// <summary>
/// Converts a board pin number to the driver's logical numbering scheme.
/// </summary>
/// <param name="pinNumber">The board pin number to convert.</param>
/// <returns>The pin number in the driver's logical numbering scheme.</returns>
protected internal override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber)
{
return pinNumber switch
{
3 => 2,
5 => 3,
7 => 4,
8 => 14,
10 => 15,
11 => 17,
12 => 18,
13 => 27,
15 => 22,
16 => 23,
18 => 24,
19 => 10,
21 => 9,
22 => 25,
23 => 11,
24 => 8,
26 => 7,
27 => 0,
28 => 1,
29 => 5,
31 => 6,
32 => 12,
33 => 13,
35 => 19,
36 => 16,
37 => 26,
38 => 20,
40 => 21,
_ => throw new ArgumentException($"Board (header) pin {pinNumber} is not a GPIO pin on the {GetType().Name} device.", nameof(pinNumber))
};
}

/// <summary>
/// Adds a handler for a pin value changed event.
/// </summary>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,4 @@ internal class RaspberryPiCm3Driver : RaspberryPi3LinuxDriver
/// Raspberry CM3 has 48 GPIO pins.
/// </summary>
protected internal override int PinCount => 48;

/// <summary>
/// Converts a board pin number to the driver's logical numbering scheme.
/// </summary>
/// <param name="pinNumber">The board pin number to convert.</param>
/// <returns>The pin number in the driver's logical numbering scheme.</returns>
protected internal override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber)
{
// CM3 has no physical numbering scheme
return pinNumber;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -198,13 +198,6 @@ private static GpioChipInfo GetChipInfoForName(string name)
/// </summary>
protected internal override int PinCount => throw new PlatformNotSupportedException("This driver is generic so it can not enumerate how many pins are available.");

/// <summary>
/// Converts a board pin number to the driver's logical numbering scheme.
/// </summary>
/// <param name="pinNumber">The board pin number to convert.</param>
/// <returns>The pin number in the driver's logical numbering scheme.</returns>
protected internal override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber) => throw new PlatformNotSupportedException("This driver is generic so it can not perform conversions between pin numbering schemes.");

/// <summary>
/// Opens a pin in order for it to be ready to use.
/// This retains the pin direction, but if it is output, the value will always be low after open.
Expand Down
48 changes: 13 additions & 35 deletions src/System.Device.Gpio/System/Device/Gpio/GpioController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -76,16 +76,6 @@ private IEnumerable<GpioPin> OpenPins
}
}

/// <summary>
/// Gets the logical pin number in the controller's numbering scheme.
/// </summary>
/// <param name="pinNumber">The pin number</param>
/// <returns>The logical pin number in the controller's numbering scheme.</returns>
protected virtual int GetLogicalPinNumber(int pinNumber)
{
return pinNumber;
}

/// <summary>
/// Opens a pin in order for it to be ready to use.
/// The driver attempts to open the pin without changing its mode or value.
Expand All @@ -110,8 +100,7 @@ public GpioPin OpenPin(int pinNumber)
/// <param name="pinNumber">The pin number in the controller's numbering scheme.</param>
protected virtual void OpenPinCore(int pinNumber)
{
int logicalPinNumber = GetLogicalPinNumber(pinNumber);
_driver.OpenPin(logicalPinNumber);
_driver.OpenPin(pinNumber);
}

/// <summary>
Expand Down Expand Up @@ -165,8 +154,7 @@ public void ClosePin(int pinNumber)
/// <param name="pinNumber">The pin number in the controller's numbering scheme.</param>
protected virtual void ClosePinCore(int pinNumber)
{
int logicalPinNumber = GetLogicalPinNumber(pinNumber);
_driver.ClosePin(logicalPinNumber);
_driver.ClosePin(pinNumber);
_gpioPins.TryRemove(pinNumber, out _);
}

Expand All @@ -182,19 +170,18 @@ public virtual void SetPinMode(int pinNumber, PinMode mode)
throw new InvalidOperationException($"Can not set a mode to pin {pinNumber} because it is not open.");
}

int logicalPinNumber = GetLogicalPinNumber(pinNumber);
if (!IsPinModeSupported(pinNumber, mode))
{
throw new InvalidOperationException($"Pin {pinNumber} does not support mode {mode}.");
}

if (_openPins.TryGetValue(pinNumber, out var desired) && desired.HasValue)
{
_driver.SetPinMode(logicalPinNumber, mode, desired.Value);
_driver.SetPinMode(pinNumber, mode, desired.Value);
}
else
{
_driver.SetPinMode(logicalPinNumber, mode);
_driver.SetPinMode(pinNumber, mode);
}
}

Expand All @@ -210,8 +197,7 @@ public virtual PinMode GetPinMode(int pinNumber)
throw new InvalidOperationException($"Can not get the mode of pin {pinNumber} because it is not open.");
}

int logicalPinNumber = GetLogicalPinNumber(pinNumber);
return _driver.GetPinMode(logicalPinNumber);
return _driver.GetPinMode(pinNumber);
}

/// <summary>
Expand Down Expand Up @@ -242,8 +228,7 @@ private void CheckDriverValid()
public virtual bool IsPinModeSupported(int pinNumber, PinMode mode)
{
CheckDriverValid();
int logicalPinNumber = GetLogicalPinNumber(pinNumber);
return _driver.IsPinModeSupported(logicalPinNumber, mode);
return _driver.IsPinModeSupported(pinNumber, mode);
}

/// <summary>
Expand All @@ -258,8 +243,7 @@ public virtual PinValue Read(int pinNumber)
throw new InvalidOperationException($"Can not read from pin {pinNumber} because it is not open.");
}

int logicalPinNumber = GetLogicalPinNumber(pinNumber);
return _driver.Read(logicalPinNumber);
return _driver.Read(pinNumber);
}

/// <summary>
Expand Down Expand Up @@ -288,16 +272,14 @@ public virtual void Write(int pinNumber, PinValue value)
throw new InvalidOperationException($"Can not write to pin {pinNumber} because it is not open.");
}

int logicalPinNumber = GetLogicalPinNumber(pinNumber);

_openPins[pinNumber] = value;

if (_driver.GetPinMode(logicalPinNumber) != PinMode.Output)
if (_driver.GetPinMode(pinNumber) != PinMode.Output)
{
return;
}

_driver.Write(logicalPinNumber, value);
_driver.Write(pinNumber, value);
}

/// <summary>
Expand Down Expand Up @@ -327,8 +309,7 @@ public virtual WaitForEventResult WaitForEvent(int pinNumber, PinEventTypes even
throw new InvalidOperationException($"Can not wait for events from pin {pinNumber} because it is not open.");
}

int logicalPinNumber = GetLogicalPinNumber(pinNumber);
return _driver.WaitForEvent(logicalPinNumber, eventTypes, cancellationToken);
return _driver.WaitForEvent(pinNumber, eventTypes, cancellationToken);
}

/// <summary>
Expand Down Expand Up @@ -358,8 +339,7 @@ public virtual ValueTask<WaitForEventResult> WaitForEventAsync(int pinNumber, Pi
throw new InvalidOperationException($"Can not wait for events from pin {pinNumber} because it is not open.");
}

int logicalPinNumber = GetLogicalPinNumber(pinNumber);
return _driver.WaitForEventAsync(logicalPinNumber, eventTypes, token);
return _driver.WaitForEventAsync(pinNumber, eventTypes, token);
}

/// <summary>
Expand All @@ -375,8 +355,7 @@ public virtual void RegisterCallbackForPinValueChangedEvent(int pinNumber, PinEv
throw new InvalidOperationException($"Can not add callback for pin {pinNumber} because it is not open.");
}

int logicalPinNumber = GetLogicalPinNumber(pinNumber);
_driver.AddCallbackForPinValueChangedEvent(logicalPinNumber, eventTypes, callback);
_driver.AddCallbackForPinValueChangedEvent(pinNumber, eventTypes, callback);
}

/// <summary>
Expand All @@ -391,8 +370,7 @@ public virtual void UnregisterCallbackForPinValueChangedEvent(int pinNumber, Pin
throw new InvalidOperationException($"Can not remove callback for pin {pinNumber} because it is not open.");
}

int logicalPinNumber = GetLogicalPinNumber(pinNumber);
_driver.RemoveCallbackForPinValueChangedEvent(logicalPinNumber, callback);
_driver.RemoveCallbackForPinValueChangedEvent(pinNumber, callback);
}

/// <summary>
Expand Down
7 changes: 0 additions & 7 deletions src/System.Device.Gpio/System/Device/Gpio/GpioDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,6 @@ public abstract class GpioDriver : IDisposable
/// </summary>
protected internal abstract int PinCount { get; }

/// <summary>
/// Converts a board pin number to the driver's logical numbering scheme.
/// </summary>
/// <param name="pinNumber">The board pin number to convert.</param>
/// <returns>The pin number in the driver's logical numbering scheme.</returns>
protected internal abstract int ConvertPinNumberToLogicalNumberingScheme(int pinNumber);

/// <summary>
/// Opens a pin in order for it to be ready to use.
/// The driver attempts to open the pin without changing its mode or value.
Expand Down
8 changes: 0 additions & 8 deletions src/devices/Arduino/ArduinoGpioControllerDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,14 +42,6 @@ internal ArduinoGpioControllerDriver(FirmataDevice device, IReadOnlyCollection<S

protected override int PinCount { get; }

/// <summary>
/// Arduino does not distinguish between logical and physical numbers, so this always returns identity
/// </summary>
protected override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber)
{
return pinNumber;
}

protected override void OpenPin(int pinNumber)
{
if (pinNumber < 0 || pinNumber >= PinCount)
Expand Down
6 changes: 0 additions & 6 deletions src/devices/Board/DummyGpioDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,6 @@ public class DummyGpioDriver : GpioDriver
/// </summary>
protected override int PinCount => 0;

/// <inheritdoc />
protected override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber)
{
return 0;
}

/// <summary>
/// There are no pins on this board, so this always throws an exception
/// </summary>
Expand Down
6 changes: 0 additions & 6 deletions src/devices/Board/KeyboardGpioDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,6 @@ protected override int PinCount
}
}

/// <inheritdoc />
protected override int ConvertPinNumberToLogicalNumberingScheme(int pinNumber)
{
return pinNumber;
}

/// <inheritdoc />
protected override void OpenPin(int pinNumber)
{
Expand Down
5 changes: 0 additions & 5 deletions src/devices/Board/ManagedGpioController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,6 @@ public ManagedGpioController(Board board, GpioDriver driver)
_openPins = new HashSet<int>();
}

protected override int GetLogicalPinNumber(int pinNumber)
{
return pinNumber;
}

protected override void OpenPinCore(int pinNumber)
{
_board.ReservePin(pinNumber, PinUsage.Gpio, this);
Expand Down
Loading