[Module] Only initializing default SPI interface (#121)
This commit is contained in:
parent
b7c21ffac6
commit
5846c9d9d9
2 changed files with 70 additions and 12 deletions
|
@ -1,11 +1,34 @@
|
||||||
#include "Module.h"
|
#include "Module.h"
|
||||||
|
|
||||||
|
Module::Module(int16_t cs, int16_t irq, int16_t rst) {
|
||||||
|
_cs = cs;
|
||||||
|
_rx = NC;
|
||||||
|
_tx = NC;
|
||||||
|
_irq = irq;
|
||||||
|
_rst = rst;
|
||||||
|
_spi = &SPI;
|
||||||
|
_spiSettings = SPISettings(2000000, MSBFIRST, SPI_MODE0);
|
||||||
|
_initInterface = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Module::Module(int16_t cs, int16_t irq, int16_t rst, int16_t gpio) {
|
||||||
|
_cs = cs;
|
||||||
|
_rx = gpio;
|
||||||
|
_tx = NC;
|
||||||
|
_irq = irq;
|
||||||
|
_rst = rst;
|
||||||
|
_spi = &SPI;
|
||||||
|
_spiSettings = SPISettings(2000000, MSBFIRST, SPI_MODE0);
|
||||||
|
_initInterface = true;
|
||||||
|
}
|
||||||
|
|
||||||
Module::Module(int16_t rx, int16_t tx, HardwareSerial* useSer, int16_t rst) {
|
Module::Module(int16_t rx, int16_t tx, HardwareSerial* useSer, int16_t rst) {
|
||||||
_cs = NC;
|
_cs = NC;
|
||||||
_rx = rx;
|
_rx = rx;
|
||||||
_tx = tx;
|
_tx = tx;
|
||||||
_irq = NC;
|
_irq = NC;
|
||||||
_rst = rst;
|
_rst = rst;
|
||||||
|
_initInterface = true;
|
||||||
|
|
||||||
#ifdef RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED
|
#ifdef RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED
|
||||||
ModuleSerial = useSer;
|
ModuleSerial = useSer;
|
||||||
|
@ -23,6 +46,7 @@ Module::Module(int16_t cs, int16_t irq, int16_t rst, SPIClass& spi, SPISettings
|
||||||
_rst = rst;
|
_rst = rst;
|
||||||
_spi = &spi;
|
_spi = &spi;
|
||||||
_spiSettings = spiSettings;
|
_spiSettings = spiSettings;
|
||||||
|
_initInterface = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Module::Module(int16_t cs, int16_t irq, int16_t rst, int16_t gpio, SPIClass& spi, SPISettings spiSettings) {
|
Module::Module(int16_t cs, int16_t irq, int16_t rst, int16_t gpio, SPIClass& spi, SPISettings spiSettings) {
|
||||||
|
@ -33,6 +57,7 @@ Module::Module(int16_t cs, int16_t irq, int16_t rst, int16_t gpio, SPIClass& spi
|
||||||
_rst = rst;
|
_rst = rst;
|
||||||
_spi = &spi;
|
_spi = &spi;
|
||||||
_spiSettings = spiSettings;
|
_spiSettings = spiSettings;
|
||||||
|
_initInterface = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Module::Module(int16_t cs, int16_t irq, int16_t rst, int16_t rx, int16_t tx, SPIClass& spi, SPISettings spiSettings, HardwareSerial* useSer) {
|
Module::Module(int16_t cs, int16_t irq, int16_t rst, int16_t rx, int16_t tx, SPIClass& spi, SPISettings spiSettings, HardwareSerial* useSer) {
|
||||||
|
@ -43,6 +68,7 @@ Module::Module(int16_t cs, int16_t irq, int16_t rst, int16_t rx, int16_t tx, SPI
|
||||||
_rst = rst;
|
_rst = rst;
|
||||||
_spi = &spi;
|
_spi = &spi;
|
||||||
_spiSettings = spiSettings;
|
_spiSettings = spiSettings;
|
||||||
|
_initInterface = false;
|
||||||
|
|
||||||
#ifdef RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED
|
#ifdef RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED
|
||||||
ModuleSerial = useSer;
|
ModuleSerial = useSer;
|
||||||
|
@ -58,14 +84,18 @@ void Module::init(uint8_t interface) {
|
||||||
case RADIOLIB_USE_SPI:
|
case RADIOLIB_USE_SPI:
|
||||||
Module::pinMode(_cs, OUTPUT);
|
Module::pinMode(_cs, OUTPUT);
|
||||||
Module::digitalWrite(_cs, HIGH);
|
Module::digitalWrite(_cs, HIGH);
|
||||||
|
if(_initInterface) {
|
||||||
_spi->begin();
|
_spi->begin();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case RADIOLIB_USE_UART:
|
case RADIOLIB_USE_UART:
|
||||||
|
if(_initInterface) {
|
||||||
#if defined(ESP32)
|
#if defined(ESP32)
|
||||||
ModuleSerial->begin(baudrate, SERIAL_8N1, _rx, _tx);
|
ModuleSerial->begin(baudrate, SERIAL_8N1, _rx, _tx);
|
||||||
#else
|
#else
|
||||||
ModuleSerial->begin(baudrate);
|
ModuleSerial->begin(baudrate);
|
||||||
#endif
|
#endif
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case RADIOLIB_USE_I2C:
|
case RADIOLIB_USE_I2C:
|
||||||
break;
|
break;
|
||||||
|
@ -211,6 +241,7 @@ void Module::SPItransfer(uint8_t cmd, uint8_t reg, uint8_t* dataOut, uint8_t* da
|
||||||
|
|
||||||
// send SPI register address with access command
|
// send SPI register address with access command
|
||||||
_spi->transfer(reg | cmd);
|
_spi->transfer(reg | cmd);
|
||||||
|
delayMicroseconds(120);
|
||||||
#ifdef RADIOLIB_VERBOSE
|
#ifdef RADIOLIB_VERBOSE
|
||||||
if(cmd == SPIwriteCommand) {
|
if(cmd == SPIwriteCommand) {
|
||||||
RADIOLIB_VERBOSE_PRINT('W');
|
RADIOLIB_VERBOSE_PRINT('W');
|
||||||
|
@ -226,12 +257,14 @@ void Module::SPItransfer(uint8_t cmd, uint8_t reg, uint8_t* dataOut, uint8_t* da
|
||||||
if(cmd == SPIwriteCommand) {
|
if(cmd == SPIwriteCommand) {
|
||||||
for(size_t n = 0; n < numBytes; n++) {
|
for(size_t n = 0; n < numBytes; n++) {
|
||||||
_spi->transfer(dataOut[n]);
|
_spi->transfer(dataOut[n]);
|
||||||
|
delayMicroseconds(120);
|
||||||
RADIOLIB_VERBOSE_PRINT(dataOut[n], HEX);
|
RADIOLIB_VERBOSE_PRINT(dataOut[n], HEX);
|
||||||
RADIOLIB_VERBOSE_PRINT('\t');
|
RADIOLIB_VERBOSE_PRINT('\t');
|
||||||
}
|
}
|
||||||
} else if (cmd == SPIreadCommand) {
|
} else if (cmd == SPIreadCommand) {
|
||||||
for(size_t n = 0; n < numBytes; n++) {
|
for(size_t n = 0; n < numBytes; n++) {
|
||||||
dataIn[n] = _spi->transfer(0x00);
|
dataIn[n] = _spi->transfer(0x00);
|
||||||
|
delayMicroseconds(120);
|
||||||
RADIOLIB_VERBOSE_PRINT(dataIn[n], HEX);
|
RADIOLIB_VERBOSE_PRINT(dataIn[n], HEX);
|
||||||
RADIOLIB_VERBOSE_PRINT('\t');
|
RADIOLIB_VERBOSE_PRINT('\t');
|
||||||
}
|
}
|
||||||
|
|
43
src/Module.h
43
src/Module.h
|
@ -27,14 +27,38 @@ class Module {
|
||||||
|
|
||||||
\param serial HardwareSerial to be used on platforms that do not support SoftwareSerial. Defaults to Serial1.
|
\param serial HardwareSerial to be used on platforms that do not support SoftwareSerial. Defaults to Serial1.
|
||||||
|
|
||||||
\param rst Arduino pin to be used as hardware reset for the module. Defaults to -1 (unused).
|
\param rst Arduino pin to be used as hardware reset for the module. Defaults to NC (unused).
|
||||||
*/
|
*/
|
||||||
#ifdef RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED
|
#ifdef RADIOLIB_SOFTWARE_SERIAL_UNSUPPORTED
|
||||||
Module(int16_t tx, int16_t rx, HardwareSerial* serial = &Serial1, int16_t rst = -1);
|
Module(int16_t tx, int16_t rx, HardwareSerial* serial = &Serial1, int16_t rst = NC);
|
||||||
#else
|
#else
|
||||||
Module(int16_t tx, int16_t rx, HardwareSerial* serial = nullptr, int16_t rst = -1);
|
Module(int16_t tx, int16_t rx, HardwareSerial* serial = nullptr, int16_t rst = NC);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief SPI-based module constructor. Will use the default SPI interface automatically initialize it.
|
||||||
|
|
||||||
|
\param cs Arduino pin to be used as chip select.
|
||||||
|
|
||||||
|
\param irq Arduino pin to be used as interrupt/GPIO.
|
||||||
|
|
||||||
|
\param rst Arduino pin to be used as hardware reset for the module.
|
||||||
|
*/
|
||||||
|
Module(int16_t cs, int16_t irq, int16_t rst);
|
||||||
|
|
||||||
|
/*!
|
||||||
|
\brief Extended SPI-based module constructor. Will use the default SPI interface automatically initialize it.
|
||||||
|
|
||||||
|
\param cs Arduino pin to be used as chip select.
|
||||||
|
|
||||||
|
\param irq Arduino pin to be used as interrupt/GPIO.
|
||||||
|
|
||||||
|
\param rst Arduino pin to be used as hardware reset for the module.
|
||||||
|
|
||||||
|
\param gpio Arduino pin to be used as additional interrupt/GPIO.
|
||||||
|
*/
|
||||||
|
Module(int16_t cs, int16_t irq, int16_t rst, int16_t gpio);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief SPI-based module constructor.
|
\brief SPI-based module constructor.
|
||||||
|
|
||||||
|
@ -44,11 +68,11 @@ class Module {
|
||||||
|
|
||||||
\param rst Arduino pin to be used as hardware reset for the module.
|
\param rst Arduino pin to be used as hardware reset for the module.
|
||||||
|
|
||||||
\param spi SPI interface to be used. Defaults to Arduino hardware SPI interface, can also use software SPI implementations.
|
\param spi SPI interface to be used, can also use software SPI implementations.
|
||||||
|
|
||||||
\param spiSettings SPI interface settings. Defaults to 2 MHz clock, MSB first, mode 0.
|
\param spiSettings SPI interface settings.
|
||||||
*/
|
*/
|
||||||
Module(int16_t cs, int16_t irq, int16_t rst, SPIClass& spi = SPI, SPISettings spiSettings = SPISettings(2000000, MSBFIRST, SPI_MODE0));
|
Module(int16_t cs, int16_t irq, int16_t rst, SPIClass& spi, SPISettings spiSettings);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Extended SPI-based module constructor.
|
\brief Extended SPI-based module constructor.
|
||||||
|
@ -61,11 +85,11 @@ class Module {
|
||||||
|
|
||||||
\param gpio Arduino pin to be used as additional interrupt/GPIO.
|
\param gpio Arduino pin to be used as additional interrupt/GPIO.
|
||||||
|
|
||||||
\param spi SPI interface to be used. Defaults to Arduino hardware SPI interface, can also use software SPI implementations.
|
\param spi SPI interface to be used, can also use software SPI implementations.
|
||||||
|
|
||||||
\param spiSettings SPI interface settings. Defaults to 2 MHz clock, MSB first, mode 0.
|
\param spiSettings SPI interface settings.
|
||||||
*/
|
*/
|
||||||
Module(int16_t cs, int16_t irq, int16_t rst, int16_t gpio, SPIClass& spi = SPI, SPISettings spiSettings = SPISettings(2000000, MSBFIRST, SPI_MODE0));
|
Module(int16_t cs, int16_t irq, int16_t rst, int16_t gpio, SPIClass& spi, SPISettings spiSettings);
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
\brief Generic module constructor.
|
\brief Generic module constructor.
|
||||||
|
@ -344,6 +368,7 @@ class Module {
|
||||||
int16_t _irq;
|
int16_t _irq;
|
||||||
int16_t _rst;
|
int16_t _rst;
|
||||||
|
|
||||||
|
bool _initInterface;
|
||||||
SPIClass* _spi;
|
SPIClass* _spi;
|
||||||
SPISettings _spiSettings;
|
SPISettings _spiSettings;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue