Critical Link MityCam SoC Firmware  1.0
Critical Link MityCam SoC Firmware
SocCamera::tcRegisterFile Class Reference

#include <RegisterFile.h>

Inheritance diagram for SocCamera::tcRegisterFile:
Collaboration diagram for SocCamera::tcRegisterFile:

Classes

struct  tsRegDefinition
 
union  tuDataType
 

Public Types

enum  teEndianness { eeLittleEndian, eeBigEndian }
 

Public Member Functions

void initialize (tcSensorBoard *apSensor, tcPayloadSetter *apIface)
 
int get_array (uint32_t address, uint8_t *buff, uint16_t length) const
 Retrieve RAW memory from register space. More...
 
int get_buffer (uint32_t address, const char *&ptr, uint32_t &length) const
 
void update_buffer (uint32_t address, const uint8_t *buff, uint32_t length)
 
GEV_STATUS set_buffer (uint32_t address, const uint8_t *buff, uint32_t length)
 
uint32_t get_word (uint32_t address)
 
void update_word (uint32_t address, uint32_t data)
 Lean and mean write to shadow. Does not ripple through observers. More...
 
GEV_STATUS set_word (uint32_t address, uint32_t data)
 
uint64_t get_long (uint32_t address)
 
void update_long (uint32_t address, uint64_t data)
 Lean and mean write to shadow. Does not ripple through observers. More...
 
GEV_STATUS set_long (uint32_t address, uint64_t data)
 
float get_float (uint32_t address)
 
void update_float (uint32_t address, float data)
 Lean and mean write to shadow. Does not ripple through observers. More...
 
GEV_STATUS set_float (uint32_t address, float data)
 
std::string get_string (uint32_t address)
 
void update_string (uint32_t address, const char *data, int len=-1)
 Lean and mean write to shadow. Does not ripple through observers. More...
 
GEV_STATUS set_string (uint32_t address, const char *data)
 
void sync_manifest_table (const std::string &arXmlFile, const uint64_t fpga_version)
 
void sync_user_name (uint64_t anAddress)
 
void check_and_update_payload_size (uint64_t address)
 
tsRegDefinitionreg_def (const char *name) const
 
tsRegDefinitionreg_def (uint64_t address, bool sloppy=false) const
 
tsRegDefinitionnext_reg (uint64_t address) const
 
uint32_t reg_addr (const char *name)
 
int reg_size (uint32_t address)
 
std::string reg_name (uint32_t address)
 
bool reg_valid (uint32_t address)
 Is the specified register address valid. More...
 
bool reg_rd (uint32_t address)
 Is the specified register address readable. More...
 
bool reg_wr (uint32_t address)
 Is the specified register address writeable. More...
 
bool reg_a_valid (uint32_t address, int16_t size)
 Is the specified register address space valid. More...
 
bool reg_a_rd (uint32_t address, int16_t size)
 Is the specified register address space readable. More...
 
bool reg_a_wr (uint32_t address, int16_t size)
 Is the specified register address space writeable. More...
 
void show_register (const tsRegDefinition *pregdef)
 
void show_all_registers ()
 
void update_payload_size ()
 This function is called whenever a register has been changed that will effect the payload size. More...
 
void latch_timestamp ()
 
void reset_timestamp ()
 
void sharedInit ()
 
const struct timespec * get_resettime ()
 
int addRegister (tsRegDefinition *pdef)
 
- Public Member Functions inherited from tcObservable
 tcObservable ()
 
void registerObserver (tcObserver *apObs)
 
void unregisterObserver (tcObserver *apObs)
 
void notifyChange (tsUpdate asMessage)
 
- Public Member Functions inherited from tcRegisterFileObservable
 tcRegisterFileObservable ()
 
virtual ~tcRegisterFileObservable ()
 
void registerReadObserver (int64_t anAddr, tcRegisterFileObserver *apObserver)
 registerReadObserver - Register an observer for pre-read notifications More...
 
void unregisterReadObserver (tcRegisterFileObserver *apObserver)
 unregisterReadObserver Unregister the observer from pre-read notificatons More...
 
void unregisterReadObserver (int64_t anAddr, tcRegisterFileObserver *apObserver)
 
