14#ifndef SIMICS_SYSTEMC_IFACE_SPI_MASTER_SIMICS_ADAPTER_H
15#define SIMICS_SYSTEMC_IFACE_SPI_MASTER_SIMICS_ADAPTER_H
17#include <simics/devs/serial-peripheral-interface.h>
21#include <simics/base/types.h>
22#include <simics/util/dbuffer.h>
32template<
typename TBase,
typename TInterface = SpiMasterInterface>
34 :
public SimicsAdapter<serial_peripheral_interface_master_interface_t> {
37 :
SimicsAdapter<serial_peripheral_interface_master_interface_t>(
38 SERIAL_PERIPHERAL_INTERFACE_MASTER_INTERFACE, init_iface()) {
42 static void spi_response(conf_object_t *obj,
int bits, dbuffer_t *payload) {
46 bytes_t data = dbuffer_bytes(payload);
47 if ((bits + 7) / 8 !=
static_cast<int>(data.len)) {
49 "Mismatch of the payload buffer size (%lu) %s (%d)",
50 data.len,
"with ceil(bits / 8)", (bits + 7) / 8);
52 adapter<TBase, TInterface>(obj)->spi_response(data.data, data.len);
56 std::vector<std::string> description(conf_object_t *obj,
58 return descriptionBase<TBase, TInterface>(obj, type);
60 serial_peripheral_interface_master_interface_t init_iface() {
61 serial_peripheral_interface_master_interface_t iface = {};
Base class for mapping Simics interface to a C++ interface.
Definition: simics_adapter.h:45
Adapter for Simics serial_peripheral_interface_master interface.
Definition: spi_master_simics_adapter.h:34
SpiMasterSimicsAdapter()
Definition: spi_master_simics_adapter.h:36
static void spi_response(conf_object_t *obj, int bits, dbuffer_t *payload)
Definition: spi_master_simics_adapter.h:42
DescriptionType
Definition: description_interface.h:23