|
|
|
|
@ -2029,19 +2029,22 @@ sweep_again: // stay in sweep loop when output mo
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// -------------------------- auto attenuate ----------------------------------
|
|
|
|
|
#define AUTO_TARGET_LEVEL -30
|
|
|
|
|
#define AUTO_TARGET_LEVEL -25
|
|
|
|
|
#define AUTO_TARGET_WINDOW 2
|
|
|
|
|
|
|
|
|
|
if (!in_selftest && setting.mode == M_LOW && setting.auto_attenuation && max_index[0] > 0) { // calculate and apply auto attenuate
|
|
|
|
|
setting.atten_step = false; // No step attenuate in low mode auto attenuate
|
|
|
|
|
int changed = false;
|
|
|
|
|
float actual_max_level = actual_t[max_index[0]] - get_attenuation();
|
|
|
|
|
if (actual_max_level < AUTO_TARGET_LEVEL - 11 && setting.attenuate >= 10) {
|
|
|
|
|
setting.attenuate -= 10.0;
|
|
|
|
|
changed = true;
|
|
|
|
|
} else if (actual_max_level < AUTO_TARGET_LEVEL - 6 && setting.attenuate >= 5) {
|
|
|
|
|
setting.attenuate -= 5.0;
|
|
|
|
|
int actual_max_level = (int) (actual_t[max_index[0]] - get_attenuation());
|
|
|
|
|
if (actual_max_level < AUTO_TARGET_LEVEL && setting.attenuate > 0) {
|
|
|
|
|
setting.attenuate -= AUTO_TARGET_LEVEL - actual_max_level;
|
|
|
|
|
if (setting.attenuate < 0)
|
|
|
|
|
setting.attenuate= 0;
|
|
|
|
|
changed = true;
|
|
|
|
|
} else if (actual_max_level > AUTO_TARGET_LEVEL + 2 && setting.attenuate <= 20) {
|
|
|
|
|
setting.attenuate += 10.0;
|
|
|
|
|
} else if (actual_max_level > AUTO_TARGET_LEVEL && setting.attenuate < 30) {
|
|
|
|
|
setting.attenuate += actual_max_level - AUTO_TARGET_LEVEL;
|
|
|
|
|
if (setting.attenuate > 30)
|
|
|
|
|
setting.attenuate = 30;
|
|
|
|
|
changed = true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|