mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2025-09-28 20:42:51 +02:00
Momentum Settings: Variable int/enum size
This commit is contained in:
@@ -47,7 +47,6 @@ typedef enum {
|
||||
momentum_settings_type_str,
|
||||
momentum_settings_type_int,
|
||||
momentum_settings_type_uint,
|
||||
momentum_settings_type_enum,
|
||||
momentum_settings_type_bool,
|
||||
} momentum_settings_type;
|
||||
|
||||
@@ -60,19 +59,20 @@ static const struct {
|
||||
struct {
|
||||
int32_t i_min;
|
||||
int32_t i_max;
|
||||
uint8_t i_sz;
|
||||
};
|
||||
struct {
|
||||
uint32_t u_min;
|
||||
uint32_t u_max;
|
||||
uint8_t u_sz;
|
||||
};
|
||||
uint8_t e_cnt;
|
||||
};
|
||||
#define clamp(t, min, max) .t##_min = min, .t##_max = max
|
||||
#define setting(t, n) .type = momentum_settings_type##t, .key = #n, .val = &momentum_settings.n
|
||||
#define setting_str(n) setting(_str, n), .str_len = sizeof(momentum_settings.n)
|
||||
#define setting_int(n, min, max) setting(_int, n), clamp(i, min, max)
|
||||
#define setting_uint(n, min, max) setting(_uint, n), clamp(u, min, max)
|
||||
#define setting_enum(n, cnt) setting(_enum, n), .e_cnt = cnt
|
||||
#define num(t, n, min, max) .t##_min = min, .t##_max = max, .t##_sz = sizeof(momentum_settings.n)
|
||||
#define setting_int(n, min, max) setting(_int, n), num(i, n, min, max)
|
||||
#define setting_uint(n, min, max) setting(_uint, n), num(u, n, min, max)
|
||||
#define setting_enum(n, cnt) setting_uint(n, 0, cnt - 1)
|
||||
#define setting_bool(n) setting(_bool, n)
|
||||
} momentum_settings_entries[] = {
|
||||
{setting_str(asset_pack)},
|
||||
@@ -131,15 +131,13 @@ void momentum_settings_load() {
|
||||
break;
|
||||
case momentum_settings_type_int:
|
||||
ok = flipper_format_read_int32(file, entry.key, &val_int, 1);
|
||||
if(ok) *(int32_t*)entry.val = CLAMP(val_int, entry.i_max, entry.i_min);
|
||||
val_int = CLAMP(val_int, entry.i_max, entry.i_min);
|
||||
if(ok) memcpy(entry.val, &val_int, entry.i_sz);
|
||||
break;
|
||||
case momentum_settings_type_uint:
|
||||
ok = flipper_format_read_uint32(file, entry.key, &val_uint, 1);
|
||||
if(ok) *(uint32_t*)entry.val = CLAMP(val_uint, entry.u_max, entry.u_min);
|
||||
break;
|
||||
case momentum_settings_type_enum:
|
||||
ok = flipper_format_read_uint32(file, entry.key, &val_uint, 1);
|
||||
if(ok) *(uint8_t*)entry.val = CLAMP(val_uint, entry.e_cnt - 1U, 0U);
|
||||
val_uint = CLAMP(val_uint, entry.u_max, entry.u_min);
|
||||
if(ok) memcpy(entry.val, &val_uint, entry.u_sz);
|
||||
break;
|
||||
case momentum_settings_type_bool:
|
||||
ok = flipper_format_read_bool(file, entry.key, &val_bool, 1);
|
||||
@@ -164,7 +162,8 @@ void momentum_settings_save() {
|
||||
FlipperFormat* file = flipper_format_file_alloc(storage);
|
||||
|
||||
if(flipper_format_file_open_always(file, MOMENTUM_SETTINGS_PATH)) {
|
||||
uint32_t tmp_enum;
|
||||
int32_t tmp_int;
|
||||
uint32_t tmp_uint;
|
||||
for(size_t entry_i = 0; entry_i < COUNT_OF(momentum_settings_entries); entry_i++) {
|
||||
#define entry momentum_settings_entries[entry_i]
|
||||
switch(entry.type) {
|
||||
@@ -172,14 +171,14 @@ void momentum_settings_save() {
|
||||
flipper_format_write_string_cstr(file, entry.key, (char*)entry.val);
|
||||
break;
|
||||
case momentum_settings_type_int:
|
||||
flipper_format_write_int32(file, entry.key, (int32_t*)entry.val, 1);
|
||||
tmp_int = 0;
|
||||
memcpy(&tmp_int, entry.val, entry.i_sz);
|
||||
flipper_format_write_int32(file, entry.key, &tmp_int, 1);
|
||||
break;
|
||||
case momentum_settings_type_uint:
|
||||
flipper_format_write_uint32(file, entry.key, (uint32_t*)entry.val, 1);
|
||||
break;
|
||||
case momentum_settings_type_enum:
|
||||
tmp_enum = *(uint8_t*)entry.val;
|
||||
flipper_format_write_uint32(file, entry.key, &tmp_enum, 1);
|
||||
tmp_uint = 0;
|
||||
memcpy(&tmp_uint, entry.val, entry.u_sz);
|
||||
flipper_format_write_uint32(file, entry.key, &tmp_uint, 1);
|
||||
break;
|
||||
case momentum_settings_type_bool:
|
||||
flipper_format_write_bool(file, entry.key, (bool*)entry.val, 1);
|
||||
|
Reference in New Issue
Block a user