void notifyRead (int64_t anAddr, int64_t anOffset, int64_t anLen) const
 notifyRead More...
 

Static Public Member Functions

static bool instanceMade ()
 
static tcRegisterFilegetInstance (tsRegDefinition *apRegs=NULL, bool abBigEndian=true)
 
template<typename T >
static T swap_endian (T u)
 
static std::string format_memdump (uint8_t *pbuff, uint16_t length)
 This function is for debugging. It formats a multiline string. More...
 

Static Public Attributes

static const uint32_t cnNOADDRESS = 0xFFFFFFFF
 
static const uint32_t cnMAX_IMAGE_WIDTH = 3360
 These may be dependant on the sensor type, but for now just want a handy place to put them. More...
 
static const uint32_t cnMAX_IMAGE_HEIGHT = 2496
 
static const uint32_t cnMAX_PAYLOAD_SIZE = cnMAX_IMAGE_WIDTH * cnMAX_IMAGE_HEIGHT * 2
 

Protected Member Functions

 tcRegisterFile (tsRegDefinition *apRegs, bool abBigEndian)
 
template<typename ValueType , teRegType RegEnum>
ValueType get_value (uint64_t address)
 
template<typename ValueType , teRegType RegEnum>
void update_value (uint64_t address, ValueType data)
 
template<typename ValueType , teRegType RegEnum, typename UpdateMsg >
GEV_STATUS set_value (uint32_t address, ValueType data)
 

Additional Inherited Members

- Protected Attributes inherited from tcRegisterFileObservable
std::unordered_map< int64_t, std::vector< tcRegisterFileObserver * > > readObservers
 

Member Enumeration Documentation

◆ teEndianness

Enumerator
eeLittleEndian 
eeBigEndian 

Constructor & Destructor Documentation

◆ tcRegisterFile()

tcRegisterFile::tcRegisterFile ( tsRegDefinition apRegs,
bool  abBigEndian 
)
protected

Constructor. This is called, currently, by GetInstance().

Note
the current design of the system requires the tcRegisterFile to be defined prior to the tcSensorBoard and the tcCommandInterface's like GigE and U3V to be constructed. Both of these classes have dependencies on the tcRegisterFile to be present and constructed. However, because the original design was rigid and required all of the registers to be defined once, the apRegs Array used had to have some knowledge of the Command Interface being whipped up, because GigE and U3V have transport specific registers. Right now, when the control application see's which interface is about to be built, it picks the correct statically defined register set. So the tcControlApplication is currently calling this constructor, and all other references follow get the defined set. This will only get worse when we pull in CoaXpress.
Todo:

Use the addRegister() scheme and push the transport specific stuff into appropriate interface handlers. Remove calling this in tcControlApp and have getInstance() use the GenICam base register set (common for all). This will also allow sensors to define custom registers on the fly without having to reserve space for them in the main array (which is wasteful for other sensors).

push the abBigEndian stuff into the regsiter definition. Register endianness is not necessary the same for all registers. This is really inefficient for the GigE interface.

Parameters
apRegsarray of registers to use. These must not be free'd. List must be terminated.
abBigEndiantrue if memory representation of all the registers should be big-endian.
Note
Call addRegister()? A little less efficient, but would catch register overlap issues.

Member Function Documentation

◆ addRegister()

int tcRegisterFile::addRegister ( tsRegDefinition pdef)

This function will add one new register definition to an existing map.

Note
pdef must not be free'd, this pointer is kept/managed by the underlying manager. Ideally, this would shift to smart pointers, but for now this is technically a memory leak if it is not defined as a static array somewhere.
Parameters
pdefpointer to the new register definition to add.
Returns
non-zero on error. Error condition will likely be registerspace conflict.

◆ check_and_update_payload_size()

void tcRegisterFile::check_and_update_payload_size ( uint64_t  address)

This function is called whenever a register has been changed. If the selected register impacts the output image payload size, then we call the update_payload_size method to handl the change.

◆ format_memdump()

std::string tcRegisterFile::format_memdump ( uint8_t *  pbuff,
uint16_t  length 
)
static

