speeduino/speeduino/pages.h

102 lines
3.3 KiB
C

#pragma once
#include <Arduino.h>
#include "table3d.h"
/**
* Page count, as defined in the INI file
*/
uint8_t getPageCount(void);
/**
* Page size in bytes
*/
uint16_t getPageSize(byte pageNum /**< [in] The page number */ );
// These are the page numbers that the Tuner Studio serial protocol uses to transverse the different map and config pages.
#define veMapPage 2
#define 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
#define ignMapPage 3
#define ignSetPage 4//Config Page 2
#define afrMapPage 5
#define afrSetPage 6//Config Page 3
#define boostvvtPage 7
#define seqFuelPage 8
#define canbusPage 9//Config Page 9
#define warmupPage 10 //Config Page 10
#define fuelMap2Page 11
#define wmiMapPage 12
#define progOutsPage 13
#define ignMap2Page 14
#define boostvvtPage2 15
// ============================== Per-byte page access ==========================
/**
* Gets a single value from a page, with data aligned as per the ini file
*/
byte getPageValue( byte pageNum, /**< [in] The page number to retrieve data from. */
uint16_t offset /**< [in] The address in the page that should be returned. This is as per the page definition in the ini. */
);
/**
* Sets a single value from a page, with data aligned as per the ini file
*/
void setPageValue( byte pageNum, /**< [in] The page number to retrieve data from. */
uint16_t offset, /**< [in] The address in the page that should be returned. This is as per the page definition in the ini. */
byte value /**< [in] The new value */
);
// ============================== Page Iteration ==========================
// A logical TS page is actually multiple in memory entities. Allow iteration
// over those entities.
// Type of entity
enum entity_type {
Raw, // A block of memory
Table, // A 3D table
NoEntity, // No entity, but a valid offset
End // The offset was past any known entity for the page
};
// A entity on a logical page.
struct page_iterator_t {
void *pData;
table_type_t table_key;
uint8_t page; // The page the entity belongs to
uint16_t start; // The start position of the entity, in bytes, from the start of the page
uint16_t size; // Size of the entity in bytes
entity_type type;
};
/**
* Initiates iteration over a pages entities.
* Test `entity.type==End` to determine the end of the page.
*/
page_iterator_t page_begin(byte pageNum /**< [in] The page number to iterate over. */);
/**
* Moves the iterator to the next sub-entity on the page
*/
page_iterator_t advance(const page_iterator_t &it /**< [in] The current iterator */);
/**
* Convert page iterator to table value iterator.
*/
table_value_iterator rows_begin(const page_iterator_t &it);
/**
* Convert page iterator to table x axis iterator.
*/
table_axis_iterator x_begin(const page_iterator_t &it);
/**
* Convert page iterator to table x axis iterator.
*/
table_axis_iterator x_rbegin(const page_iterator_t &it);
/**
* Convert page iterator to table y axis iterator.
*/
table_axis_iterator y_begin(const page_iterator_t &it);