feat: Add "Enable" button to all SF/GF (#3024) (#3601)

Co-authored-by: eshifri <eshifri@hotmail.com>
Co-authored-by: philmoz <philmoz@users.noreply.github.com>
This commit is contained in:
Peter Feerick
2023-12-03 12:23:34 +10:00
committed by GitHub
co-authored by eshifri philmoz
parent 878a365e72
commit ee73fa47f0
33 changed files with 262 additions and 194 deletions
@@ -1524,10 +1524,7 @@ static void r_customFn(void* user, uint8_t* data, uint32_t bitoffs,
val++; val_len--;
CFN_PARAM(cfn) = yaml_str2uint_ref(val, val_len);
if (val_len == 0 || val[0] != ',') return;
val++; val_len--;
eat_comma = false;
l_sep = 0;
} else {
return;
}
@@ -1613,29 +1610,42 @@ static void r_customFn(void* user, uint8_t* data, uint32_t bitoffs,
val++; val_len--;
}
if (HAS_ENABLE_PARAM(func)) {
// "0/1"
if (val_len > 0) {
if (val[0] == '0') {
CFN_ACTIVE(cfn) = 0;
} else if (val[0] == '1') {
CFN_ACTIVE(cfn) = 1;
}
// Handle old YAML files where only one of active/repeat was present
bool read_enable_flag = true;
if (HAS_REPEAT_PARAM(func)) {
// Check for 2 values to be parsed
uint8_t l_sep = find_sep(val, val_len);
if (!l_sep) {
// only one more value - assume it is repeat
read_enable_flag = false;
// Set 'enabled'
CFN_ACTIVE(cfn) = 1;
}
} else if (HAS_REPEAT_PARAM(func)) {
}
// Enable param
// "0/1"
if (val_len > 0 && read_enable_flag) {
CFN_ACTIVE(cfn) = (val[0] == '1') ? 1 : 0;
uint8_t l_sep = find_sep(val, val_len);
// Skip comma before optional repeat
val += l_sep;
val_len -= l_sep;
if (val_len == 0 || val[0] != ',')
return;
val++; val_len--;
}
if (HAS_REPEAT_PARAM(func)) {
if (func == FUNC_PLAY_SCRIPT) {
if (val_len == 2 && val[0] == '1' && val[1] == 'x')
CFN_PLAY_REPEAT(cfn) = 1;
else
CFN_PLAY_REPEAT(cfn) = 0;
} else if (val_len == 2
&& val[0] == '1'
&& val[1] == 'x') {
} else if (val_len == 2 && val[0] == '1' && val[1] == 'x') {
CFN_PLAY_REPEAT(cfn) = 0;
} else if (val_len == 3
&& val[0] == '!'
&& val[1] == '1'
&& val[2] == 'x') {
} else if (val_len == 3 && val[0] == '!' && val[1] == '1' && val[2] == 'x') {
CFN_PLAY_REPEAT(cfn) = CFN_PLAY_REPEAT_NOSTART;
} else {
// repeat time in seconds
@@ -1769,24 +1779,25 @@ static bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs,
break;
}
if (HAS_ENABLE_PARAM(func)) {
if (add_comma) {
// ","
if (!wf(opaque,",",1)) return false;
}
// "0/1"
if (!wf(opaque,CFN_ACTIVE(cfn) ? "1":"0",1)) return false;
} else if (HAS_REPEAT_PARAM(func)) {
if (add_comma) {
// ","
if (!wf(opaque,",",1)) return false;
}
if (add_comma) {
// ","
if (!wf(opaque,",",1)) return false;
}
// Enable param
// "0/1"
if (!wf(opaque,CFN_ACTIVE(cfn) ? "1":"0",1)) return false;
if (HAS_REPEAT_PARAM(func)) {
// ","
if (!wf(opaque,",",1)) return false;
if (func == FUNC_PLAY_SCRIPT) {
if (!wf(opaque,(CFN_PLAY_REPEAT(cfn) == 0) ? "On" : "1x",2)) return false;
} else if (CFN_PLAY_REPEAT(cfn) == 0) {
// "1x"
if (!wf(opaque,"1x",2)) return false;
} else if (CFN_PLAY_REPEAT(cfn) == CFN_PLAY_REPEAT_NOSTART) {
} else if (CFN_PLAY_REPEAT(cfn) == (int8_t)CFN_PLAY_REPEAT_NOSTART) {
// "!1x"
if (!wf(opaque,"!1x",3)) return false;
} else {
@@ -1795,6 +1806,7 @@ static bool w_customFn(void* user, uint8_t* data, uint32_t bitoffs,
if (!wf(opaque, str, strlen(str))) return false;
}
}
if (!wf(opaque, "\"", 1)) return false;
return true;
}