[RF69] Added assert macro

This commit is contained in:
jgromes 2020-01-13 16:36:53 +01:00
parent ba1c483121
commit 751fb6431c

View file

@ -55,53 +55,37 @@ int16_t RF69::begin(float freq, float br, float rxBw, float freqDev, int8_t powe
// configure settings not accessible by API // configure settings not accessible by API
int16_t state = config(); int16_t state = config();
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// configure publicly accessible settings // configure publicly accessible settings
state = setFrequency(freq); state = setFrequency(freq);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// configure bitrate // configure bitrate
_rxBw = 125.0; _rxBw = 125.0;
state = setBitRate(br); state = setBitRate(br);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// configure default RX bandwidth // configure default RX bandwidth
state = setRxBandwidth(rxBw); state = setRxBandwidth(rxBw);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// configure default frequency deviation // configure default frequency deviation
state = setFrequencyDeviation(freqDev); state = setFrequencyDeviation(freqDev);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// configure default TX output power // configure default TX output power
state = setOutputPower(power); state = setOutputPower(power);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set default packet length mode // set default packet length mode
state = variablePacketLengthMode(); state = variablePacketLengthMode();
if (state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// default sync word values 0x2D01 is the same as the default in LowPowerLab RFM69 library // default sync word values 0x2D01 is the same as the default in LowPowerLab RFM69 library
uint8_t syncWord[] = {0x2D, 0x01}; uint8_t syncWord[] = {0x2D, 0x01};
state = setSyncWord(syncWord, sizeof(syncWord)); state = setSyncWord(syncWord, sizeof(syncWord));
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
return(ERR_NONE); return(ERR_NONE);
} }
@ -121,9 +105,7 @@ int16_t RF69::transmit(uint8_t* data, size_t len, uint8_t addr) {
// start transmission // start transmission
int16_t state = startTransmit(data, len, addr); int16_t state = startTransmit(data, len, addr);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// wait for transmission end or timeout // wait for transmission end or timeout
uint32_t start = micros(); uint32_t start = micros();
@ -147,9 +129,7 @@ int16_t RF69::receive(uint8_t* data, size_t len) {
// start reception // start reception
int16_t state = startReceive(); int16_t state = startReceive();
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// wait for packet reception or timeout // wait for packet reception or timeout
uint32_t start = micros(); uint32_t start = micros();
@ -187,9 +167,7 @@ int16_t RF69::transmitDirect(uint32_t frf) {
// activate direct mode // activate direct mode
int16_t state = directMode(); int16_t state = directMode();
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// start transmitting // start transmitting
return(setMode(RF69_TX)); return(setMode(RF69_TX));
@ -198,9 +176,7 @@ int16_t RF69::transmitDirect(uint32_t frf) {
int16_t RF69::receiveDirect() { int16_t RF69::receiveDirect() {
// activate direct mode // activate direct mode
int16_t state = directMode(); int16_t state = directMode();
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// start receiving // start receiving
return(setMode(RF69_RX)); return(setMode(RF69_RX));
@ -209,16 +185,14 @@ int16_t RF69::receiveDirect() {
int16_t RF69::directMode() { int16_t RF69::directMode() {
// set mode to standby // set mode to standby
int16_t state = setMode(RF69_STANDBY); int16_t state = setMode(RF69_STANDBY);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set DIO mapping // set DIO mapping
state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO1_CONT_DCLK | RF69_DIO2_CONT_DATA, 5, 2); state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO1_CONT_DCLK | RF69_DIO2_CONT_DATA, 5, 2);
RADIOLIB_ASSERT(state);
// set continuous mode // set continuous mode
state |= _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_CONTINUOUS_MODE_WITH_SYNC, 6, 5); return(_mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_CONTINUOUS_MODE_WITH_SYNC, 6, 5));
return(state);
} }
int16_t RF69::packetMode() { int16_t RF69::packetMode() {
@ -245,9 +219,7 @@ int16_t RF69::startReceive() {
state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO0_PACK_PAYLOAD_READY, 7, 4); state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO0_PACK_PAYLOAD_READY, 7, 4);
state |= _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START); state |= _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START);
state |= _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH); state |= _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// clear interrupt flags // clear interrupt flags
clearIRQFlags(); clearIRQFlags();
@ -291,12 +263,11 @@ int16_t RF69::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
// set mode to standby // set mode to standby
int16_t state = setMode(RF69_STANDBY); int16_t state = setMode(RF69_STANDBY);
RADIOLIB_ASSERT(state);
// set DIO pin mapping // set DIO pin mapping
state |= _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO0_PACK_PACKET_SENT, 7, 6); state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO0_PACK_PACKET_SENT, 7, 6);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// clear interrupt flags // clear interrupt flags
clearIRQFlags(); clearIRQFlags();
@ -329,10 +300,7 @@ int16_t RF69::startTransmit(uint8_t* data, size_t len, uint8_t addr) {
int16_t RF69::readData(uint8_t* data, size_t len) { int16_t RF69::readData(uint8_t* data, size_t len) {
// set mdoe to standby // set mdoe to standby
int16_t state = standby(); int16_t state = standby();
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// get packet length // get packet length
size_t length = len; size_t length = len;
if(len == RF69_MAX_PACKET_LENGTH) { if(len == RF69_MAX_PACKET_LENGTH) {
@ -558,9 +526,7 @@ int16_t RF69::setSyncWord(uint8_t* syncWord, size_t len, uint8_t maxErrBits) {
_syncWordLength = len; _syncWordLength = len;
int16_t state = enableSyncWordFiltering(maxErrBits); int16_t state = enableSyncWordFiltering(maxErrBits);
if (state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set sync word register // set sync word register
_mod->SPIwriteRegisterBurst(RF69_REG_SYNC_VALUE_1, syncWord, len); _mod->SPIwriteRegisterBurst(RF69_REG_SYNC_VALUE_1, syncWord, len);
@ -570,9 +536,7 @@ int16_t RF69::setSyncWord(uint8_t* syncWord, size_t len, uint8_t maxErrBits) {
int16_t RF69::setNodeAddress(uint8_t nodeAddr) { int16_t RF69::setNodeAddress(uint8_t nodeAddr) {
// enable address filtering (node only) // enable address filtering (node only)
int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_NODE, 2, 1); int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_NODE, 2, 1);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set node address // set node address
return(_mod->SPIsetRegValue(RF69_REG_NODE_ADRS, nodeAddr)); return(_mod->SPIsetRegValue(RF69_REG_NODE_ADRS, nodeAddr));
@ -581,9 +545,7 @@ int16_t RF69::setNodeAddress(uint8_t nodeAddr) {
int16_t RF69::setBroadcastAddress(uint8_t broadAddr) { int16_t RF69::setBroadcastAddress(uint8_t broadAddr) {
// enable address filtering (node + broadcast) // enable address filtering (node + broadcast)
int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_NODE_BROADCAST, 2, 1); int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_NODE_BROADCAST, 2, 1);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set broadcast address // set broadcast address
return(_mod->SPIsetRegValue(RF69_REG_BROADCAST_ADRS, broadAddr)); return(_mod->SPIsetRegValue(RF69_REG_BROADCAST_ADRS, broadAddr));
@ -592,15 +554,11 @@ int16_t RF69::setBroadcastAddress(uint8_t broadAddr) {
int16_t RF69::disableAddressFiltering() { int16_t RF69::disableAddressFiltering() {
// disable address filtering // disable address filtering
int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_OFF, 2, 1); int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_OFF, 2, 1);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set node address to default (0x00) // set node address to default (0x00)
state = _mod->SPIsetRegValue(RF69_REG_NODE_ADRS, 0x00); state = _mod->SPIsetRegValue(RF69_REG_NODE_ADRS, 0x00);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set broadcast address to default (0x00) // set broadcast address to default (0x00)
return(_mod->SPIsetRegValue(RF69_REG_BROADCAST_ADRS, 0x00)); return(_mod->SPIsetRegValue(RF69_REG_BROADCAST_ADRS, 0x00));
@ -650,27 +608,17 @@ int16_t RF69::variablePacketLengthMode(uint8_t maxLen) {
int16_t RF69::enableSyncWordFiltering(uint8_t maxErrBits) { int16_t RF69::enableSyncWordFiltering(uint8_t maxErrBits) {
// enable sync word recognition // enable sync word recognition
int16_t state = _mod->SPIsetRegValue(RF69_REG_SYNC_CONFIG, RF69_SYNC_ON | RF69_FIFO_FILL_CONDITION_SYNC | (_syncWordLength - 1) << 3 | maxErrBits, 7, 0); return(_mod->SPIsetRegValue(RF69_REG_SYNC_CONFIG, RF69_SYNC_ON | RF69_FIFO_FILL_CONDITION_SYNC | (_syncWordLength - 1) << 3 | maxErrBits, 7, 0));
if(state != ERR_NONE) {
return(state);
}
return(state);
} }
int16_t RF69::disableSyncWordFiltering() { int16_t RF69::disableSyncWordFiltering() {
// disable preamble detection and generation // disable preamble detection and generation
int16_t state = _mod->SPIsetRegValue(RF69_REG_PREAMBLE_LSB, 0, 7, 0); int16_t state = _mod->SPIsetRegValue(RF69_REG_PREAMBLE_LSB, 0, 7, 0);
state |= _mod->SPIsetRegValue(RF69_REG_PREAMBLE_MSB, 0, 7, 0); state |= _mod->SPIsetRegValue(RF69_REG_PREAMBLE_MSB, 0, 7, 0);
if (state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// disable sync word detection and generation // disable sync word detection and generation
state = _mod->SPIsetRegValue(RF69_REG_SYNC_CONFIG, RF69_SYNC_OFF | RF69_FIFO_FILL_CONDITION, 7, 6); state = _mod->SPIsetRegValue(RF69_REG_SYNC_CONFIG, RF69_SYNC_OFF | RF69_FIFO_FILL_CONDITION, 7, 6);
if (state != ERR_NONE) {
return(state);
}
return(state); return(state);
} }
@ -693,18 +641,14 @@ int16_t RF69::setPromiscuousMode(bool promiscuous) {
if (promiscuous == true) { if (promiscuous == true) {
// disable preamble and sync word filtering and insertion // disable preamble and sync word filtering and insertion
state = disableSyncWordFiltering(); state = disableSyncWordFiltering();
if (state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// disable CRC filtering // disable CRC filtering
state = setCrcFiltering(false); state = setCrcFiltering(false);
} else { } else {
// enable preamble and sync word filtering and insertion // enable preamble and sync word filtering and insertion
state = enableSyncWordFiltering(); state = enableSyncWordFiltering();
if (state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// enable CRC filtering // enable CRC filtering
state = setCrcFiltering(true); state = setCrcFiltering(true);
@ -718,76 +662,53 @@ int16_t RF69::config() {
// set mode to STANDBY // set mode to STANDBY
state = setMode(RF69_STANDBY); state = setMode(RF69_STANDBY);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set operation modes // set operation modes
state = _mod->SPIsetRegValue(RF69_REG_OP_MODE, RF69_SEQUENCER_ON | RF69_LISTEN_OFF, 7, 6); state = _mod->SPIsetRegValue(RF69_REG_OP_MODE, RF69_SEQUENCER_ON | RF69_LISTEN_OFF, 7, 6);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// enable over-current protection // enable over-current protection
state = _mod->SPIsetRegValue(RF69_REG_OCP, RF69_OCP_ON, 4, 4); state = _mod->SPIsetRegValue(RF69_REG_OCP, RF69_OCP_ON, 4, 4);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set data mode, modulation type and shaping // set data mode, modulation type and shaping
state = _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_PACKET_MODE | RF69_FSK, 6, 3); state = _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_PACKET_MODE | RF69_FSK, 6, 3);
state |= _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_FSK_GAUSSIAN_0_3, 1, 0); state |= _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_FSK_GAUSSIAN_0_3, 1, 0);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set RSSI threshold // set RSSI threshold
state = _mod->SPIsetRegValue(RF69_REG_RSSI_THRESH, RF69_RSSI_THRESHOLD, 7, 0); state = _mod->SPIsetRegValue(RF69_REG_RSSI_THRESH, RF69_RSSI_THRESHOLD, 7, 0);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// reset FIFO flag // reset FIFO flag
_mod->SPIwriteRegister(RF69_REG_IRQ_FLAGS_2, RF69_IRQ_FIFO_OVERRUN); _mod->SPIwriteRegister(RF69_REG_IRQ_FLAGS_2, RF69_IRQ_FIFO_OVERRUN);
// disable ClkOut on DIO5 // disable ClkOut on DIO5
state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_2, RF69_CLK_OUT_OFF, 2, 0); state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_2, RF69_CLK_OUT_OFF, 2, 0);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set packet configuration and disable encryption // set packet configuration and disable encryption
state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_PACKET_FORMAT_VARIABLE | RF69_DC_FREE_NONE | RF69_CRC_ON | RF69_CRC_AUTOCLEAR_ON | RF69_ADDRESS_FILTERING_OFF, 7, 1); state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_PACKET_FORMAT_VARIABLE | RF69_DC_FREE_NONE | RF69_CRC_ON | RF69_CRC_AUTOCLEAR_ON | RF69_ADDRESS_FILTERING_OFF, 7, 1);
state |= _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_2, RF69_INTER_PACKET_RX_DELAY, 7, 4); state |= _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_2, RF69_INTER_PACKET_RX_DELAY, 7, 4);
state |= _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_2, RF69_AUTO_RX_RESTART_ON | RF69_AES_OFF, 1, 0); state |= _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_2, RF69_AUTO_RX_RESTART_ON | RF69_AES_OFF, 1, 0);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set payload length // set payload length
state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, RF69_PAYLOAD_LENGTH, 7, 0); state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, RF69_PAYLOAD_LENGTH, 7, 0);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set FIFO threshold // set FIFO threshold
state = _mod->SPIsetRegValue(RF69_REG_FIFO_THRESH, RF69_TX_START_CONDITION_FIFO_NOT_EMPTY | RF69_FIFO_THRESHOLD, 7, 0); state = _mod->SPIsetRegValue(RF69_REG_FIFO_THRESH, RF69_TX_START_CONDITION_FIFO_NOT_EMPTY | RF69_FIFO_THRESHOLD, 7, 0);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set Rx timeouts // set Rx timeouts
state = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START, 7, 0); state = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START, 7, 0);
state = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH, 7, 0); state = _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH, 7, 0);
if(state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// enable improved fading margin // enable improved fading margin
state = _mod->SPIsetRegValue(RF69_REG_TEST_DAGC, RF69_CONTINUOUS_DAGC_LOW_BETA_OFF, 7, 0); state = _mod->SPIsetRegValue(RF69_REG_TEST_DAGC, RF69_CONTINUOUS_DAGC_LOW_BETA_OFF, 7, 0);
if(state != ERR_NONE) {
return(state);
}
return(ERR_NONE); return(ERR_NONE);
} }
@ -800,15 +721,11 @@ int16_t RF69::setPacketMode(uint8_t mode, uint8_t len) {
// set to fixed packet length // set to fixed packet length
int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, mode, 7, 7); int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, mode, 7, 7);
if (state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// set length to register // set length to register
state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, len); state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, len);
if (state != ERR_NONE) { RADIOLIB_ASSERT(state);
return(state);
}
// update the cached value // update the cached value
_packetLengthConfig = mode; _packetLengthConfig = mode;