This function is for debugging. It formats a multiline string.

◆ get_array()

int tcRegisterFile::get_array ( uint32_t  address,
uint8_t *  buff,
uint16_t  length 
) const

Retrieve RAW memory from register space.

This is the main access point for external GenICam interfaces (e.g., GigE or U3V or CXP) reading register values from the register store. Data is returned as stored in memory - no data marshalling is performed, if it is stored as big endian, that's how it is retrieved, etc.)

Parameters
addressthe address of the register space to start reading
buffpointer to where the memory should be copied into
lengththe number of bytes to retrieve
Returns
zero on success, -1 on failure

◆ get_buffer()

int tcRegisterFile::get_buffer ( uint32_t  address,
const char *&  ptr,
uint32_t &  length 
) const

This function retrieves a raw pointer to the requested buffer address.

Note
The register must be a eeRegNoType (raw register buffer).
Parameters
[in]addressThe address of the register. Can be an offset into the buffer
[out]ptrThe pointer of the raw buffer
[out]lengththe number of valid buffer bytes from the pointer position
Returns
non-zero if there was an error retrieving the buffer pointer

◆ get_float()

float tcRegisterFile::get_float ( uint32_t  address)

This function retrieves the specified floating point register.

Note
The register must be a floating point register (i.e. type eeRegFloat).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
Returns
The value of the register or 0 if the register doesn't exist.

◆ get_long()

uint64_t SocCamera::tcRegisterFile::get_long ( uint32_t  address)

◆ get_resettime()

const struct timespec* SocCamera::tcRegisterFile::get_resettime ( )
inline

◆ get_string()

std::string tcRegisterFile::get_string ( uint32_t  address)

This function retrieves the specified string register.

Note
The register must be a string register (i.e. type eeRegString).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
Returns
The value of the register or "" if the register doesn't exist.

◆ get_value()

template<typename ValueType , teRegType RegEnum>
ValueType SocCamera::tcRegisterFile::get_value ( uint64_t  address)
inlineprotected

Can be used for getting simple types; not strings.

Parameters
addressthe address of the desired register
Returns
the register value in stored endian format (MAY NOT BE HOST ENDIAN)

◆ get_word()

uint32_t tcRegisterFile::get_word ( uint32_t  address)

This function retrieves the specified uint32_t type register.

Note
The register must be a uint32_t type register (i.e. type eeRegUint32).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
Returns
The value of the register or 0 if the register doesn't exist.

◆ getInstance()

tcRegisterFile * tcRegisterFile::getInstance ( tsRegDefinition apRegs = NULL,
bool  abBigEndian = true 
)
static

This function provides a Singleton Accessor for the GenICam Reigster file object. There is some debate as to whether a Singleton should be used vs. a global pointer constructed early in the initialization sequence, but currently this is the implementation. Truthfully, if we ever have a board that supports both GigE and U3V at the same time (which require different endianness implementations as currently designed), we'll need to relook at this implementation anyway. The application doesn't shutdown at all right now, so there is no need for reference counting to clean up nicely.

Normally, code wanting access to this object will call getInstance() with no parameters, but the actual first construction calls need to construct this with the apRegs and Engine parameters.
So the current implementation must call getInstance() in the "correct order" (as part of the GigE or U3V interface construction) otherwise a tcRegisterFile() will be constructed with a NULL initialization structure, and reigster accesses will likely result in a lot of nothing being returned.

This archiecture is a "force fit" leftover from initially only supporting GigE and then attempting to add U3V support at a later time and reusing this management code.

Note
this class treats all defined integer and floating point registers with the same endianness as passed in via abBigEndian. Because of this, GigE must use abBigEndian = true due to the requirements that the bootstrap registers must be defines as big endian, and therefor must define all XML parameters for GigE cameras as BigEndian. U3V cameras use little endian (for same reasons). Ideally, the endianness for integers and floats should be part of each defined register to allow for endianness mixing in the XML, but that is not the current implementation.
Parameters
[in]apRegsA least of registers that should be created / managed by the class. See tsRegDefinition
[in]abBigEndianWhen true, this class will store/retrieve integer and float parameters as big endian values.
Returns
the pointer to the tcRegisterFile singleton for the system.

