public void Begin() { RegisterManager registers = Configuration.Registers; ChipEnable(false); // Set 1500uS (minimum for 32B payload in ESB@250KBPS) timeouts, to make testing a little easier // WARNING: If this is ever lowered, either 250KBS mode with AA is broken or maximum packet // sizes must never be used. See documentation for a more complete explanation. Configuration.AutoRetransmitDelay = AutoRetransmitDelays.Delay4000uS; Configuration.AutoRetransmitCount = 15; // Disable auto acknowledgement EnableAutoAcknowledgementRegister autoAckRegister = registers.EnableAutoAcknowledgementRegister; autoAckRegister.EN_AA = false; autoAckRegister.Save(); // Attempt to set DataRate to 250Kbps to determine if this is a plus model Configuration.DataRate = DataRates.DataRate250Kbps; Configuration.IsPlusModel = Configuration.DataRate == DataRates.DataRate250Kbps; // Restore our default PA level Configuration.PowerLevel = PowerLevels.Max; // Initialize CRC and request 2-byte (16bit) CRC Configuration.CrcEncodingScheme = CrcEncodingSchemes.DualBytes; Configuration.CrcEnabled = true; // Disable dynamic payload lengths Configuration.DynamicPayloadLengthEnabled = false; // Set up default configuration. Callers can always change it later. // This channel should be universally safe and not bleed over into adjacent spectrum. Configuration.Channel = 76; // Then set the data rate to the slowest (and most reliable) speed supported by all hardware. Configuration.DataRate = DataRates.DataRate1Mbps; // Reset current status // Notice reset and flush is the last thing we do StatusRegister statusRegister = registers.StatusRegister; statusRegister.RX_DR = false; statusRegister.TX_DS = false; statusRegister.MAX_RT = false; statusRegister.Save(); TransmitPipe.FlushBuffer(); ReceivePipes.FlushBuffer(); }
public RegisterManager(Radio radio) { ConfigurationRegister = new ConfigurationRegister(radio); EnableAutoAcknowledgementRegister = new EnableAutoAcknowledgementRegister(radio); EnableReceiveAddressRegister = new EnableReceiveAddressRegister(radio); AddressWidthRegister = new SetupAddressWidthRegister(radio); SetupRetransmissionRegister = new SetupRetransmissionRegister(radio); RfChannelRegister = new RfChannelRegister(radio); RfSetupRegister = new RfSetupRegister(radio); StatusRegister = new StatusRegister(radio); ObserveTransmitRegister = new ObserveTransmitRegister(radio); ReceivedPowerDetectorRegister = new ReceivedPowerDetectorRegister(radio); TransmitAddressRegister = new AddressPipeRegister(radio, Addresses.TX_ADDR, 0); FifoStatusRegister = new FifoStatusRegister(radio); DynamicPayloadLengthRegister = new DynamicPayloadLengthRegister(radio); FeatureRegister = new FeatureRegister(radio); ReceiveAddressPipeRegisters = new RegisterCollection<AddressPipeRegister> { {0, new AddressPipeRegister(radio, Addresses.RX_ADDR_P0, 0)}, {1, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 1)}, {2, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 2)}, {3, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 3)}, {4, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 4)}, {5, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 5)}, }; ReceivePayloadWidthPipeRegisters = new RegisterCollection<ReceivePayloadWidthPipeRegister> { {0, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P0, 0)}, {1, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P1, 1)}, {2, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P2, 2)}, {3, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P3, 3)}, {4, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P4, 4)}, {5, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P5, 5)} }; AllRegisters = new RegisterCollection<RegisterBase> { {Addresses.CONFIG, ConfigurationRegister}, {Addresses.EN_AA, EnableAutoAcknowledgementRegister}, {Addresses.EN_RXADDR, EnableReceiveAddressRegister}, {Addresses.SETUP_AW, AddressWidthRegister}, {Addresses.SETUP_RETR, SetupRetransmissionRegister}, {Addresses.RF_CH, RfChannelRegister}, {Addresses.RF_SETUP, RfSetupRegister}, {Addresses.STATUS, StatusRegister}, {Addresses.OBSERVE_TX, ObserveTransmitRegister}, {Addresses.RPD, ReceivedPowerDetectorRegister}, {Addresses.RX_ADDR_P0, ReceiveAddressPipeRegisters[0]}, {Addresses.RX_ADDR_P1, ReceiveAddressPipeRegisters[1]}, {Addresses.RX_ADDR_P2, ReceiveAddressPipeRegisters[2]}, {Addresses.RX_ADDR_P3, ReceiveAddressPipeRegisters[3]}, {Addresses.RX_ADDR_P4, ReceiveAddressPipeRegisters[4]}, {Addresses.RX_ADDR_P5, ReceiveAddressPipeRegisters[5]}, {Addresses.TX_ADDR, TransmitAddressRegister}, {Addresses.RX_PW_P0, ReceivePayloadWidthPipeRegisters[0]}, {Addresses.RX_PW_P1, ReceivePayloadWidthPipeRegisters[1]}, {Addresses.RX_PW_P2, ReceivePayloadWidthPipeRegisters[2]}, {Addresses.RX_PW_P3, ReceivePayloadWidthPipeRegisters[3]}, {Addresses.RX_PW_P4, ReceivePayloadWidthPipeRegisters[4]}, {Addresses.RX_PW_P5, ReceivePayloadWidthPipeRegisters[5]}, {Addresses.FIFO_STATUS, FifoStatusRegister}, {Addresses.DYNPD, DynamicPayloadLengthRegister}, {Addresses.FEATURE, FeatureRegister} }; }
public RegisterManager(Radio radio) { ConfigurationRegister = new ConfigurationRegister(radio); EnableAutoAcknowledgementRegister = new EnableAutoAcknowledgementRegister(radio); EnableReceiveAddressRegister = new EnableReceiveAddressRegister(radio); AddressWidthRegister = new SetupAddressWidthRegister(radio); SetupRetransmissionRegister = new SetupRetransmissionRegister(radio); RfChannelRegister = new RfChannelRegister(radio); RfSetupRegister = new RfSetupRegister(radio); StatusRegister = new StatusRegister(radio); ObserveTransmitRegister = new ObserveTransmitRegister(radio); ReceivedPowerDetectorRegister = new ReceivedPowerDetectorRegister(radio); TransmitAddressRegister = new AddressPipeRegister(radio, Addresses.TX_ADDR, 0); FifoStatusRegister = new FifoStatusRegister(radio); DynamicPayloadLengthRegister = new DynamicPayloadLengthRegister(radio); FeatureRegister = new FeatureRegister(radio); ReceiveAddressPipeRegisters = new RegisterCollection <AddressPipeRegister> { { 0, new AddressPipeRegister(radio, Addresses.RX_ADDR_P0, 0) }, { 1, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 1) }, { 2, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 2) }, { 3, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 3) }, { 4, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 4) }, { 5, new AddressPipeRegister(radio, Addresses.RX_ADDR_P1, 5) }, }; ReceivePayloadWidthPipeRegisters = new RegisterCollection <ReceivePayloadWidthPipeRegister> { { 0, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P0, 0) }, { 1, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P1, 1) }, { 2, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P2, 2) }, { 3, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P3, 3) }, { 4, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P4, 4) }, { 5, new ReceivePayloadWidthPipeRegister(radio, Addresses.RX_PW_P5, 5) } }; AllRegisters = new RegisterCollection <RegisterBase> { { Addresses.CONFIG, ConfigurationRegister }, { Addresses.EN_AA, EnableAutoAcknowledgementRegister }, { Addresses.EN_RXADDR, EnableReceiveAddressRegister }, { Addresses.SETUP_AW, AddressWidthRegister }, { Addresses.SETUP_RETR, SetupRetransmissionRegister }, { Addresses.RF_CH, RfChannelRegister }, { Addresses.RF_SETUP, RfSetupRegister }, { Addresses.STATUS, StatusRegister }, { Addresses.OBSERVE_TX, ObserveTransmitRegister }, { Addresses.RPD, ReceivedPowerDetectorRegister }, { Addresses.RX_ADDR_P0, ReceiveAddressPipeRegisters[0] }, { Addresses.RX_ADDR_P1, ReceiveAddressPipeRegisters[1] }, { Addresses.RX_ADDR_P2, ReceiveAddressPipeRegisters[2] }, { Addresses.RX_ADDR_P3, ReceiveAddressPipeRegisters[3] }, { Addresses.RX_ADDR_P4, ReceiveAddressPipeRegisters[4] }, { Addresses.RX_ADDR_P5, ReceiveAddressPipeRegisters[5] }, { Addresses.TX_ADDR, TransmitAddressRegister }, { Addresses.RX_PW_P0, ReceivePayloadWidthPipeRegisters[0] }, { Addresses.RX_PW_P1, ReceivePayloadWidthPipeRegisters[1] }, { Addresses.RX_PW_P2, ReceivePayloadWidthPipeRegisters[2] }, { Addresses.RX_PW_P3, ReceivePayloadWidthPipeRegisters[3] }, { Addresses.RX_PW_P4, ReceivePayloadWidthPipeRegisters[4] }, { Addresses.RX_PW_P5, ReceivePayloadWidthPipeRegisters[5] }, { Addresses.FIFO_STATUS, FifoStatusRegister }, { Addresses.DYNPD, DynamicPayloadLengthRegister }, { Addresses.FEATURE, FeatureRegister } }; }