aboutsummaryrefslogtreecommitdiff
path: root/modules/devices.c
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2024-04-22 00:35:53 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2024-04-22 00:35:53 -0300
commit5f01c706267c595de92406a32e7f31ef5056c2d0 (patch)
treed1e74ef54efc41ada622900fe3e2a50dee44a237 /modules/devices.c
parent09fcc751ef158898c315ebc9299a0fa3a722d914 (diff)
New upstream version 2.0.3preupstream/2.0.3pre
Diffstat (limited to 'modules/devices.c')
-rw-r--r--modules/devices.c567
1 files changed, 394 insertions, 173 deletions
diff --git a/modules/devices.c b/modules/devices.c
index 152b6831..574896ee 100644
--- a/modules/devices.c
+++ b/modules/devices.c
@@ -1,10 +1,10 @@
/*
* HardInfo - Displays System Information
- * Copyright (C) 2003-2007 Leandro A. F. Pereira <leandro@hardinfo.org>
+ * Copyright (C) 2003-2007 L. A. F. Pereira <l@tia.mat.br>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, version 2.
+ * the Free Software Foundation, version 2 or later.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -20,10 +20,6 @@
#define __USE_XOPEN
#endif /* __USE_XOPEN */
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE
-#endif /* _XOPEN_SOURCE */
-
#include <gtk/gtk.h>
#include <config.h>
#include <string.h>
@@ -38,9 +34,13 @@
#include "devices.h"
#include "dt_util.h"
+#include "udisks2_util.h"
+#include "storage_util.h"
+#include "pci_util.h"
gchar *callback_processors();
-gchar *callback_memory();
+gchar *callback_gpu();
+gchar *callback_monitors();
gchar *callback_battery();
gchar *callback_pci();
gchar *callback_sensors();
@@ -48,15 +48,15 @@ gchar *callback_printers();
gchar *callback_storage();
gchar *callback_input();
gchar *callback_usb();
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
gchar *callback_dmi();
-gchar *callback_spd();
-#endif
+gchar *callback_dmi_mem();
+gchar *callback_firmware();
gchar *callback_dtree();
gchar *callback_device_resources();
void scan_processors(gboolean reload);
-void scan_memory(gboolean reload);
+void scan_gpu(gboolean reload);
+void scan_monitors(gboolean reload);
void scan_battery(gboolean reload);
void scan_pci(gboolean reload);
void scan_sensors(gboolean reload);
@@ -64,50 +64,52 @@ void scan_printers(gboolean reload);
void scan_storage(gboolean reload);
void scan_input(gboolean reload);
void scan_usb(gboolean reload);
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
void scan_dmi(gboolean reload);
-void scan_spd(gboolean reload);
-#endif
+void scan_dmi_mem(gboolean reload);
+void scan_firmware(gboolean reload);
void scan_dtree(gboolean reload);
void scan_device_resources(gboolean reload);
gboolean root_required_for_resources(void);
+gboolean spd_decode_show_hinote(const char**);
gchar *hi_more_info(gchar *entry);
enum {
ENTRY_DTREE,
+ ENTRY_DMI,
ENTRY_PROCESSOR,
- ENTRY_MEMORY,
+ ENTRY_GPU,
+ ENTRY_MONITORS,
+ ENTRY_DMI_MEM,
ENTRY_PCI,
ENTRY_USB,
+ ENTRY_FW,
ENTRY_PRINTERS,
ENTRY_BATTERY,
ENTRY_SENSORS,
ENTRY_INPUT,
ENTRY_STORAGE,
- ENTRY_DMI,
- ENTRY_SPD,
ENTRY_RESOURCES
};
static ModuleEntry entries[] = {
[ENTRY_PROCESSOR] = {N_("Processor"), "processor.png", callback_processors, scan_processors, MODULE_FLAG_NONE},
- [ENTRY_MEMORY] = {N_("Memory"), "memory.png", callback_memory, scan_memory, MODULE_FLAG_NONE},
+ [ENTRY_GPU] = {N_("Graphics Processors"), "devices.png", callback_gpu, scan_gpu, MODULE_FLAG_NONE},
+ [ENTRY_MONITORS] = {N_("Monitors"), "monitor.png", callback_monitors, scan_monitors, MODULE_FLAG_NONE},
[ENTRY_PCI] = {N_("PCI Devices"), "devices.png", callback_pci, scan_pci, MODULE_FLAG_NONE},
[ENTRY_USB] = {N_("USB Devices"), "usb.png", callback_usb, scan_usb, MODULE_FLAG_NONE},
+ [ENTRY_FW] = {N_("Firmware"), "processor.png", callback_firmware, scan_firmware, MODULE_FLAG_NONE},
[ENTRY_PRINTERS] = {N_("Printers"), "printer.png", callback_printers, scan_printers, MODULE_FLAG_NONE},
[ENTRY_BATTERY] = {N_("Battery"), "battery.png", callback_battery, scan_battery, MODULE_FLAG_NONE},
[ENTRY_SENSORS] = {N_("Sensors"), "therm.png", callback_sensors, scan_sensors, MODULE_FLAG_NONE},
[ENTRY_INPUT] = {N_("Input Devices"), "inputdevices.png", callback_input, scan_input, MODULE_FLAG_NONE},
[ENTRY_STORAGE] = {N_("Storage"), "hdd.png", callback_storage, scan_storage, MODULE_FLAG_NONE},
+ [ENTRY_DMI] = {N_("System DMI"), "computer.png", callback_dmi, scan_dmi, MODULE_FLAG_NONE},
+ [ENTRY_DMI_MEM] = {N_("Memory Devices"), "memory.png", callback_dmi_mem, scan_dmi_mem, MODULE_FLAG_NONE},
#if defined(ARCH_x86) || defined(ARCH_x86_64)
- [ENTRY_DMI] = {N_("DMI"), "computer.png", callback_dmi, scan_dmi, MODULE_FLAG_NONE},
- [ENTRY_SPD] = {N_("Memory SPD"), "memory.png", callback_spd, scan_spd, MODULE_FLAG_NONE},
- [ENTRY_DTREE] = {"#"},
+ [ENTRY_DTREE] = {N_("Device Tree"), "devices.png", callback_dtree, scan_dtree, MODULE_FLAG_HIDE},
#else
- [ENTRY_DMI] = {"#"},
- [ENTRY_SPD] = {"#"},
[ENTRY_DTREE] = {N_("Device Tree"), "devices.png", callback_dtree, scan_dtree, MODULE_FLAG_NONE},
#endif /* x86 or x86_64 */
[ENTRY_RESOURCES] = {N_("Resources"), "resources.png", callback_device_resources, scan_device_resources, MODULE_FLAG_NONE},
@@ -119,13 +121,34 @@ gchar *printer_list = NULL;
gchar *printer_icons = NULL;
gchar *pci_list = NULL;
gchar *input_list = NULL;
+gboolean storage_no_nvme = FALSE;
gchar *storage_list = NULL;
gchar *battery_list = NULL;
-gchar *meminfo = NULL;
-gchar *lginterval = NULL;
+
+/* in dmi_memory.c */
+gchar *memory_devices_get_info();
+gboolean memory_devices_hinote(const char **msg);
+gchar *memory_devices_info = NULL;
+
+/* in firmware.c */
+gchar *firmware_get_info();
+gboolean firmware_hinote(const char **msg);
+gchar *firmware_info = NULL;
+
+/* in monitors.c */
+gchar *monitors_get_info();
+gboolean monitors_hinote(const char **msg);
+gchar *monitors_info = NULL;
#include <vendor.h>
+extern gchar *gpu_summary;
+const gchar *get_gpu_summary() {
+ if (gpu_summary == NULL)
+ scan_gpu(FALSE);
+ return gpu_summary;
+}
+
static gint proc_cmp_model_name(Processor *a, Processor *b) {
return g_strcmp0(a->model_name, b->model_name);
}
@@ -140,19 +163,27 @@ static gint proc_cmp_max_freq(Processor *a, Processor *b) {
gchar *processor_describe_default(GSList * processors)
{
- int packs, cores, threads;
- const gchar *packs_fmt, *cores_fmt, *threads_fmt;
+ int packs, cores, threads, nodes;
+ const gchar *packs_fmt, *cores_fmt, *threads_fmt, *nodes_fmt;
gchar *ret, *full_fmt;
- cpu_procs_cores_threads(&packs, &cores, &threads);
+ cpu_procs_cores_threads_nodes(&packs, &cores, &threads, &nodes);
+
+ /* NOTE: If this is changed, look at get_cpu_desc() in bench_results.c! */
/* if topology info was available, else fallback to old method */
if (cores > 0) {
packs_fmt = ngettext("%d physical processor", "%d physical processors", packs);
cores_fmt = ngettext("%d core", "%d cores", cores);
threads_fmt = ngettext("%d thread", "%d threads", threads);
- full_fmt = g_strdup_printf(_(/*/NP procs; NC cores; NT threads*/ "%s; %s; %s"), packs_fmt, cores_fmt, threads_fmt);
- ret = g_strdup_printf(full_fmt, packs, cores, threads);
+ if (nodes > 1) {
+ nodes_fmt = ngettext("%d NUMA node", "%d NUMA nodes", nodes);
+ full_fmt = g_strdup_printf(_(/*/NP procs; NC cores across NN nodes; NT threads*/ "%s; %s across %s; %s"), packs_fmt, cores_fmt, nodes_fmt, threads_fmt);
+ ret = g_strdup_printf(full_fmt, packs, cores * nodes, nodes, threads);
+ } else {
+ full_fmt = g_strdup_printf(_(/*/NP procs; NC cores; NT threads*/ "%s; %s; %s"), packs_fmt, cores_fmt, threads_fmt);
+ ret = g_strdup_printf(full_fmt, packs, cores, threads);
+ }
g_free(full_fmt);
return ret;
} else {
@@ -246,6 +277,44 @@ gchar *get_processor_name_and_desc(void)
return nd;
}
+gchar *get_storage_devices_simple(void)
+{
+ scan_storage(FALSE);
+
+ struct Info *info = info_unflatten(storage_list);
+ if (!info) {
+ return "";
+ }
+
+ guint i, fi;
+ struct InfoGroup *group;
+ struct InfoField *field;
+ gchar *storage_devs = NULL, *tmp;
+ const gchar *dev_label, *model_wo_tags;
+
+ GRegex *regex;
+ regex = g_regex_new ("<.*>", 0, 0, NULL);
+
+ for (i = 0; i < info->groups->len; i++) {
+ group = &g_array_index(info->groups, struct InfoGroup, info->groups->len - 1);
+ if (!group)
+ continue;
+
+ info_group_strip_extra(group);
+ for (fi = 0; fi < group->fields->len; fi++) {
+ field = &g_array_index(group->fields, struct InfoField, fi);
+ if (!field->value)
+ continue;
+
+ tmp = g_regex_replace(regex, field->value, -1, 0, "", 0, NULL); // remove html tags
+ storage_devs = h_strdup_cprintf("%s\n", storage_devs, g_strchug(tmp));
+ g_free(tmp);
+ }
+ }
+ g_free(info);
+
+ return storage_devs;
+}
gchar *get_storage_devices(void)
{
@@ -336,59 +405,138 @@ gchar *get_processor_max_frequency(void)
}
}
-gchar *get_pci_device_description(gchar *pci_id)
+gchar *get_motherboard(void)
{
- gchar *description;
+ gchar *board_name, *board_vendor, *board_version;
+ gchar *product_name, *product_vendor, *product_version;
+ gchar *board_part = NULL, *product_part = NULL;
+ const gchar *tmp;
+ int b = 0, p = 0;
- if (!_pci_devices) {
- scan_pci(FALSE);
+ gchar *ret;
+
+#if defined(ARCH_x86) || defined(ARCH_x86_64)
+ scan_dmi(FALSE);
+
+ board_name = dmi_get_str("baseboard-product-name");
+ board_version = dmi_get_str("baseboard-version");
+ board_vendor = dmi_get_str("baseboard-manufacturer");
+ if (board_vendor) {
+ /* attempt to shorten */
+ tmp = vendor_get_shortest_name(board_vendor);
+ if (tmp && tmp != board_vendor) {
+ g_free(board_vendor);
+ board_vendor = g_strdup(tmp);
+ }
}
- if ((description = g_hash_table_lookup(_pci_devices, pci_id))) {
- return g_strdup(description);
+ product_name = dmi_get_str("system-product-name");
+ product_version = dmi_get_str("system-version");
+ product_vendor = dmi_get_str("system-manufacturer");
+ if (product_vendor) {
+ /* attempt to shorten */
+ tmp = vendor_get_shortest_name(product_vendor);
+ if (tmp && tmp != product_vendor) {
+ g_free(product_vendor);
+ product_vendor = g_strdup(tmp);
+ }
}
- return NULL;
-}
+ if (board_vendor && product_vendor &&
+ strcmp(board_vendor, product_vendor) == 0) {
+ /* ignore duplicate vendor */
+ g_free(product_vendor);
+ product_vendor = NULL;
+ }
-gchar *get_memory_total(void)
-{
- scan_memory(FALSE);
- return moreinfo_lookup ("DEV:MemTotal");
-}
+ if (board_name && product_name &&
+ strcmp(board_name, product_name) == 0) {
+ /* ignore duplicate name */
+ g_free(product_name);
+ product_name = NULL;
+ }
-gchar *get_motherboard(void)
-{
- char *board_name, *board_vendor, *system_version;
- char *ret;
+ if (board_version && product_version &&
+ strcmp(board_version, product_version) == 0) {
+ /* ignore duplicate version */
+ g_free(product_version);
+ product_version = NULL;
+ }
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
- scan_dmi(FALSE);
+ if (board_name) b += 1;
+ if (board_vendor) b += 2;
+ if (board_version) b += 4;
+
+ switch(b) {
+ case 1: /* only name */
+ board_part = g_strdup(board_name);
+ break;
+ case 2: /* only vendor */
+ board_part = g_strdup(board_vendor);
+ break;
+ case 3: /* only name and vendor */
+ board_part = g_strdup_printf("%s %s", board_vendor, board_name);
+ break;
+ case 4: /* only version? Seems unlikely */
+ board_part = g_strdup(board_version);
+ break;
+ case 5: /* only name and version? */
+ board_part = g_strdup_printf("%s %s", board_name, board_version);
+ break;
+ case 6: /* only vendor and version (like lpereira's Thinkpad) */
+ board_part = g_strdup_printf("%s %s", board_vendor, board_version);
+ break;
+ case 7: /* all */
+ board_part = g_strdup_printf("%s %s %s", board_vendor, board_name, board_version);
+ break;
+ }
- board_name = dmi_get_str("baseboard-product-name");
- if (board_name == NULL)
- board_name = dmi_get_str("system-product-name");
+ if (product_name) p += 1;
+ if (product_vendor) p += 2;
+ if (product_version) p += 4;
+
+ switch(p) {
+ case 1: /* only name */
+ product_part = g_strdup(product_name);
+ break;
+ case 2: /* only vendor */
+ product_part = g_strdup(product_vendor);
+ break;
+ case 3: /* only name and vendor */
+ product_part = g_strdup_printf("%s %s", product_vendor, product_name);
+ break;
+ case 4: /* only version? Seems unlikely */
+ product_part = g_strdup(product_version);
+ break;
+ case 5: /* only name and version? */
+ product_part = g_strdup_printf("%s %s", product_name, product_version);
+ break;
+ case 6: /* only vendor and version? */
+ product_part = g_strdup_printf("%s %s", product_vendor, product_version);
+ break;
+ case 7: /* all */
+ product_part = g_strdup_printf("%s %s %s", product_vendor, product_name, product_version);
+ break;
+ }
- board_vendor = dmi_get_str("baseboard-manufacturer");
- if (board_vendor == NULL)
- board_vendor = dmi_get_str("system-manufacturer");
-
- system_version = dmi_get_str("system-version");
-
- if (board_name && board_vendor && system_version)
- ret = g_strdup_printf("%s / %s (%s)", system_version, board_name, board_vendor);
- else if (board_name && board_vendor)
- ret = g_strconcat(board_vendor, " ", board_name, NULL);
- else if (board_name)
- ret = g_strdup(board_name);
- else if (board_vendor)
- ret = g_strdup(board_vendor);
+ if (board_part && product_part) {
+ ret = g_strdup_printf("%s (%s)", board_part, product_part);
+ g_free(board_part);
+ g_free(product_part);
+ } else if (board_part)
+ ret = board_part;
+ else if (product_part)
+ ret = product_part;
else
ret = g_strdup(_("(Unknown)"));
- free(board_name);
- free(board_vendor);
- free(system_version);
+ g_free(board_name);
+ g_free(board_vendor);
+ g_free(board_version);
+ g_free(product_name);
+ g_free(product_vendor);
+ g_free(product_version);
+
return ret;
#endif
@@ -400,22 +548,22 @@ gchar *get_motherboard(void)
return g_strdup(_("Unknown"));
}
-ShellModuleMethod *hi_exported_methods(void)
-{
- static ShellModuleMethod m[] = {
- {"getProcessorCount", get_processor_count},
- {"getProcessorName", get_processor_name},
- {"getProcessorDesc", get_processor_desc},
- {"getProcessorNameAndDesc", get_processor_name_and_desc},
- {"getProcessorFrequency", get_processor_max_frequency},
- {"getProcessorFrequencyDesc", get_processor_frequency_desc},
- {"getMemoryTotal", get_memory_total},
- {"getStorageDevices", get_storage_devices},
- {"getPrinters", get_printers},
- {"getInputDevices", get_input_devices},
- {"getPCIDeviceDescription", get_pci_device_description},
- {"getMotherboard", get_motherboard},
- {NULL}
+const ShellModuleMethod *hi_exported_methods(void)
+{
+ static const ShellModuleMethod m[] = {
+ {"getProcessorCount", get_processor_count},
+ {"getProcessorName", get_processor_name},
+ {"getProcessorDesc", get_processor_desc},
+ {"getProcessorNameAndDesc", get_processor_name_and_desc},
+ {"getProcessorFrequency", get_processor_max_frequency},
+ {"getProcessorFrequencyDesc", get_processor_frequency_desc},
+ {"getStorageDevices", get_storage_devices},
+ {"getStorageDevicesSimple", get_storage_devices_simple},
+ {"getPrinters", get_printers},
+ {"getInputDevices", get_input_devices},
+ {"getMotherboard", get_motherboard},
+ {"getGPUList", get_gpu_summary},
+ {NULL},
};
return m;
@@ -434,14 +582,12 @@ gchar *hi_more_info(gchar * entry)
gchar *hi_get_field(gchar * field)
{
gchar *info = moreinfo_lookup_with_prefix("DEV", field);
-
if (info)
- return g_strdup(info);
+ return g_strdup(info);
return g_strdup(field);
}
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
void scan_dmi(gboolean reload)
{
SCAN_START();
@@ -449,13 +595,32 @@ void scan_dmi(gboolean reload)
SCAN_END();
}
-void scan_spd(gboolean reload)
+void scan_dmi_mem(gboolean reload)
{
SCAN_START();
- scan_spd_do();
+ if (memory_devices_info)
+ g_free(memory_devices_info);
+ memory_devices_info = memory_devices_get_info();
+ SCAN_END();
+}
+
+void scan_monitors(gboolean reload)
+{
+ SCAN_START();
+ if (monitors_info)
+ g_free(monitors_info);
+ monitors_info = monitors_get_info();
+ SCAN_END();
+}
+
+void scan_firmware(gboolean reload)
+{
+ SCAN_START();
+ if (firmware_info)
+ g_free(firmware_info);
+ firmware_info = firmware_get_info();
SCAN_END();
}
-#endif
void scan_dtree(gboolean reload)
{
@@ -472,17 +637,17 @@ void scan_processors(gboolean reload)
SCAN_END();
}
-void scan_memory(gboolean reload)
+void scan_battery(gboolean reload)
{
SCAN_START();
- scan_memory_do();
+ scan_battery_do();
SCAN_END();
}
-void scan_battery(gboolean reload)
+void scan_gpu(gboolean reload)
{
SCAN_START();
- scan_battery_do();
+ scan_gpu_do();
SCAN_END();
}
@@ -512,9 +677,12 @@ void scan_storage(gboolean reload)
SCAN_START();
g_free(storage_list);
storage_list = g_strdup("");
-
- __scan_ide_devices();
- __scan_scsi_devices();
+ storage_no_nvme = FALSE;
+ if (!__scan_udisks2_devices()) {
+ storage_no_nvme = TRUE;
+ __scan_ide_devices();
+ __scan_scsi_devices();
+ }
SCAN_END();
}
@@ -537,17 +705,28 @@ gchar *callback_processors()
return processor_get_info(processors);
}
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
gchar *callback_dmi()
{
- return g_strdup(dmi_info);
+ return g_strdup_printf("%s"
+ "[$ShellParam$]\n"
+ "ViewType=5\n",
+ dmi_info);
}
-gchar *callback_spd()
+gchar *callback_dmi_mem()
{
- return g_strdup(spd_info);
+ return g_strdup(memory_devices_info);
+}
+
+gchar *callback_monitors()
+{
+ return g_strdup(monitors_info);
+}
+
+gchar *callback_firmware()
+{
+ return g_strdup(firmware_info);
}
-#endif
gchar *callback_dtree()
{
@@ -556,41 +735,27 @@ gchar *callback_dtree()
"ViewType=1\n", dtree_info);
}
-gchar *callback_memory()
-{
- return g_strdup_printf("[Memory]\n"
- "%s\n"
- "[$ShellParam$]\n"
- "ViewType=2\n"
- "LoadGraphSuffix= kB\n"
- "RescanInterval=2000\n"
- "ColumnTitle$TextValue=%s\n"
- "ColumnTitle$Extra1=%s\n"
- "ColumnTitle$Value=%s\n"
- "ShowColumnHeaders=true\n"
- "%s\n", meminfo,
- _("Field"), _("Description"), _("Value"), /* column labels */
- lginterval);
-}
-
gchar *callback_battery()
{
return g_strdup_printf("%s\n"
"[$ShellParam$]\n"
+ "ViewType=5\n"
"ReloadInterval=4000\n", battery_list);
}
gchar *callback_pci()
{
- return g_strdup_printf("[PCI Devices]\n"
- "%s"
- "[$ShellParam$]\n" "ViewType=1\n", pci_list);
+ return g_strdup(pci_list);
+}
+
+gchar *callback_gpu()
+{
+ return g_strdup(gpu_list);
}
gchar *callback_sensors()
{
- return g_strdup_printf("[Sensors]\n"
- "%s\n"
+ return g_strdup_printf("%s\n"
"[$ShellParam$]\n"
"ViewType=2\n"
"LoadGraphSuffix=\n"
@@ -599,10 +764,13 @@ gchar *callback_sensors()
"ColumnTitle$Extra1=%s\n"
"ShowColumnHeaders=true\n"
"RescanInterval=5000\n"
+ "%s\n"
"%s",
sensors,
- _("Sensor"), _("Value"), _("Type"), /* column labels */
- lginterval);
+ _("Sensor"), _("Value"),
+ SENSORS_GROUP_BY_TYPE ? _("Driver"): _("Type"),
+ lginterval,
+ sensor_icons);
}
gchar *callback_printers()
@@ -617,27 +785,37 @@ gchar *callback_printers()
gchar *callback_storage()
{
return g_strdup_printf("%s\n"
- "[$ShellParam$]\n"
- "ReloadInterval=5000\n"
- "ViewType=1\n%s", storage_list, storage_icons);
+ "[$ShellParam$]\n"
+ "ReloadInterval=5000\n"
+ "ColumnTitle$TextValue=%s\n"
+ "ColumnTitle$Value=%s\n"
+ "ColumnTitle$Extra1=%s\n"
+ "ShowColumnHeaders=true\n"
+ "ViewType=1\n%s", storage_list, _("Device"), _("Size"), _("Model"), storage_icons);
}
gchar *callback_input()
{
return g_strdup_printf("[Input Devices]\n"
- "%s"
- "[$ShellParam$]\n"
- "ViewType=1\n"
- "ReloadInterval=5000\n%s", input_list,
- input_icons);
+ "%s"
+ "[$ShellParam$]\n"
+ "ViewType=1\n"
+ "ColumnTitle$TextValue=%s\n"
+ "ColumnTitle$Value=%s\n"
+ "ColumnTitle$Extra1=%s\n"
+ "ShowColumnHeaders=true\n"
+ "ReloadInterval=5000\n%s",
+ input_list, _("Device"), _("Vendor"), _("Type"),
+ input_icons);
}
gchar *callback_usb()
{
return g_strdup_printf("%s"
- "[$ShellParam$]\n"
- "ViewType=1\n"
- "ReloadInterval=5000\n", usb_list);
+ "[$ShellParam$]\n"
+ "ViewType=1\n"
+ "ReloadInterval=5000\n%s", usb_list, usb_icons);
+
}
ModuleEntry *hi_module_get_entries(void)
@@ -657,54 +835,68 @@ guchar hi_module_get_weight(void)
void hi_module_init(void)
{
- if (!g_file_test("/usr/share/misc/pci.ids", G_FILE_TEST_EXISTS)) {
- static SyncEntry se = {
- .fancy_name = N_("Update PCI ID listing"),
- .name = "GetPCIIds",
- .save_to = "pci.ids",
- .get_data = NULL
- };
-
- sync_manager_add_entry(&se);
- }
+ static SyncEntry entries[] = {
+ {
+ .name = N_("Update PCI ID listing"),
+ .file_name = "pci.ids",
+ },
+ {
+ .name = N_("Update USB ID listing"),
+ .file_name = "usb.ids",
+ },
+ {
+ .name = N_("Update EDID vendor codes"),
+ .file_name = "edid.ids",
+ },
+ {
+ .name = N_("Update IEEE OUI vendor codes"),
+ .file_name = "ieee_oui.ids",
+ },
+ {
+ .name = N_("Update SD card manufacturer information"),
+ .file_name = "sdcard.ids",
+ },
+#ifdef ARCH_x86
+ {
+ .name = N_("Update CPU flags database"),
+ .file_name = "cpuflags.json",
+ },
+#endif
+ };
+ guint i;
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
- {
- static SyncEntry se = {
- .fancy_name = N_("Update CPU feature database"),
- .name = "RecvCPUFlags",
- .save_to = "cpuflags.conf",
- .get_data = NULL
- };
-
- sync_manager_add_entry(&se);
- }
-#endif /* defined(ARCH_x86) */
+ for (i = 0; i < G_N_ELEMENTS(entries); i++)
+ sync_manager_add_entry(&entries[i]);
- init_memory_labels();
init_cups();
- sensors_init();
+ sensor_init();
+ udisks2_init();
+
+#ifdef ARCH_x86
+ void cpuflags_x86_init(void);
+ cpuflags_x86_init();
+#endif
}
void hi_module_deinit(void)
{
moreinfo_del_with_prefix("DEV");
- sensors_shutdown();
- g_hash_table_destroy(memlabels);
- g_module_close(cups);
+ sensor_shutdown();
+ storage_shutdown();
+ udisks2_shutdown();
+ if(cups) g_module_close(cups);
}
-ModuleAbout *hi_module_get_about(void)
+const ModuleAbout *hi_module_get_about(void)
{
- static ModuleAbout ma[] = {
- {
- .author = "Leandro A. F. Pereira",
- .description = N_("Gathers information about hardware devices"),
- .version = VERSION,
- .license = "GNU GPL version 2"}
+ static const ModuleAbout ma = {
+ .author = "L. A. F. Pereira",
+ .description = N_("Gathers information about hardware devices"),
+ .version = VERSION,
+ .license = "GNU GPL version 2 or later.",
};
- return ma;
+ return &ma;
}
gchar **hi_module_get_dependencies(void)
@@ -716,10 +908,39 @@ gchar **hi_module_get_dependencies(void)
const gchar *hi_note_func(gint entry)
{
+ if (entry == ENTRY_PCI
+ || entry == ENTRY_GPU) {
+ const gchar *ids = find_pci_ids_file();
+ if (!ids) {
+ return g_strdup(_("A copy of <i><b>pci.ids</b></i> is not available on the system."));
+ }
+ if (ids && strstr(ids, ".min")) {
+ return g_strdup(_("A full <i><b>pci.ids</b></i> is not available on the system."));
+ }
+ }
if (entry == ENTRY_RESOURCES) {
if (root_required_for_resources()) {
return g_strdup(_("Resource information requires superuser privileges"));
}
}
+ else if (entry == ENTRY_STORAGE){
+ if (storage_no_nvme) {
+ return g_strdup(
+ _("Any NVMe storage devices present are not listed.\n"
+ "<b><i>udisksd</i></b> is required for NVMe devices."));
+ }
+ }
+ else if (entry == ENTRY_DMI_MEM){
+ const char *msg;
+ if (memory_devices_hinote(&msg)) {
+ return msg;
+ }
+ }
+ else if (entry == ENTRY_FW) {
+ const char *msg;
+ if (firmware_hinote(&msg)) {
+ return msg;
+ }
+ }
return NULL;
}