MeshNet  1.0.0
Public Member Functions
MeshIDTable< BufferSize > Class Template Reference

Mesh ID table stores IDs of received packets, to prevent receiving same packet multiple times. Size of table can be defined using template like this: More...

#include <meshTables.h>

Inheritance diagram for MeshIDTable< BufferSize >:
Inheritance graph
[legend]
Collaboration diagram for MeshIDTable< BufferSize >:
Collaboration graph
[legend]

Public Member Functions

 MeshIDTable (const uint32_t rowLife)
 Constructor. More...
 
bool set (uint16_t index, uint8_t id, uint8_t source, int16_t valid=-1)
 Sets row values in table. More...
 
bool add (uint8_t id, uint8_t source)
 Adds or overwrites data in row. If row already exists, it will be overwritten, else new row is added. If buffer is full, oldest row will be overwritten. More...
 
bool add (const MeshIDTableRow &val)
 Adds or overwrites data in row. If row already exists, it will be overwritten, else new row is added. If buffer is full, oldest row will be overwritten. More...
 
void operator+= (const MeshIDTableRow &val)
 
bool removeByIDAndSource (uint8_t ID, uint8_t source)
 Removes row data by source and ID. More...
 
int16_t getIndexOfIDAndSource (uint8_t id, uint8_t source) const
 Gets index of row with specified ID and Source in table. More...
 
bool exists (uint8_t id, uint8_t source) const
 Checks if row with specified ID and Source exists in table. More...
 
- Public Member Functions inherited from MicroTable< MeshIDTableRow, BufferSize >
 MicroTable (const uint32_t rowLife)
 Constructor. More...
 
const MeshIDTableRowget (int16_t index) const
 Gets row from table by index. More...
 
MeshIDTableRow get (int16_t index)
 Gets row from table by index. More...
 
const MeshIDTableRowoperator[] (int16_t index) const
 Gets row from table by index. More...
 
MeshIDTableRow operator[] (int16_t index)
 Gets row from table by index. More...
 
bool set (int16_t index, const MeshIDTableRow &row)
 Sets row values in table. Row life time is set to maximum. More...
 
bool set (int16_t index, const MeshIDTableRow &row, int16_t rawLifeTime_)
 Sets row values in table. More...
 
bool remove (const MeshIDTableRow &rowRef)
 Removes first row, which is equal to rowRef. More...
 
bool remove (int16_t index)
 Removes row at index. More...
 
void clear ()
 Removes all rows data. More...
 
void validate ()
 Decreases all valid column values in specified interval (row lifetime). If valid value is 0, row will not be longer valid. More...
 
bool setRawRemainingLifeTime (int16_t index, uint8_t rawLifeTime_=255)
 Sets row life time. Valid counter for this rowcan be changed, only when row is still valid. More...
 
virtual int16_t getIndexOf (const MeshIDTableRow &rowRef) const
 Gets index of row which is equal to rowRef. More...
 
int16_t getFirstBlankRowIndex (int16_t startPos=0) const
 Gets index of first blank row. More...
 
int16_t getOldestRowIndex () const
 Gets index of first oldest row. More...
 
bool exists (int16_t index) const
 Checks if row at specified index exists in table. More...
 
bool exists (const MeshIDTableRow &rowRef) const
 Checks if any row, which is equal to rowRef exists in table. More...
 
bool isRowBlank (int16_t index) const
 Checks if row is blank or not. Row, that is not valid is blank. More...
 
int16_t size () const
 Gets capacity of table in rows. More...
 
int16_t count () const
 Gets number of used rows in buffer. More...
 
uint8_t getMaxRowLifeTime () const
 Gets the maximum row life time in millisseconds. More...
 
int16_t getRealUsedSize () const
 Gets real used count of rows in table. This value is calculated like this: last_used_row_index + 1. More...
 
uint8_t getFragmentation () const
 Calculates fragmentation in %. Fragmentation is calculated like this: (getRealUsedSize() - count())/getRealUsedSize() More...
 
void defragment ()
 Removes blank spaces between rows. Call this to speed up searching when buffer is fragmented. More...
 
uint32_t getRowRemainingLifeTime (int16_t index) const
 Gets selected row's remaining life time in milliseconds. More...
 
uint8_t getRawRowRemainingLifeTime (int16_t index) const
 Gets selected row's raw remaining life time. More...
 
uint32_t getLifeTimeResolution () const
 Gets life time resolution in milliseconds. More...
 
uint8_t convertLifeTimeToRaw (uint32_t lifeTime) const
 Converts life time in milliseconds to raw life time value. Value is rounded up. More...
 
uint32_t convertRawToLifeTime (uint8_t rawLifeTime) const
 Converts raw life time value to life time in milliseconds. Value is aproximate. To get accurate result, use getRowRemainingLifeTime() method. More...
 
virtual size_t getRawDataSize () const
 Calculates, how many bytes will be printed, when using command printRaw. More...
 
virtual size_t printRaw (OSTREAM &stream, const char tableIdentifier[4]) const
 Prints raw table data through stream. Those data can be decoded in PC or in another MCU. More...
 
size_t print (OSTREAM &stream, bool showIndexes=true, bool doNotPrintBlank=true, bool showRemainingRowLifetime=true) const
 Prints items from table to stream. More...
 
