Fixed compiler errors, untested due to lack of hardware

This commit is contained in:
dario 2024-11-14 21:58:42 +01:00
parent 92723fe164
commit dcd613ddf0
6 changed files with 36 additions and 47 deletions

View File

@ -84,7 +84,7 @@ namespace sta
* @param value 8-bit value to repeat
* @param count Number of repetitions
*/
void fill(uint8_t value, size_t count, uint32_t timeout = STA_MAX_TIMEOUT);
bool fill(uint8_t value, size_t count, uint32_t timeout = STA_MAX_TIMEOUT);
protected:
/**

View File

@ -51,7 +51,7 @@ namespace sta
* @param buffer The buffer of data to write to the address
* @param size The number of bytes to write to the peripheral.
*/
virtual bool writeMemory(uint8_t regAddr, const uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) = 0;
virtual bool writeMemory(uint8_t regAddr, const uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT);
/**
* @brief Read incoming data to buffer.
@ -68,7 +68,7 @@ namespace sta
* @param buffer The buffer of data to write the received data to.
* @param size The number of bytes to receive from the peripheral.
*/
virtual bool readMemory(uint8_t regAddr, uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) = 0;
virtual bool readMemory(uint8_t regAddr, uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT);
/**
* @brief Send byte value repeatedly.

View File

@ -40,24 +40,6 @@ namespace sta
*/
virtual bool transfer(const uint8_t * txBuffer, uint8_t * rxBuffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) = 0;
/**
* @brief Write data to a specific memory address of the peripheral.
*
* @param regAddr The memory address.
* @param buffer The buffer of data to write to the address
* @param size The number of bytes to write to the peripheral.
*/
bool writeMemory(uint8_t regAddr, const uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) override;
/**
* @brief Read data from a specific memory address of the peripheral.
*
* @param regAddr The memory address.
* @param buffer The buffer of data to write the received data to.
* @param size The number of bytes to receive from the peripheral.
*/
bool readMemory(uint8_t regAddr, uint8_t * buffer, size_t size, uint32_t timeout = STA_MAX_TIMEOUT) override;
/**
* @brief Get %SPI interface settings.
*

View File

@ -10,13 +10,35 @@ namespace sta
STA_ASSERT(mutex != nullptr);
}
void Interface::acquire()
bool Interface::writeMemory(uint8_t regAddr, const uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
if (!transfer(regAddr, timeout))
return false;
if (!transfer(buffer, size, timeout))
return false;
return true;
}
bool Interface::readMemory(uint8_t regAddr, uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
if (!transfer(regAddr, timeout))
return false;
if (!receive(buffer, size, timeout))
return false;
return true;
}
void Interface::acquire(uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
mutex_->acquire();
acquired_ = true;
}
void Interface::release()
void Interface::release(uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
acquired_ = false;
mutex_->release();

View File

@ -10,28 +10,6 @@ namespace sta
}
bool SPI::writeMemory(uint8_t regAddr, const uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
if (!transfer(regAddr, timeout))
return false;
if (!transfer(buffer, size, timeout))
return false;
return true;
}
bool SPI::readMemory(uint8_t regAddr, uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
if (!transfer(regAddr, timeout))
return false;
if (!receive(buffer, size, timeout))
return false;
return true;
}
const SPISettings & SPI::settings()
{
return settings_;

View File

@ -77,10 +77,17 @@ namespace sta
bool STM32I2C::writeMemory(uint8_t regAddr, const uint8_t * buffer, size_t size, uint32_t timeout /* = STA_MAX_TIMEOUT */)
{
/*
* It's undecided if we want to change the parameter for this function. Since the transmission
* doesn't take a const buffer as an argument, we are using this fix by creating a temporary buffer.
*/
uint8_t * temp_buffer = new uint8_t[size];
memcpy(temp_buffer, buffer, size);
if (blocking_) {
return HAL_I2C_Mem_Write(handle_, address_, regAddr, 1, buffer, size, timeout) == HAL_OK;
return HAL_I2C_Mem_Write(handle_, address_, regAddr, 1, temp_buffer, size, timeout) == HAL_OK;
} else {
return HAL_I2C_Mem_Write_IT(handle_, address_, regAddr, 1, buffer, size) == HAL_OK;
return HAL_I2C_Mem_Write_IT(handle_, address_, regAddr, 1, temp_buffer, size) == HAL_OK;
}
}