// This file deals with looking up ignition timing
#pragma once
#include "stdint.h"
static const int TIMING_SCALE = 10;
static unsigned const MAX_TIMING_POINTS = 8;
static unsigned const MAX_VACUUM_POINTS = 8;
#if defined __cplusplus
extern "C"
{
#endif
/// @brief Get timing adjustment value
/// @return Timing adjustment value
uint8_t getTimingAdjust();
/// @brief Set the timing adjustment value
/// @param adjust Timing value
void setTimingAdjust(int8_t adjust);
/// @brief Get timing map RPM column heading
/// @param i column number
/// @return Value at that position
int16_t getRpmMap(int i);
/// @brief Set the timing map RPM column heading
/// @param i column number
/// @param value Value to place at that position
void setRpmMap(int i, uint16_t value);
/// @brief Set vacuum mapping column heading (row actually)
/// @param i row number
/// @param value Value to place at that position
void setVacuumMap(int i, uint16_t value);
/// @brief Get vacuum mapping column heading (row actually)
/// @param i row number
uint16_t getVacuumMap(int i);
/// @brief Set the timing value
/// @param vacuumIndex
/// @param rpmIndex
/// @param value
void setTiming(int vacuumIndex, int rpmIndex, uint8_t value);
/// @brief Get the timing value
/// @param vacuumIndex
/// @param rpmIndex
/// @return value
uint8_t getTiming(int vacuumIndex, int rpmIndex);
/// @brief Lookup ignition timing
/// @param rpm Engine Speed in RPM
/// @param vacuumMb Ported vacuum in millibars of vacuum
/// @return Vacuum advance in degrees * TIMING_SCALE;
int mapTiming(int rpm, int vacuumMb);
#if defined __cplusplus
}
#endif