Initial public release of the 2024A software.
This commit is contained in:
parent
7b9ad3edfd
commit
303e9e1dad
361 changed files with 60083 additions and 2 deletions
209
components/NVM/Settings.c
Normal file
209
components/NVM/Settings.c
Normal file
|
@ -0,0 +1,209 @@
|
|||
/*
|
||||
* This program source code file is part of the KTag project.
|
||||
*
|
||||
* 🛡️ <https://ktag.clubk.club> 🃞
|
||||
*
|
||||
* Copyright © 2024-2025 Joseph P. Kearney and the KTag developers.
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify it under
|
||||
* the terms of the GNU Affero General Public License as published by the Free
|
||||
* Software Foundation, either version 3 of the License, or (at your option) any
|
||||
* later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
||||
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
|
||||
* details.
|
||||
*
|
||||
* There should be a copy of the GNU Affero General Public License in the LICENSE
|
||||
* file in the root of this repository. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <SystemK.h>
|
||||
#include <NVM.h>
|
||||
|
||||
static const uint8_t UNINTIALIZED_UINT8 = UINT8_MAX;
|
||||
|
||||
static uint8_t Cached_Team_ID = UNINTIALIZED_UINT8;
|
||||
static uint8_t Cached_Player_ID = UNINTIALIZED_UINT8;
|
||||
static uint8_t Cached_Weapon_ID = UNINTIALIZED_UINT8;
|
||||
|
||||
SystemKResult_T SETTINGS_get_uint8_t(SystemKSettingID_T id, uint8_t *value)
|
||||
{
|
||||
SystemKResult_T result = SYSTEMK_RESULT_UNSPECIFIED_FAILURE;
|
||||
char *key = "";
|
||||
uint8_t *cached_value = NULL;
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case SYSTEMK_SETTING_IS_RIGHT_HANDED:
|
||||
key = "Is_Right_Handed";
|
||||
break;
|
||||
|
||||
case SYSTEMK_SETTING_AUDIO_VOLUME:
|
||||
key = "Audio_Volume";
|
||||
break;
|
||||
|
||||
case SYSTEMK_SETTING_TEAMID:
|
||||
if (Cached_Team_ID != UNINTIALIZED_UINT8)
|
||||
{
|
||||
*value = Cached_Team_ID;
|
||||
result = SYSTEMK_RESULT_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
key = "Team_ID";
|
||||
cached_value = &Cached_Team_ID;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case SYSTEMK_SETTING_PLAYERID:
|
||||
if (Cached_Player_ID != UNINTIALIZED_UINT8)
|
||||
{
|
||||
*value = Cached_Player_ID;
|
||||
result = SYSTEMK_RESULT_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
key = "Player_ID";
|
||||
cached_value = &Cached_Player_ID;
|
||||
}
|
||||
break;
|
||||
|
||||
case SYSTEMK_SETTING_WEAPONID:
|
||||
if (Cached_Weapon_ID != UNINTIALIZED_UINT8)
|
||||
{
|
||||
*value = Cached_Weapon_ID;
|
||||
result = SYSTEMK_RESULT_SUCCESS;
|
||||
}
|
||||
else
|
||||
{
|
||||
key = "Weapon_ID";
|
||||
cached_value = &Cached_Weapon_ID;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
result = SYSTEMK_RESULT_WRONG_DATATYPE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (result != SYSTEMK_RESULT_SUCCESS)
|
||||
{
|
||||
result = KV_Get_Value_uint8(CONFIG_FILE, key, value);
|
||||
|
||||
if (result != SYSTEMK_RESULT_SUCCESS)
|
||||
{
|
||||
result = KV_Get_Value_uint8(DEFAULT_CONFIG_FILE, key, value);
|
||||
|
||||
if (result == SYSTEMK_RESULT_SUCCESS)
|
||||
{
|
||||
(void)KV_Set_Value_uint8(CONFIG_FILE, key, value);
|
||||
}
|
||||
}
|
||||
|
||||
// Save the cached value, if necessary.
|
||||
if ((cached_value != NULL) && (result == SYSTEMK_RESULT_SUCCESS))
|
||||
{
|
||||
*cached_value = *value;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SystemKResult_T SETTINGS_set_uint8_t(SystemKSettingID_T id, uint8_t value)
|
||||
{
|
||||
SystemKResult_T result = SYSTEMK_RESULT_SUCCESS;
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case SYSTEMK_SETTING_IS_RIGHT_HANDED:
|
||||
result = KV_Set_Value_uint8(CONFIG_FILE, "Is_Right_Handed", &value);
|
||||
break;
|
||||
|
||||
case SYSTEMK_SETTING_AUDIO_VOLUME:
|
||||
result = KV_Set_Value_uint8(CONFIG_FILE, "Audio_Volume", &value);
|
||||
break;
|
||||
|
||||
case SYSTEMK_SETTING_TEAMID:
|
||||
Cached_Team_ID = value;
|
||||
result = KV_Set_Value_uint8(CONFIG_FILE, "Team_ID", &value);
|
||||
break;
|
||||
|
||||
case SYSTEMK_SETTING_PLAYERID:
|
||||
Cached_Player_ID = value;
|
||||
result = KV_Set_Value_uint8(CONFIG_FILE, "Player_ID", &value);
|
||||
break;
|
||||
|
||||
case SYSTEMK_SETTING_WEAPONID:
|
||||
Cached_Weapon_ID = value;
|
||||
result = KV_Set_Value_uint8(CONFIG_FILE, "Weapon_ID", &value);
|
||||
break;
|
||||
|
||||
default:
|
||||
result = SYSTEMK_RESULT_WRONG_DATATYPE;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SystemKResult_T SETTINGS_get_uint32_t(SystemKSettingID_T id, uint32_t *value)
|
||||
{
|
||||
SystemKResult_T result = SYSTEMK_RESULT_SUCCESS;
|
||||
char *key = "";
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case SYSTEMK_SETTING_T_START_GAME_in_ms:
|
||||
key = "T_Start_Game_in_ms";
|
||||
break;
|
||||
|
||||
default:
|
||||
result = SYSTEMK_RESULT_WRONG_DATATYPE;
|
||||
break;
|
||||
}
|
||||
|
||||
if (result == SYSTEMK_RESULT_SUCCESS)
|
||||
{
|
||||
result = KV_Get_Value_uint32(CONFIG_FILE, key, value);
|
||||
|
||||
if (result != SYSTEMK_RESULT_SUCCESS)
|
||||
{
|
||||
result = KV_Get_Value_uint32(DEFAULT_CONFIG_FILE, key, value);
|
||||
|
||||
if (result == SYSTEMK_RESULT_SUCCESS)
|
||||
{
|
||||
(void)KV_Set_Value_uint32(CONFIG_FILE, key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
SystemKResult_T SETTINGS_set_uint32_t(SystemKSettingID_T id, uint32_t value)
|
||||
{
|
||||
SystemKResult_T result = SYSTEMK_RESULT_SUCCESS;
|
||||
|
||||
switch (id)
|
||||
{
|
||||
case SYSTEMK_SETTING_T_START_GAME_in_ms:
|
||||
result = KV_Set_Value_uint32(CONFIG_FILE, "T_Start_Game_in_ms", &value);
|
||||
break;
|
||||
|
||||
default:
|
||||
result = SYSTEMK_RESULT_WRONG_DATATYPE;
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// Settings are saved on change in this implementation.
|
||||
SystemKResult_T SETTINGS_Save(void)
|
||||
{
|
||||
return SYSTEMK_RESULT_SUCCESS;
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue