HardFOC Core
API reference
Loading...
Searching...
No Matches
MockSpi.h
Go to the documentation of this file.
1
17#pragma once
18
19#include "base/BaseSpi.h"
20
21#include <cstdint>
22#include <deque>
23#include <functional>
24#include <vector>
25
26namespace hf::host {
27
29 std::vector<uint8_t> tx;
30 std::vector<uint8_t> rx;
31 hf_spi_err_t result;
32};
33
34class MockSpi : public BaseSpi {
35public:
37 using Responder = std::function<void(const uint8_t* tx, uint8_t* rx, uint16_t len)>;
38
39 MockSpi() noexcept = default;
40 ~MockSpi() noexcept override = default;
41
42 // ── BaseSpi ───────────────────────────────────────────────────────────
43 bool Initialize() noexcept override;
44 bool Deinitialize() noexcept override;
45 hf_spi_err_t Transfer(const hf_u8_t* tx_data, hf_u8_t* rx_data, hf_u16_t length,
46 hf_u32_t timeout_ms = 0) noexcept override;
47 const void* GetDeviceConfig() const noexcept override { return nullptr; }
48
49 // ── Scripting ─────────────────────────────────────────────────────────
50 void SetInitializeResult(bool ok) noexcept { init_result_ = ok; }
51 void QueueResponse(std::vector<uint8_t> miso);
52 void FailNext(hf_spi_err_t error, size_t count = 1) noexcept;
53 void SetResponder(Responder responder) { responder_ = std::move(responder); }
54 void SetFillByte(uint8_t fill) noexcept { fill_ = fill; }
55
56 // ── Inspection ────────────────────────────────────────────────────────
57 [[nodiscard]] const std::vector<SpiTransaction>& Transactions() const noexcept { return log_; }
58 void ClearTransactions() noexcept { log_.clear(); }
59 [[nodiscard]] int InitializeCalls() const noexcept { return init_calls_; }
60
61private:
62 bool init_result_{true};
64 uint8_t fill_{0x00};
65 std::deque<std::vector<uint8_t>> queued_;
66 hf_spi_err_t fail_error_{hf_spi_err_t::SPI_ERR_TRANSFER_FAILED};
67 size_t fail_count_{0};
69 std::vector<SpiTransaction> log_;
70};
71
72} // namespace hf::host
Definition MockSpi.h:34
bool init_result_
Definition MockSpi.h:62
void FailNext(hf_spi_err_t error, size_t count=1) noexcept
Definition MockSpi.cpp:23
void QueueResponse(std::vector< uint8_t > miso)
Definition MockSpi.cpp:21
std::vector< SpiTransaction > log_
Definition MockSpi.h:69
Responder responder_
Definition MockSpi.h:68
void SetInitializeResult(bool ok) noexcept
Definition MockSpi.h:50
MockSpi() noexcept=default
int InitializeCalls() const noexcept
Definition MockSpi.h:59
void SetFillByte(uint8_t fill) noexcept
Definition MockSpi.h:54
int init_calls_
Definition MockSpi.h:63
size_t fail_count_
Definition MockSpi.h:67
uint8_t fill_
Definition MockSpi.h:64
bool Initialize() noexcept override
Definition MockSpi.cpp:14
void ClearTransactions() noexcept
Definition MockSpi.h:58
hf_spi_err_t Transfer(const hf_u8_t *tx_data, hf_u8_t *rx_data, hf_u16_t length, hf_u32_t timeout_ms=0) noexcept override
Definition MockSpi.cpp:28
const void * GetDeviceConfig() const noexcept override
Definition MockSpi.h:47
void SetResponder(Responder responder)
Definition MockSpi.h:53
bool Deinitialize() noexcept override
Definition MockSpi.cpp:19
std::function< void(const uint8_t *tx, uint8_t *rx, uint16_t len)> Responder
Definition MockSpi.h:37
hf_spi_err_t fail_error_
Definition MockSpi.h:66
std::deque< std::vector< uint8_t > > queued_
Definition MockSpi.h:65
const std::vector< SpiTransaction > & Transactions() const noexcept
Definition MockSpi.h:57
Definition FakeClock.cpp:21
Definition MockSpi.h:28
hf_spi_err_t result
Definition MockSpi.h:31
std::vector< uint8_t > tx
MOSI bytes (zeros when the caller passed no tx buffer).
Definition MockSpi.h:29
std::vector< uint8_t > rx
MISO bytes handed back.
Definition MockSpi.h:30