FpgaManager
Software API Documentation
FpgaManager_Interfaces.h
1 
2 #pragma once
3 
4 // ================================================================================
5 // PUBLIC INCLUDES
6 // ================================================================================
7 
8 #include "FpgaManager_Types.h"
9 #include "FpgaManager_Config.h"
10 
11 #include <cstdint>
12 #include <functional>
13 #include <memory>
14 #include <array>
15 
20 
21 // ================================================================================
22 // NAMESPACE
23 // ================================================================================
24 
25 namespace enclustra {
26 namespace fpgamanager {
27 
28 // ================================================================================
29 // TYPES
30 // ================================================================================
31 
35 enum class StreamType
36 {
38  ByteStream,
40  FrameBased,
41 };
42 
46 enum class StreamDirection
47 {
51  Downstream,
53  Upstream,
54 };
55 
56 // ================================================================================
57 // INTERFACES
58 // ================================================================================
59 
63 struct ISystem
64 {
69 
73  virtual ~ISystem() = default;
74 
79  virtual FpgaManagerVersion_t GetSwVersion() = 0;
80 
89  virtual std::string GetErrorTrace() = 0;
90 
96  virtual std::string GetErrorMessage(int error_code) = 0;
97 };
98 
102 struct IMmAccess
103 {
107  virtual ~IMmAccess() = default;
108 
114  virtual uint32_t ReadRegister(uint32_t address) = 0;
115 
121  virtual void WriteRegister(uint32_t address, uint32_t value) = 0;
122 
129  virtual void ReadContiguous(uint32_t address, uint8_t* buffer_p, std::size_t bufSize) = 0;
130 
137  template<std::size_t N>
138  void ReadContiguous(uint32_t address, uint8_t(&buffer)[N])
139  {
140  return ReadContiguous(address, buffer, N);
141  }
142 
149  template<std::size_t N>
150  void ReadContiguous(uint32_t address, std::array<uint8_t, N>& array)
151  {
152  return ReadContiguous(address, array.data(), N);
153  }
154 
161  virtual void WriteContiguous(uint32_t address, const uint8_t* buffer_p, std::size_t bufSize) = 0;
162 
169  template<std::size_t N>
170  void WriteContiguous(uint32_t address, const uint8_t(&buffer)[N])
171  {
172  return WriteContiguous(address, buffer, N);
173  }
174 
181  template<std::size_t N>
182  void WriteContiguous(uint32_t address, const std::array<uint8_t, N>& array)
183  {
184  return WriteContiguous(address, array.data(), N);
185  }
186 
193  virtual void ReadMailbox(uint32_t address, uint8_t* buffer_p, std::size_t bufSize) = 0;
194 
201  template<std::size_t N>
202  void ReadMailbox(uint32_t address, uint8_t(&buffer)[N])
203  {
204  return ReadMailbox(address, buffer, N);
205  }
206 
213  template<std::size_t N>
214  void ReadMailbox(uint32_t address, std::array<uint8_t, N>& array)
215  {
216  return ReadMailbox(address, array.data(), N);
217  }
218 
225  virtual void WriteMailbox(uint32_t address, const uint8_t* buffer_p, std::size_t bufSize) = 0;
226 
233  template<std::size_t N>
234  void WriteMailbox(uint32_t address, const uint8_t(&buffer)[N])
235  {
236  return WriteMailbox(address, buffer, N);
237  }
238 
245  template<std::size_t N>
246  void WriteMailbox(uint32_t address, const std::array<uint8_t, N>& array)
247  {
248  return WriteMailbox(address, array.data(), N);
249  }
250 
257  virtual void ReadMailbox(uint32_t address, uint32_t* buffer_p, std::size_t count) = 0;
258 
265  template<std::size_t N>
266  void ReadMailbox(uint32_t address, uint32_t(&buffer)[N])
267  {
268  return ReadMailbox(address, buffer, N);
269  }
270 
277  template<std::size_t N>
278  void ReadMailbox(uint32_t address, std::array<uint32_t, N>& array)
279  {
280  return ReadMailbox(address, array.data(), N);
281  }
282 
289  virtual void WriteMailbox(uint32_t address, const uint32_t* buffer_p, std::size_t count) = 0;
290 
297  template<std::size_t N>
298  void WriteMailbox(uint32_t address, const uint32_t(&buffer)[N])
299  {
300  return WriteMailbox(address, buffer, N);
301  }
302 
309  template<std::size_t N>
310  void WriteMailbox(uint32_t address, const std::array<uint32_t, N>& array)
311  {
312  return WriteMailbox(address, array.data(), N);
313  }
314 
315 };
316 
320 struct IStream
321 {
325  virtual ~IStream() = default;
326 
330  enum class TransferResult
331  {
333  Success,
335  Failed
336  };
337 
342  {
344  uint8_t* buffer_p;
346  std::size_t requested;
348  std::size_t transferred;
352  uint16_t frame_number;
353  };
354 
358  typedef std::function<void(const TransferDetails&)> CompletionCallback_t;
359 
366  virtual std::size_t Read(uint8_t* buffer_p, std::size_t bufSize) = 0;
367 
374  template<std::size_t N>
375  std::size_t Read(uint8_t(&buffer)[N])
376  {
377  return Read(buffer, N);
378  }
379 
386  template<std::size_t N>
387  std::size_t Read(std::array<uint8_t, N>& array)
388  {
389  return Read(array.data(), N);
390  }
391 
398  virtual std::size_t Write(const uint8_t* buffer_p, std::size_t bufSize) = 0;
399 
406  template<std::size_t N>
407  std::size_t Write(const uint8_t(&buffer)[N])
408  {
409  return Write(buffer, N);
410  }
411 
418  template<std::size_t N>
419  std::size_t Write(const std::array<uint8_t, N>& array)
420  {
421  return Write(array.data(), N);
422  }
423 
430  virtual void ReadAsync(uint8_t* buffer_p, std::size_t bufSize, CompletionCallback_t cb) = 0;
431 
438  virtual void WriteAsync(const uint8_t* buffer_p, std::size_t bufSize, CompletionCallback_t cb) = 0;
439 
443  virtual void Flush() = 0;
444 };
445 
450 {
454  virtual ~IFpgaManager() = default;
455 
460  virtual const types::ApiUrl& Url() const = 0;
461 
466  virtual config::ConfigSettings Config() const = 0;
467 
472  virtual types::ApiDetails Details() const = 0;
473 
481  virtual void Configure(const config::ConfigSettings& settings) = 0;
482 
487  virtual ISystem& SystemApi() = 0;
488 
499  virtual IMmAccess& CreateMemoryMap(unsigned stream_idx) = 0;
500 
513  virtual IStream& CreateStream(unsigned stream_idx, StreamType type, StreamDirection direction) = 0;
514 
518  virtual void Open() = 0;
519 };
520 
521 // ================================================================================
522 // TRAILER
523 // ================================================================================
524 
525 }
526 }
527 
void WriteMailbox(uint32_t address, const uint32_t(&buffer)[N])
Writes multiple words to a single address location
Definition: FpgaManager_Interfaces.h:298
virtual std::size_t Read(uint8_t *buffer_p, std::size_t bufSize)=0
Read data from stream into buffer
TransferResult result
Transfer result
Definition: FpgaManager_Interfaces.h:350
virtual IMmAccess & CreateMemoryMap(unsigned stream_idx)=0
Creates an interface for memory mapped access
virtual uint32_t ReadRegister(uint32_t address)=0
Reads from a single register
Interface definition of the FPGA Manager streaming interface
Definition: FpgaManager_Interfaces.h:320
void ReadContiguous(uint32_t address, uint8_t(&buffer)[N])
Reads consecutive bytes from mapped memory/registers
Definition: FpgaManager_Interfaces.h:138
virtual void ReadMailbox(uint32_t address, uint8_t *buffer_p, std::size_t bufSize)=0
Reads multiple words from a single address location
virtual void Flush()=0
Flushes the inbound buffer
virtual ~IMmAccess()=default
Destructor
StreamDirection
Defines the direction of a stream
Definition: Types.cs:79
void WriteMailbox(uint32_t address, const std::array< uint8_t, N > &array)
Writes multiple words to a single address location
Definition: FpgaManager_Interfaces.h:246
virtual FpgaManagerVersion_t GetSwVersion()=0
Get the FPGA Manager SW Version number
std::size_t requested
Requested transfer size in bytes
Definition: FpgaManager_Interfaces.h:346
FPGA Manager device URL
Definition: FpgaManager_Types.h:34
void WriteMailbox(uint32_t address, const std::array< uint32_t, N > &array)
Writes multiple words to a single address location
Definition: FpgaManager_Interfaces.h:310
virtual std::size_t Write(const uint8_t *buffer_p, std::size_t bufSize)=0
Write data from buffer to stream
Configuration Parameter
Definition: FpgaManager_Config.h:157
Interface definition of the FPGA Manager MmAccess interface
Definition: FpgaManager_Interfaces.h:102
std::size_t Read(uint8_t(&buffer)[N])
Read data from stream into buffer
Definition: FpgaManager_Interfaces.h:375
void ReadContiguous(uint32_t address, std::array< uint8_t, N > &array)
Reads consecutive bytes from mapped memory/registers
Definition: FpgaManager_Interfaces.h:150
uint8_t * buffer_p
Buffer that took part in the transaction
Definition: FpgaManager_Interfaces.h:344
types::Version< uint8_t, 2 > FpgaManagerVersion_t
FPGA Manager Version number type
Definition: FpgaManager_Interfaces.h:68
void WriteContiguous(uint32_t address, const uint8_t(&buffer)[N])
Writes consecutive bytes to mapped memory/registers
Definition: FpgaManager_Interfaces.h:170
virtual void Open()=0
Opens the FPGA Manager connection and creates all primed memory-maps and streams
virtual ~ISystem()=default
Destructor
std::size_t Write(const std::array< uint8_t, N > &array)
Write data from buffer to stream
Definition: FpgaManager_Interfaces.h:419
virtual void ReadAsync(uint8_t *buffer_p, std::size_t bufSize, CompletionCallback_t cb)=0
Read data from stream into buffer asynchronously (non-blocking)
void ReadMailbox(uint32_t address, uint32_t(&buffer)[N])
Reads multiple words from a single address location
Definition: FpgaManager_Interfaces.h:266
virtual const types::ApiUrl & Url() const =0
Getter for API URL
void WriteContiguous(uint32_t address, const std::array< uint8_t, N > &array)
Writes consecutive bytes to mapped memory/registers
Definition: FpgaManager_Interfaces.h:182
virtual ~IFpgaManager()=default
Destructor
void ReadMailbox(uint32_t address, std::array< uint8_t, N > &array)
Reads multiple words from a single address location
Definition: FpgaManager_Interfaces.h:214
void ReadMailbox(uint32_t address, uint8_t(&buffer)[N])
Reads multiple words from a single address location
Definition: FpgaManager_Interfaces.h:202
virtual void WriteMailbox(uint32_t address, const uint8_t *buffer_p, std::size_t bufSize)=0
Writes multiple words to a single address location
Interface definition for the FPGA Manager System API
Definition: FpgaManager_Interfaces.h:63
virtual void WriteRegister(uint32_t address, uint32_t value)=0
Writes to a single register
Stream without framing (i.e. transferring a given number of bytes)
virtual config::ConfigSettings Config() const =0
Getter for Configuration
virtual ISystem & SystemApi()=0
Getter for SystemApi interface
Definition: FpgaManager.h:28
virtual void ReadContiguous(uint32_t address, uint8_t *buffer_p, std::size_t bufSize)=0
Reads consecutive bytes from mapped memory/registers
TransferResult
Asynchronous Transfer result
Definition: FpgaManager_Interfaces.h:330
Details of the current API
Definition: FpgaManager_Types.h:257
Asynchronous Transfer details
Definition: FpgaManager_Interfaces.h:341
virtual IStream & CreateStream(unsigned stream_idx, StreamType type, StreamDirection direction)=0
Creates an interface for stream access
void WriteMailbox(uint32_t address, const uint8_t(&buffer)[N])
Writes multiple words to a single address location
Definition: FpgaManager_Interfaces.h:234
virtual void WriteContiguous(uint32_t address, const uint8_t *buffer_p, std::size_t bufSize)=0
Writes consecutive bytes to mapped memory/registers
virtual std::string GetErrorTrace()=0
Get the FPGA Manager error trace
std::size_t transferred
Actual transferred size in bytes
Definition: FpgaManager_Interfaces.h:348
uint16_t frame_number
UniScp frame number
Definition: FpgaManager_Interfaces.h:352
virtual void WriteAsync(const uint8_t *buffer_p, std::size_t bufSize, CompletionCallback_t cb)=0
Write data from buffer to stream asynchronously (non-blocking)
std::size_t Read(std::array< uint8_t, N > &array)
Read data from stream into buffer
Definition: FpgaManager_Interfaces.h:387
virtual std::string GetErrorMessage(int error_code)=0
Get the error message for a given FPGA Manager error code
virtual ~IStream()=default
Destructor
Stream with framing (i.e. transfer one frame independently of its size)
void ReadMailbox(uint32_t address, std::array< uint32_t, N > &array)
Reads multiple words from a single address location
Definition: FpgaManager_Interfaces.h:278
virtual types::ApiDetails Details() const =0
Details of the FPGA Manager libraries
std::size_t Write(const uint8_t(&buffer)[N])
Write data from buffer to stream
Definition: FpgaManager_Interfaces.h:407
virtual void Configure(const config::ConfigSettings &settings)=0
Updates the configuration with which all transport instances are configured from
StreamType
Defines the type of a stream
Definition: Types.cs:64
Interface definition of the FPGA Manager API
Definition: FpgaManager_Interfaces.h:449
std::function< void(const TransferDetails &)> CompletionCallback_t
Callback to be called if a transfer was completed
Definition: FpgaManager_Interfaces.h:358