21#include "pw_bytes/span.h"
22#include "pw_containers/to_array.h"
23#include "pw_i2c/initiator.h"
45 : return_value_(expected_return_value),
47 direction_(direction),
63 Direction direction()
const {
return direction_; }
69 const Status return_value_;
71 const Direction direction_;
72 const ConstByteSpan data_buffer_;
73 static constexpr std::array<std::byte, 1> ignored_buffer_ = {};
76constexpr MockMessage MockReadMessage(Status expected_return_value,
78 ConstByteSpan data_buffer) {
80 expected_return_value, address, MockMessage::kMockRead, data_buffer);
83constexpr MockMessage MockWriteMessage(Status expected_return_value,
85 ConstByteSpan data_buffer) {
87 expected_return_value, address, MockMessage::kMockWrite, data_buffer);
90constexpr MockMessage MockProbeMessage(Status expected_return_value,
92 return MockMessage(expected_return_value, address);
96template <
size_t kSize>
97constexpr std::array<MockMessage, kSize> MakeExpectedMessageArray(
98 const MockMessage (&messages)[kSize]) {
99 return containers::to_array(messages);
109 Status expected_return_value,
110 span<const MockMessage> test_messages,
111 std::optional<chrono::SystemClock::duration>
timeout = std::nullopt)
112 : return_value_(expected_return_value),
113 test_messages_(test_messages.begin(), test_messages.end()),
116 std::optional<chrono::SystemClock::duration>
timeout()
const {
120 const std::vector<MockMessage>& test_messages()
const {
121 return test_messages_;
124 Status return_value()
const {
return return_value_; }
127 const Status return_value_;
128 const std::vector<MockMessage> test_messages_;
129 const std::optional<chrono::SystemClock::duration> timeout_;
189 :
Initiator(Initiator::Feature::kStandard),
190 expected_transactions_(transaction_list),
191 expected_transaction_index_(0) {}
206 if (expected_transaction_index_ != expected_transactions_.size()) {
207 return Status::OutOfRange();
236 Status DoTransferFor(span<const Message> messages,
239 span<MockMessageTransaction> expected_transactions_;
240 size_t expected_transaction_index_;
245template <
size_t kSize>
246constexpr std::array<MockMessageTransaction, kSize>
247MakeExpectedTransactionArray(
249 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_message_mock.h:35
Address address() const
Gets the I2C address that the I2C transaction is targeting.
Definition: initiator_message_mock.h:61
constexpr MockMessage(Status expected_return_value, Address device_address)
Alternative constructor for creating probe transactions.
Definition: initiator_message_mock.h:51
Status return_value() const
Gets the expected return value for the transaction.
Definition: initiator_message_mock.h:58
ConstByteSpan data_buffer() const
Gets the buffer that is virtually read.
Definition: initiator_message_mock.h:66
Definition: initiator_message_mock.h:186
~MockMessageInitiator() override
Status Finalize() const
Definition: initiator_message_mock.h:205
Definition: initiator_message_mock.h:106
std::optional< chrono::SystemClock::duration > timeout() const
Gets the minimum duration to wait for a blocking I2C transaction.
Definition: initiator_message_mock.h:116
std::chrono::duration< rep, period > duration
Alias for durations representable with this clock.
Definition: system_clock.h:86