Speeduino
Loading...
Searching...
No Matches
pages.h
Go to the documentation of this file.
1#pragma once
2#include <Arduino.h>
3#include "table3d.h"
4#include "config_pages.h"
5
10
11// These are the page numbers that the Tuner Studio serial protocol uses to transverse the different map and config pages.
12constexpr uint8_t veSetPage = 1; //Note that this and the veMapPage were swapped in Feb 2019 as the 'algorithm' field must be declared in the ini before it's used in the fuel table
13constexpr uint8_t veMapPage = 2;
14constexpr uint8_t ignMapPage = 3;
15constexpr uint8_t ignSetPage = 4;
16constexpr uint8_t afrMapPage = 5;
17constexpr uint8_t afrSetPage = 6;
18constexpr uint8_t boostvvtPage = 7;
19constexpr uint8_t seqFuelPage = 8;
20constexpr uint8_t canbusPage = 9;
21constexpr uint8_t warmupPage = 10;
22constexpr uint8_t fuelMap2Page = 11;
23constexpr uint8_t wmiMapPage = 12;
24constexpr uint8_t progOutsPage = 13;
25constexpr uint8_t ignMap2Page = 14;
26constexpr uint8_t boostvvtPage2 = 15;
29
31void setTuneToEmpty(void);
32
33// ============================== Per-byte page access ==========================
34
38 );
39
47 byte value
48 );
49
50
51// ============================== Page Iteration ==========================
52
53// A logical TS page is actually multiple in memory entities. Allow iteration
54// over those entities.
55
56// Type of entity
57enum class EntityType : uint8_t {
58 Raw, // A block of memory
59 Table, // A 3D table
60 NoEntity, // No entity, but a valid offset
61 End // The offset was past any known entity for the page
62};
63
66 uint8_t page; // The index of the page the entity belongs to
67 uint8_t index; // The sub-index of the item within the page
68
69 constexpr entity_page_location_t(void)
70 : page(0U)
71 , index(0U)
72 {
73 }
79
80 constexpr entity_page_location_t next(void) const
81 {
83 }
84
86 {
87 return lhs.page==rhs.page
88 && lhs.index==rhs.index;
89 }
90
92 {
93 return !(lhs==rhs);
94 }
95};
96
98{
100 union
101 {
104 };
107
108 constexpr entity_t(void)
110 , pRaw(nullptr)
111 {
112 }
114 : type(theType)
115 , pRaw(nullptr)
116 , size(theSize)
117 {
118 }
121 , pTable(table)
122 , table_key(key)
123 , size(theSize)
124 {
125 }
126 explicit constexpr entity_t(config_page_t *entity, uint16_t theSize)
128 , pRaw(entity)
129 , size(theSize)
130 {
131 }
132
134 {
135 return entityAddress<size;
136 }
137};
138
139// An entity within a page - needs to include the entity start position
141{
142 uint16_t start; // The start position of the entity, in bytes, from the start of the page
143
144 constexpr page_entity_t(void)
145 : start(0U)
146 {
147 }
148 explicit constexpr page_entity_t(const entity_t &entity, uint16_t base)
149 : entity_t(entity)
150 , start(base)
151 {
152 }
153
161 {
162 return pageAddress >= start && pageAddress < start+size;
163 }
164};
165
166// A entity on a logical page.
178
179// ============================== Per-byte entity access ==========================
180
182byte getEntityValue(const entity_t &entity,
184 );
185
190bool setEntityValue(entity_t &entity,
192 byte value
193 );
194
200
205
210
215
220
Iterate over table axis elements.
Definition table3d_axes.h:31
Iterate through a tables values, row by row.
Definition table3d_values.h:87
The tune page structs and related defines.
static TIntegral readSerialIntegralTimeout(void)
Reads an integral type, timing out if necessary.
Definition comms.cpp:175
TableType
Table type identifiers. Limited compile time RTTI.
Definition table3d.h:69
table_axis_iterator y_begin(const page_iterator_t &it)
Definition pages.cpp:540
constexpr uint8_t afrSetPage
Definition pages.h:17
bool setEntityValue(entity_t &entity, uint16_t offset, byte value)
Sets a single value from a page, with data aligned as per the ini file.
Definition pages.cpp:243
void setTuneToEmpty(void)
Fill the tune (config pages & tables) with zeroes.
Definition pages.cpp:464
constexpr uint8_t ignMap2Page
Definition pages.h:25
constexpr uint8_t ignSetPage
Definition pages.h:15
constexpr uint8_t boostvvtPage
Definition pages.h:18
constexpr uint8_t veMapPage
Definition pages.h:13
constexpr uint8_t ignMapPage
Definition pages.h:14
constexpr uint8_t fuelMap2Page
Definition pages.h:22
page_iterator_t page_begin(uint8_t pageNum)
Definition pages.cpp:503
constexpr uint8_t seqFuelPage
Definition pages.h:19
constexpr uint8_t MIN_PAGE_NUM
Definition pages.h:27
table_value_iterator rows_begin(const page_iterator_t &it)
Definition pages.cpp:516
constexpr uint8_t veSetPage
Definition pages.h:12
constexpr uint8_t canbusPage
Definition pages.h:20
uint16_t getPageSize(uint8_t pageNum)
Definition pages.cpp:474
byte getPageValue(uint8_t pageNum, uint16_t pageOffset)
Gets a single value from a page, with data aligned as per the ini file.
Definition pages.cpp:492
page_iterator_t advance(const page_iterator_t &it)
Definition pages.cpp:508
constexpr uint8_t warmupPage
Definition pages.h:21
table_axis_iterator x_begin(const page_iterator_t &it)
Definition pages.cpp:524
constexpr uint8_t boostvvtPage2
Definition pages.h:26
constexpr uint8_t wmiMapPage
Definition pages.h:23
table_axis_iterator x_rbegin(const page_iterator_t &it)
Definition pages.cpp:532
bool setPageValue(uint8_t pageNum, uint16_t pageOffset, byte value)
Sets a single value from a page, with data aligned as per the ini file.
Definition pages.cpp:485
EntityType
Definition pages.h:57
constexpr uint8_t afrMapPage
Definition pages.h:16
byte getEntityValue(const entity_t &entity, uint16_t offset)
Gets a single value from an entity, with data aligned as per the ini file.
Definition pages.cpp:202
constexpr uint8_t MAX_PAGE_NUM
Definition pages.h:28
constexpr uint8_t progOutsPage
Definition pages.h:24
Definition config_pages.h:166
The unique location of an entity within all pages.
Definition pages.h:65
uint8_t page
Definition pages.h:66
uint8_t index
Definition pages.h:67
friend bool operator!=(const entity_page_location_t &lhs, const entity_page_location_t &rhs)
Definition pages.h:91
friend bool operator==(const entity_page_location_t &lhs, const entity_page_location_t &rhs)
Definition pages.h:85
constexpr entity_page_location_t(void)
Definition pages.h:69
constexpr entity_page_location_t(uint8_t pageNum, uint8_t pageSubIndex)
Definition pages.h:74
constexpr entity_page_location_t next(void) const
Definition pages.h:80
Definition pages.h:98
table3d_t * pTable
If the entity is a table, this points to the table.
Definition pages.h:102
EntityType type
The entity type.
Definition pages.h:99
config_page_t * pRaw
If the entity is a raw block, this points to it.
Definition pages.h:103
bool isEntityAddressWithin(uint16_t entityAddress) const
Definition pages.h:133
uint16_t size
Size of the entity in bytes on the page
Definition pages.h:106
TableType table_key
If the entity is a table, this can be used to get the table type.
Definition pages.h:105
constexpr entity_t(void)
Definition pages.h:108
constexpr entity_t(table3d_t *table, TableType key, uint16_t theSize)
Definition pages.h:119
constexpr entity_t(config_page_t *entity, uint16_t theSize)
Definition pages.h:126
constexpr entity_t(EntityType theType, uint16_t theSize)
Definition pages.h:113
Definition pages.h:141
constexpr page_entity_t(void)
Definition pages.h:144
uint16_t start
Definition pages.h:142
bool isPageAddressWithin(uint16_t pageAddress) const
Check if the offset is within the entity address range.
Definition pages.h:160
constexpr page_entity_t(const entity_t &entity, uint16_t base)
Definition pages.h:148
Definition pages.h:167
entity_page_location_t location
Definition pages.h:169
constexpr page_iterator_t(void)=default
page_entity_t entity
Definition pages.h:168
constexpr page_iterator_t(const page_entity_t &theEntity, const entity_page_location_t &entityLocation)
Definition pages.h:172
Definition table3d.h:79
3D table data types and functions