/*
 *      __ ________               _____                               ______          __    
 *     / //_/_  __/___ _____ _   / ___/____  __  _______________     / ____/___  ____/ /__  
 *    / ,<   / / / __ `/ __ `/   \__ \/ __ \/ / / / ___/ ___/ _ \   / /   / __ \/ __  / _ \ 
 *   / /| | / / / /_/ / /_/ /   ___/ / /_/ / /_/ / /  / /__/  __/  / /___/ /_/ / /_/ /  __/ 
 *  /_/ |_|/_/  \__,_/\__, /   /____/\____/\__,_/_/   \___/\___/   \____/\____/\__,_/\___/  
 *                   /____/                                                                 
 *
 *  🃞 THIS FILE IS PART OF THE KTAG SOURCE CODE.  Visit https://ktag.clubk.club/ for more. 🃞
 *
 */

/** \file
 *  \brief [Autogenerated] This file declares the External EEPROM entries.
 *
 *  \note AUTOGENERATED: This file was generated automatically on Saturday, March 1, 2025 at 08:52:44 AM.
 *                       DO NOT MODIFY THIS FILE MANUALLY!
 */

#ifndef NVM_EXTERNALEEPROMENTRIES_H
#define NVM_EXTERNALEEPROMENTRIES_H

#ifdef __cplusplus
extern "C" {
#endif

/* Preprocessor and Type Definitions */

typedef struct __attribute__((packed))
{
    //! Test Code 3
    uint16_t External_Test_3;
    //! Test Code 4
    uint32_t External_Test_4;
} NVM_External_Test_T;

typedef struct __attribute__((packed))
{
    //! Date this unit was first programmed.
    uint32_t Date_Code_as_YYYYMMDD;
} NVM_Info_T;

typedef struct __attribute__((packed))
{
    //! Color order for the barrel Neopixels.
    uint8_t Barrel_Color_Order;
    //! Color order for the receiver NeoPixels.
    uint8_t Receiver_Color_Order;
    //! Color order for the display NeoPixels.
    uint8_t Display_Color_Order;
    //! Color order for the effects NeoPixels.
    uint8_t Effects_Color_Order;
    //! true if this unit is configured for a right-handed person; false if for a left-handed person.
    bool Is_Right_Handed;
    //! Audio volume.
    uint8_t Volume;
} NVM_Hardware_Settings_T;

typedef struct __attribute__((packed))
{
    //! Selected weapon.
    uint8_t Weapon_ID;
    //! Player identification.
    uint8_t Player_ID;
    //! Selected team.
    uint8_t Team_ID;
    //! Maximum health.
    uint8_t Max_Health;
    //! Number of special weapons regained upon reentry to the game.
    uint8_t N_Special_Weapons_On_Reentry;
    //! Time in milliseconds between instigating a game and when the countdown begins.
    uint32_t T_Start_Game_in_ms;
    //! Duration of the game in milliseconds.
    uint32_t T_Game_Length_in_ms;
    //! Color representing the player, rather than the team.
    uint32_t Secondary_Color;
} NVM_Game_Settings_T;

typedef struct __attribute__((packed))
{
    //! Total number of startups for this unit.
    uint16_t Hourmeter_Startups;
} NVM_Hourmeter_T;


/* Include Files */

/* Public Variables */

extern NVM_EEPROMEntry_T NVM_External_Test;
extern NVM_EEPROMEntry_T NVM_Info;
extern NVM_EEPROMEntry_T NVM_Hardware_Settings;
extern NVM_EEPROMEntry_T NVM_Game_Settings;
extern NVM_EEPROMEntry_T NVM_Hourmeter;

extern NVM_EEPROMEntry_T * const NVM_ExternalEEPROMEntries[];
extern const uint8_t NVM_N_EXTERNAL_EEPROM_ENTRIES;

// Shorthand macros, to save you time.
#define NVM_EXTERNAL_TEST_3             (((NVM_External_Test_T*)NVM_External_Test.Value)->External_Test_3)
#define NVM_EXTERNAL_TEST_3_ENTRY_PTR   (&NVM_External_Test)

#define NVM_EXTERNAL_TEST_4             (((NVM_External_Test_T*)NVM_External_Test.Value)->External_Test_4)
#define NVM_EXTERNAL_TEST_4_ENTRY_PTR   (&NVM_External_Test)

#define NVM_DATE_CODE_AS_YYYYMMDD             (((NVM_Info_T*)NVM_Info.Value)->Date_Code_as_YYYYMMDD)
#define NVM_DATE_CODE_AS_YYYYMMDD_ENTRY_PTR   (&NVM_Info)

#define NVM_BARREL_COLOR_ORDER             (((NVM_Hardware_Settings_T*)NVM_Hardware_Settings.Value)->Barrel_Color_Order)
#define NVM_BARREL_COLOR_ORDER_ENTRY_PTR   (&NVM_Hardware_Settings)

#define NVM_RECEIVER_COLOR_ORDER             (((NVM_Hardware_Settings_T*)NVM_Hardware_Settings.Value)->Receiver_Color_Order)
#define NVM_RECEIVER_COLOR_ORDER_ENTRY_PTR   (&NVM_Hardware_Settings)

#define NVM_DISPLAY_COLOR_ORDER             (((NVM_Hardware_Settings_T*)NVM_Hardware_Settings.Value)->Display_Color_Order)
#define NVM_DISPLAY_COLOR_ORDER_ENTRY_PTR   (&NVM_Hardware_Settings)

#define NVM_EFFECTS_COLOR_ORDER             (((NVM_Hardware_Settings_T*)NVM_Hardware_Settings.Value)->Effects_Color_Order)
#define NVM_EFFECTS_COLOR_ORDER_ENTRY_PTR   (&NVM_Hardware_Settings)

#define NVM_IS_RIGHT_HANDED             (((NVM_Hardware_Settings_T*)NVM_Hardware_Settings.Value)->Is_Right_Handed)
#define NVM_IS_RIGHT_HANDED_ENTRY_PTR   (&NVM_Hardware_Settings)

#define NVM_VOLUME             (((NVM_Hardware_Settings_T*)NVM_Hardware_Settings.Value)->Volume)
#define NVM_VOLUME_ENTRY_PTR   (&NVM_Hardware_Settings)

#define NVM_WEAPON_ID             (((NVM_Game_Settings_T*)NVM_Game_Settings.Value)->Weapon_ID)
#define NVM_WEAPON_ID_ENTRY_PTR   (&NVM_Game_Settings)

#define NVM_PLAYER_ID             (((NVM_Game_Settings_T*)NVM_Game_Settings.Value)->Player_ID)
#define NVM_PLAYER_ID_ENTRY_PTR   (&NVM_Game_Settings)

#define NVM_TEAM_ID             (((NVM_Game_Settings_T*)NVM_Game_Settings.Value)->Team_ID)
#define NVM_TEAM_ID_ENTRY_PTR   (&NVM_Game_Settings)

#define NVM_MAX_HEALTH             (((NVM_Game_Settings_T*)NVM_Game_Settings.Value)->Max_Health)
#define NVM_MAX_HEALTH_ENTRY_PTR   (&NVM_Game_Settings)

#define NVM_N_SPECIAL_WEAPONS_ON_REENTRY             (((NVM_Game_Settings_T*)NVM_Game_Settings.Value)->N_Special_Weapons_On_Reentry)
#define NVM_N_SPECIAL_WEAPONS_ON_REENTRY_ENTRY_PTR   (&NVM_Game_Settings)

#define NVM_T_START_GAME_IN_MS             (((NVM_Game_Settings_T*)NVM_Game_Settings.Value)->T_Start_Game_in_ms)
#define NVM_T_START_GAME_IN_MS_ENTRY_PTR   (&NVM_Game_Settings)

#define NVM_T_GAME_LENGTH_IN_MS             (((NVM_Game_Settings_T*)NVM_Game_Settings.Value)->T_Game_Length_in_ms)
#define NVM_T_GAME_LENGTH_IN_MS_ENTRY_PTR   (&NVM_Game_Settings)

#define NVM_SECONDARY_COLOR             (((NVM_Game_Settings_T*)NVM_Game_Settings.Value)->Secondary_Color)
#define NVM_SECONDARY_COLOR_ENTRY_PTR   (&NVM_Game_Settings)

#define NVM_HOURMETER_STARTUPS             (((NVM_Hourmeter_T*)NVM_Hourmeter.Value)->Hourmeter_Startups)
#define NVM_HOURMETER_STARTUPS_ENTRY_PTR   (&NVM_Hourmeter)


#ifdef __cplusplus
}
#endif

#endif // NVM_EXTERNALEEPROMENTRIES_H

