RadioHead
|
Base class for RadioHead drivers that use the SPI bus to communicate with its transport hardware. More...
#include <RHSPIDriver.h>
Public Member Functions | |
RHSPIDriver (uint8_t slaveSelectPin=SS, RHGenericSPI &spi=hardware_spi) | |
bool | init () |
uint8_t | spiRead (uint8_t reg) |
uint8_t | spiWrite (uint8_t reg, uint8_t val) |
uint8_t | spiBurstRead (uint8_t reg, uint8_t *dest, uint8_t len) |
uint8_t | spiBurstWrite (uint8_t reg, const uint8_t *src, uint8_t len) |
void | setSlaveSelectPin (uint8_t slaveSelectPin) |
void | spiUsingInterrupt (uint8_t interruptNumber) |
Public Member Functions inherited from RHGenericDriver | |
RHGenericDriver () | |
Constructor. | |
virtual | ~RHGenericDriver () |
Generic destructor to prevent warnings when objects are dynamically allocated. | |
virtual bool | available ()=0 |
virtual bool | recv (uint8_t *buf, uint8_t *len)=0 |
virtual bool | send (const uint8_t *data, uint8_t len)=0 |
virtual uint8_t | maxMessageLength ()=0 |
virtual void | waitAvailable (uint16_t polldelay=0) |
virtual bool | waitPacketSent () |
virtual bool | waitPacketSent (uint16_t timeout) |
virtual bool | waitAvailableTimeout (uint16_t timeout, uint16_t polldelay=0) |
virtual bool | waitCAD () |
void | setCADTimeout (unsigned long cad_timeout) |
virtual bool | isChannelActive () |
virtual void | setThisAddress (uint8_t thisAddress) |
virtual void | setHeaderTo (uint8_t to) |
virtual void | setHeaderFrom (uint8_t from) |
virtual void | setHeaderId (uint8_t id) |
virtual void | setHeaderFlags (uint8_t set, uint8_t clear=RH_FLAGS_APPLICATION_SPECIFIC) |
virtual void | setPromiscuous (bool promiscuous) |
virtual uint8_t | headerTo () |
virtual uint8_t | headerFrom () |
virtual uint8_t | headerId () |
virtual uint8_t | headerFlags () |
virtual int16_t | lastRssi () |
virtual RHMode | mode () |
virtual void | setMode (RHMode mode) |
Sets the operating mode of the transport. | |
virtual bool | sleep () |
virtual uint16_t | rxBad () |
virtual uint16_t | rxGood () |
virtual uint16_t | txGood () |
Protected Member Functions | |
virtual void | beginTransaction () |
virtual void | endTransaction () |
virtual void | selectSlave () |
virtual void | deselectSlave () |
Protected Attributes | |
RHGenericSPI & | _spi |
Reference to the RHGenericSPI instance to use to transfer data with the SPI device. | |
uint8_t | _slaveSelectPin |
The pin number of the Slave Select pin that is used to select the desired device. | |
Protected Attributes inherited from RHGenericDriver | |
volatile RHMode | _mode |
The current transport operating mode. | |
uint8_t | _thisAddress |
This node id. | |
bool | _promiscuous |
Whether the transport is in promiscuous mode. | |
volatile uint8_t | _rxHeaderTo |
TO header in the last received mesasge. | |
volatile uint8_t | _rxHeaderFrom |
FROM header in the last received mesasge. | |
volatile uint8_t | _rxHeaderId |
ID header in the last received mesasge. | |
volatile uint8_t | _rxHeaderFlags |
FLAGS header in the last received mesasge. | |
uint8_t | _txHeaderTo |
TO header to send in all messages. | |
uint8_t | _txHeaderFrom |
FROM header to send in all messages. | |
uint8_t | _txHeaderId |
ID header to send in all messages. | |
uint8_t | _txHeaderFlags |
FLAGS header to send in all messages. | |
volatile int16_t | _lastRssi |
The value of the last received RSSI value, in some transport specific units. | |
volatile uint16_t | _rxBad |
Count of the number of bad messages (eg bad checksum etc) received. | |
volatile uint16_t | _rxGood |
Count of the number of successfully transmitted messaged. | |
volatile uint16_t | _txGood |
Count of the number of bad messages (correct checksum etc) received. | |
volatile bool | _cad |
Channel activity detected. | |
unsigned int | _cad_timeout |
Channel activity timeout in ms. | |
Additional Inherited Members | |
Public Types inherited from RHGenericDriver | |
enum | RHMode { RHModeInitialising = 0 , RHModeSleep , RHModeIdle , RHModeTx , RHModeRx , RHModeCad } |
Defines different operating modes for the transport hardware. More... | |
Static Public Member Functions inherited from RHGenericDriver | |
static void | printBuffer (const char *prompt, const uint8_t *buf, uint8_t len) |
Base class for RadioHead drivers that use the SPI bus to communicate with its transport hardware.
This class can be subclassed by Drivers that require to use the SPI bus. It can be configured to use either the RHHardwareSPI class (if there is one available on the platform) of the bitbanged RHSoftwareSPI class. The default behaviour is to use a pre-instantiated built-in RHHardwareSPI interface.
SPI bus access is protected by ATOMIC_BLOCK_START and ATOMIC_BLOCK_END, which will ensure interrupts are disabled during access.
The read and write routines implement commonly used SPI conventions: specifically that the MSB of the first byte transmitted indicates that it is a write and the remaining bits indicate the rehgister to access) This can be overriden in subclasses if necessaryor an alternative class, RHNRFSPIDriver can be used to access devices like Nordic NRF series radios, which have different requirements.
Application developers are not expected to instantiate this class directly: it is for the use of Driver developers.
RHSPIDriver::RHSPIDriver | ( | uint8_t | slaveSelectPin = SS , |
RHGenericSPI & | spi = hardware_spi |
||
) |
Constructor
[in] | slaveSelectPin | The controler pin to use to select the desired SPI device. This pin will be driven LOW during SPI communications with the SPI device that uis iused by this Driver. If slaveSelectPin is 0xff, then the pin will not be initialised or activated by this class. |
[in] | spi | Reference to the SPI interface to use. The default is to use a default built-in Hardware interface. |
|
protectedvirtual |
Signal the start of an SPI transaction that must not be interrupted by other SPI actions In subclasses that support transactions this will ensure that other SPI transactions are blocked until this one is completed by endTransaction(). Selects the slave with selectSlave()
References _spi, and RHGenericSPI::beginTransaction().
Referenced by RH_SX126x::getCommand(), RH_SX126x::getStatus(), RH_SX126x::readBuffer(), RH_SX126x::readRegisters(), RH_SX126x::sendCommand(), RH_SX126x::sendCommand(), spiBurstRead(), spiBurstWrite(), spiRead(), spiWrite(), RH_SX126x::writeBuffer(), and RH_SX126x::writeRegisters().
|
protectedvirtual |
Reimplemented in RH_ABZ.
|
protectedvirtual |
Signal the end of an SPI transaction Deelects the slave with deselectSlave()
References _spi, and RHGenericSPI::endTransaction().
Referenced by RH_SX126x::getCommand(), RH_SX126x::getStatus(), RH_SX126x::readBuffer(), RH_SX126x::readRegisters(), RH_SX126x::sendCommand(), RH_SX126x::sendCommand(), spiBurstRead(), spiBurstWrite(), spiRead(), spiWrite(), RH_SX126x::writeBuffer(), and RH_SX126x::writeRegisters().
|
virtual |
Initialise the Driver transport hardware and software. Make sure the Driver is properly configured before calling init().
Reimplemented from RHGenericDriver.
References _slaveSelectPin, _spi, and RHGenericSPI::begin().
Referenced by RH_RF22::init(), RH_RF24::init(), RH_RF69::init(), RH_RF95::init(), and RH_SX126x::init().
|
protectedvirtual |
Reimplemented in RH_ABZ.
void RHSPIDriver::setSlaveSelectPin | ( | uint8_t | slaveSelectPin | ) |
Set or change the pin to be used for SPI slave select. This can be called at any time to change the pin that will be used for slave select in subsquent SPI operations.
[in] | slaveSelectPin | The pin to use |
References _slaveSelectPin.
uint8_t RH_INTERRUPT_ATTR RHSPIDriver::spiBurstRead | ( | uint8_t | reg, |
uint8_t * | dest, | ||
uint8_t | len | ||
) |
Reads a number of consecutive registers from the SPI device using burst read mode
[in] | reg | Register number of the first register |
[in] | dest | Array to write the register values to. Must be at least len bytes |
[in] | len | Number of bytes to read |
References _spi, beginTransaction(), endTransaction(), and RHGenericSPI::transfer().
Referenced by RH_RF22::handleInterrupt(), RH_RF95::handleInterrupt(), RH_RF22::readNextFragment(), and RH_RF22::wutRead().
uint8_t RH_INTERRUPT_ATTR RHSPIDriver::spiBurstWrite | ( | uint8_t | reg, |
const uint8_t * | src, | ||
uint8_t | len | ||
) |
Write a number of consecutive registers using burst write mode
[in] | reg | Register number of the first register |
[in] | src | Array of new register values to write. Must be at least len bytes |
[in] | len | Number of bytes to write |
References _spi, beginTransaction(), endTransaction(), and RHGenericSPI::transfer().
Referenced by RH_RF95::send(), RH_RF22::sendNextFragment(), RH_RF69::setEncryptionKey(), RH_RF22::setModemRegisters(), RH_RF69::setModemRegisters(), RH_RF22::setSyncWords(), RH_RF69::setSyncWords(), and RH_RF22::setWutPeriod().
uint8_t RH_INTERRUPT_ATTR RHSPIDriver::spiRead | ( | uint8_t | reg | ) |
Reads a single register from the SPI device
[in] | reg | Register number |
References _spi, beginTransaction(), endTransaction(), and RHGenericSPI::transfer().
Referenced by RH_RF22::adcRead(), RH_RF95::enableTCXO(), RH_RF22::ezmacStatusRead(), RH_RF95::frequencyError(), RH_RF95::getDeviceVersion(), RH_RF22::handleInterrupt(), RH_RF69::handleInterrupt(), RH_RF95::handleInterrupt(), RH_RF22::init(), RH_RF69::init(), RH_RF95::init(), RH_RF69::printRegister(), RH_RF95::printRegisters(), RH_RF22::rssiRead(), RH_RF69::rssiRead(), RH_RF95::setCodingRate4(), RH_RF69::setEncryptionKey(), RH_RF95::setLowDatarate(), RH_RF69::setOpMode(), RH_RF95::setPayloadCRC(), RH_RF95::setSignalBandwidth(), RH_RF95::setSpreadingFactor(), RH_RF69::setSyncWords(), RH_RF22::statusRead(), and RH_RF69::temperatureRead().
void RHSPIDriver::spiUsingInterrupt | ( | uint8_t | interruptNumber | ) |
Set the SPI interrupt number If SPI transactions can occur within an interrupt, tell the low level SPI interface which interrupt is used
[in] | interruptNumber | the interrupt number |
References _spi, and RHGenericSPI::usingInterrupt().
Referenced by RH_RF22::init(), RH_RF24::init(), RH_RF69::init(), RH_RF95::setupInterruptHandler(), and RH_SX126x::setupInterruptHandler().
uint8_t RH_INTERRUPT_ATTR RHSPIDriver::spiWrite | ( | uint8_t | reg, |
uint8_t | val | ||
) |
Writes a single byte to the SPI device
[in] | reg | Register number |
[in] | val | The value to write |
References _spi, beginTransaction(), endTransaction(), and RHGenericSPI::transfer().
Referenced by RH_RF22::adcRead(), RH_RF95::enableTCXO(), RH_RF95::handleInterrupt(), RH_RF22::init(), RH_RF69::init(), RH_RF95::init(), RH_RF95::isChannelActive(), RH_RF22::reset(), RH_RF22::resetFifos(), RH_RF22::resetRxFifo(), RH_RF22::resetTxFifo(), RH_RF69::rssiRead(), RH_RF22::send(), RH_RF95::send(), RH_RF95::setCodingRate4(), RH_RF69::setEncryptionKey(), RH_RF22::setFHChannel(), RH_RF22::setFHStepSize(), RH_RF95::setFrequency(), RH_RF22::setFrequency(), RH_RF69::setFrequency(), RH_RF22::setGpioReversed(), RH_RF95::setLowDatarate(), RH_RF69::setModeIdle(), RH_RF95::setModeIdle(), RH_RF22::setModemRegisters(), RH_RF69::setModemRegisters(), RH_RF95::setModemRegisters(), RH_RF69::setModeRx(), RH_RF95::setModeRx(), RH_RF69::setModeTx(), RH_RF95::setModeTx(), RH_RF22::setOpMode(), RH_RF69::setOpMode(), RH_RF95::setPayloadCRC(), RH_RF69::setPreambleLength(), RH_RF95::setPreambleLength(), RH_RF22::setPreambleLength(), RH_RF22::setPromiscuous(), RH_RF95::setSignalBandwidth(), RH_RF95::setSpreadingFactor(), RH_RF69::setSyncWords(), RH_RF22::setThisAddress(), RH_RF69::setTxPower(), RH_RF95::setTxPower(), RH_RF22::setTxPower(), RH_RF69::sleep(), RH_RF95::sleep(), RH_RF22::startTransmit(), RH_RF69::temperatureRead(), and RH_RF22::temperatureRead().