arm: add host uart driver tests
All host tests currently pass Some async refactors may not work well on device, will try later
This commit is contained in:
@@ -3,6 +3,8 @@
|
||||
#include <atomic>
|
||||
#include <span>
|
||||
|
||||
#include "lock.h"
|
||||
|
||||
struct RingBuffer {
|
||||
std::span<std::byte> buffer;
|
||||
|
||||
@@ -11,6 +13,8 @@ struct RingBuffer {
|
||||
std::atomic<bool> full = 0;
|
||||
|
||||
bool Store(std::span<const std::byte> data) {
|
||||
InterruptLock lock;
|
||||
|
||||
if (data.size() > FreeSpace()) {
|
||||
return false;
|
||||
}
|
||||
@@ -26,6 +30,8 @@ struct RingBuffer {
|
||||
}
|
||||
|
||||
bool Load(std::span<std::byte> out) {
|
||||
InterruptLock lock;
|
||||
|
||||
if (out.size() > AvailableData()) {
|
||||
return false;
|
||||
}
|
||||
@@ -41,6 +47,8 @@ struct RingBuffer {
|
||||
}
|
||||
|
||||
bool Push(size_t amount) {
|
||||
InterruptLock lock;
|
||||
|
||||
if (amount > FreeSpace()) {
|
||||
return false;
|
||||
}
|
||||
@@ -52,6 +60,8 @@ struct RingBuffer {
|
||||
}
|
||||
|
||||
bool Pop(size_t amount) {
|
||||
InterruptLock lock;
|
||||
|
||||
if (amount > AvailableData()) {
|
||||
return false;
|
||||
}
|
||||
@@ -62,9 +72,15 @@ struct RingBuffer {
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t FreeSpace() const { return buffer.size() - AvailableData(); }
|
||||
size_t FreeSpace() const {
|
||||
InterruptLock lock;
|
||||
|
||||
return buffer.size() - AvailableData();
|
||||
}
|
||||
|
||||
size_t AvailableData() const {
|
||||
InterruptLock lock;
|
||||
|
||||
if (read_ptr == write_ptr) {
|
||||
return full ? buffer.size() : 0;
|
||||
}
|
||||
@@ -72,10 +88,14 @@ struct RingBuffer {
|
||||
}
|
||||
|
||||
uint8_t* RawReadPointer() const {
|
||||
InterruptLock lock;
|
||||
|
||||
return reinterpret_cast<uint8_t*>(buffer.data() + read_ptr);
|
||||
}
|
||||
|
||||
size_t ContiguousAvailableData() const {
|
||||
InterruptLock lock;
|
||||
|
||||
if (read_ptr < write_ptr) {
|
||||
return AvailableData();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user