use span in uart interface

This commit is contained in:
Amar Mahmutbegovic
2024-10-27 01:24:37 +02:00
parent d497339a54
commit 4400c3532f
22 changed files with 41 additions and 58 deletions

View File

@@ -51,8 +51,6 @@ int main()
// RCC->CR = 0xDEADBEEF;
rcc::write(0xDEADBEEF);
auto val = rcc::read();
printf("val = %ld\r\n", val);
print_reg(&(RCC->CR));

View File

@@ -4,6 +4,8 @@
#include <stdio.h>
#include <sys/stat.h>
#include <span>
namespace
{
hal::uart *uart_stdio;
@@ -26,7 +28,7 @@ extern "C" int _write(int fd, char * ptr, int len)
{
if(fd == STDOUT_FILENO || fd == STDERR_FILENO)
{
uart_stdio->write_array(ptr, len);
uart_stdio->write(std::span<const char>(ptr, len));
}
return len;

View File

@@ -10,11 +10,6 @@ class uart
{
public:
virtual void init(std::uint32_t baudrate) = 0;
virtual void write_array(const char * ptr, std::size_t len) = 0;
virtual void write(std::span<const char> data)
{
write_array(data.data(), data.size());
}
virtual void write(std::span<const char> data) = 0;
};
}; // namespace hal

View File

@@ -18,7 +18,7 @@ class uart_stm32 : public uart
void init(std::uint32_t baudrate = c_baudrate_default) override;
void write_array(const char * ptr, std::size_t len) override;
void write(std::span<const char> data) override;
private:
UART_HandleTypeDef huart_;

View File

@@ -22,10 +22,10 @@ void hal::uart_stm32::init(std::uint32_t baudrate)
HAL_UART_Init(&huart_);
}
void hal::uart_stm32::write_array(const char * ptr, std::size_t len)
void hal::uart_stm32::write(std::span<const char> data)
{
// we must cast away costness due to ST HAL's API
char * data_ptr = const_cast<char *>(ptr);
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), len,
char * data_ptr = const_cast<char *>(data.data());
HAL_UART_Transmit(&huart_, reinterpret_cast<uint8_t *>(data_ptr), data.size(),
HAL_MAX_DELAY);
}