diff options
author | Ondrej Čerman <ondrej.cerman@gmail.com> | 2019-01-12 18:21:08 +0100 |
---|---|---|
committer | Leandro A. F. Pereira <leandro@hardinfo.org> | 2019-01-15 10:21:13 -0800 |
commit | 7c0151830c81540f1b91e91216e91b2fc0a97cd0 (patch) | |
tree | 12d9ea0fbe688c46dca51152906c2dada05673c2 /hardinfo/udisks2_util.c | |
parent | 1eb28cdf81fda7bc748e2ba071e2d222a3287453 (diff) |
devices/sensors: Added HDD temperature sensors from udisks2
Diffstat (limited to 'hardinfo/udisks2_util.c')
-rw-r--r-- | hardinfo/udisks2_util.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/hardinfo/udisks2_util.c b/hardinfo/udisks2_util.c index 619cddf1..cd27bba1 100644 --- a/hardinfo/udisks2_util.c +++ b/hardinfo/udisks2_util.c @@ -211,10 +211,21 @@ GDBusConnection* get_udisks2_connection(void) { return conn; } +udiskt* udiskt_new() { + return g_new0(udiskt, 1); +} + udiskd* udiskd_new() { return g_new0(udiskd, 1); } +void udiskt_free(udiskt *u) { + if (u) { + g_free(u->drive); + g_free(u); + } +} + void udiskd_free(udiskd *u) { if (u) { g_free(u->model); @@ -229,6 +240,41 @@ void udiskd_free(udiskd *u) { } } +gpointer get_udisks2_temp(const char *blockdev, GDBusProxy *drive){ + GVariant *v; + gboolean smart_enabled = FALSE; + udiskt* disk_temp = NULL; + + v = get_dbus_property(drive, UDISKS2_DRIVE_ATA_INTERFACE, "SmartEnabled"); + if (v) { + smart_enabled = g_variant_get_boolean(v); + g_variant_unref(v); + } + + if (!smart_enabled) { + return NULL; + } + + v = get_dbus_property(drive, UDISKS2_DRIVE_ATA_INTERFACE, "SmartTemperature"); + if (v) { + disk_temp = udiskt_new(); + disk_temp->temperature = (gint32) g_variant_get_double(v) - 273.15; + g_variant_unref(v); + } + + if (!disk_temp) { + return NULL; + } + + v = get_dbus_property(drive, UDISKS2_DRIVE_INTERFACE, "Model"); + if (v) { + disk_temp->drive = g_variant_dup_string(v, NULL); + g_variant_unref(v); + } + + return disk_temp; +} + gpointer get_udisks2_drive_info(const char *blockdev, GDBusProxy *drive) { GVariant *v; const gchar *str; @@ -335,6 +381,10 @@ gpointer get_udisks2_drive_info(const char *blockdev, GDBusProxy *drive) { return u; } +GSList* get_udisks2_temps(void){ + return udisks2_drives_func_caller(udisks2_conn, get_udisks2_temp); +} + GSList* get_udisks2_all_drives_info(void){ return udisks2_drives_func_caller(udisks2_conn, get_udisks2_drive_info); } |