/**
 * @file globals.h
 *
 * @brief Header file for global variables and enums in the ChainLube application.
 *
 * This file contains declarations for global variables and enums used in the ChainLube application.
 * It includes enums for system status and EEPROM-related requests, as well as a struct for global variables.
 * The file also defines a struct for constants and initializes it with firmware and required flash version information.
 *
 * @author Marcel Peterkau
 * @date   09.01.2024
 */

#ifndef _GLOBALS_H_
#define _GLOBALS_H_

#include <Arduino.h>
#include "config.h"
#include "common.h"

typedef struct Globals_s
{
  tSystem_Status systemStatus = sysStat_Startup;      /**< Current system status */
  tSystem_Status resumeStatus = sysStat_Startup;      /**< Status to resume after rain mode */
  char systemStatustxt[16] = "";                      /**< Text representation of system status */
  uint16_t purgePulses = 0;                           /**< Number of purge pulses */
  EERequest_t requestEEAction = EE_IDLE;;              /**< EEPROM-related request */
  char DeviceName[33];                                /**< Device name */
  char FlashVersion[10];                              /**< Flash version */
  uint16_t eePersistanceAdress;                       /**< EEPROM persistence address */
  uint8_t TankPercentage;                             /**< Tank percentage */
  bool hasDTC;                                        /**< Flag indicating the presence of Diagnostic Trouble Codes (DTC) */
  bool measurementActive;                             /**< Flag indicating active measurement */
  uint32_t measuredPulses;                            /**< Number of measured pulses */
} Globals_t;

extern Globals_t globals;                             /**< Global variable struct */

typedef struct Constants_s
{
  uint8_t FW_Version_major;          /**< Firmware version major number */
  uint8_t FW_Version_minor;          /**< Firmware version minor number */
  uint8_t Required_Flash_Version_major; /**< Required flash version major number */
  uint8_t Required_Flash_Version_minor; /**< Required flash version minor number */
  char GitHash[11];                 /**< Git hash string */
} Constants_t;

const Constants_t constants PROGMEM = {
 1,4,     // Firmware_Version
 1,4,     // Required Flash Version
 GIT_REV  // Git-Hash-String
};

/**
 * @brief Initializes global variables.
 */
void initGlobals();

#endif // _GLOBALS_H_