public void StartListening()
        {
            ConfigurationRegister configRegister = Configuration.Registers.ConfigurationRegister;

            configRegister.PWR_UP  = true;
            configRegister.PRIM_RX = true;
            configRegister.Save();

            StatusRegister statusRegister = Configuration.Registers.StatusRegister;

            statusRegister.RX_DR  = false;
            statusRegister.TX_DS  = false;
            statusRegister.MAX_RT = false;
            statusRegister.Save();

            // Restore the pipe0 address, if exists
            if (_receiveAddressPipe0 > 0)
            {
                AddressPipeRegister receiveAddressPipe0Register = Configuration.Registers.ReceiveAddressPipeRegisters[0];
                receiveAddressPipe0Register.Load(BitConverter.GetBytes(_receiveAddressPipe0));
                receiveAddressPipe0Register.Save();
            }

            TransmitPipe.FlushBuffer();
            ReceivePipes.FlushBuffer();

            ChipEnable(true);
        }
        public void StartWrite(byte[] data)
        {
            ConfigurationRegister configRegister = Configuration.Registers.ConfigurationRegister;

            configRegister.PWR_UP  = true;
            configRegister.PRIM_RX = false;
            configRegister.Save();

            Utilities.DelayMicroseconds(150);

            WritePayload(data);

            ChipEnable(true);
            ChipEnable(false);
        }
        public Radio(ICommandProcessor commandProcessor, ILoggerFactoryAdapter loggerFactoryAdapter, GpioPin powerPin, GpioPin cePin, GpioPin irqPin = null)
        {
            _syncRoot      = new object();
            _operatingMode = OperatingModes.PowerOff;
            _powerPin      = powerPin;
            _powerPin.Write(GpioPinValue.Low);

            _cePin = cePin;
            _cePin.Write(GpioPinValue.Low);

            _loggerFactoryAdapter = loggerFactoryAdapter;
            _logger = _loggerFactoryAdapter.GetLogger(GetType());

            _commandProcessor = commandProcessor;
            _commandProcessor.LoggerFactory    = _loggerFactoryAdapter;
            _commandProcessor.GetOperatingMode = () => OperatingMode;

            RegisterContainer = new RegisterContainer(_loggerFactoryAdapter, _commandProcessor);
            OperatingMode     = OperatingModes.PowerDown;
            RegisterContainer.ResetRegistersToDefault();

            Configuration = new Configuration(_loggerFactoryAdapter, _commandProcessor, RegisterContainer);

            TransmitPipe = new TransmitPipe(_loggerFactoryAdapter, Configuration, _commandProcessor, RegisterContainer, _cePin);
            ReceivePipes = new ReceivePipeCollection(_loggerFactoryAdapter, Configuration, _commandProcessor, RegisterContainer);

            bool useIrq = irqPin != null;

            if (useIrq)
            {
                _irqPin = irqPin;
                _irqPin.Write(GpioPinValue.High);
                _irqPin.ValueChanged += irqPin_ValueChanged;
            }
            ConfigurationRegister configurationRegister = RegisterContainer.ConfigurationRegister;

            configurationRegister.MaximunTransmitRetriesMask = !useIrq;
            configurationRegister.ReceiveDataReadyMask       = !useIrq;
            configurationRegister.TransmitDataSentMask       = !useIrq;
            configurationRegister.Save();
            OperatingMode = OperatingModes.StandBy;
        }
Example #4
0
        public void ConstantCarrierWaveOutputForTestinng()
        {
            Debug.WriteLine(_radio.GetArduinoDetails());
            ConfigurationRegister configurationRegister = _radio.RegisterContainer.ConfigurationRegister;

            configurationRegister.PowerUp            = true;
            configurationRegister.PrimaryReceiveMode = false;
            configurationRegister.Save();
            Task.Delay(150).Wait();

            RfSetupRegister rfSetupRegister = _radio.RegisterContainer.RfSetupRegister;

            rfSetupRegister.EnableContiuousCarrierTransmit = true;
            rfSetupRegister.ForcePllSignalLock             = true;
            rfSetupRegister.PowerLevel = 3;
            rfSetupRegister.Save();

            RfChannelRegister rfChannelRegister = _radio.RegisterContainer.RfChannelRegister;

            rfChannelRegister.RfChannel = 1;
            rfChannelRegister.Save();

            _radio.OperatingMode = OperatingModes.ReceiveMode;
        }