◆ initialize()

void tcRegisterFile::initialize ( tcSensorBoard apSensor,
tcPayloadSetter apIface 
)

Initialize a few known GenICam registers with default values from sensor. This routine also snags a pointer to a payload setter object to force computing the payloadsize when dependent registers change.

Note
this method can't be called during initialization because the tcSensorBoard and tcPayloadSetter don't exist yet (they depend on tcRegisterFile). There is a bit of initialization circular-dependence in the design. Right now, these are called by the tcCommandInterface (GigE, U3V) run() methods.
Todo:

This entire method should really go away. The tcRegisterFile should not have any "knowledge" of how the registers should be configured. Most of these parameters should be set directly by the tcSensorBoard classes. Originally they were not because the CameraLink variants didn't have/use a tcRegisterFile. This is no longer true. There is always a tcRegisterFile present. We leave it mostly due to fears of regression, but it needs to be cleaned up.

Along with above comment, the whole payloadsetter thing should move to a separate Handler and not be integrated into the register file class. Again, fear of regression at this point makes us leave things alone...

Parameters
apSensorpointer to active tcSensorBoard class
apIfacepointer to an object providing the tcPayloadSetting interface.

◆ instanceMade()

bool SocCamera::tcRegisterFile::instanceMade ( )
static

◆ latch_timestamp()

void tcRegisterFile::latch_timestamp ( )

This function helps support the timestamp registers. It is called when someone writes the timestamp control register with the latch bit set. It grabs the current time subtracts off the time the last time the timestamp counter was reset and then updates the two timesstamp registers

◆ next_reg()

tcRegisterFile::tsRegDefinition * tcRegisterFile::next_reg ( uint64_t  address) const

This function returns a pointer to the entry in the register definition file that corresponds to the next legally defined register at or above the specified address.

Parameters
[in]addressThe address to start searching
Returns
A pointer to the entry at or closest but above current address or null if none-found.

◆ reg_a_rd()

bool tcRegisterFile::reg_a_rd ( uint32_t  address,
int16_t  size 
)

Is the specified register address space readable.

This function determines if a register is readable at the specified address and that the register if defined is large enough to hold the specified number of bytes. Or if not large enough if there are contiguous readable registers large enough to make the read viable.

Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]sizeThe number of bytes starting at the specified address that must fit within that register.
Returns
True if a register is readable at the specified address with the specifie number of bytes following the address.

◆ reg_a_valid()

bool tcRegisterFile::reg_a_valid ( uint32_t  address,
int16_t  size 
)

Is the specified register address space valid.

This function determines if a register is defined at the specified address and that the register if defined is large enough to hold the specified number of bytes. Or if not large enough if there are contiguous registers large enough to make the access viable. i.e. Read the memory for mac low and high in one operation.

Note
The GigE vaildation framework requires us to support memory reads which cover multiple registers with contiguous address space. See the test Protocol::ReadMemoryOfTwoContiguousRegisters.
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]sizeThe number of bytes starting at the specified address that must fit within that register.
Returns
True if a register is defined at the specified address with the specifie number of bytes following the address.

◆ reg_a_wr()

bool tcRegisterFile::reg_a_wr ( uint32_t  address,
int16_t  size 
)

Is the specified register address space writeable.

This function determines if a register is writable at the specified address and that the register if defined is large enough to hold the specified number of bytes. Or if not large enough if there are contiguous writable registers large enough to make the read viable.

Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]sizeThe number of bytes starting at the specified address that must fit within that register.
Returns
True if a register is readable at the specified address with the specifie number of bytes following the address.

◆ reg_addr()

uint32_t tcRegisterFile::reg_addr ( const char *  name)

This function returns the register address that corresponds to the specified register name.

Parameters
[in]nameThe name of the register (i.e. "SCP0").
Returns
The register address for a matching entry in the register definitions table, or tcRegisterFile::cnNOADDRESS if no match found.

◆ reg_def() [1/2]

tcRegisterFile::tsRegDefinition * tcRegisterFile::reg_def ( const char *  name) const

This function returns a pointer to the entry in the register definition file that corresponds to the specified register name.

