aboutsummaryrefslogtreecommitdiff
path: root/hardinfo/udisks2_util.c
diff options
context:
space:
mode:
authorOndrej Čerman <ondrej.cerman@gmail.com>2019-01-12 18:21:08 +0100
committerLeandro A. F. Pereira <leandro@hardinfo.org>2019-01-15 10:21:13 -0800
commit7c0151830c81540f1b91e91216e91b2fc0a97cd0 (patch)
tree12d9ea0fbe688c46dca51152906c2dada05673c2 /hardinfo/udisks2_util.c
parent1eb28cdf81fda7bc748e2ba071e2d222a3287453 (diff)
devices/sensors: Added HDD temperature sensors from udisks2
Diffstat (limited to 'hardinfo/udisks2_util.c')
-rw-r--r--hardinfo/udisks2_util.c50
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);
}