HardFOC Core
API reference
Loading...
Searching...
No Matches
MockCan.h
Go to the documentation of this file.
1
15#pragma once
16
17#include "base/BaseCan.h"
18
19#include <cstdint>
20#include <deque>
21#include <vector>
22
23namespace hf::host {
24
25class MockCan : public BaseCan {
26public:
27 MockCan() noexcept = default;
28 ~MockCan() noexcept override = default;
29
30 // ── BaseCan ───────────────────────────────────────────────────────────
31 hf_can_err_t Initialize() noexcept override;
32 hf_can_err_t Deinitialize() noexcept override { return hf_can_err_t::CAN_SUCCESS; }
33 hf_can_err_t SendMessage(const hf_can_message_t& message, hf_u32_t timeout_ms = 1000) noexcept override;
34 hf_can_err_t ReceiveMessage(hf_can_message_t& message, hf_u32_t timeout_ms = 0) noexcept override;
35 hf_can_err_t SetReceiveCallback(hf_can_receive_callback_t callback) noexcept override;
36 void ClearReceiveCallback() noexcept override { callback_ = nullptr; }
37 hf_can_err_t SetAcceptanceFilter(hf_u32_t id, hf_u32_t mask, bool extended = false) noexcept override;
38 hf_can_err_t ClearAcceptanceFilter() noexcept override;
39 hf_can_err_t GetStatus(hf_can_status_t& status) noexcept override;
40 hf_can_err_t Reset() noexcept override;
41
42 // ── Scripting ─────────────────────────────────────────────────────────
43 void SetInitializeResult(hf_can_err_t result) noexcept { init_result_ = result; }
45 bool InjectRx(const hf_can_message_t& message);
46 void FailNextSend(hf_can_err_t error, size_t count = 1) noexcept;
47 void SetBusOff(bool bus_off) noexcept { bus_off_ = bus_off; }
48
50 static hf_can_message_t Frame(hf_u32_t id, std::initializer_list<uint8_t> data, bool extended = false) noexcept;
51
52 // ── Inspection ────────────────────────────────────────────────────────
53 [[nodiscard]] const std::vector<hf_can_message_t>& SentFrames() const noexcept { return sent_; }
54 void ClearSent() noexcept { sent_.clear(); }
55 [[nodiscard]] size_t PendingRx() const noexcept { return rx_.size(); }
56 [[nodiscard]] int ResetCalls() const noexcept { return reset_calls_; }
57
58private:
59 [[nodiscard]] bool Accepts(const hf_can_message_t& message) const noexcept;
60
61 hf_can_err_t init_result_{hf_can_err_t::CAN_SUCCESS};
62 hf_can_receive_callback_t callback_{nullptr};
63 std::vector<hf_can_message_t> sent_;
64 std::deque<hf_can_message_t> rx_;
65 bool filter_set_{false};
66 hf_u32_t filter_id_{0};
67 hf_u32_t filter_mask_{0};
68 bool filter_extended_{false};
69 hf_can_err_t fail_error_{hf_can_err_t::CAN_ERR_TX_FAILED};
70 size_t fail_count_{0};
71 bool bus_off_{false};
73 hf_u32_t tx_failed_{0};
74};
75
76} // namespace hf::host
Definition MockCan.h:25
std::vector< hf_can_message_t > sent_
Definition MockCan.h:63
hf_can_err_t Initialize() noexcept override
Definition MockCan.cpp:14
bool filter_set_
Definition MockCan.h:65
hf_u32_t tx_failed_
Definition MockCan.h:73
hf_can_err_t fail_error_
Definition MockCan.h:69
hf_can_err_t Reset() noexcept override
Definition MockCan.cpp:67
hf_can_err_t Deinitialize() noexcept override
Definition MockCan.h:32
const std::vector< hf_can_message_t > & SentFrames() const noexcept
Definition MockCan.h:53
hf_can_err_t init_result_
Definition MockCan.h:61
hf_can_receive_callback_t callback_
Definition MockCan.h:62
hf_can_err_t GetStatus(hf_can_status_t &status) noexcept override
Definition MockCan.cpp:60
int reset_calls_
Definition MockCan.h:72
void ClearReceiveCallback() noexcept override
Definition MockCan.h:36
hf_can_err_t SendMessage(const hf_can_message_t &message, hf_u32_t timeout_ms=1000) noexcept override
Definition MockCan.cpp:16
hf_u32_t filter_mask_
Definition MockCan.h:67
size_t fail_count_
Definition MockCan.h:70
bool filter_extended_
Definition MockCan.h:68
size_t PendingRx() const noexcept
Definition MockCan.h:55
bool bus_off_
Definition MockCan.h:71
hf_u32_t filter_id_
Definition MockCan.h:66
hf_can_err_t ClearAcceptanceFilter() noexcept override
Definition MockCan.cpp:55
hf_can_err_t SetReceiveCallback(hf_can_receive_callback_t callback) noexcept override
Definition MockCan.cpp:42
hf_can_err_t ReceiveMessage(hf_can_message_t &message, hf_u32_t timeout_ms=0) noexcept override
Definition MockCan.cpp:33
void SetInitializeResult(hf_can_err_t result) noexcept
Definition MockCan.h:43
static hf_can_message_t Frame(hf_u32_t id, std::initializer_list< uint8_t > data, bool extended=false) noexcept
Definition MockCan.cpp:101
MockCan() noexcept=default
std::deque< hf_can_message_t > rx_
Definition MockCan.h:64
void ClearSent() noexcept
Definition MockCan.h:54
bool InjectRx(const hf_can_message_t &message)
Definition MockCan.cpp:84
void FailNextSend(hf_can_err_t error, size_t count=1) noexcept
Definition MockCan.cpp:96
bool Accepts(const hf_can_message_t &message) const noexcept
Definition MockCan.cpp:74
void SetBusOff(bool bus_off) noexcept
Definition MockCan.h:47
int ResetCalls() const noexcept
Definition MockCan.h:56
hf_can_err_t SetAcceptanceFilter(hf_u32_t id, hf_u32_t mask, bool extended=false) noexcept override
Definition MockCan.cpp:47
Definition FakeClock.cpp:21