So nanoFramework applications using my SX127X library.NetNF can access other General Purpose Input Output(GPIO) ports and Serial Peripheral Interface(SPI) devices I have added SpiDevice and GpioController parameters to the two constructors.
// Hardware configuration support
private readonly int ResetPin;
private readonly GpioController _gpioController = null;
private readonly SpiDevice _sx127xTransceiver = null;
private readonly Object SX127XRegFifoLock = new object();
private double Frequency = FrequencyDefault;
private bool RxDoneIgnoreIfCrcMissing = true;
private bool RxDoneIgnoreIfCrcInvalid = true;
public SX127XDevice(SpiDevice spiDevice, GpioController gpioController, int interruptPin, int resetPin)
{
_sx127xTransceiver = spiDevice;
_gpioController = gpioController;
// As soon as ChipSelectLine/ChipSelectLogicalPinNumber check that SX127X chip is present
Byte regVersionValue = this.ReadByte((byte)Registers.RegVersion);
if (regVersionValue != RegVersionValueExpected)
{
throw new ApplicationException("Semtech SX127X not found");
}
// Factory reset pin configuration
ResetPin = resetPin;
_gpioController.OpenPin(resetPin, PinMode.Output);
_gpioController.Write(resetPin, PinValue.Low);
Thread.Sleep(20);
_gpioController.Write(resetPin, PinValue.High);
Thread.Sleep(20);
// Interrupt pin for RX message & TX done notification
_gpioController.OpenPin(interruptPin, PinMode.InputPullDown);
_gpioController.RegisterCallbackForPinValueChangedEvent(interruptPin, PinEventTypes.Rising, InterruptGpioPin_ValueChanged);
}
public SX127XDevice(SpiDevice spiDevice, GpioController gpioController, int interruptPin)
{
_sx127xTransceiver = spiDevice;
_gpioController = gpioController;
// As soon as ChipSelectLine/ChipSelectLogicalPinNumber check that SX127X chip is present
Byte regVersionValue = this.ReadByte((byte)Registers.RegVersion);
if (regVersionValue != RegVersionValueExpected)
{
throw new ApplicationException("Semtech SX127X not found");
}
// Interrupt pin for RX message & TX done notification
_gpioController.OpenPin(interruptPin, PinMode.InputPullDown);
_gpioController.RegisterCallbackForPinValueChangedEvent(interruptPin, PinEventTypes.Rising, InterruptGpioPin_ValueChanged);
}
I then “over refactored”(broke) the constructor without the resetPin by removing the GpioController parameter which is necessary for the RegisterCallbackForPinValueChangedEvent.