20#include "pw_bytes/span.h"
21#include "pw_containers/to_array.h"
22#include "pw_i2c/initiator.h"
45 Status expected_return_value,
49 std::optional<chrono::SystemClock::duration>
timeout = std::nullopt)
50 : return_value_(expected_return_value),
53 address_(device_address),
58 Status expected_return_value,
60 std::optional<chrono::SystemClock::duration>
timeout = std::nullopt)
74 std::optional<chrono::SystemClock::duration>
timeout()
const {
85 const Status return_value_;
86 const ConstByteSpan read_buffer_;
87 const ConstByteSpan write_buffer_;
88 static constexpr std::array<std::byte, 1> ignored_buffer_ = {};
89 const Address address_;
90 const std::optional<chrono::SystemClock::duration> timeout_;
95constexpr Transaction ReadTransaction(
96 Status expected_return_value,
97 Address device_address,
98 ConstByteSpan read_buffer,
99 std::optional<chrono::SystemClock::duration> timeout = std::nullopt) {
100 return Transaction(expected_return_value,
109constexpr Transaction WriteTransaction(
110 Status expected_return_value,
111 Address device_address,
112 ConstByteSpan write_buffer,
113 std::optional<chrono::SystemClock::duration> timeout = std::nullopt) {
114 return Transaction(expected_return_value,
123constexpr Transaction ProbeTransaction(
124 Status expected_return_value,
125 Address device_address,
126 std::optional<chrono::SystemClock::duration> timeout = std::nullopt) {
127 return Transaction(expected_return_value, device_address, timeout);
174 explicit constexpr MockInitiator(span<Transaction> transaction_list)
175 :
Initiator(Initiator::Feature::kStandard),
176 expected_transactions_(transaction_list),
177 expected_transaction_index_(0) {}
192 if (expected_transaction_index_ != expected_transactions_.size()) {
193 return Status::OutOfRange();
217 ConstByteSpan tx_buffer,
221 span<Transaction> expected_transactions_;
222 size_t expected_transaction_index_;
226template <
size_t kSize>
227constexpr std::array<Transaction, kSize> MakeExpectedTransactionArray(
229 return containers::to_array(transactions);
The common, base driver interface for initiating thread-safe transactions with devices on an I2C bus....
Definition: initiator.h:49
constexpr Initiator()
Definition: initiator.h:68
Definition: initiator_mock.h:172
Status Finalize() const
Definition: initiator_mock.h:191
~MockInitiator() override
Definition: initiator_mock.h:40
constexpr Transaction(Status expected_return_value, Address device_address, std::optional< chrono::SystemClock::duration > timeout=std::nullopt)
Alternative constructor for creating probe transactions.
Definition: initiator_mock.h:57
Address address() const
Gets the I2C address that the I2C transaction is targeting.
Definition: initiator_mock.h:79
ConstByteSpan write_buffer() const
Gets the buffer that the I2C device should write to.
Definition: initiator_mock.h:71
std::optional< chrono::SystemClock::duration > timeout() const
Gets the minimum duration to wait for a blocking I2C transaction.
Definition: initiator_mock.h:74
ConstByteSpan read_buffer() const
Gets the buffer that is virtually read.
Definition: initiator_mock.h:68
Status return_value() const
Gets the expected return value for the transaction.
Definition: initiator_mock.h:82
constexpr Transaction(Status expected_return_value, Address device_address, ConstByteSpan write_buffer, ConstByteSpan read_buffer, std::optional< chrono::SystemClock::duration > timeout=std::nullopt)
Definition: initiator_mock.h:44
std::chrono::duration< rep, period > duration
Alias for durations representable with this clock.
Definition: system_clock.h:86