Mesh MAC table, is lookup table for node address and MAC address. It acts as DHCP table. Size of table can be defined using template like this:
More...
|
| | MeshMACTable (const uint32_t rowLife) |
| | Constructor. More...
|
| |
| bool | set (uint8_t address, MeshMAC MAC, int16_t valid=-1) |
| | Sets row values in table. More...
|
| |
| int16_t | add (MeshMAC mac, bool isGateway=false) |
| | Adds MAC address to table at first free index. More...
|
| |
| int16_t | getAddressFromMAC (MeshMAC mac, int16_t startPos=0) const |
| | Searches for node address, which is assinged to node MAC address. More...
|
| |
| MeshMAC | getMACFromAddress (uint8_t address) const |
| | Gets node MAC address assigned to node address. More...
|
| |
| bool | addressExists (uint8_t address) const |
| | Checks if node address exists in table. More...
|
| |
| bool | MACExists (MeshMAC mac) const |
| | Checks if node MAC address exists in table. More...
|
| |
| int16_t | getFreeAddress (uint8_t startFrom=MESH_GATEWAY_MAX_ADDRESS+1) |
| | Gets first available address. More...
|
| |
| void | setValidityChangeCallback (void(*callback)(MeshMACTable< BufferSize > *, int16_t, const MeshMACTableRow &, bool, bool)) |
| | Sets callback function, which is called when row validity has changed. There can be 3 states of validity: More...
|
| |
| | MicroTable (const uint32_t rowLife) |
| | Constructor. More...
|
| |
| const MeshMACTableRow & | get (int16_t index) const |
| | Gets row from table by index. More...
|
| |
| MeshMACTableRow | get (int16_t index) |
| | Gets row from table by index. More...
|
| |
| const MeshMACTableRow & | operator[] (int16_t index) const |
| | Gets row from table by index. More...
|
| |
| MeshMACTableRow | operator[] (int16_t index) |
| | Gets row from table by index. More...
|
| |
| bool | set (int16_t index, const MeshMACTableRow &row) |
| | Sets row values in table. Row life time is set to maximum. More...
|
| |
| bool | set (int16_t index, const MeshMACTableRow &row, int16_t rawLifeTime_) |
| | Sets row values in table. More...
|
| |
| bool | remove (const MeshMACTableRow &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 MeshMACTableRow &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 MeshMACTableRow &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...
|
| |
|
| void | onRowLifeChanged (int16_t index, uint8_t old_raw, uint8_t new_raw) override |
| | This method is called when table is cleared. It is called after cleaning is done, so all variables are fresh. More...
|
| |
| virtual void | onCreate (int16_t index, const MeshMACTableRow &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 MeshMACTableRow &oldValue, uint8_t oldRawLifeTime, const MeshMACTableRow &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 MeshMACTableRow &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...
|
| |
template<int16_t BufferSize>
class MeshMACTable< BufferSize >
Mesh MAC table, is lookup table for node address and MAC address. It acts as DHCP table. Size of table can be defined using template like this:
Size of route table in example is 255 rows and lifetime of one row is 60 seconds.
Difference between Static and Dynamic mesh route table
- Static MRT takes up less bytes in RAM, because it uses only 3 columns, instead of 4
- Static MRT is way more fasted than dynamic MRT.
- Source in static MRT has to be lower than BufferSize, because BufferSize sets limit for number of nodes.
How data are stored:
| Node address - as index (not physically stored) | Node MAC [MeshMAC] | Valid [uint8_t] |
| 0 | XXX | XXX |
| 1 | XXX | XXX |
| ... | ... | ... |
| x - depends on BufferSize | XXX | XXX |