HardFOC Core
API reference
Loading...
Searching...
No Matches
MockUart.h
Go to the documentation of this file.
1
17#pragma once
18
19#include "base/BaseUart.h"
20
21#include <cstdint>
22#include <deque>
23#include <functional>
24#include <vector>
25
26namespace hf::host {
27
28class MockUart : public BaseUart {
29public:
30 using OnWrite = std::function<void(MockUart& uart, const std::vector<uint8_t>& written)>;
31
32 explicit MockUart(hf_port_num_t port = 0) noexcept;
33 ~MockUart() noexcept override = default;
34
35 // ── BaseUart ──────────────────────────────────────────────────────────
36 bool Initialize() noexcept override { return init_result_; }
37 bool Deinitialize() noexcept override { return true; }
38 hf_uart_err_t Write(const hf_u8_t* data, hf_u16_t length, hf_u32_t timeout_ms = 0) noexcept override;
39 hf_uart_err_t Read(hf_u8_t* data, hf_u16_t length, hf_u32_t timeout_ms = 0) noexcept override;
40 hf_u16_t BytesAvailable() noexcept override;
41 hf_uart_err_t FlushTx() noexcept override;
42 hf_uart_err_t FlushRx() noexcept override;
43 int Printf(const char* format, ...) noexcept override;
44
45 // ── Scripting ─────────────────────────────────────────────────────────
46 void SetInitializeResult(bool ok) noexcept { init_result_ = ok; }
47 void InjectRx(const std::vector<uint8_t>& bytes);
48 void InjectRx(const char* text);
49 void SetOnWrite(OnWrite on_write) { on_write_ = std::move(on_write); }
50 void FailNextWrite(hf_uart_err_t error, size_t count = 1) noexcept;
51
52 // ── Inspection ────────────────────────────────────────────────────────
53 [[nodiscard]] const std::vector<uint8_t>& TxBytes() const noexcept { return tx_; }
54 [[nodiscard]] const std::vector<std::vector<uint8_t>>& TxWrites() const noexcept { return writes_; }
55 void ClearTx() noexcept;
56 [[nodiscard]] int FlushRxCalls() const noexcept { return flush_rx_calls_; }
57
58private:
59 bool init_result_{true};
60 std::vector<uint8_t> tx_;
61 std::vector<std::vector<uint8_t>> writes_;
62 std::deque<uint8_t> rx_;
64 hf_uart_err_t fail_error_{hf_uart_err_t::UART_ERR_TRANSMISSION_FAILED};
65 size_t fail_count_{0};
67};
68
69} // namespace hf::host
Definition MockUart.h:28
bool Deinitialize() noexcept override
Definition MockUart.h:37
bool Initialize() noexcept override
Definition MockUart.h:36
hf_u16_t BytesAvailable() noexcept override
Definition MockUart.cpp:49
std::vector< std::vector< uint8_t > > writes_
Definition MockUart.h:61
void SetOnWrite(OnWrite on_write)
Definition MockUart.h:49
size_t fail_count_
Definition MockUart.h:65
int Printf(const char *format,...) noexcept override
Definition MockUart.cpp:61
std::deque< uint8_t > rx_
Definition MockUart.h:62
int FlushRxCalls() const noexcept
Definition MockUart.h:56
hf_uart_err_t Read(hf_u8_t *data, hf_u16_t length, hf_u32_t timeout_ms=0) noexcept override
Definition MockUart.cpp:35
void InjectRx(const std::vector< uint8_t > &bytes)
Definition MockUart.cpp:74
const std::vector< std::vector< uint8_t > > & TxWrites() const noexcept
Definition MockUart.h:54
void ClearTx() noexcept
Definition MockUart.cpp:87
hf_uart_err_t Write(const hf_u8_t *data, hf_u16_t length, hf_u32_t timeout_ms=0) noexcept override
Definition MockUart.cpp:18
const std::vector< uint8_t > & TxBytes() const noexcept
Definition MockUart.h:53
void SetInitializeResult(bool ok) noexcept
Definition MockUart.h:46
bool init_result_
Definition MockUart.h:59
std::function< void(MockUart &uart, const std::vector< uint8_t > &written)> OnWrite
Definition MockUart.h:30
std::vector< uint8_t > tx_
Definition MockUart.h:60
hf_uart_err_t FlushRx() noexcept override
Definition MockUart.cpp:55
int flush_rx_calls_
Definition MockUart.h:66
hf_uart_err_t fail_error_
Definition MockUart.h:64
void FailNextWrite(hf_uart_err_t error, size_t count=1) noexcept
Definition MockUart.cpp:82
hf_uart_err_t FlushTx() noexcept override
Definition MockUart.cpp:53
OnWrite on_write_
Definition MockUart.h:63
Definition FakeClock.cpp:21