double thinkpad_fan::power_usage(struct result_bundle *result, struct parameter_bundle *bundle) { double power; double factor; double util; power = 0; util = get_result_value(r_index, result); if (util < 0) util = 0; /* physics dictact that fan power goes cubic with the rpms, but there's also a linear component for friction*/ factor = get_parameter_value(fancub_index, bundle); power += factor * pow(util / 3600.0, 3); factor = get_parameter_value(fansqr_index, bundle) - 5.0; power += factor * pow(util / 3600.0, 2); factor = get_parameter_value(fan_index, bundle) - 10.0; power += util / 5000.0 * factor; if (power <= 0.0) power = 0.0; return power; }
double cpudevice::utilization(void) { double _utilization; _utilization = get_result_value(r_consumption_index); return _utilization * 100; }
double cpudevice::power_usage(struct result_bundle *result, struct parameter_bundle *bundle) { double power; double factor; double _utilization; power = 0; factor = get_parameter_value(wake_index, bundle); _utilization = get_result_value(r_wake_index, result); power += _utilization * factor / 10000.0; factor = get_parameter_value(consumption_index, bundle); _utilization = get_result_value(r_consumption_index, result); power += _utilization * factor; return power; }
int utilization_power_valid(const char *u) { unsigned int i; unsigned int index; double first_value; index = get_result_index(u); if (index <= 0) return 0; first_value = past_results[0]->utilization[index]; for (i = 1; i < past_results.size(); i++) { if (get_result_value(index, past_results[i]) < first_value - 0.0001) return 1; if (get_result_value(index, past_results[i]) > first_value + 0.0001) return 1; } return 0; }
int utilization_power_valid(int index) { unsigned int i; double first_value; if (index <= 0) return 0; if (past_results.size() == 0) return 0; if (index >= (int)past_results[0]->utilization.size()) return 0; first_value = past_results[0]->utilization[index]; for (i = 1; i < past_results.size(); i++) { if (get_result_value(index, past_results[i]) < first_value - 0.0001) return 1; if (get_result_value(index, past_results[i]) > first_value + 0.0001) return 1; } return 0; }
double get_result_value(const char *name, struct result_bundle *the_bundle) { return get_result_value(get_result_index(name), the_bundle); }