119 lines
3.1 KiB
C
Raw Normal View History

/**
* @file config.h
*
* @brief Header file for configuration settings and EEPROM operations in the ChainLube application.
*
* This file defines configuration settings for the ChainLube project, including default values,
* EEPROM structures, and functions for EEPROM operations. It also defines enums for different sources
* of speed input, GPS baud rates, and CAN bus sources. Additionally, it includes functions for EEPROM handling
* such as storing, retrieving, and formatting configuration data.
*
* @author Marcel Peterkau
* @date 09.01.2024
*/
2022-01-09 20:51:16 +01:00
#ifndef _CONFIG_H_
#define _CONFIG_H_
#include <Arduino.h>
2022-01-31 09:26:10 +01:00
#include <Wire.h>
#include <I2C_eeprom.h>
2022-03-09 23:05:17 +01:00
#include "dtc.h"
2022-08-24 23:10:11 +02:00
#include "common.h"
2022-01-31 09:26:10 +01:00
2024-01-25 14:33:40 +01:00
#define EEPROM_STRUCTURE_REVISION 3 // Increment this version when changing EEPROM structures
2023-02-28 10:12:18 +01:00
#if PCB_REV == 1 || PCB_REV == 2 || PCB_REV == 3
#define EEPROM_SIZE_BYTES I2C_DEVICESIZE_24LC64
#elif PCB_REV == 4
2022-01-31 09:26:10 +01:00
#define EEPROM_SIZE_BYTES I2C_DEVICESIZE_24LC256
2023-02-28 10:12:18 +01:00
#endif
2022-01-09 20:51:16 +01:00
2024-01-11 21:19:31 +01:00
typedef enum EERequest_e
{
2024-01-11 21:19:31 +01:00
EE_IDLE,
EE_CFG_SAVE,
EE_CFG_LOAD,
EE_CFG_FORMAT,
EE_PDS_SAVE,
EE_PDS_LOAD,
EE_PDS_FORMAT,
EE_FORMAT_ALL,
EE_ALL_SAVE
2024-01-11 21:19:31 +01:00
} EERequest_t;
// Structure for persistence data stored in EEPROM
typedef struct
{
2024-01-09 13:12:09 +01:00
uint16_t writeCycleCounter;
uint32_t tankRemain_microL;
uint32_t TravelDistance_highRes_mm;
uint32_t odometer_mm;
uint32_t odometer;
uint32_t checksum;
} persistenceData_t;
// Structure for configuration settings stored in EEPROM
2022-01-09 20:51:16 +01:00
typedef struct
{
2024-01-09 13:12:09 +01:00
uint8_t EEPROM_Version;
uint32_t DistancePerLube_Default;
uint32_t DistancePerLube_Rain;
uint32_t tankCapacity_ml;
uint32_t amountPerDose_microL;
uint8_t TankRemindAtPercentage;
uint8_t PulsePerRevolution;
uint32_t TireWidth_mm;
uint32_t TireWidthHeight_Ratio;
uint32_t RimDiameter_Inch;
uint32_t DistancePerRevolution_mm;
uint16_t BleedingPulses;
SpeedSource_t SpeedSource;
GPSBaudRate_t GPSBaudRate;
CANSource_t CANSource;
bool LED_Mode_Flash;
uint8_t LED_Max_Brightness;
uint8_t LED_Min_Brightness;
2024-01-25 14:33:40 +01:00
char wifi_ap_ssid[33];
char wifi_ap_password[64];
char wifi_client_ssid[33];
char wifi_client_password[64];
bool wifi_autoconnect;
2024-01-09 13:12:09 +01:00
uint32_t checksum;
2022-01-09 20:51:16 +01:00
} LubeConfig_t;
// Default configuration settings
2023-02-19 14:42:40 +01:00
const LubeConfig_t LubeConfig_defaults = {
2022-08-24 23:08:29 +02:00
0, 8000, 4000, 320, DEFAULT_PUMP_DOSE, 30, 1, 150, 70, 18, 2000, 25, SOURCE_IMPULSE,
2022-08-24 20:59:00 +02:00
BAUD_115200,
KTM_890_ADV_R_2021,
2023-03-02 22:30:42 +01:00
false,
255,
5,
2024-01-25 14:33:40 +01:00
"ChainLube",
QUOTE(WIFI_AP_PASSWORD),
QUOTE(WIFI_SSID_CLIENT),
QUOTE(WIFI_PASSWORD_CLIENT),
true,
2022-08-24 20:59:00 +02:00
0};
2022-01-31 09:26:10 +01:00
void InitEEPROM();
2022-02-04 21:24:15 +01:00
void EEPROM_Process();
2022-01-09 20:51:16 +01:00
void StoreConfig_EEPROM();
void GetConfig_EEPROM();
void StorePersistence_EEPROM();
void GetPersistence_EEPROM();
void FormatConfig_EEPROM();
void FormatPersistence_EEPROM();
2022-01-09 20:51:16 +01:00
uint32_t Checksum_EEPROM(uint8_t const *data, size_t len);
2022-01-31 09:26:10 +01:00
void dumpEEPROM(uint16_t memoryAddress, uint16_t length);
void MovePersistencePage_EEPROM(boolean reset);
uint32_t ConfigSanityCheck(bool autocorrect = false);
bool validateWiFiString(char *string, size_t size);
2022-01-09 20:51:16 +01:00
extern LubeConfig_t LubeConfig;
extern persistenceData_t PersistenceData;
extern uint16_t eePersistenceMarker;
#endif // _CONFIG_H_