μHAL
RegisterDecoder Class Referenceabstract

#include <decoders.h>

Inheritance diagram for RegisterDecoder:
Collaboration diagram for RegisterDecoder:

Public Member Functions

void get_data (bool=false)
 
void binary_dump (FILE *) const
 
virtual void print (FILE *, bool) const
 
template<class T >
get_general_data (const char *name) const
 
template<class T >
get_channel_data (const char *name, unsigned channel_index) const
 
decoders::data_type get_generic_data (const char *, decoders::data_key::second_type=std::nullopt) const
 
void write_general (const char *name, decoders::data_type value, void *dest)
 
void write_channel (const char *name, unsigned pos, decoders::data_type value, void *dest)
 
- Public Member Functions inherited from RegisterDecoderBase
void check_devinfo_is_set () const
 
virtual void set_devinfo (const struct sdb_device_info &)
 

Public Attributes

std::optional< unsigned > channel
 
- Public Attributes inherited from RegisterDecoderBase
const device_match_fn match_devinfo_lambda
 

Protected Member Functions

 RegisterDecoder (struct pcie_bars &, const struct sdb_device_info &, std::unordered_map< std::string_view, Printer >)
 
void add_general (const char *, int32_t)
 
void add_general_double (const char *, double)
 
void add_channel (const char *, unsigned, int32_t)
 
void add_channel_double (const char *, unsigned, double)
 
RegisterField rf_get_bit (uint32_t &, uint32_t)
 
RegisterField rf_extract_value (uint32_t &, uint32_t, bool=false)
 
RegisterField rf_whole_register (uint32_t &value, bool is_signed=false)
 
RegisterField rf_fixed2float (RegisterField, unsigned)
 
void add_general (const char *name, RegisterField rf)
 
void add_channel (const char *name, unsigned pos, RegisterField rf)
 
virtual void read_monitors ()
 
virtual void decode ()=0
 
virtual void decode_monitors ()
 
- Protected Member Functions inherited from RegisterDecoderBase
void set_read_dest (auto &dest)
 
 RegisterDecoderBase (struct pcie_bars &, const struct sdb_device_info &)
 
virtual void read ()
 

Protected Attributes

std::optional< unsigned > number_of_channels
 
std::unordered_map< std::string_view, Printerprinters
 
- Protected Attributes inherited from RegisterDecoderBase
size_t read_size
 
void * read_dest
 
struct pcie_barsbars
 
struct sdb_device_info devinfo
 
size_t addr
 

Private Member Functions

bool is_boolean_value (const char *) const
 
int32_t try_boolean_value (const char *, int32_t) const
 
template<class T >
void add_data_internal (const char *, decoders::data_key::second_type, T)
 
void rf_add_data_internal (const char *, decoders::data_key::second_type, RegisterField)
 
size_t register2offset (uint32_t *)
 
uint32_t * offset2register (size_t, void *)
 
void write_internal (const char *, std::optional< unsigned >, decoders::data_type, void *)
 

Private Attributes

std::unique_ptr< RegisterDecoderPrivatepvt
 

Detailed Description

This class defines a common interface to the FPGA cores on an AFC board. This class fulfils two main roles:

  • exposing register fields to a library user, who can address them by name (a string) and index (a number). This is provided by the get_generic_data() method;
  • printing register fields in a common format. This is provided by the print() method.

Member Function Documentation

◆ add_channel() [1/2]

void RegisterDecoder::add_channel ( const char *  name,
unsigned  pos,
int32_t  value 
)
protected

Save an int32_t (or smaller) value to a key and index. number_of_channels must be set before this can be called

◆ add_channel() [2/2]

void RegisterDecoder::add_channel ( const char *  name,
unsigned  pos,
RegisterField  rf 
)
inlineprotected

◆ add_channel_double()

void RegisterDecoder::add_channel_double ( const char *  name,
unsigned  pos,
double  value 
)
protected

Save a double value to a key and index. number_of_channels must be set before this can be called

◆ add_general() [1/2]

void RegisterDecoder::add_general ( const char *  name,
int32_t  value 
)
protected

Save an int32_t (or smaller) value to a key

◆ add_general() [2/2]

void RegisterDecoder::add_general ( const char *  name,
RegisterField  rf 
)
inlineprotected

◆ add_general_double()

void RegisterDecoder::add_general_double ( const char *  name,
double  value 
)
protected

Save a double value to a key

◆ decode()

◆ decode_monitors()

void RegisterDecoder::decode_monitors ( )
protectedvirtual

This simply calls decode(), but can be specified by subclasses to decode only changing values

Reimplemented in fofb_shaper_filt::Core, and sys_id::Core.

◆ get_data()

void RegisterDecoder::get_data ( bool  only_monitors = false)

Read from device and decode registers. Choose between all values or only monitors

◆ read_monitors()

void RegisterDecoder::read_monitors ( )
protectedvirtual

This simply calls read(), but can be specified by subclasses to read only changing values from BAR4 into RegisterDecoderBase::read_dest

Reimplemented in fofb_processing::Core, fofb_shaper_filt::Core, and sys_id::Core.

◆ rf_extract_value()

RegisterField RegisterDecoder::rf_extract_value ( uint32_t &  reg,
uint32_t  mask,
bool  is_signed = false 
)
protected

equivalent to rf_get_bit() for extract_value()

◆ rf_fixed2float()

RegisterField RegisterDecoder::rf_fixed2float ( RegisterField  rf,
unsigned  fixed_point_pos 
)
protected

set RegisterField metadata for conversion to and from fixed point

◆ rf_get_bit()

RegisterField RegisterDecoder::rf_get_bit ( uint32_t &  reg,
uint32_t  mask 
)
protected

get_bit() implementation which saves how to decode a register field. reg must be within the memory region defined by RegisterDecoderBase::read_dest and RegisterDecoderBase::read_size

◆ rf_whole_register()

RegisterField RegisterDecoder::rf_whole_register ( uint32_t &  value,
bool  is_signed = false 
)
inlineprotected

equivalent to rf_extract_value() with mask=UINT32_MAX, useful for when values take up a whole register and a MASK macro isn't defined

Member Data Documentation

◆ number_of_channels

std::optional<unsigned> RegisterDecoder::number_of_channels
protected

A device that has multiple channels will set this to the maximum amount of channels


The documentation for this class was generated from the following files: