Skip to content

Commit

Permalink
Remove now duplicate change
Browse files Browse the repository at this point in the history
  • Loading branch information
pgrawehr committed Apr 11, 2021
1 parent 851b693 commit 789a961
Show file tree
Hide file tree
Showing 3 changed files with 0 additions and 124 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -157,12 +157,6 @@ private static GpioDriver CreateWindows10GpioDriver()
/// <inheritdoc/>
protected internal override int PinCount => _internalDriver.PinCount;

/// <summary>
/// The Raspberry Pi does support extended pin modes, but the this may depend on the actual driver implementation.
/// </summary>
/// <remarks>This returns true on Linux, false on Windows</remarks>
protected internal override bool ExtendedPinModeSupported => _internalDriver.ExtendedPinModeSupported;

/// <inheritdoc/>
protected internal override void AddCallbackForPinValueChangedEvent(int pinNumber, PinEventTypes eventTypes, PinChangeEventHandler callback) => _internalDriver.AddCallbackForPinValueChangedEvent(pinNumber, eventTypes, callback);

Expand Down Expand Up @@ -202,18 +196,6 @@ protected internal override int ConvertPinNumberToLogicalNumberingScheme(int pin
/// <inheritdoc/>
protected internal override void Write(int pinNumber, PinValue value) => _internalDriver.Write(pinNumber, value);

/// <inheritdoc />
protected internal override ExtendedPinMode GetExtendedPinMode(int pinNumber)
{
return _internalDriver.GetExtendedPinMode(pinNumber);
}

/// <inheritdoc />
protected internal override void SetExtendedPinMode(int pinNumber, ExtendedPinMode altMode)
{
_internalDriver.SetExtendedPinMode(pinNumber, altMode);
}

/// <summary>
/// Retrieve the current alternate pin mode for a given logical pin.
/// This works also with closed pins.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,12 +45,6 @@ public RaspberryPi3LinuxDriver()
/// </summary>
protected internal override int PinCount => 28;

/// <summary>
/// This driver does support extended pin modes, called ALT0-ALT5. See the hardware spec sheet to get information about
/// the possible values for each pin.
/// </summary>
protected internal override bool ExtendedPinModeSupported => true;

/// <summary>
/// Returns true if this is a Raspberry Pi4
/// </summary>
Expand Down Expand Up @@ -452,101 +446,6 @@ protected internal RaspberryPi3Driver.AltMode GetAlternatePinMode(int pinNumber)
throw new InvalidOperationException("Invalid register value");
}

/// <summary>
/// Set the specified alternate mode for the given pin.
/// Check the manual to know what each pin can do.
/// </summary>
/// <param name="pinNumber">Pin number in the logcal scheme of the driver</param>
/// <param name="altPinMode">Alternate mode to set</param>
/// <exception cref="NotSupportedException">This mode is not supported by this driver (or by the given pin)</exception>
/// <remarks>The method is intended for usage by higher-level abstraction interfaces. User code should be very careful when using this method.</remarks>
protected internal void SetAlternatePinMode(int pinNumber, RaspberryPi3Driver.AltMode altPinMode)
{
Initialize();
ValidatePinNumber(pinNumber);

/*
* There are 6 registers (4-byte ints) that control the mode for all pins. Each
* register controls the mode for 10 pins. Each pin uses 3 bits in the register
* containing the mode.
*/

// Define the shift to get the right 3 bits in the register
int shift = (pinNumber % 10) * 3;
// Gets a pointer to the register that holds the mode for the pin
uint* registerPointer = &_registerViewPointer->GPFSEL[pinNumber / 10];
uint register = *registerPointer;
// Clear the 3 bits to 0 for the pin Number.
register &= ~(0b111U << shift);
// Set the 3 bits to the desired mode for that pin.
uint modeBits = 0; // Default: Gpio input

modeBits = altPinMode switch
{
RaspberryPi3Driver.AltMode.Input => 0b000,
RaspberryPi3Driver.AltMode.Output => 0b001,
RaspberryPi3Driver.AltMode.Alt0 => 0b100,
RaspberryPi3Driver.AltMode.Alt1 => 0b101,
RaspberryPi3Driver.AltMode.Alt2 => 0b110,
RaspberryPi3Driver.AltMode.Alt3 => 0b111,
RaspberryPi3Driver.AltMode.Alt4 => 0b011,
RaspberryPi3Driver.AltMode.Alt5 => 0b010,
_ => throw new InvalidOperationException($"Unknown Alternate pin mode value: {altPinMode}")
};

register |= (modeBits) << shift;
*registerPointer = register;
}

/// <summary>
/// Retrieve the current alternate pin mode for a given logical pin.
/// This works also with closed pins.
/// </summary>
/// <param name="pinNumber">Pin number in the logical scheme of the driver</param>
/// <returns>Current pin mode</returns>
protected internal RaspberryPi3Driver.AltMode GetAlternatePinMode(int pinNumber)
{
Initialize();
ValidatePinNumber(pinNumber);
/*
* There are 6 registers(4-byte ints) that control the mode for all pins. Each
* register controls the mode for 10 pins. Each pin uses 3 bits in the register
* containing the mode.
*/

// Define the shift to get the right 3 bits in the register
int shift = (pinNumber % 10) * 3;
// Gets a pointer to the register that holds the mode for the pin
uint* registerPointer = &_registerViewPointer->GPFSEL[pinNumber / 10];
uint register = *registerPointer;
// get the three bits of the register
register = (register >> shift) & 0b111;

switch (register)
{
case 0b000:
// Input
return RaspberryPi3Driver.AltMode.Input;
case 0b001:
return RaspberryPi3Driver.AltMode.Output;
case 0b100:
return RaspberryPi3Driver.AltMode.Alt0;
case 0b101:
return RaspberryPi3Driver.AltMode.Alt1;
case 0b110:
return RaspberryPi3Driver.AltMode.Alt2;
case 0b111:
return RaspberryPi3Driver.AltMode.Alt3;
case 0b011:
return RaspberryPi3Driver.AltMode.Alt4;
case 0b010:
return RaspberryPi3Driver.AltMode.Alt5;
}

// This cannot happen.
throw new InvalidOperationException("Invalid register value");
}

/// <summary>
/// Blocks execution until an event of type eventType is received or a cancellation is requested.
/// </summary>
Expand Down
5 changes: 0 additions & 5 deletions src/System.Device.Gpio/System/Device/Gpio/GpioDriver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,6 @@ public abstract class GpioDriver : IDisposable
/// </summary>
protected internal abstract int PinCount { get; }

/// <summary>
/// True if this driver supports extended pin mode settings.
/// </summary>
protected internal virtual bool ExtendedPinModeSupported => false;

/// <summary>
/// Converts a board pin number to the driver's logical numbering scheme.
/// </summary>
Expand Down

0 comments on commit 789a961

Please sign in to comment.