diff --git a/src/modules/RF69/RF69.cpp b/src/modules/RF69/RF69.cpp index 39ea1441..a5d42d0d 100644 --- a/src/modules/RF69/RF69.cpp +++ b/src/modules/RF69/RF69.cpp @@ -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 int16_t state = config(); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // configure publicly accessible settings state = setFrequency(freq); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // configure bitrate _rxBw = 125.0; state = setBitRate(br); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // configure default RX bandwidth state = setRxBandwidth(rxBw); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // configure default frequency deviation state = setFrequencyDeviation(freqDev); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // configure default TX output power state = setOutputPower(power); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set default packet length mode state = variablePacketLengthMode(); - if (state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // default sync word values 0x2D01 is the same as the default in LowPowerLab RFM69 library uint8_t syncWord[] = {0x2D, 0x01}; state = setSyncWord(syncWord, sizeof(syncWord)); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); return(ERR_NONE); } @@ -121,9 +105,7 @@ int16_t RF69::transmit(uint8_t* data, size_t len, uint8_t addr) { // start transmission int16_t state = startTransmit(data, len, addr); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // wait for transmission end or timeout uint32_t start = micros(); @@ -147,9 +129,7 @@ int16_t RF69::receive(uint8_t* data, size_t len) { // start reception int16_t state = startReceive(); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // wait for packet reception or timeout uint32_t start = micros(); @@ -187,9 +167,7 @@ int16_t RF69::transmitDirect(uint32_t frf) { // activate direct mode int16_t state = directMode(); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // start transmitting return(setMode(RF69_TX)); @@ -198,9 +176,7 @@ int16_t RF69::transmitDirect(uint32_t frf) { int16_t RF69::receiveDirect() { // activate direct mode int16_t state = directMode(); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // start receiving return(setMode(RF69_RX)); @@ -209,16 +185,14 @@ int16_t RF69::receiveDirect() { int16_t RF69::directMode() { // set mode to standby int16_t state = setMode(RF69_STANDBY); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set DIO mapping state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO1_CONT_DCLK | RF69_DIO2_CONT_DATA, 5, 2); + RADIOLIB_ASSERT(state); // set continuous mode - state |= _mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_CONTINUOUS_MODE_WITH_SYNC, 6, 5); - return(state); + return(_mod->SPIsetRegValue(RF69_REG_DATA_MODUL, RF69_CONTINUOUS_MODE_WITH_SYNC, 6, 5)); } 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_RX_TIMEOUT_1, RF69_TIMEOUT_RX_START); state |= _mod->SPIsetRegValue(RF69_REG_RX_TIMEOUT_2, RF69_TIMEOUT_RSSI_THRESH); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // clear interrupt flags clearIRQFlags(); @@ -291,12 +263,11 @@ int16_t RF69::startTransmit(uint8_t* data, size_t len, uint8_t addr) { // set mode to standby int16_t state = setMode(RF69_STANDBY); + RADIOLIB_ASSERT(state); // set DIO pin mapping - state |= _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO0_PACK_PACKET_SENT, 7, 6); - if(state != ERR_NONE) { - return(state); - } + state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_1, RF69_DIO0_PACK_PACKET_SENT, 7, 6); + RADIOLIB_ASSERT(state); // clear interrupt flags 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) { // set mdoe to standby int16_t state = standby(); - if(state != ERR_NONE) { - return(state); - } - + RADIOLIB_ASSERT(state); // get packet length size_t length = len; 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; int16_t state = enableSyncWordFiltering(maxErrBits); - if (state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set sync word register _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) { // enable address filtering (node only) int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_NODE, 2, 1); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set node address 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) { // enable address filtering (node + broadcast) int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_NODE_BROADCAST, 2, 1); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set broadcast address return(_mod->SPIsetRegValue(RF69_REG_BROADCAST_ADRS, broadAddr)); @@ -592,15 +554,11 @@ int16_t RF69::setBroadcastAddress(uint8_t broadAddr) { int16_t RF69::disableAddressFiltering() { // disable address filtering int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, RF69_ADDRESS_FILTERING_OFF, 2, 1); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set node address to default (0x00) state = _mod->SPIsetRegValue(RF69_REG_NODE_ADRS, 0x00); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set broadcast address to default (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) { // 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); - if(state != ERR_NONE) { - return(state); - } - - return(state); + return(_mod->SPIsetRegValue(RF69_REG_SYNC_CONFIG, RF69_SYNC_ON | RF69_FIFO_FILL_CONDITION_SYNC | (_syncWordLength - 1) << 3 | maxErrBits, 7, 0)); } int16_t RF69::disableSyncWordFiltering() { // disable preamble detection and generation int16_t state = _mod->SPIsetRegValue(RF69_REG_PREAMBLE_LSB, 0, 7, 0); state |= _mod->SPIsetRegValue(RF69_REG_PREAMBLE_MSB, 0, 7, 0); - if (state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // disable sync word detection and generation state = _mod->SPIsetRegValue(RF69_REG_SYNC_CONFIG, RF69_SYNC_OFF | RF69_FIFO_FILL_CONDITION, 7, 6); - if (state != ERR_NONE) { - return(state); - } return(state); } @@ -693,18 +641,14 @@ int16_t RF69::setPromiscuousMode(bool promiscuous) { if (promiscuous == true) { // disable preamble and sync word filtering and insertion state = disableSyncWordFiltering(); - if (state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // disable CRC filtering state = setCrcFiltering(false); } else { // enable preamble and sync word filtering and insertion state = enableSyncWordFiltering(); - if (state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // enable CRC filtering state = setCrcFiltering(true); @@ -718,76 +662,53 @@ int16_t RF69::config() { // set mode to STANDBY state = setMode(RF69_STANDBY); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set operation modes state = _mod->SPIsetRegValue(RF69_REG_OP_MODE, RF69_SEQUENCER_ON | RF69_LISTEN_OFF, 7, 6); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // enable over-current protection state = _mod->SPIsetRegValue(RF69_REG_OCP, RF69_OCP_ON, 4, 4); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // 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_FSK_GAUSSIAN_0_3, 1, 0); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set RSSI threshold state = _mod->SPIsetRegValue(RF69_REG_RSSI_THRESH, RF69_RSSI_THRESHOLD, 7, 0); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // reset FIFO flag _mod->SPIwriteRegister(RF69_REG_IRQ_FLAGS_2, RF69_IRQ_FIFO_OVERRUN); // disable ClkOut on DIO5 state = _mod->SPIsetRegValue(RF69_REG_DIO_MAPPING_2, RF69_CLK_OUT_OFF, 2, 0); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // 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_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); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set payload length state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, RF69_PAYLOAD_LENGTH, 7, 0); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set FIFO threshold state = _mod->SPIsetRegValue(RF69_REG_FIFO_THRESH, RF69_TX_START_CONDITION_FIFO_NOT_EMPTY | RF69_FIFO_THRESHOLD, 7, 0); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set Rx timeouts 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); - if(state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // enable improved fading margin state = _mod->SPIsetRegValue(RF69_REG_TEST_DAGC, RF69_CONTINUOUS_DAGC_LOW_BETA_OFF, 7, 0); - if(state != ERR_NONE) { - return(state); - } return(ERR_NONE); } @@ -800,15 +721,11 @@ int16_t RF69::setPacketMode(uint8_t mode, uint8_t len) { // set to fixed packet length int16_t state = _mod->SPIsetRegValue(RF69_REG_PACKET_CONFIG_1, mode, 7, 7); - if (state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // set length to register state = _mod->SPIsetRegValue(RF69_REG_PAYLOAD_LENGTH, len); - if (state != ERR_NONE) { - return(state); - } + RADIOLIB_ASSERT(state); // update the cached value _packetLengthConfig = mode;