Speeduino
Loading...
Searching...
No Matches
Files | Classes | Macros | Typedefs | Enumerations | Functions | Variables
3D Tables

Structures and functions related to 3D tables, such as VE, Spark Advance, AFR etc. More...

Files

file  table3d.h
 3D table data types and functions
 
file  table3d_axes.h
 3D table axis types and iterators
 
file  table3d_typedefs.h
 Typedefs for primitive 3D table elements.
 
file  table3d_values.h
 3D table value structs and iterators
 

Classes

class  table_axis_iterator
 Iterate over table axis elements. More...
 
class  table_row_iterator
 Iterate through a table row. I.e. constant Y, changing X. More...
 
class  table_value_iterator
 Iterate through a tables values, row by row. More...
 

Macros

#define CONCRETE_TABLE_ACTION(testKey, action, defaultAction, ...)
 
#define CAT_HELPER(a, b)   a ## b
 
#define CONCAT(A, B)   CAT_HELPER(A, B)
 

Typedefs

using table3d_dim_t = uint8_t
 Encodes the length of the axes.
 
using table3d_value_t = uint8_t
 The type of each table value.
 
using table3d_axis_t = uint8_t
 The type of each axis value.
 

Enumerations

enum  table_type_t { table_type_None , TABLE3D_GEN_TYPEKEY =(6, Rpm, Load,) TABLE3D_GEN_TYPEKEY (4, Rpm, Load,) TABLE3D_GEN_TYPEKEY (8, Rpm, Load,) TABLE3D_GEN_TYPEKEY (16, Rpm, Load,) , TABLE3D_GEN_TYPEKEY =(6, Rpm, Load,) TABLE3D_GEN_TYPEKEY (4, Rpm, Load,) TABLE3D_GEN_TYPEKEY (8, Rpm, Load,) TABLE3D_GEN_TYPEKEY (16, Rpm, Load,) }
 Table type identifiers. Limited compile time RTTI. More...
 
enum  axis_domain { axis_domain_Rpm , axis_domain_Load }
 Encodes the real world measurement that a table axis captures. More...
 

Functions

table_value_iterator rows_begin (void *pTable, table_type_t key)
 
table_axis_iterator x_begin (void *pTable, table_type_t key)
 
table_axis_iterator x_rbegin (void *pTable, table_type_t key)
 
table_axis_iterator y_begin (void *pTable, table_type_t key)
 
table_axis_iterator y_rbegin (void *pTable, table_type_t key)
 
static constexpr uint16_t axis_domain_to_factor (axis_domain domain)
 

Variables

 Rpm
 
 Load
 

Detailed Description

Structures and functions related to 3D tables, such as VE, Spark Advance, AFR etc.

Logical:

E.g. for a 3x3 table, this is what the TS table editor would show:

     Y-Max    V6      V7      V8
     Y-Int    V3      V4      V5
     Y-Min    V0      V1      V2
             X-Min   X-Int   X-Max

In memory, we store rows in reverse:

I.e.

     Y-Min    V0      V1      V2
     Y-Int    V3      V4      V5
     Y-Max    V6      V7      V8
             X-Min   X-Int   X-Max

Macro Definition Documentation

◆ CAT_HELPER

#define CAT_HELPER (   a,
  b 
)    a ## b

◆ CONCAT

#define CONCAT (   A,
  B 
)    CAT_HELPER(A, B)

◆ CONCRETE_TABLE_ACTION

#define CONCRETE_TABLE_ACTION (   testKey,
  action,
  defaultAction,
  ... 
)
Value:
switch ((table_type_t)testKey) { \
TABLE3D_GENERATOR(CONCRETE_TABLE_ACTION_INNER, action, ##__VA_ARGS__ ) \
default: defaultAction; }
static uint32_t rshift(uint32_t a)
Bitwise right shift - generic, unoptimized, case.
Definition bit_shifts.h:348
table_type_t
Table type identifiers. Limited compile time RTTI.
Definition table3d.h:69

Typedef Documentation

◆ table3d_axis_t

The type of each axis value.

◆ table3d_dim_t

Encodes the length of the axes.

◆ table3d_value_t

The type of each table value.

Enumeration Type Documentation

◆ axis_domain

Encodes the real world measurement that a table axis captures.

Enumerator
axis_domain_Rpm 

RPM (engine speed)

axis_domain_Load 

Load

◆ table_type_t

Table type identifiers. Limited compile time RTTI.

With no virtual functions (they have quite a bit of overhead in both space & time), we have to pass void* around in certain cases. In order to cast that back to a concrete table type, we need to somehow identify the type.

Once approach is to register each type - but that requires a central registry which will use RAM.

Since we have a compile time fixed set of table types, we can map a unique identifier to the type via a cast - this enum is that unique identifier.

Typically used in conjunction with the 'CONCRETE_TABLE_ACTION' macro

Enumerator
table_type_None 

Function Documentation

◆ axis_domain_to_factor()

static constexpr uint16_t axis_domain_to_factor ( axis_domain  domain)
inlinestaticconstexpr
Here is the call graph for this function:

◆ rows_begin()

table_value_iterator rows_begin ( void pTable,
table_type_t  key 
)
Here is the call graph for this function:

◆ x_begin()

table_axis_iterator x_begin ( void pTable,
table_type_t  key 
)

Convert page iterator to table x axis iterator.

Here is the call graph for this function:

◆ x_rbegin()

table_axis_iterator x_rbegin ( void pTable,
table_type_t  key 
)
Here is the call graph for this function:

◆ y_begin()

table_axis_iterator y_begin ( void pTable,
table_type_t  key 
)

Convert page iterator to table y axis iterator.

Here is the call graph for this function:

◆ y_rbegin()

table_axis_iterator y_rbegin ( void pTable,
table_type_t  key 
)
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ Load

Load

◆ Rpm

Rpm