/* This file is used for everything related to maps/tables including their definition, functions etc */ #ifndef TABLE_H #define TABLE_H #include "globals.h" #define SIZE_SIGNED_BYTE 4 #define SIZE_BYTE 8 #define SIZE_INT 16 /* The 2D table can contain either 8-bit (byte) or 16-bit (int) values The valueSize variable should be set to either 8 or 16 to indicate this BEFORE the table is used */ struct table2D { //Used 5414 RAM with original version byte valueSize; byte axisSize; byte xSize; void *values; void *axisX; //int16_t *values16; //int16_t *axisX16; //Store the last X and Y coordinates in the table. This is used to make the next check faster int16_t lastXMax; int16_t lastXMin; //Store the last input and output for caching int16_t lastInput; int16_t lastOutput; byte cacheTime; //Tracks when the last cache value was set so it can expire after x seconds. A timeout is required to pickup when a tuning value is changed, otherwise the old cached value will continue to be returned as the X value isn't changing. }; void construct2dTable(table2D &table, uint8_t length, uint8_t *values, uint8_t *bins); void construct2dTable(table2D &table, uint8_t length, uint8_t *values, int8_t *bins); void construct2dTable(table2D &table, uint8_t length, uint16_t *values, uint16_t *bins); void construct2dTable(table2D &table, uint8_t length, uint8_t *values, uint16_t *bins); void construct2dTable(table2D &table, uint8_t length, uint16_t *values, uint8_t *bins); void construct2dTable(table2D &table, uint8_t length, int16_t *values, uint8_t *bins); int16_t table2D_getAxisValue(struct table2D *fromTable, byte X_in); int16_t table2D_getRawValue(struct table2D *fromTable, byte X_index); int table2D_getValue(struct table2D *fromTable, int X_in); #endif // TABLE_H