// Copyright lowRISC contributors.
// Licensed under the Apache License, Version 2.0, see LICENSE for details.
// SPDX-License-Identifier: Apache-2.0

#ifndef OPENTITAN_SW_HOST_SPIFLASH_SPI_INTERFACE_H_
#define OPENTITAN_SW_HOST_SPIFLASH_SPI_INTERFACE_H_

#include <cstdint>
#include <cstring>

namespace opentitan {
namespace spiflash {

// This class defines the SPI interface used to communicate with an OpenTitan
// device.
class SpiInterface {
 public:
  SpiInterface() = default;
  virtual ~SpiInterface() = default;

  // Not copy or movable
  SpiInterface(const SpiInterface &) = delete;
  SpiInterface &operator=(const SpiInterface &) = delete;

  // Initialize SPI interface. Returns true on success.
  virtual bool Init() = 0;

  // Transmit bytes from `tx` buffer. The number of bytes transferred is defined
  // by `size`.
  virtual bool TransmitFrame(const uint8_t *tx, size_t size) = 0;

  // Wait until the hash from the previously sent is able to be read. The
  // previous frame to check the hash for should be provided in `tx` and the
  // frame's length as `size`.
  virtual bool CheckHash(const uint8_t *tx, size_t size) = 0;
};

}  // namespace spiflash
}  // namespace opentitan

#endif  // OPENTITAN_SW_HOST_SPIFLASH_SPI_INTERFACE_H_
