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

#ifndef _F_SPIFLASH_FTDI_SPI_INTERFACE_H__
#define _F_SPIFLASH_FTDI_SPI_INTERFACE_H__

#include <memory>
#include <string>

#include "sw/host/spiflash/spi_interface.h"

namespace opentitan {
namespace spiflash {

// Forward declaration used to hide MPSSE context.
struct MpsseHandle;

// Implements SPI interface for an OpenTitan design connected via FTDI.
// FTDI provides an USB interface called Multi-Protocol Synchronous Serial
// Engine (MPSSE) which gives access to SPI, I2C and JTAG. This class uses
// MPSSE to communicate with the SPI device IP in OpenTitan.
// This class is not thread safe.
class FtdiSpiInterface : public SpiInterface {
 public:
  FtdiSpiInterface();
  ~FtdiSpiInterface() override;

  // Initialize interface.
  bool Init() final;

  // Transmit bytes from |tx| buffer and read data back onto |rx| buffer. The
  // number of bytes are defined by |size|.
  bool TransmitFrame(const uint8_t *tx, uint8_t *rx, size_t size) final;

 private:
  std::unique_ptr<MpsseHandle> spi_;
};

}  // namespace spiflash
}  // namespace opentitan

#endif  // _F_SPIFLASH_FTDI_SPI_INTERFACE_H__
