// This file deals with looking up ignition timing
#pragma once
#include "stdint.h"
#include "libIgnTiming/basemap.h"
#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(unsigned int i);
/// @brief Set the timing map RPM column heading
/// @param i column number
/// @param value Value to place at that position
void setRpmMap(unsigned 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(unsigned int i, uint16_t value);
/// @brief Get vacuum mapping column heading (row actually)
/// @param i row number
uint16_t getVacuumMap(unsigned int i);
/// @brief Set the timing value
/// @param vacuumIndex
/// @param rpmIndex
/// @param value
void setTiming(unsigned int vacuumIndex, unsigned int rpmIndex, uint8_t value);
/// @brief Get the timing value
/// @param vacuumIndex
/// @param rpmIndex
/// @return value
uint8_t getTiming(unsigned int vacuumIndex, unsigned int rpmIndex);
/// @brief Lookup ignition timing
/// @param rpm Engine Speed in RPM
/// @param vacuumMb Ported vacuum in millibars of vacuum : between about 0 and 700 usually
/// @return Vacuum advance in degrees * TIMING_SCALE;
int mapTiming(int rpm, int vacuumMb);
/// @brief Set the base timing map
/// @param map Pointer to timing map table
void setBaseMap(timingTable_t *map);
#if defined __cplusplus
}
#endif