|
| MockMessageInitiator (span< MockMessageTransaction > transaction_list) |
|
Status | Finalize () const |
|
| ~MockMessageInitiator () override |
|
constexpr | Initiator () |
|
constexpr | Initiator (Feature supported_features) |
|
Status | WriteReadFor (Address device_address, ConstByteSpan tx_buffer, ByteSpan rx_buffer, chrono::SystemClock::duration timeout) |
|
Status | TransferFor (span< const Message > messages, chrono::SystemClock::duration timeout) |
|
Status | WriteReadFor (Address device_address, const void *tx_buffer, size_t tx_size_bytes, void *rx_buffer, size_t rx_size_bytes, chrono::SystemClock::duration timeout) |
|
Status | WriteFor (Address device_address, ConstByteSpan tx_buffer, chrono::SystemClock::duration timeout) |
|
Status | WriteFor (Address device_address, const void *tx_buffer, size_t tx_size_bytes, chrono::SystemClock::duration timeout) |
|
Status | ReadFor (Address device_address, ByteSpan rx_buffer, chrono::SystemClock::duration timeout) |
|
Status | ReadFor (Address device_address, void *rx_buffer, size_t rx_size_bytes, chrono::SystemClock::duration timeout) |
|
Status | ProbeDeviceFor (Address device_address, chrono::SystemClock::duration timeout) |
|
A generic mocked backend for pw::i2c::Initiator
that's specifically designed to make it easier to develop I2C device drivers. pw::i2c::MessageMockInitiator
compares actual I2C transactions against expected transactions. The expected transactions are represented as a list of pw::i2c::MockMessageTransaction
instances that are passed as arguments in the pw::i2c::MessageMockInitiator
constructor. Each consecutive call to pw::i2c::MockMessageInitiator
iterates to the next expected transaction. pw::i2c::MockMessageInitiator::Finalize()
indicates whether the actual transactions matched the expected transactions.
pw::i2c::MessageMockInitiator
is intended to be used within GoogleTest tests. See
embed:rst:inline :ref:`module-pw_unit_test`
.
#include <chrono>
#include "pw_bytes/array.h"
#include "pw_i2c/address.h"
#include "pw_i2c/initiator_message_mock.h"
#include "pw_i2c/message.h"
#include "pw_result/result.h"
#include "pw_unit_test/framework.h"
using namespace std::chrono_literals;
namespace {
TEST(I2CTestSuite, I2CReadRegisterTestCase) {
constexpr Address kTestDeviceAddress = Address::SevenBit<0x3F>();
constexpr auto kExpectedWrite1 = bytes::Array<0x42>();
constexpr auto kExpectedRead1 = bytes::Array<1, 2>();
auto expected_transactions = MakeExpectedTransactionArray({
MakeExpectedMessageArray({
MockWriteMessage(
OkStatus(), kTestDeviceAddress,
kExpectedWrite1),
MockReadMessage(
OkStatus(), kTestDeviceAddress,
kExpectedRead1),
}),
kI2cTransactionTimeout),
});
MockMessageInitiator initiator(expected_transactions);
std::array<std::byte, kExpectedRead1.size()> read1;
EXPECT_EQ(initiator.WriteReadFor(kTestDeviceAddress, kExpectedWrite1,
read1, kI2cTransactionTimeout),
OkStatus());
EXPECT_EQ(initiator.Finalize(),
OkStatus());
}
}
Definition: initiator_message_mock.h:106
bool Equal(const C1 &c1, const C2 &c2)
Definition: algorithm.h:236
constexpr Status OkStatus()
Definition: status.h:234