public Nrf(PinNumberEnum chipEnable, SpiChannelEnum channel, int spiSpeed = DefaultSpiSpeed) { _channel = channel; _chipEnable = chipEnable; Functionalities.Pins.Setup(_chipEnable, PinModeEnum.Output); Functionalities.Pins.Write(_chipEnable, false); Functionalities.Spi.Setup(_channel, spiSpeed); Functionalities.Sleep.Milli(5); var general = (ConfigurationRegister)ReadRegister(RegisterEnum.Configuration); var frequency = (FrequencyChannelRegister)ReadRegister(RegisterEnum.FrequencyChannel); State = general.PowerState; Mode = general.TransceiverMode; Frequency = frequency.Frequency; for (byte pipeNumber = 0; pipeNumber < 6; ++pipeNumber) { WriteRegister(new PayloadSizeRegister(pipeNumber, PayloadSize)); } }
public Module(PinNumberEnum chipEnable, SpiChannelEnum channel, [NotNull] Address address, [NotNull] Address broadcastAddress, byte radioChannel, bool sendContinuously = false, bool readRetransmissionsCount = false, OutputPowerEnum outputPower = OutputPowerEnum.P0dbm, DataRateEnum dataRate = DataRateEnum.S1Mbps, byte autoRetransmitRetryLimit = 10, AutoRetransmitDelayEnum autoRetransmitDelay = AutoRetransmitDelayEnum.T2000us, int spiSpeed = Nrf.DefaultSpiSpeed) { if (address == null) { throw new ArgumentNullException(nameof(address)); } if (broadcastAddress == null) { throw new ArgumentNullException(nameof(broadcastAddress)); } Packet.BaseAddress = address; Address = address; BroadcastAddress = broadcastAddress; _sendContinuously = sendContinuously; _readRetransmissionsCount = readRetransmissionsCount; _nrf = new Nrf(chipEnable, channel, spiSpeed); if (!_nrf.IsConnected) { throw new InvalidOperationException("NRF doesn't seem to be connected."); } _nrf.WriteRegister(new ConfigurationRegister(false, false, false, true, CrcLengthEnum.TwoBytes, PowerStateEnum.Down, TransceiverModeEnum.Receiver)); _nrf.WriteRegister(new AutoAcknowledgmentRegister(true, true, false, false, false, false)); _nrf.WriteRegister(new ReceiverAddressRegister(true, true, false, false, false, false)); _nrf.WriteRegister(new AddressWidthRegister(AddressWidthEnum.FiveBytes)); _nrf.WriteRegister(new AutoRetransmissionRegister(autoRetransmitDelay, autoRetransmitRetryLimit)); _nrf.WriteRegister(new FrequencyChannelRegister(radioChannel)); _nrf.WriteRegister(new RadioRegister(false, false, dataRate, outputPower)); _nrf.WriteRegister(new FeatureRegister(false, false, true)); _nrf.WriteRegister(new DynamicPayloadLengthRegister(false, false, false, false, false, false)); _nrf.Flush(); _nrf.SetPipeReceiveAddress(1, Address); _nrf.ModifyRegister <ConfigurationRegister>(RegisterEnum.Configuration, register => register.TransceiverMode = TransceiverModeEnum.Transmitter); _nrf.SetupDelay(); _nrf.ChangePowerState(PowerStateEnum.Up); // Standby-I _worker = new BackgroundWorker { WorkerSupportsCancellation = true, }; _worker.DoWork += Work; _worker.RunWorkerCompleted += WorkCompleted; }
public void ConfigureInterrupt(PinNumberEnum pin, bool receiveInterruptEnabled, bool transmitInterruptEnabled, bool retransmitLimitReachedInterruptEnabled, [NotNull] Action <Nrf, byte?> handler) { if (handler == null) { throw new ArgumentNullException(nameof(handler)); } ModifyRegister(RegisterEnum.Configuration, i => { var r = (ConfigurationRegister)i; r.ReceiveInterruptEnabled = receiveInterruptEnabled; r.TransmitInterruptEnabled = transmitInterruptEnabled; r.RetransmitLimitReachedInterruptEnabled = retransmitLimitReachedInterruptEnabled; return(r); }); Functionalities.Pins.Setup(pin, PinModeEnum.Input, PullUpModeEnum.Up); Functionalities.Interrupts.Setup(pin, InterruptModeEnum.FallingEdge, () => { var status = (StatusRegister)ReadRegister(RegisterEnum.Status); handler(this, status.DataReadyPipeNumber); }); }
public Processor(PinNumberEnum chipEnable, SpiChannelEnum channel, [NotNull] Address address, [NotNull] Address broadcastAddress, byte radioChannel, bool sendContinuously = false, bool readRetransmissionsCount = false) { _module = new Module(chipEnable, channel, address, broadcastAddress, radioChannel, sendContinuously, readRetransmissionsCount, spiSpeed: 12000000); _module.Received += OnReceived; _module.SendingFailed += OnSendingFailed; _module.Sent += OnSent; _module.Error += OnError; }
public static bool Read(PinNumberEnum pin) => InternalRead((int)pin);
public static void Write(PinNumberEnum pin, bool state) => InternalWrite((int)pin, state);
public static void Setup(PinNumberEnum pin, PinModeEnum mode, PullUpModeEnum?pullUpMode = null) => InternalSetup((int)pin, mode, pullUpMode);
public static void Remove(PinNumberEnum pin) => Setup(pin, InterruptModeEnum.None, null);
public static IDisposable SetupPolled(PinNumberEnum pin, InterruptModeEnum mode, Action handler) => InternalSetupPolled((int)pin, mode, handler);
public static void Setup(PinNumberEnum pin, InterruptModeEnum mode, Action handler) => InternalSetup((int)pin, mode, handler);