HardFOC Core
API reference
Loading...
Searching...
No Matches
MockGpio.h
Go to the documentation of this file.
1
16#pragma once
17
18#include "base/BaseGpio.h"
19
20#include <cstdint>
21#include <vector>
22
23namespace hf::host {
24
25class MockGpio : public BaseGpio {
26public:
27 explicit MockGpio(hf_pin_num_t pin = 0,
28 hf_gpio_direction_t direction = hf_gpio_direction_t::HF_GPIO_DIRECTION_INPUT,
29 hf_gpio_active_state_t active_state = hf_gpio_active_state_t::HF_GPIO_ACTIVE_HIGH) noexcept;
30 ~MockGpio() noexcept override = default;
31
32 // ── BaseGpio ──────────────────────────────────────────────────────────
33 bool Initialize() noexcept override;
34 [[nodiscard]] bool IsPinAvailable() const noexcept override { return true; }
35 [[nodiscard]] hf_u8_t GetMaxPins() const noexcept override { return 64; }
36 [[nodiscard]] const char* GetDescription() const noexcept override { return "MockGpio"; }
37 [[nodiscard]] hf_gpio_err_t SupportsInterrupts() const noexcept override {
38 return hf_gpio_err_t::GPIO_SUCCESS;
39 }
40 hf_gpio_err_t ConfigureInterrupt(hf_gpio_interrupt_trigger_t trigger,
41 InterruptCallback callback = nullptr,
42 void* user_data = nullptr) noexcept override;
43 hf_gpio_err_t EnableInterrupt() noexcept override;
44 hf_gpio_err_t DisableInterrupt() noexcept override;
45
46 // ── Scripting ─────────────────────────────────────────────────────────
47 void SetInputLevel(hf_gpio_level_t level) noexcept { input_level_ = level; }
48 void SetInitializeResult(bool ok) noexcept { init_result_ = ok; }
50 void FailReads(bool fail = true) noexcept { fail_reads_ = fail; }
51 void FailWrites(bool fail = true) noexcept { fail_writes_ = fail; }
53 bool FireInterrupt() noexcept;
54
55 // ── Inspection ────────────────────────────────────────────────────────
56 [[nodiscard]] hf_gpio_level_t DrivenLevel() const noexcept { return driven_level_; }
57 [[nodiscard]] const std::vector<hf_gpio_level_t>& LevelHistory() const noexcept { return history_; }
58 void ClearHistory() noexcept { history_.clear(); }
59 [[nodiscard]] hf_gpio_pull_mode_t PullMode() const noexcept { return pull_mode_hw_; }
60 [[nodiscard]] hf_gpio_interrupt_trigger_t InterruptTrigger() const noexcept { return trigger_; }
61 [[nodiscard]] bool InterruptEnabled() const noexcept { return irq_enabled_; }
62
63protected:
64 hf_gpio_err_t SetDirectionImpl(hf_gpio_direction_t direction) noexcept override;
65 hf_gpio_err_t GetDirectionImpl(hf_gpio_direction_t& direction) const noexcept override;
66 hf_gpio_err_t SetOutputModeImpl(hf_gpio_output_mode_t mode) noexcept override;
67 hf_gpio_err_t GetOutputModeImpl(hf_gpio_output_mode_t& mode) const noexcept override;
68 hf_gpio_err_t SetPullModeImpl(hf_gpio_pull_mode_t mode) noexcept override;
69 hf_gpio_pull_mode_t GetPullModeImpl() const noexcept override { return pull_mode_hw_; }
70 hf_gpio_err_t SetPinLevelImpl(hf_gpio_level_t level) noexcept override;
71 hf_gpio_err_t GetPinLevelImpl(hf_gpio_level_t& level) noexcept override;
72
73private:
74 bool init_result_{true};
75 bool fail_reads_{false};
76 bool fail_writes_{false};
77 hf_gpio_direction_t direction_hw_;
78 hf_gpio_output_mode_t output_mode_hw_{hf_gpio_output_mode_t::HF_GPIO_OUTPUT_MODE_PUSH_PULL};
79 hf_gpio_pull_mode_t pull_mode_hw_{hf_gpio_pull_mode_t::HF_GPIO_PULL_MODE_FLOATING};
80 hf_gpio_level_t driven_level_{hf_gpio_level_t::HF_GPIO_LEVEL_LOW};
81 hf_gpio_level_t input_level_{hf_gpio_level_t::HF_GPIO_LEVEL_LOW};
82 std::vector<hf_gpio_level_t> history_;
83 hf_gpio_interrupt_trigger_t trigger_{hf_gpio_interrupt_trigger_t::HF_GPIO_INTERRUPT_TRIGGER_NONE};
84 InterruptCallback callback_{nullptr};
85 void* callback_user_data_{nullptr};
86 bool irq_enabled_{false};
87};
88
89} // namespace hf::host
Definition MockGpio.h:25
hf_gpio_output_mode_t output_mode_hw_
Definition MockGpio.h:78
hf_gpio_err_t GetDirectionImpl(hf_gpio_direction_t &direction) const noexcept override
Definition MockGpio.cpp:49
~MockGpio() noexcept override=default
InterruptCallback callback_
Definition MockGpio.h:84
hf_gpio_direction_t direction_hw_
Definition MockGpio.h:77
void FailWrites(bool fail=true) noexcept
Definition MockGpio.h:51
bool fail_reads_
Definition MockGpio.h:75
bool IsPinAvailable() const noexcept override
Definition MockGpio.h:34
bool Initialize() noexcept override
Definition MockGpio.cpp:16
hf_gpio_interrupt_trigger_t InterruptTrigger() const noexcept
Definition MockGpio.h:60
hf_gpio_err_t SetPinLevelImpl(hf_gpio_level_t level) noexcept override
Definition MockGpio.cpp:69
void FailReads(bool fail=true) noexcept
Definition MockGpio.h:50
hf_gpio_pull_mode_t PullMode() const noexcept
Definition MockGpio.h:59
bool FireInterrupt() noexcept
Definition MockGpio.cpp:36
hf_gpio_err_t GetOutputModeImpl(hf_gpio_output_mode_t &mode) const noexcept override
Definition MockGpio.cpp:59
hf_gpio_err_t DisableInterrupt() noexcept override
Definition MockGpio.cpp:31
hf_gpio_level_t driven_level_
Definition MockGpio.h:80
std::vector< hf_gpio_level_t > history_
Definition MockGpio.h:82
hf_gpio_interrupt_trigger_t trigger_
Definition MockGpio.h:83
void SetInputLevel(hf_gpio_level_t level) noexcept
Definition MockGpio.h:47
void * callback_user_data_
Definition MockGpio.h:85
hf_gpio_pull_mode_t pull_mode_hw_
Definition MockGpio.h:79
hf_gpio_err_t EnableInterrupt() noexcept override
Definition MockGpio.cpp:26
const std::vector< hf_gpio_level_t > & LevelHistory() const noexcept
Definition MockGpio.h:57
hf_gpio_err_t GetPinLevelImpl(hf_gpio_level_t &level) noexcept override
Definition MockGpio.cpp:78
bool InterruptEnabled() const noexcept
Definition MockGpio.h:61
hf_gpio_err_t SupportsInterrupts() const noexcept override
Definition MockGpio.h:37
bool fail_writes_
Definition MockGpio.h:76
hf_gpio_level_t input_level_
Definition MockGpio.h:81
hf_gpio_pull_mode_t GetPullModeImpl() const noexcept override
Definition MockGpio.h:69
const char * GetDescription() const noexcept override
Definition MockGpio.h:36
hf_gpio_err_t SetOutputModeImpl(hf_gpio_output_mode_t mode) noexcept override
Definition MockGpio.cpp:54
void ClearHistory() noexcept
Definition MockGpio.h:58
hf_gpio_err_t SetDirectionImpl(hf_gpio_direction_t direction) noexcept override
Definition MockGpio.cpp:44
bool irq_enabled_
Definition MockGpio.h:86
hf_u8_t GetMaxPins() const noexcept override
Definition MockGpio.h:35
hf_gpio_err_t SetPullModeImpl(hf_gpio_pull_mode_t mode) noexcept override
Definition MockGpio.cpp:64
hf_gpio_err_t ConfigureInterrupt(hf_gpio_interrupt_trigger_t trigger, InterruptCallback callback=nullptr, void *user_data=nullptr) noexcept override
Definition MockGpio.cpp:18
void SetInitializeResult(bool ok) noexcept
Definition MockGpio.h:48
bool init_result_
Definition MockGpio.h:74
hf_gpio_level_t DrivenLevel() const noexcept
Definition MockGpio.h:56
Definition FakeClock.cpp:21