[MOD] Fix issues reported by new cppcheck

This commit is contained in:
jgromes 2025-01-17 20:00:26 +01:00
parent 7c464a0632
commit 4088db2cf2
2 changed files with 22 additions and 14 deletions

View file

@ -25,7 +25,7 @@ Module::Module(const Module& mod) {
} }
Module& Module::operator=(const Module& mod) { Module& Module::operator=(const Module& mod) {
memcpy((void*)&mod.spiConfig, &this->spiConfig, sizeof(SPIConfig_t)); memcpy(reinterpret_cast<void*>(&(const_cast<Module&>(mod)).spiConfig), &this->spiConfig, sizeof(SPIConfig_t));
this->csPin = mod.csPin; this->csPin = mod.csPin;
this->irqPin = mod.irqPin; this->irqPin = mod.irqPin;
this->rstPin = mod.rstPin; this->rstPin = mod.rstPin;
@ -142,7 +142,7 @@ uint8_t Module::SPIreadRegister(uint32_t reg) {
return(resp); return(resp);
} }
void Module::SPIwriteRegisterBurst(uint32_t reg, uint8_t* data, size_t numBytes) { void Module::SPIwriteRegisterBurst(uint32_t reg, const uint8_t* data, size_t numBytes) {
if(!spiConfig.stream) { if(!spiConfig.stream) {
SPItransfer(spiConfig.cmds[RADIOLIB_MODULE_SPI_COMMAND_WRITE], reg, data, NULL, numBytes); SPItransfer(spiConfig.cmds[RADIOLIB_MODULE_SPI_COMMAND_WRITE], reg, data, NULL, numBytes);
} else { } else {
@ -174,7 +174,7 @@ void Module::SPIwriteRegister(uint32_t reg, uint8_t data) {
} }
} }
void Module::SPItransfer(uint16_t cmd, uint32_t reg, uint8_t* dataOut, uint8_t* dataIn, size_t numBytes) { void Module::SPItransfer(uint16_t cmd, uint32_t reg, const uint8_t* dataOut, uint8_t* dataIn, size_t numBytes) {
// prepare the buffers // prepare the buffers
size_t buffLen = this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_CMD]/8 + this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_ADDR]/8 + numBytes; size_t buffLen = this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_CMD]/8 + this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_ADDR]/8 + numBytes;
#if RADIOLIB_STATIC_ONLY #if RADIOLIB_STATIC_ONLY
@ -216,7 +216,7 @@ void Module::SPItransfer(uint16_t cmd, uint32_t reg, uint8_t* dataOut, uint8_t*
// print debug information // print debug information
#if RADIOLIB_DEBUG_SPI #if RADIOLIB_DEBUG_SPI
uint8_t* debugBuffPtr = NULL; const uint8_t* debugBuffPtr = NULL;
if(cmd == spiConfig.cmds[RADIOLIB_MODULE_SPI_COMMAND_WRITE]) { if(cmd == spiConfig.cmds[RADIOLIB_MODULE_SPI_COMMAND_WRITE]) {
RADIOLIB_DEBUG_SPI_PRINT("W\t%X\t", reg); RADIOLIB_DEBUG_SPI_PRINT("W\t%X\t", reg);
debugBuffPtr = &buffOut[this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_ADDR]/8]; debugBuffPtr = &buffOut[this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_ADDR]/8];
@ -245,7 +245,7 @@ int16_t Module::SPIreadStream(uint16_t cmd, uint8_t* data, size_t numBytes, bool
return(this->SPIreadStream(cmdBuf, this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_CMD]/8, data, numBytes, waitForGpio, verify)); return(this->SPIreadStream(cmdBuf, this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_CMD]/8, data, numBytes, waitForGpio, verify));
} }
int16_t Module::SPIreadStream(uint8_t* cmd, uint8_t cmdLen, uint8_t* data, size_t numBytes, bool waitForGpio, bool verify) { int16_t Module::SPIreadStream(const uint8_t* cmd, uint8_t cmdLen, uint8_t* data, size_t numBytes, bool waitForGpio, bool verify) {
// send the command // send the command
int16_t state = this->SPItransferStream(cmd, cmdLen, false, NULL, data, numBytes, waitForGpio); int16_t state = this->SPItransferStream(cmd, cmdLen, false, NULL, data, numBytes, waitForGpio);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
@ -264,7 +264,7 @@ int16_t Module::SPIreadStream(uint8_t* cmd, uint8_t cmdLen, uint8_t* data, size_
#endif #endif
} }
int16_t Module::SPIwriteStream(uint16_t cmd, uint8_t* data, size_t numBytes, bool waitForGpio, bool verify) { int16_t Module::SPIwriteStream(uint16_t cmd, const uint8_t* data, size_t numBytes, bool waitForGpio, bool verify) {
uint8_t cmdBuf[2]; uint8_t cmdBuf[2];
uint8_t* cmdPtr = cmdBuf; uint8_t* cmdPtr = cmdBuf;
for(int8_t i = (int8_t)this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_CMD]/8 - 1; i >= 0; i--) { for(int8_t i = (int8_t)this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_CMD]/8 - 1; i >= 0; i--) {
@ -273,7 +273,7 @@ int16_t Module::SPIwriteStream(uint16_t cmd, uint8_t* data, size_t numBytes, boo
return(this->SPIwriteStream(cmdBuf, this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_CMD]/8, data, numBytes, waitForGpio, verify)); return(this->SPIwriteStream(cmdBuf, this->spiConfig.widths[RADIOLIB_MODULE_SPI_WIDTH_CMD]/8, data, numBytes, waitForGpio, verify));
} }
int16_t Module::SPIwriteStream(uint8_t* cmd, uint8_t cmdLen, uint8_t* data, size_t numBytes, bool waitForGpio, bool verify) { int16_t Module::SPIwriteStream(const uint8_t* cmd, uint8_t cmdLen, const uint8_t* data, size_t numBytes, bool waitForGpio, bool verify) {
// send the command // send the command
int16_t state = this->SPItransferStream(cmd, cmdLen, true, data, NULL, numBytes, waitForGpio); int16_t state = this->SPItransferStream(cmd, cmdLen, true, data, NULL, numBytes, waitForGpio);
RADIOLIB_ASSERT(state); RADIOLIB_ASSERT(state);
@ -315,7 +315,7 @@ int16_t Module::SPIcheckStream() {
return(state); return(state);
} }
int16_t Module::SPItransferStream(const uint8_t* cmd, uint8_t cmdLen, bool write, uint8_t* dataOut, uint8_t* dataIn, size_t numBytes, bool waitForGpio) { int16_t Module::SPItransferStream(const uint8_t* cmd, uint8_t cmdLen, bool write, const uint8_t* dataOut, uint8_t* dataIn, size_t numBytes, bool waitForGpio) {
// prepare the output buffer // prepare the output buffer
size_t buffLen = cmdLen + numBytes; size_t buffLen = cmdLen + numBytes;
if(!write) { if(!write) {
@ -348,6 +348,9 @@ int16_t Module::SPItransferStream(const uint8_t* cmd, uint8_t cmdLen, bool write
RadioLibTime_t start = this->hal->millis(); RadioLibTime_t start = this->hal->millis();
while(this->hal->digitalRead(this->gpioPin)) { while(this->hal->digitalRead(this->gpioPin)) {
this->hal->yield(); this->hal->yield();
// this timeout check triggers a false positive from cppcheck
// cppcheck-suppress unsignedLessThanZero
if(this->hal->millis() - start >= this->spiConfig.timeout) { if(this->hal->millis() - start >= this->spiConfig.timeout) {
RADIOLIB_DEBUG_BASIC_PRINTLN("GPIO pre-transfer timeout, is it connected?"); RADIOLIB_DEBUG_BASIC_PRINTLN("GPIO pre-transfer timeout, is it connected?");
#if !RADIOLIB_STATIC_ONLY #if !RADIOLIB_STATIC_ONLY
@ -355,6 +358,7 @@ int16_t Module::SPItransferStream(const uint8_t* cmd, uint8_t cmdLen, bool write
#endif #endif
return(RADIOLIB_ERR_SPI_CMD_TIMEOUT); return(RADIOLIB_ERR_SPI_CMD_TIMEOUT);
} }
} }
} }
} }
@ -382,6 +386,9 @@ int16_t Module::SPItransferStream(const uint8_t* cmd, uint8_t cmdLen, bool write
RadioLibTime_t start = this->hal->millis(); RadioLibTime_t start = this->hal->millis();
while(this->hal->digitalRead(this->gpioPin)) { while(this->hal->digitalRead(this->gpioPin)) {
this->hal->yield(); this->hal->yield();
// this timeout check triggers a false positive from cppcheck
// cppcheck-suppress unsignedLessThanZero
if(this->hal->millis() - start >= this->spiConfig.timeout) { if(this->hal->millis() - start >= this->spiConfig.timeout) {
RADIOLIB_DEBUG_BASIC_PRINTLN("GPIO post-transfer timeout, is it connected?"); RADIOLIB_DEBUG_BASIC_PRINTLN("GPIO post-transfer timeout, is it connected?");
#if !RADIOLIB_STATIC_ONLY #if !RADIOLIB_STATIC_ONLY
@ -390,6 +397,7 @@ int16_t Module::SPItransferStream(const uint8_t* cmd, uint8_t cmdLen, bool write
#endif #endif
return(RADIOLIB_ERR_SPI_CMD_TIMEOUT); return(RADIOLIB_ERR_SPI_CMD_TIMEOUT);
} }
} }
} }
} }

View file

@ -298,7 +298,7 @@ class Module {
\param data Pointer to array that holds the data that will be written. \param data Pointer to array that holds the data that will be written.
\param numBytes Number of bytes that will be written. \param numBytes Number of bytes that will be written.
*/ */
void SPIwriteRegisterBurst(uint32_t reg, uint8_t* data, size_t numBytes); void SPIwriteRegisterBurst(uint32_t reg, const uint8_t* data, size_t numBytes);
/*! /*!
\brief SPI basic write method. Use of this method is reserved for special cases, SPIsetRegValue should be used instead. \brief SPI basic write method. Use of this method is reserved for special cases, SPIsetRegValue should be used instead.
@ -315,7 +315,7 @@ class Module {
\param dataIn Data that was transferred from slave to master. \param dataIn Data that was transferred from slave to master.
\param numBytes Number of bytes to transfer. \param numBytes Number of bytes to transfer.
*/ */
void SPItransfer(uint16_t cmd, uint32_t reg, uint8_t* dataOut, uint8_t* dataIn, size_t numBytes); void SPItransfer(uint16_t cmd, uint32_t reg, const uint8_t* dataOut, uint8_t* dataIn, size_t numBytes);
/*! /*!
\brief Method to check the result of last SPI stream transfer. \brief Method to check the result of last SPI stream transfer.
@ -344,7 +344,7 @@ class Module {
\param verify Whether to verify the result of the transaction after it is finished. \param verify Whether to verify the result of the transaction after it is finished.
\returns \ref status_codes \returns \ref status_codes
*/ */
int16_t SPIreadStream(uint8_t* cmd, uint8_t cmdLen, uint8_t* data, size_t numBytes, bool waitForGpio = true, bool verify = true); int16_t SPIreadStream(const uint8_t* cmd, uint8_t cmdLen, uint8_t* data, size_t numBytes, bool waitForGpio = true, bool verify = true);
/*! /*!
\brief Method to perform a write transaction with SPI stream. \brief Method to perform a write transaction with SPI stream.
@ -355,7 +355,7 @@ class Module {
\param verify Whether to verify the result of the transaction after it is finished. \param verify Whether to verify the result of the transaction after it is finished.
\returns \ref status_codes \returns \ref status_codes
*/ */
int16_t SPIwriteStream(uint16_t cmd, uint8_t* data, size_t numBytes, bool waitForGpio = true, bool verify = true); int16_t SPIwriteStream(uint16_t cmd, const uint8_t* data, size_t numBytes, bool waitForGpio = true, bool verify = true);
/*! /*!
\brief Method to perform a write transaction with SPI stream. \brief Method to perform a write transaction with SPI stream.
@ -367,7 +367,7 @@ class Module {
\param verify Whether to verify the result of the transaction after it is finished. \param verify Whether to verify the result of the transaction after it is finished.
\returns \ref status_codes \returns \ref status_codes
*/ */
int16_t SPIwriteStream(uint8_t* cmd, uint8_t cmdLen, uint8_t* data, size_t numBytes, bool waitForGpio = true, bool verify = true); int16_t SPIwriteStream(const uint8_t* cmd, uint8_t cmdLen, const uint8_t* data, size_t numBytes, bool waitForGpio = true, bool verify = true);
/*! /*!
\brief SPI single transfer method for modules with stream-type SPI interface (SX126x, SX128x etc.). \brief SPI single transfer method for modules with stream-type SPI interface (SX126x, SX128x etc.).
@ -380,7 +380,7 @@ class Module {
\param waitForGpio Whether to wait for some GPIO at the end of transfer (e.g. BUSY line on SX126x/SX128x). \param waitForGpio Whether to wait for some GPIO at the end of transfer (e.g. BUSY line on SX126x/SX128x).
\returns \ref status_codes \returns \ref status_codes
*/ */
int16_t SPItransferStream(const uint8_t* cmd, uint8_t cmdLen, bool write, uint8_t* dataOut, uint8_t* dataIn, size_t numBytes, bool waitForGpio); int16_t SPItransferStream(const uint8_t* cmd, uint8_t cmdLen, bool write, const uint8_t* dataOut, uint8_t* dataIn, size_t numBytes, bool waitForGpio);
// pin number access methods // pin number access methods
// getCs is omitted on purpose, as it can interfere when accessing the SPI in a concurrent environment // getCs is omitted on purpose, as it can interfere when accessing the SPI in a concurrent environment