diff --git a/src/BuildOpt.h b/src/BuildOpt.h index 0e583221..db8184c7 100644 --- a/src/BuildOpt.h +++ b/src/BuildOpt.h @@ -316,13 +316,6 @@ #include - #if !defined(min) - #define min(a,b) ((a)<(b)?(a):(b)) - #endif - - #if !defined(max) - #define max(a,b) ((a)>(b)?(a):(b)) - #endif #endif /* @@ -458,7 +451,6 @@ */ #define RADIOLIB_ASSERT(STATEVAR) { if((STATEVAR) != RADIOLIB_ERR_NONE) { return(STATEVAR); } } - /*! \brief Macro to check variable is within constraints - this is commonly used to check parameter ranges. Requires RADIOLIB_CHECK_RANGE to be enabled */ @@ -474,6 +466,11 @@ #define RADIOLIB_ERRATA_SX127X(...) {} #endif +// these macros are usually defined by Arduino, but some platforms undef them, so its safer to use our own +#define RADIOLIB_MIN(a,b) ((a)<(b)?(a):(b)) +#define RADIOLIB_MAX(a,b) ((a)>(b)?(a):(b)) +#define RADIOLIB_ABS(x) ((x)>0?(x):-(x)) + // version definitions #define RADIOLIB_VERSION_MAJOR (0x06) #define RADIOLIB_VERSION_MINOR (0x00) diff --git a/src/modules/CC1101/CC1101.cpp b/src/modules/CC1101/CC1101.cpp index b7b4f4bd..24721017 100644 --- a/src/modules/CC1101/CC1101.cpp +++ b/src/modules/CC1101/CC1101.cpp @@ -302,11 +302,11 @@ int16_t CC1101::startTransmit(uint8_t* data, size_t len, uint8_t addr) { /*if(len > RADIOLIB_CC1101_MAX_PACKET_LENGTH) { SPIwriteRegisterBurst(RADIOLIB_CC1101_REG_FIFO, data, RADIOLIB_CC1101_FIFO_THRESH_TX); } else { - uint8_t initialWrite = min((uint8_t)len, (uint8_t)(RADIOLIB_CC1101_FIFO_SIZE - dataSent)); + uint8_t initialWrite = RADIOLIB_MIN((uint8_t)len, (uint8_t)(RADIOLIB_CC1101_FIFO_SIZE - dataSent)); SPIwriteRegisterBurst(RADIOLIB_CC1101_REG_FIFO, data, initialWrite); dataSent += initialWrite; }*/ - uint8_t initialWrite = min((uint8_t)len, (uint8_t)(RADIOLIB_CC1101_FIFO_SIZE - dataSent)); + uint8_t initialWrite = RADIOLIB_MIN((uint8_t)len, (uint8_t)(RADIOLIB_CC1101_FIFO_SIZE - dataSent)); SPIwriteRegisterBurst(RADIOLIB_CC1101_REG_FIFO, data, initialWrite); dataSent += initialWrite; @@ -327,7 +327,7 @@ int16_t CC1101::startTransmit(uint8_t* data, size_t len, uint8_t addr) { // if there's room then put other data if (bytesInFIFO < RADIOLIB_CC1101_FIFO_SIZE) { - uint8_t bytesToWrite = min((uint8_t)(RADIOLIB_CC1101_FIFO_SIZE - bytesInFIFO), (uint8_t)(len - dataSent)); + uint8_t bytesToWrite = RADIOLIB_MIN((uint8_t)(RADIOLIB_CC1101_FIFO_SIZE - bytesInFIFO), (uint8_t)(len - dataSent)); SPIwriteRegisterBurst(RADIOLIB_CC1101_REG_FIFO, &data[dataSent], bytesToWrite); dataSent += bytesToWrite; } else { @@ -429,7 +429,7 @@ int16_t CC1101::readData(uint8_t* data, size_t len) { } // read the minimum between "remaining length" and bytesInFifo - uint8_t bytesToRead = min((uint8_t)(length - readBytes), bytesInFIFO); + uint8_t bytesToRead = RADIOLIB_MIN((uint8_t)(length - readBytes), bytesInFIFO); SPIreadRegisterBurst(RADIOLIB_CC1101_REG_FIFO, bytesToRead, &(data[readBytes])); readBytes += bytesToRead; lastPop = this->mod->hal->millis(); diff --git a/src/modules/SX126x/SX126x.cpp b/src/modules/SX126x/SX126x.cpp index 79212eee..e46dc66e 100644 --- a/src/modules/SX126x/SX126x.cpp +++ b/src/modules/SX126x/SX126x.cpp @@ -605,7 +605,7 @@ int16_t SX126x::startReceiveDutyCycleAuto(uint16_t senderPreambleLength, uint16_ // We need to ensure that the timeout is longer than senderPreambleLength. // So we must satisfy: wakePeriod > (preamblePeriod - (sleepPeriod - 1000)) / 2. (A) // we also need to ensure the unit is awake to see at least minSymbols. (B) - uint32_t wakePeriod = max( + uint32_t wakePeriod = RADIOLIB_MAX( (symbolLength * (senderPreambleLength + 1) - (sleepPeriod - 1000)) / 2, // (A) symbolLength * (minSymbols + 1)); //(B) RADIOLIB_DEBUG_PRINTLN("Auto wake period: ", wakePeriod); diff --git a/src/modules/SX127x/SX127x.cpp b/src/modules/SX127x/SX127x.cpp index 4abac652..ccae2f27 100644 --- a/src/modules/SX127x/SX127x.cpp +++ b/src/modules/SX127x/SX127x.cpp @@ -1156,7 +1156,7 @@ uint32_t SX127x::getTimeOnAir(size_t len) { // Get number of bits preamble float n_pre = (float) ((this->mod->SPIgetRegValue(RADIOLIB_SX127X_REG_PREAMBLE_MSB) << 8) | this->mod->SPIgetRegValue(RADIOLIB_SX127X_REG_PREAMBLE_LSB)); // Get number of bits payload - float n_pay = 8.0 + max(ceil((8.0 * (float) len - 4.0 * (float) this->spreadingFactor + 28.0 + 16.0 * crc - 20.0 * ih) / (4.0 * (float) this->spreadingFactor - 8.0 * de)) * (float) this->codingRate, 0.0); + float n_pay = 8.0 + RADIOLIB_MAX(ceil((8.0 * (float) len - 4.0 * (float) this->spreadingFactor + 28.0 + 16.0 * crc - 20.0 * ih) / (4.0 * (float) this->spreadingFactor - 8.0 * de)) * (float) this->codingRate, 0.0); // Get time-on-air in us return ceil(symbolLength * (n_pre + n_pay + 4.25)) * 1000; diff --git a/src/modules/SX128x/SX128x.cpp b/src/modules/SX128x/SX128x.cpp index a9643834..bd272311 100644 --- a/src/modules/SX128x/SX128x.cpp +++ b/src/modules/SX128x/SX128x.cpp @@ -1242,7 +1242,7 @@ uint32_t SX128x::getTimeOnAir(size_t len) { uint32_t N_symbolPreamble = (this->preambleLengthLoRa & 0x0F) * (uint32_t(1) << ((this->preambleLengthLoRa & 0xF0) >> 4)); // calculate the number of symbols - N_symbol = (float)N_symbolPreamble + coeff1 + 8.0 + ceil(max((int16_t)(8 * len + N_bitCRC - coeff2 + N_symbolHeader), (int16_t)0) / (float)coeff3) * (float)(this->codingRateLoRa + 4); + N_symbol = (float)N_symbolPreamble + coeff1 + 8.0 + ceil(RADIOLIB_MAX((int16_t)(8 * len + N_bitCRC - coeff2 + N_symbolHeader), (int16_t)0) / (float)coeff3) * (float)(this->codingRateLoRa + 4); } else { // long interleaving - abandon hope all ye who enter here diff --git a/src/protocols/APRS/APRS.cpp b/src/protocols/APRS/APRS.cpp index 6a9db015..8ae93e8c 100644 --- a/src/protocols/APRS/APRS.cpp +++ b/src/protocols/APRS/APRS.cpp @@ -100,7 +100,7 @@ int16_t APRSClient::sendMicE(float lat, float lon, uint16_t heading, uint16_t sp // as discussed in https://github.com/jgromes/RadioLib/issues/430 // latitude first, because that is in the destination field - float lat_abs = abs(lat); + float lat_abs = RADIOLIB_ABS(lat); int lat_deg = (int)lat_abs; int lat_min = (lat_abs - (float)lat_deg) * 60.0f; int lat_hun = (((lat_abs - (float)lat_deg) * 60.0f) - lat_min) * 100.0f; @@ -133,7 +133,7 @@ int16_t APRSClient::sendMicE(float lat, float lon, uint16_t heading, uint16_t sp info[infoPos++] = RADIOLIB_APRS_MIC_E_GPS_DATA_CURRENT; // encode the longtitude - float lon_abs = abs(lon); + float lon_abs = RADIOLIB_ABS(lon); int32_t lon_deg = (int32_t)lon_abs; int32_t lon_min = (lon_abs - (float)lon_deg) * 60.0f; int32_t lon_hun = (((lon_abs - (float)lon_deg) * 60.0f) - lon_min) * 100.0f;