#include <libintl.h>
#define _(str) gettext(str)
+#include <stdio.h>
+
#include <hdd.h>
#include <psensor.h>
-#include <lmsensor.h>
#include <temperature.h>
-#ifdef HAVE_GTOP
-#include "cpu.h"
-#endif
-
struct psensor *psensor_create(char *id,
char *name,
char *chip,
psensor->id = id;
psensor->name = name;
psensor->chip = chip;
+ psensor->sess_lowest = UNKNOWN_DBL_VALUE;
+ psensor->sess_highest = UNKNOWN_DBL_VALUE;
+
psensor->min = UNKNOWN_DBL_VALUE;
psensor->max = UNKNOWN_DBL_VALUE;
psensor->values_max_length = values_max_length;
psensor->measures = measures_dbl_create(values_max_length);
- psensor->alarm_enabled = 0;
psensor->alarm_high_threshold = 0;
psensor->alarm_low_threshold = 0;
psensor->cb_alarm_raised_data = NULL;
psensor->alarm_raised = 0;
- psensor->url = NULL;
-
- psensor->color = NULL;
-
- psensor->graph_enabled = 1;
- psensor->appindicator_enabled = 0;
+ psensor->provider_data = NULL;
+ psensor->provider_data_free_fct = &free;
return psensor;
}
if (cur_ms) {
int i;
+
for (i = 0; i < new_size - 1 && i < cur_size - 1; i++)
measure_copy(&cur_ms[cur_size - i - 1],
&new_ms[new_size - i - 1]);
s->measures = new_ms;
}
-void psensor_free(struct psensor *sensor)
+void psensor_free(struct psensor *s)
{
- if (sensor) {
- log_debug("Cleanup %s", sensor->id);
+ if (!s)
+ return;
- free(sensor->name);
- free(sensor->id);
+ log_debug("Cleanup %s", s->id);
- if (sensor->chip)
- free(sensor->chip);
+ free(s->name);
+ free(s->id);
- if (sensor->color)
- free(sensor->color);
+ if (s->chip)
+ free(s->chip);
- measures_free(sensor->measures);
+ measures_free(s->measures);
- free(sensor->url);
+ if (s->provider_data && s->provider_data_free_fct)
+ s->provider_data_free_fct(s->provider_data);
- free(sensor);
- }
+ free(s);
}
void psensor_list_free(struct psensor **sensors)
return size;
}
-int psensor_list_contains_type(struct psensor **sensors, unsigned int type)
-{
- struct psensor **s;
-
- if (!sensors)
- return 0;
-
- s = sensors;
- while (*s) {
- if ((*s)->type & type)
- return 1;
- s++;
- }
-
- return 0;
-}
-
struct psensor **psensor_list_add(struct psensor **sensors,
struct psensor *sensor)
{
- int size = psensor_list_size(sensors);
+ int size;
+ struct psensor **result;
+
+ size = psensor_list_size(sensors);
- struct psensor **result
- = malloc((size + 1 + 1) * sizeof(struct psensor *));
+ result = malloc((size + 1 + 1) * sizeof(struct psensor *));
if (sensors)
memcpy(result, sensors, size * sizeof(struct psensor *));
return result;
}
+void psensor_list_append(struct psensor ***sensors, struct psensor *sensor)
+{
+ struct psensor **tmp;
+
+ if (!sensor)
+ return;
+
+ tmp = psensor_list_add(*sensors, sensor);
+
+ if (tmp != *sensors) {
+ free(*sensors);
+ *sensors = tmp;
+ }
+}
+
+
struct psensor *psensor_list_get_by_id(struct psensor **sensors, const char *id)
{
struct psensor **sensors_cur = sensors;
return type & SENSOR_TYPE_TEMP;
}
-int is_fan_type(unsigned int type)
-{
- return type & SENSOR_TYPE_FAN;
-}
-
char *
psensor_value_to_str(unsigned int type, double value, int use_celsius)
{
s->measures[s->values_max_length - 1].value = v;
s->measures[s->values_max_length - 1].time = tv;
- if (s->min == UNKNOWN_DBL_VALUE || v < s->min)
- s->min = v;
+ if (s->sess_lowest == UNKNOWN_DBL_VALUE || v < s->sess_lowest)
+ s->sess_lowest = v;
- if (s->max == UNKNOWN_DBL_VALUE || v > s->max)
- s->max = v;
+ if (s->sess_highest == UNKNOWN_DBL_VALUE || v > s->sess_highest)
+ s->sess_highest = v;
- if (s->alarm_enabled) {
- if (v > s->alarm_high_threshold || v < s->alarm_low_threshold) {
- if (!s->alarm_raised && s->cb_alarm_raised)
- s->cb_alarm_raised(s, s->cb_alarm_raised_data);
-
- s->alarm_raised = 1;
- } else {
- s->alarm_raised = 0;
+ if (v > s->alarm_high_threshold || v < s->alarm_low_threshold) {
+ if (!s->alarm_raised && s->cb_alarm_raised) {
+ s->alarm_raised = true;
+ s->cb_alarm_raised(s, s->cb_alarm_raised_data);
}
+ } else {
+ s->alarm_raised = false;
}
}
if (sensor->type & type) {
int i;
double t;
+
for (i = 0; i < sensor->values_max_length; i++) {
t = sensor->measures[i].value;
return m;
}
-double
-psensor_get_max_current_value(struct psensor **sensors, unsigned int type)
-{
- double m = UNKNOWN_DBL_VALUE;
- struct psensor **s_cur = sensors;
-
- while (*s_cur) {
- struct psensor *s = *s_cur;
-
- if (s->graph_enabled && (s->type & type)) {
- double v = psensor_get_current_value(s);
-
- if (m == UNKNOWN_DBL_VALUE || v > m)
- m = v;
- }
-
- s_cur++;
- }
-
- return m;
-}
-
double get_min_temp(struct psensor **sensors)
{
return get_min_value(sensors, SENSOR_TYPE_TEMP);
return get_max_value(sensors, SENSOR_TYPE_TEMP);
}
-struct psensor **get_all_sensors(int use_libatasmart, int values_max_length)
-{
- struct psensor **psensors;
- struct psensor **tmp_psensors;
-
- psensors = lmsensor_psensor_list_add(NULL, values_max_length);
-
- if (!use_libatasmart) {
- tmp_psensors = hddtemp_psensor_list_add(psensors,
- values_max_length);
- if (tmp_psensors != psensors) {
- free(psensors);
- psensors = tmp_psensors;
- }
- }
-#ifdef HAVE_ATASMART
- else {
- tmp_psensors = hdd_psensor_list_add(psensors,
- values_max_length);
- if (tmp_psensors != psensors) {
- free(psensors);
- psensors = tmp_psensors;
- }
- }
-#endif
-
- if (!psensors) { /* there is no detected sensors */
- psensors = malloc(sizeof(struct psensor *));
- *psensors = NULL;
- }
-
- return psensors;
-}
-
const char *psensor_type_to_str(unsigned int type)
{
if (type & SENSOR_TYPE_NVCTRL) {
return "Memory usage";
else if (type & SENSOR_TYPE_PCIE)
return "PCIe usage";
- else
- return "NVIDIA GPU";
+
+ return "NVIDIA GPU";
}
if (type & SENSOR_TYPE_ATIADL) {
return "AMD GPU Temperature";
else if (type & SENSOR_TYPE_RPM)
return "AMD GPU Fan Speed";
- else /* type & SENSOR_TYPE_USAGE */
- return "AMD GPU Usage";
+ /*else type & SENSOR_TYPE_USAGE */
+ return "AMD GPU Usage";
}
if ((type & SENSOR_TYPE_HDD_TEMP) == SENSOR_TYPE_HDD_TEMP)
if (type & SENSOR_TYPE_TEMP)
return "Temperature";
- if (type & SENSOR_TYPE_FAN)
+ if (type & SENSOR_TYPE_RPM)
return "Fan";
if (type & SENSOR_TYPE_CPU)
if (type & SENSOR_TYPE_REMOTE)
return "Remote";
+ if (type & SENSOR_TYPE_MEMORY)
+ return "Memory";
+
return "N/A";
}
if (is_temp_type(type)) {
if (use_celsius)
return "\302\260C";
- else
- return "\302\260F";
- } else if (is_fan_type(type)) {
+ return "\302\260F";
+ } else if (type & SENSOR_TYPE_RPM) {
return _("RPM");
- } else if (type & SENSOR_TYPE_CPU_USAGE) {
+ } else if (type & SENSOR_TYPE_PERCENT) {
return _("%");
- } else {
- return _("N/A");
}
-}
-
-void psensor_list_update_measures(struct psensor **sensors)
-{
- lmsensor_psensor_list_update(sensors);
-
-#ifdef HAVE_GTOP
- cpu_psensor_list_update(sensors);
-#endif
-
- if (psensor_list_contains_type(sensors, SENSOR_TYPE_HDDTEMP))
- hddtemp_psensor_list_update(sensors);
-
-#ifdef HAVE_ATASMART
- if (psensor_list_contains_type(sensors, SENSOR_TYPE_ATASMART))
- hdd_psensor_list_update(sensors);
-#endif
+ return _("N/A");
}
void psensor_log_measures(struct psensor **sensors)
}
}
-void psensor_init()
-{
- lmsensor_init();
-}
-
-void psensor_cleanup()
-{
- lmsensor_cleanup();
-}
-
struct psensor **psensor_list_copy(struct psensor **sensors)
{
struct psensor **result;
psensor_get_current_value(s),
use_celsius);
}
-
-struct psensor **psensor_list_filter_graph_enabled(struct psensor **sensors)
-{
- int n, i;
- struct psensor **result, **cur, *s;
-
- if (!sensors)
- return NULL;
-
- n = psensor_list_size(sensors);
- result = malloc((n+1) * sizeof(struct psensor *));
-
- for (cur = sensors, i = 0; *cur; cur++) {
- s = *cur;
-
- if (s->graph_enabled)
- result[i++] = s;
- }
-
- result[i] = NULL;
-
- return result;
-}