105 lines
2.3 KiB
C

#ifndef _CONFIG_H_
#define _CONFIG_H_
#include <Arduino.h>
#if PCB_REVISION >= 12
#include <Wire.h>
#include <I2C_eeprom.h>
#else
#include <EEPROM.h>
#endif
#define EEPROM_SIZE_BYTES I2C_DEVICESIZE_24LC256
typedef enum SpeedSource_e
{
SOURCE_TIME,
SOURCE_IMPULSE,
SOURCE_GPS,
#if PCB_REVISION == 13
SOURCE_CAN
#endif
} SpeedSource_t;
typedef enum GPSBaudRate_e
{
BAUD_9600,
BAUD_115200
} GPSBaudRate_t;
const char GPSBaudRateString[][7] = {
"9600",
"115200"};
const size_t GPSBaudRateString_Elements = sizeof(GPSBaudRateString) / sizeof(GPSBaudRateString[0]);
#if PCB_REVISION == 13
typedef enum CANSource_e
{
KTM_890_ADV_R_2021
} CANSource_t;
const char CANSourceString[][28] = {
"KTM 890 Adventure R (2021)"};
const char CANSourceString_Elements = sizeof(CANSourceString) / sizeof(CANSourceString[0]);
#endif
const char SpeedSourceString[][8] = {
"Timer",
"Impuls",
"GPS",
#if PCB_REVISION == 13
"CAN-Bus"
#endif
};
const size_t SpeedSourceString_Elements = sizeof(SpeedSourceString) / sizeof(SpeedSourceString[0]);
typedef struct
{
uint16_t writeCycleCounter = 0;
uint32_t tankRemain_µl = 0;
uint32_t distanceTraveled_m = 0;
uint32_t checksum = 0;
} persistenceData_t;
typedef struct
{
uint32_t DistancePerLube_Default = 0;
uint32_t DistancePerLube_Rain = 0;
uint32_t tankCapacity_ml = 320;
uint32_t amountPerDose_µl = 0;
uint8_t TankRemindAtPercentage = 30;
uint8_t PulsePerRevolution = 1;
uint32_t TireWidth_mm = 150;
uint32_t TireWidthHeight_Ratio = 70;
uint32_t RimDiameter_Inch = 18;
uint32_t DistancePerRevolution_mm = 2000;
uint8_t BleedingPulses = 25;
SpeedSource_t SpeedSource = SOURCE_IMPULSE;
GPSBaudRate_t GPSBaudRate = BAUD_9600;
#if PCB_REVISION == 13
CANSource_t CANSource = KTM_890_ADV_R_2021;
#endif
uint32_t checksum = 0;
} LubeConfig_t;
#if PCB_REVISION >= 12
void InitEEPROM();
#endif
void StoreConfig_EEPROM();
void GetConfig_EEPROM();
void StorePersistence_EEPROM();
void GetPersistence_EEPROM();
void FormatConfig_EEPROM();
void FormatPersistence_EEPROM();
uint32_t Checksum_EEPROM(uint8_t const *data, size_t len);
void dumpEEPROM(uint16_t memoryAddress, uint16_t length);
void MovePersistencePage_EEPROM(boolean reset);
extern LubeConfig_t LubeConfig;
extern persistenceData_t PersistenceData;
extern uint16_t eePersistenceMarker;
#endif // _CONFIG_H_