Parameters
[in]nameThe name of the register (i.e. "SCP0").
Returns
A pointer to the matching entry in the register definitions table, or NULL if no match found.

◆ reg_def() [2/2]

tcRegisterFile::tsRegDefinition * tcRegisterFile::reg_def ( uint64_t  address,
bool  sloppy = false 
) const

This function returns a pointer to the entry in the register definition file that corresponds to the specified register address.

Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]sloppyIf true a sloppy address comparison is done. Sloppy comparison meaning that any address within the register will make a match. For example the SCP0 register is at address 0x0d00. If an address of 0x0d01 is specified and sloppy is true the table entry for SCP0 will be returned, but if 0x0d01 is specified and sloppy is false no match is found and NULL will be returned.
Returns
A pointer to the matching entry in the register definitions table, or NULL if no match found.

◆ reg_name()

std::string tcRegisterFile::reg_name ( uint32_t  address)

This function returns the name that corresponds to the specified register address.

Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
Returns
The register name for a matching entry in the register definitions table, or "Unknown" if no match found.

◆ reg_rd()

bool tcRegisterFile::reg_rd ( uint32_t  address)

Is the specified register address readable.

This function determines if a readable register is defined at the specified address.

Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
Returns
True if a readable register is defined at the specified address.

◆ reg_size()

int tcRegisterFile::reg_size ( uint32_t  address)

This function returns the register size that corresponds to the specified register address.

Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
Returns
The register size for a matching entry in the register definitions table, or 0 if no match found.

◆ reg_valid()

bool tcRegisterFile::reg_valid ( uint32_t  address)

Is the specified register address valid.

This function determines if a register is defined at the specified address.

Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
Returns
True if a register is defined at the specified address.

◆ reg_wr()

bool tcRegisterFile::reg_wr ( uint32_t  address)

Is the specified register address writeable.

This function determines if a writeable register is defined at the specified address.

Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
Returns
True if a writeable register is defined at the specified address.

◆ reset_timestamp()

void tcRegisterFile::reset_timestamp ( )

This function helps support the timestamp registers. It is called when someone writes the timestamp control register with the reset bit set. We store a new current timestamp to use in the future as our base time.

◆ set_buffer()

GEV_STATUS tcRegisterFile::set_buffer ( uint32_t  address,
const uint8_t *  buff,
uint32_t  length 
)

This function sets the specified buffer register and invokes the command handler chain to process the change.

Note
The register must be a uint32_t type register (i.e. type eeRegUint32).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]buffThe new value for the register.
[in]lengthThe number of bytes to retrieve.
Returns
Status of the update. GEV_STATUS is compatible with GenCP status.

◆ set_float()

GEV_STATUS tcRegisterFile::set_float ( uint32_t  address,
float  data 
)

This function sets the specified floating point register and invokes the command handler chain to process the change.

Note
The register must be a floating point register (i.e. type eeRegFloat).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]dataThe new floating point value for the register.
Returns
Status of the update. GEV_STATUS is compatible with GenCP status.

◆ set_long()

GEV_STATUS SocCamera::tcRegisterFile::set_long ( uint32_t  address,
uint64_t  data 
)

◆ set_string()

GEV_STATUS tcRegisterFile::set_string ( uint32_t  address,
const char *  data 
)

This function sets the specified string register and invokes the command handler chain to process the change.

Note
The register must be a string register (i.e. type eeRegString).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]dataThe new string value for the register.
Returns
Status of the update. GEV_STATUS is compatible with GenCP status.

◆ set_value()

template<typename ValueType , teRegType RegEnum, typename UpdateMsg >
GEV_STATUS SocCamera::tcRegisterFile::set_value ( uint32_t  address,
ValueType  data 
)
inlineprotected

This routine is called when a register write has been requested. This will force all Observers of register writes to be called in order to support validation of the register setting.

Parameters
addressthe logical register address
datathe data to write (in HOST endian storage, little endian)

◆ set_word()

GEV_STATUS tcRegisterFile::set_word ( uint32_t  address,
uint32_t  data 
)

This function sets the specified uint32_t type register and invokes the command handler chain to process the change.

