private bool SetPinMode(uint pin, uint mode)
{
// Function selects are 10 pins per 32 bit word, 3 bits per pin
var paddr = gpioAddress + (int) (Interop.BCM2835_GPFSEL0 + 4*(pin/10));
var shift = (pin%10)*3;
var mask = Interop.BCM2835_GPIO_FSEL_MASK << (int) shift;
var value = mode << (int) shift;
var existing = ReadUInt32(paddr) & mask;
if (existing != value)
{
//Console.WriteLine($"existing is {x} masked:{x & mask} vs mask:{mask} value:{value}");
WriteUInt32Mask(paddr, value, mask);
return true;
}
else
{
return false;
}
}