size_t printTo (Print &p) const override
 Makes this class printable. More...
 

Additional Inherited Members

- Protected Member Functions inherited from MicroTable< MeshIDTableRow, BufferSize >
virtual void onCreate (int16_t index, const MeshIDTableRow &newValue, uint8_t newRawLifeTime)
 This method is called when valid row is set to blank space. It is called after count calculation is done, but before buffer is updated. More...
 
virtual void onSet (int16_t index, const MeshIDTableRow &oldValue, uint8_t oldRawLifeTime, const MeshIDTableRow &newValue, uint8_t newRawLifeTime)
 This method is called when valid row is set to new value. It is called after count calculation is done, but before buffer is updated. More...
 
virtual void onRemove (int16_t index, const MeshIDTableRow &oldValue, uint8_t oldRawLifeTime, bool removedByValidation=false)
 This method is called when valid row is removed. It is called after count calculation is done, but before buffer is updated. More...
 
virtual void onClear ()
 This method is called when table is cleared. It is called after cleaning is done, so all variables are fresh. More...
 
virtual void onRowLifeChanged (int16_t index, uint8_t old_raw, uint8_t new_raw)
 This method is called when table is cleared. It is called after cleaning is done, so all variables are fresh. More...
 
- Protected Attributes inherited from MicroTable< MeshIDTableRow, BufferSize >
MeshIDTableRow buffer [RowsCount]
 
uint8_t lifeTime [RowsCount]
 
uint32_t lastValidationTime
 
int16_t usedBufferSize
 
int16_t realUsedSize
 
const uint32_t ValidationInterval
 
const uint32_t RowLife
 

Detailed Description

template<int16_t BufferSize>
class MeshIDTable< BufferSize >

Mesh ID table stores IDs of received packets, to prevent receiving same packet multiple times. Size of table can be defined using template like this:

MeshIDTable<255> IDTable(60000);

Size of ID table in this example is 255 rows and lifetime of one row is 60 seconds.

How data are stored:

index (not physically stored) ID [uint8_t] Source [uint8_t] Valid [uint8_t]
0 XXX XXX XXX
1 XXX XXX XXX
... ... ... ...
XXX - depends on BufferSize XXX XXX XXX

Constructor & Destructor Documentation

◆ MeshIDTable()

template<int16_t BufferSize>
MeshIDTable< BufferSize >::MeshIDTable ( const uint32_t  rowLife)
inline

Constructor.

Parameters
rowLifeLife time of each row in milliseconds. Value has to be higher than 0, but it is recommended to set value to higher than 100 seconds.

Member Function Documentation

◆ add() [1/2]

template<int16_t BufferSize>
bool MeshIDTable< BufferSize >::add ( const MeshIDTableRow val)
inline

Adds or overwrites data in row. If row already exists, it will be overwritten, else new row is added. If buffer is full, oldest row will be overwritten.

Parameters
rowRow with values, that will be added to specified row. (Valid property is ignored and is set to 255)
Returns
Returns when row was added or overwrote.

◆ add() [2/2]

template<int16_t BufferSize>
bool MeshIDTable< BufferSize >::add ( uint8_t  id,
uint8_t  source 
)
inline

Adds or overwrites data in row. If row already exists, it will be overwritten, else new row is added. If buffer is full, oldest row will be overwritten.

Parameters
idID of message.
sourceSource node number of message.
Returns
Returns when row was added or overwrote.

◆ exists()

template<int16_t BufferSize>
bool MeshIDTable< BufferSize >::exists ( uint8_t  id,
uint8_t  source 
) const
inline

Checks if row with specified ID and Source exists in table.

Parameters
idID to check.
sourceSource node number to check.
Returns
Returns true when row with specified ID and Source exists in table.

◆ getIndexOfIDAndSource()

template<int16_t BufferSize>
int16_t MeshIDTable< BufferSize >::getIndexOfIDAndSource ( uint8_t  id,
uint8_t  source 
) const
inline

Gets index of row with specified ID and Source in table.

Parameters
idID to look for.
sourceSource node number to look for.
Returns
Returns index of row with specified ID and Source in table.

◆ operator+=()

template<int16_t BufferSize>
void MeshIDTable< BufferSize >::operator+= ( const MeshIDTableRow val)
inline

◆ removeByIDAndSource()

template<int16_t BufferSize>
bool MeshIDTable< BufferSize >::removeByIDAndSource ( uint8_t  ID,
uint8_t  source 
)
inline

Removes row data by source and ID.

Parameters
IDID value of row to remove.
IDSource node address value of row to remove.
Returns
Returns true when row was removed.

◆ set()

template<int16_t BufferSize>
bool MeshIDTable< BufferSize >::set ( uint16_t  index,
uint8_t  id,
uint8_t  source,
int16_t  valid = -1 
)
inline

Sets row values in table.

Parameters
indexIndex of row.
idID of message.
sourceSource node number of message.
validSet this value to 255 to reset row lifetime. Set it to -1, to keep old value. Accepted value (0-255).
Returns
Returns true when row was set.

The documentation for this class was generated from the following file:
MeshIDTable
Mesh ID table stores IDs of received packets, to prevent receiving same packet multiple times....
Definition: meshTables.h:1691