16#ifndef SIMICS_SYSTEMC_IFACE_SPI_SLAVE_SIMICS_ADAPTER_H
17#define SIMICS_SYSTEMC_IFACE_SPI_SLAVE_SIMICS_ADAPTER_H
19#include <simics/devs/serial-peripheral-interface.h>
23#include <simics/base/types.h>
24#include <simics/util/dbuffer.h>
34template<
typename TBase,
typename TInterface = SpiSlaveInterface>
36 :
public SimicsAdapter<serial_peripheral_interface_slave_interface_t> {
39 :
SimicsAdapter<serial_peripheral_interface_slave_interface_t>(
40 SERIAL_PERIPHERAL_INTERFACE_SLAVE_INTERFACE, init_iface()) {
44 static void spi_request(conf_object_t *obj,
int first,
int last,
45 int bits, dbuffer_t *payload) {
49 bytes_t data = dbuffer_bytes(payload);
50 if ((bits + 7) / 8 !=
static_cast<int>(data.len)) {
52 "Mismatch of the payload buffer size (%lu) %s (%d)",
53 data.len,
"with ceil(bits / 8)", (bits + 7) / 8);
55 adapter<TBase, TInterface>(obj)->spi_request(first, last,
61 serial_peripheral_interface_flags_t flags) {
62 adapter<TBase, TInterface>(obj)->connect_master(master, port, flags);
66 adapter<TBase, TInterface>(obj)->disconnect_master(master);
70 std::vector<std::string> description(conf_object_t *obj,
72 return descriptionBase<TBase, TInterface>(obj, type);
74 serial_peripheral_interface_slave_interface_t init_iface() {
75 serial_peripheral_interface_slave_interface_t iface = {};
Base class for mapping Simics interface to a C++ interface.
Definition: simics_adapter.h:47
Adapter for Simics serial_peripheral_interface_slave interface.
Definition: spi_slave_simics_adapter.h:36
static void spi_request(conf_object_t *obj, int first, int last, int bits, dbuffer_t *payload)
Definition: spi_slave_simics_adapter.h:44
static void connect_master(conf_object_t *obj, conf_object_t *master, const char *port, serial_peripheral_interface_flags_t flags)
Definition: spi_slave_simics_adapter.h:59
static void disconnect_master(conf_object_t *obj, conf_object_t *master)
Definition: spi_slave_simics_adapter.h:65
SpiSlaveSimicsAdapter()
Definition: spi_slave_simics_adapter.h:38
DescriptionType
Definition: description_interface.h:25