Note
The register must be a uint32_t type register (i.e. type eeRegUint32).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]dataThe new value for the register.
Returns
Status of the update. GEV_STATUS is compatible with GenCP status.

◆ sharedInit()

void SocCamera::tcRegisterFile::sharedInit ( )

◆ show_all_registers()

void tcRegisterFile::show_all_registers ( )

This function is for debugging. It will dump all the registers to the console.

Parameters
[in]pregdefA pointer to an entry in the register definitions table.

◆ show_register()

void tcRegisterFile::show_register ( const tsRegDefinition pregdef)

This function is for debugging. It will dump the specified register to the console.

Parameters
[in]pregdefA pointer to an entry in the register definitions table.

◆ swap_endian()

template<typename T >
static T SocCamera::tcRegisterFile::swap_endian ( u)
inlinestatic

◆ sync_manifest_table()

void SocCamera::tcRegisterFile::sync_manifest_table ( const std::string &  arXmlFile,
const uint64_t  fpga_version 
)

◆ sync_user_name()

void SocCamera::tcRegisterFile::sync_user_name ( uint64_t  anAddress)

◆ update_buffer()

void tcRegisterFile::update_buffer ( uint32_t  address,
const uint8_t *  buff,
uint32_t  length 
)

This function updates a raw pointer backing store with the provided buffer

Note
The register must be a eeRegNoType (raw register buffer).
Parameters
[in]addressThe address of the register. Can be an offset into the buffer
[in]buffThe pointer of the buffer to copy into the backing store
[in]lengththe number of buffer bytes from the pointer position
Returns
The value of the register or 0 if the register doesn't exist.

◆ update_float()

void tcRegisterFile::update_float ( uint32_t  address,
float  data 
)

Lean and mean write to shadow. Does not ripple through observers.

This function writes the specified floating point register.

Note
The register must be a floating point register (i.e. type eeRegFloat).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]dataThe new floating point value for the register.

◆ update_long()

void SocCamera::tcRegisterFile::update_long ( uint32_t  address,
uint64_t  data 
)

Lean and mean write to shadow. Does not ripple through observers.

◆ update_payload_size()

void tcRegisterFile::update_payload_size ( )

This function is called whenever a register has been changed that will effect the payload size.

◆ update_string()

void tcRegisterFile::update_string ( uint32_t  address,
const char *  data,
int  len = -1 
)

Lean and mean write to shadow. Does not ripple through observers.

This function writes the specified string register.

Note
The register must be a string register (i.e. type eeRegString).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]dataThe new floating string value for the register.

◆ update_value()

template<typename ValueType , teRegType RegEnum>
void SocCamera::tcRegisterFile::update_value ( uint64_t  address,
ValueType  data 
)
inlineprotected

This routine is called when a register write has occurred and validation is OK and all command handlers have had a chance to check / handle the impact of the register change.

Parameters
addressthe logical register address
datathe data to write (in proper endian storage)

◆ update_word()

void tcRegisterFile::update_word ( uint32_t  address,
uint32_t  data 
)

Lean and mean write to shadow. Does not ripple through observers.

This function writes the specified uint32_t type register.

Note
The register must be a uint32_t type register (i.e. type eeRegUint32).
Parameters
[in]addressThe address of the register (i.e. SCP0_ADDR or 0x0d00).
[in]dataThe new floating point value for the register.

Member Data Documentation

◆ cnMAX_IMAGE_HEIGHT

const uint32_t SocCamera::tcRegisterFile::cnMAX_IMAGE_HEIGHT = 2496
static

◆ cnMAX_IMAGE_WIDTH

const uint32_t SocCamera::tcRegisterFile::cnMAX_IMAGE_WIDTH = 3360
static

These may be dependant on the sensor type, but for now just want a handy place to put them.

◆ cnMAX_PAYLOAD_SIZE

const uint32_t SocCamera::tcRegisterFile::cnMAX_PAYLOAD_SIZE = cnMAX_IMAGE_WIDTH * cnMAX_IMAGE_HEIGHT * 2
static

◆ cnNOADDRESS

const uint32_t tcRegisterFile::cnNOADDRESS = 0xFFFFFFFF
static

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