mirror of
https://github.com/RGBCube/superfreq
synced 2025-07-27 17:07:44 +00:00
engine: allow configuring initial turbo state
This commit is contained in:
parent
a084f4e7b1
commit
e6d8f8c2da
2 changed files with 44 additions and 8 deletions
|
@ -171,12 +171,15 @@ pub struct TurboAutoSettings {
|
||||||
pub load_threshold_low: f32,
|
pub load_threshold_low: f32,
|
||||||
#[serde(default = "default_temp_threshold_high")]
|
#[serde(default = "default_temp_threshold_high")]
|
||||||
pub temp_threshold_high: f32,
|
pub temp_threshold_high: f32,
|
||||||
|
#[serde(default = "default_initial_turbo_state")]
|
||||||
|
pub initial_turbo_state: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Default thresholds for Auto turbo mode
|
// Default thresholds for Auto turbo mode
|
||||||
pub const DEFAULT_LOAD_THRESHOLD_HIGH: f32 = 70.0; // enable turbo if load is above this
|
pub const DEFAULT_LOAD_THRESHOLD_HIGH: f32 = 70.0; // enable turbo if load is above this
|
||||||
pub const DEFAULT_LOAD_THRESHOLD_LOW: f32 = 30.0; // disable turbo if load is below this
|
pub const DEFAULT_LOAD_THRESHOLD_LOW: f32 = 30.0; // disable turbo if load is below this
|
||||||
pub const DEFAULT_TEMP_THRESHOLD_HIGH: f32 = 75.0; // disable turbo if temperature is above this
|
pub const DEFAULT_TEMP_THRESHOLD_HIGH: f32 = 75.0; // disable turbo if temperature is above this
|
||||||
|
pub const DEFAULT_INITIAL_TURBO_STATE: bool = false; // by default, start with turbo disabled
|
||||||
|
|
||||||
const fn default_load_threshold_high() -> f32 {
|
const fn default_load_threshold_high() -> f32 {
|
||||||
DEFAULT_LOAD_THRESHOLD_HIGH
|
DEFAULT_LOAD_THRESHOLD_HIGH
|
||||||
|
@ -187,6 +190,9 @@ const fn default_load_threshold_low() -> f32 {
|
||||||
const fn default_temp_threshold_high() -> f32 {
|
const fn default_temp_threshold_high() -> f32 {
|
||||||
DEFAULT_TEMP_THRESHOLD_HIGH
|
DEFAULT_TEMP_THRESHOLD_HIGH
|
||||||
}
|
}
|
||||||
|
const fn default_initial_turbo_state() -> bool {
|
||||||
|
DEFAULT_INITIAL_TURBO_STATE
|
||||||
|
}
|
||||||
|
|
||||||
impl Default for TurboAutoSettings {
|
impl Default for TurboAutoSettings {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
|
@ -194,6 +200,7 @@ impl Default for TurboAutoSettings {
|
||||||
load_threshold_high: DEFAULT_LOAD_THRESHOLD_HIGH,
|
load_threshold_high: DEFAULT_LOAD_THRESHOLD_HIGH,
|
||||||
load_threshold_low: DEFAULT_LOAD_THRESHOLD_LOW,
|
load_threshold_low: DEFAULT_LOAD_THRESHOLD_LOW,
|
||||||
temp_threshold_high: DEFAULT_TEMP_THRESHOLD_HIGH,
|
temp_threshold_high: DEFAULT_TEMP_THRESHOLD_HIGH,
|
||||||
|
initial_turbo_state: DEFAULT_INITIAL_TURBO_STATE,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,16 @@ impl TurboHysteresis {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Initialize the state with a specific value if not already initialized
|
||||||
|
fn initialize_with(&self, initial_state: bool) -> bool {
|
||||||
|
if !self.initialized.load(Ordering::Acquire) {
|
||||||
|
self.previous_state.store(initial_state, Ordering::Release);
|
||||||
|
self.initialized.store(true, Ordering::Release);
|
||||||
|
return initial_state;
|
||||||
|
}
|
||||||
|
self.previous_state.load(Ordering::Acquire)
|
||||||
|
}
|
||||||
|
|
||||||
/// Update the turbo state for hysteresis
|
/// Update the turbo state for hysteresis
|
||||||
fn update_state(&self, new_state: bool) {
|
fn update_state(&self, new_state: bool) {
|
||||||
self.previous_state.store(new_state, Ordering::Release);
|
self.previous_state.store(new_state, Ordering::Release);
|
||||||
|
@ -257,15 +267,27 @@ fn manage_auto_turbo(report: &SystemReport, config: &ProfileConfig) -> Result<()
|
||||||
};
|
};
|
||||||
|
|
||||||
// Use the appropriate hysteresis object based on whether we're on battery or AC power
|
// Use the appropriate hysteresis object based on whether we're on battery or AC power
|
||||||
// We don't have direct access to the AppConfig here, so we need to make a determination
|
|
||||||
// based on other factors like whether turbo_auto_settings are more conservative (typically battery profile)
|
|
||||||
// or by checking if temperature thresholds are lower (typically battery profile)
|
|
||||||
let is_on_ac = report.batteries.iter().any(|b| b.ac_connected);
|
let is_on_ac = report.batteries.iter().any(|b| b.ac_connected);
|
||||||
|
|
||||||
|
// Get the previous state or initialize with the configured initial state
|
||||||
let previous_turbo_enabled = if is_on_ac {
|
let previous_turbo_enabled = if is_on_ac {
|
||||||
CHARGER_TURBO_HYSTERESIS.with(TurboHysteresis::get_previous_state)
|
CHARGER_TURBO_HYSTERESIS.with(|h| {
|
||||||
|
if let Some(state) = h.get_previous_state() {
|
||||||
|
Some(state)
|
||||||
|
} else {
|
||||||
|
// Initialize with the configured initial state and return it
|
||||||
|
Some(h.initialize_with(turbo_settings.initial_turbo_state))
|
||||||
|
}
|
||||||
|
})
|
||||||
} else {
|
} else {
|
||||||
BATTERY_TURBO_HYSTERESIS.with(TurboHysteresis::get_previous_state)
|
BATTERY_TURBO_HYSTERESIS.with(|h| {
|
||||||
|
if let Some(state) = h.get_previous_state() {
|
||||||
|
Some(state)
|
||||||
|
} else {
|
||||||
|
// Initialize with the configured initial state and return it
|
||||||
|
Some(h.initialize_with(turbo_settings.initial_turbo_state))
|
||||||
|
}
|
||||||
|
})
|
||||||
};
|
};
|
||||||
|
|
||||||
// Decision logic for enabling/disabling turbo with hysteresis
|
// Decision logic for enabling/disabling turbo with hysteresis
|
||||||
|
@ -306,10 +328,17 @@ fn manage_auto_turbo(report: &SystemReport, config: &ProfileConfig) -> Result<()
|
||||||
);
|
);
|
||||||
prev_state
|
prev_state
|
||||||
}
|
}
|
||||||
// In indeterminate states or unknown previous state, default to disabled
|
// In indeterminate states or unknown previous state, use the configured initial state
|
||||||
_ => {
|
_ => {
|
||||||
info!("Auto Turbo: Disabled (default for indeterminate state)");
|
info!(
|
||||||
false
|
"Auto Turbo: Using configured initial state ({})",
|
||||||
|
if turbo_settings.initial_turbo_state {
|
||||||
|
"enabled"
|
||||||
|
} else {
|
||||||
|
"disabled"
|
||||||
|
}
|
||||||
|
);
|
||||||
|
turbo_settings.initial_turbo_state
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue