Added Doxygen comments

This commit is contained in:
jgromes 2019-05-24 17:32:11 +02:00
parent 3d934778a9
commit dd59d9e6d6
3 changed files with 597 additions and 7 deletions

View file

@ -8,10 +8,15 @@
#include "WString.h"
#include "Printable.h"
/*!
\class ISerial
\brief Interface class for Arduino Serial. Only calls the appropriate methods for the active UART interface.
*/
class ISerial {
public:
ISerial(Module* mod);
void begin(long);
bool listen();
void end();
@ -23,7 +28,7 @@ class ISerial {
int read();
int available();
void flush();
size_t print(const __FlashStringHelper *);
size_t print(const String &);
size_t print(const char[]);
@ -48,7 +53,7 @@ class ISerial {
size_t println(double, int = 2);
size_t println(const Printable&);
size_t println(void);
protected:
Module* _mod;
};

View file

@ -7,46 +7,288 @@
#include "TypeDef.h"
/*!
\class Module
\brief Implements all common low-level SPI/UART/I2C methods to control the wireless module.
Every module class contains one private instance of this class.
*/
class Module {
public:
/*!
\brief UART-based module constructor.
\param tx Arduino pin to be used as Tx pin for SoftwareSerial communication.
\param rx Arduino pin to be used as Rx pin for SoftwareSerial communication.
*/
Module(int tx, int rx);
/*!
\brief SPI-based module constructor.
\param cs Arduino pin to be used as chip select.
\param int0 Arduino pin to be used as interrupt/GPIO 0.
\param int1 Arduino pin to be used as interrupt/GPIO 1.
\param spi SPI interface to be used. Defaults to Arduino hardware SPI interface, can also use software SPI implementations.
\param spiSettings SPI interface settings. Defaults to 2 MHz clock, MSB first, mode 0.
*/
Module(int cs, int int0, int int1, SPIClass& spi = SPI, SPISettings spiSettings = SPISettings(2000000, MSBFIRST, SPI_MODE0));
/*!
\brief Extended SPI-based module constructor.
\param cs Arduino pin to be used as chip select.
\param int0 Arduino pin to be used as interrupt/GPIO 0.
\param int1 Arduino pin to be used as interrupt/GPIO 1.
\param int2 Arduino pin to be used as interrupt/GPIO 2.
\param spi SPI interface to be used. Defaults to Arduino hardware SPI interface, can also use software SPI implementations.
\param spiSettings SPI interface settings. Defaults to 2 MHz clock, MSB first, mode 0.
*/
Module(int cs, int int0, int int1, int int2, SPIClass& spi = SPI, SPISettings spiSettings = SPISettings(2000000, MSBFIRST, SPI_MODE0));
/*!
\brief Generic module constructor.
\param cs Arduino pin to be used as chip select.
\param int0 Arduino pin to be used as interrupt/GPIO 0.
\param int1 Arduino pin to be used as interrupt/GPIO 1.
\param tx Arduino pin to be used as Tx pin for SoftwareSerial communication.
\param rx Arduino pin to be used as Rx pin for SoftwareSerial communication.
\param spi SPI interface to be used. Defaults to Arduino hardware SPI interface, can also use software SPI implementations.
\param spiSettings SPI interface settings. Defaults to 2 MHz clock, MSB first, mode 0.
*/
Module(int cs, int int0, int int1, int rx, int tx, SPIClass& spi = SPI, SPISettings spiSettings = SPISettings(2000000, MSBFIRST, SPI_MODE0));
// public member variables
/*!
\brief Internal SoftwareSerial instance.
*/
SoftwareSerial* ModuleSerial;
/*!
\brief Baud rate of SoftwareSerial UART communication. Defaults to 9600 baud.
*/
uint32_t baudrate = 9600;
/*!
\brief Line feed to be used when sending AT commands. Defaults to CR+LF.
*/
const char* AtLineFeed = "\r\n";
/*!
\brief Basic SPI read command. Defaults to 0x00.
*/
uint8_t SPIreadCommand = 0b00000000;
/*!
\brief Basic SPI write command. Defaults to 0x80.
*/
uint8_t SPIwriteCommand = 0b10000000;
// basic methods
/*!
\brief Initialize low-level module control.
\param interface Interface to be used on the module. See \ref shield_config for details.
\param gpio GPIO/interrupt pins to be used on the module. See \ref uart_config for details.
*/
void init(uint8_t interface, uint8_t gpio);
/*!
\brief Terminate low-level module control.
*/
void term();
// AT methods
/*!
\brief Empty internal AT buffer.
*/
void ATemptyBuffer();
/*!
\brief Get response after sending AT command.
\returns True if AT response contains the string "OK", false otehrwise.
*/
bool ATgetResponse();
/*!
\brief Send AT command. Will also call ATgetResponse.
\param cmd AT command to be sent. Line feed characters are added automatically.
\returns True if AT response contains the string "OK", false otherwise.
*/
bool ATsendCommand(const char* cmd);
/*!
\brief Send raw AT data. Will also call ATgetResponse.
\param data Data to be sent.
\param len Number of bytes to send.
\returns True if AT response contains the string "OK", false otherwise.
*/
bool ATsendData(uint8_t* data, uint32_t len);
// SPI methods
/*!
\brief SPI read method that automatically masks unused bits. This method is the preferred SPI read mechanism.
\param reg Address of SPI register to read.
\param msb Most significant bit of the register variable. Bits above this one will be masked out.
\param lsb Least significant bit of the register variable. Bits below this one will be masked out.
\returns Masked register value or status code.
*/
int16_t SPIgetRegValue(uint8_t reg, uint8_t msb = 7, uint8_t lsb = 0);
/*!
\brief Overwrite-safe SPI write method with verification. This method is the preferred SPI write mechanism.
\param reg Address of SPI register to write.
\param value Single byte value that will be written to the SPI register.
\param msb Most significant bit of the register variable. Bits above this one will not be affected by the write operation.
\param lsb Least significant bit of the register variable. Bits below this one will not be affected by the write operation.
\param checkInterval Number of milliseconds between register writing and verification reading. Some registers need up to 10ms to process the change.
\returns \ref status_codes
*/
int16_t SPIsetRegValue(uint8_t reg, uint8_t value, uint8_t msb = 7, uint8_t lsb = 0, uint8_t checkInterval = 2);
/*!
\brief SPI burst read method.
\param reg Address of SPI register to read.
\param numBytes Number of bytes that will be read.
\param inBytes Pointer to array that will hold the read data.
*/
void SPIreadRegisterBurst(uint8_t reg, uint8_t numBytes, uint8_t* inBytes);
/*!
\brief SPI basic read method. Use of this method is reserved for special cases, SPIgetRegValue should be used instead.
\param reg Address of SPI register to read.
\returns Value that was read from register.
*/
uint8_t SPIreadRegister(uint8_t reg);
/*!
\brief SPI burst write method.
\param reg Address of SPI register to write.
\param data Pointer to array that holds the data that will be written.
\param numBytes Number of bytes that will be written.
*/
void SPIwriteRegisterBurst(uint8_t reg, uint8_t* data, uint8_t numBytes);
/*!
\brief SPI basic write method. Use of this method is reserved for special cases, SPIsetRegValue should be used instead.
\param reg Address of SPI register to write.
\param data Value that will be written to the register.
*/
void SPIwriteRegister(uint8_t reg, uint8_t data);
/*!
\brief SPI single transfer method.
\param cmd SPI access command (read/write/burst/...).
\param reg Address of SPI register to transfer to/from.
\param dataOut Data that will be transfered from master to slave.
\param dataIn Data that was transfered from slave to master.
\param numBytes Number of bytes to transfer.
*/
void SPItransfer(uint8_t cmd, uint8_t reg, uint8_t* dataOut, uint8_t* dataIn, uint8_t numBytes);
// pin number access methods
/*!
\brief Access method to get the pin number of SPI chip select.
\returns Pin number of SPI chip select configured in the constructor.
*/
int getCs() const { return(_cs); }
/*!
\brief Access method to get the pin number of interrupt/GPIO 0.
\returns Pin number of interrupt/GPIO 0 configured in the constructor.
*/
int getInt0() const { return(_int0); }
/*!
\brief Access method to get the pin number of interrupt/GPIO 1.
\returns Pin number of interrupt/GPIO 1 configured in the constructor.
*/
int getInt1() const { return(_int1); }
/*!
\brief Access method to get the pin number of UART Rx.
\returns Pin number of UART Rx configured in the constructor.
*/
int getRx() const { return(_rx); }
/*!
\brief Access method to get the pin number of UART Rx.
\returns Pin number of UART Rx configured in the constructor.
*/
int getTx() const { return(_tx); }
/*!
\brief Access method to get the SPI interface.
\returns SPI interface configured in the constructor.
*/
SPIClass* getSpi() const { return(_spi); }
/*!
\brief Access method to get the SPI interface settings.
\returns SPI interface settings configured in the constructor.
*/
SPISettings getSpiSettings() const { return(_spiSettings); }
private:

View file

@ -17,104 +17,447 @@
#define DEBUG_PRINTLN(...) {}
#endif
// Shield configuration
/*!
\defgroup shield_config Shield Configuration
\{
*/
/*!
\brief Use SPI interface.
*/
#define USE_SPI 0x00
/*!
\brief Use UART interface.
*/
#define USE_UART 0x01
/*!
\brief Use I2C interface.
*/
#define USE_I2C 0x02
/*!
\brief Do not use any interrupts/GPIOs.
*/
#define INT_NONE 0x00
/*!
\brief Use interrupt/GPIO 0.
*/
#define INT_0 0x01
/*!
\brief Use interrupt/GPIO 1.
*/
#define INT_1 0x02
/*!
\brief Use both interrupts/GPIOs.
*/
#define INT_BOTH 0x03
// UART configuration
/*!
\}
*/
/*!
\defgroup uart_config UART Configuration
\{
*/
/*!
\brief Use 1 bit stop.
*/
#define UART_STOPBIT_1 0x01
/*!
\brief Use 1.5 bit stop.
*/
#define UART_STOPBIT_1_5 0x02
/*!
\brief Use 2 bit stop.
*/
#define UART_STOPBIT_2 0x03
/*!
\brief No parity.
*/
#define UART_PARITY_NONE 0x00
/*!
\brief Odd parity.
*/
#define UART_PARITY_ODD 0x01
/*!
\brief Even parity.
*/
#define UART_PARITY_EVEN 0x02
/*!
\brief No flow control.
*/
#define UART_FLOW_NONE 0x00
/*!
\brief RTS only.
*/
#define UART_FLOW_RTS 0x01
/*!
\brief CTS only.
*/
#define UART_FLOW_CTS 0x02
/*!
\brief Both RTS and CTS.
*/
#define UART_FLOW_BOTH 0x03
// Common status codes
/*!
\}
*/
/*!
\defgroup status_codes Status Codes
\{
*/
// common status codes
/*!
\brief No error, method executed successfully.
*/
#define ERR_NONE 0
/*!
\brief There was an unexpected, unknown error. If you see this, something went incredibly wrong.
Your Arduino may be possessed, contact your local exorcist to resolve this error.
*/
#define ERR_UNKNOWN -1
// SX127x/RFM9x/RF69/CC1101 status codes
// SX127x/RFM9x status codes
/*!
\brief Radio chip was not found during initialization. This can be caused by specifying wrong chip type in the constructor
(i.e. calling SX1272 constructor for SX1278 chip) or by a fault in your wiring (incorrect slave select pin).
*/
#define ERR_CHIP_NOT_FOUND -2
/*!
\brief Deprecated.
*/
#define ERR_EEPROM_NOT_INITIALIZED -3
/*!
\brief Packet supplied to transmission method was longer than limit.
*/
#define ERR_PACKET_TOO_LONG -4
/*!
\brief Timed out waiting for transmission finish.
*/
#define ERR_TX_TIMEOUT -5
/*!
\brief Timed out waiting for incoming transmission.
*/
#define ERR_RX_TIMEOUT -6
/*!
\brief The calculated and expected CRCs of received packet do not match.
This means that the packet was damaged during transmission and should be sent again.
*/
#define ERR_CRC_MISMATCH -7
/*!
\brief The supplied bandwidth value is invalid for this module.
*/
#define ERR_INVALID_BANDWIDTH -8
/*!
\brief The supplied spreading factor value is invalid for this module.
*/
#define ERR_INVALID_SPREADING_FACTOR -9
/*!
\brief The supplied coding rate value is invalid for this module.
*/
#define ERR_INVALID_CODING_RATE -10
/*!
\brief Internal only.
*/
#define ERR_INVALID_BIT_RANGE -11
/*!
\brief The supplied frequency value is invalid for this module.
*/
#define ERR_INVALID_FREQUENCY -12
/*!
\brief The supplied output power value is invalid for this module.
*/
#define ERR_INVALID_OUTPUT_POWER -13
/*!
\brief LoRa preamble was detected during channel activity detection.
This means that there is some LoRa device currently transmitting in your channel.
*/
#define PREAMBLE_DETECTED -14
/*!
\brief No LoRa preambles were detected during channel activity detection. Your channel is free.
*/
#define CHANNEL_FREE -15
/*!
\brief Real value in SPI register does not match the expected one. This can be caused by faulty SPI wiring.
*/
#define ERR_SPI_WRITE_FAILED -16
/*!
\brief The supplied current limit value is invalid.
*/
#define ERR_INVALID_CURRENT_LIMIT -17
/*!
\brief The supplied preamble length is invalid.
*/
#define ERR_INVALID_PREAMBLE_LENGTH -18
/*!
\brief The supplied gain value is invalid.
*/
#define ERR_INVALID_GAIN -19
/*!
\brief User tried to execute modem-exclusive method on a wrong modem.
For example, this can happen when you try to change LoRa configuration when FSK modem is active.
*/
#define ERR_WRONG_MODEM -20
// RF69-specific status codes
/*!
\brief The supplied bit rate value is invalid.
*/
#define ERR_INVALID_BIT_RATE -101
/*!
\brief The supplied frequency deviation value is invalid.
*/
#define ERR_INVALID_FREQUENCY_DEVIATION -102
/*!
\brief The supplied bit rate to bandwidth ratio is invalid. See the module datasheet for more information.
*/
#define ERR_INVALID_BIT_RATE_BW_RATIO -103
/*!
\brief The supplied receiver bandwidth value is invalid.
*/
#define ERR_INVALID_RX_BANDWIDTH -104
/*!
\brief The supplied FSK sync word is invalid.
*/
#define ERR_INVALID_SYNC_WORD -105
/*!
\brief The supplied FSK data shaping option is invalid.
*/
#define ERR_INVALID_DATA_SHAPING -106
/*!
\brief The current modulation is invalid for the requested operation.
*/
#define ERR_INVALID_MODULATION -107
// ESP8266 status codes
/*!
\brief AT command failed to execute, or timed out.
*/
#define ERR_AT_FAILED -201
/*!
\brief Supplied URL is malformed or invalid.
*/
#define ERR_URL_MALFORMED -202
/*!
\brief AT command response was malformed.
*/
#define ERR_RESPONSE_MALFORMED_AT -203
/*!
\brief Data response was malformed.
*/
#define ERR_RESPONSE_MALFORMED -204
/*!
\brief MQTT broker rejected connection due to version mismatch.
*/
#define ERR_MQTT_CONN_VERSION_REJECTED -205
/*!
\brief MQTT broker rejected connection due to unknown ID.
*/
#define ERR_MQTT_CONN_ID_REJECTED -206
/*!
\brief Failed to establish connection with MQTT broker.
*/
#define ERR_MQTT_CONN_SERVER_UNAVAILABLE -207
/*!
\brief Supplied username/password combination is incorrect.
*/
#define ERR_MQTT_CONN_BAD_USERNAME_PASSWORD -208
/*!
\brief Unauthorized connection to MQTT broker.
*/
#define ERR_MQTT_CONN_NOT_AUTHORIZED -208
/*!
\brief Received packet ID does not match the expected ID.
*/
#define ERR_MQTT_UNEXPECTED_PACKET_ID -209
/*!
\brief No new packet was received since the last check.
*/
#define ERR_MQTT_NO_NEW_PACKET_AVAILABLE -210
/*!
\brief Successfully subscribed to MQTT topic with QoS 0.
*/
#define MQTT_SUBS_SUCCESS_QOS_0 0x00
/*!
\brief Successfully subscribed to MQTT topic with QoS 1.
*/
#define MQTT_SUBS_SUCCESS_QOS_1 0x01
/*!
\brief Successfully subscribed to MQTT topic with QoS 2.
*/
#define MQTT_SUBS_SUCCESS_QOS_2 0x02
/*!
\brief Failed to subscribe to MQTT topic.
*/
#define ERR_MQTT_SUBS_FAILED 0x80
// XBee status codes
/*!
\brief Failed to enter command mode.
*/
#define ERR_CMD_MODE_FAILED -301
/*!
\brief Received ZigBee frame is malformed.
*/
#define ERR_FRAME_MALFORMED -302
/*!
\brief Received ZigBee frame checksum does not match the calculated.
*/
#define ERR_FRAME_INCORRECT_CHECKSUM -303
/*!
\brief Received ZigBee frame with unexpected ID.
*/
#define ERR_FRAME_UNEXPECTED_ID -304
/*!
\brief Timed out waiting for response to ZigBee frame.
*/
#define ERR_FRAME_NO_RESPONSE -305
// RTTY status codes
/*!
\brief Supplied RTTY frequency shift is invalid for this module.
*/
#define ERR_INVALID_RTTY_SHIFT -401
/*!
\brief Supplied RTTY encoding is invalid.
*/
#define ERR_UNSUPPORTED_ENCODING -402
// nRF24 status codes
/*!
\brief Supplied data rate is invalid.
*/
#define ERR_INVALID_DATA_RATE -501
/*!
\brief Supplied address width is invalid.
*/
#define ERR_INVALID_ADDRESS_WIDTH -502
/*!
\brief Supplied data pipe number is invalid.
*/
#define ERR_INVALID_PIPE_NUMBER -503
// CC1101-specific status codes
/*!
\brief Supplied number of broadcast addresses is invalid.
*/
#define ERR_INVALID_NUM_BROAD_ADDRS -601
// SX126x-specific status codes
/*!
\brief Supplied CRC configuration is invalid.
*/
#define ERR_INVALID_CRC_CONFIGURATION -701
/*!
\brief Detected LoRa transmission while scanning channel.
*/
#define LORA_DETECTED -702
/*!
\brief Supplied TCXO reference voltage is invalid.
*/
#define ERR_INVALID_TCXO_VOLTAGE -703
/*!
\brief Bit rate / bandwidth / frequency deviation ratio is invalid. See SX126x datasheet for details.
*/
#define ERR_INVALID_MODULATION_PARAMETERS -704
/*!
\brief SX126x timed out while waiting for complete SPI command.
*/
#define ERR_SPI_CMD_TIMEOUT -705
/*!
\brief SX126x received invalid SPI command.
*/
#define ERR_SPI_CMD_INVALID -706
/*!
\brief SX126x failed to execute SPI command.
*/
#define ERR_SPI_CMD_FAILED -707
/*!
\}
*/
#endif