aboutsummaryrefslogtreecommitdiff
path: root/modules/devices.c
diff options
context:
space:
mode:
Diffstat (limited to 'modules/devices.c')
-rw-r--r--modules/devices.c725
1 files changed, 0 insertions, 725 deletions
diff --git a/modules/devices.c b/modules/devices.c
deleted file mode 100644
index 152b6831..00000000
--- a/modules/devices.c
+++ /dev/null
@@ -1,725 +0,0 @@
-/*
- * HardInfo - Displays System Information
- * Copyright (C) 2003-2007 Leandro A. F. Pereira <leandro@hardinfo.org>
- *
- * 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.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef __USE_XOPEN
-#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>
-
-#include <hardinfo.h>
-#include <shell.h>
-#include <iconcache.h>
-#include <syncmanager.h>
-
-#include <expr.h>
-#include <socket.h>
-
-#include "devices.h"
-#include "dt_util.h"
-
-gchar *callback_processors();
-gchar *callback_memory();
-gchar *callback_battery();
-gchar *callback_pci();
-gchar *callback_sensors();
-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_dtree();
-gchar *callback_device_resources();
-
-void scan_processors(gboolean reload);
-void scan_memory(gboolean reload);
-void scan_battery(gboolean reload);
-void scan_pci(gboolean reload);
-void scan_sensors(gboolean reload);
-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_dtree(gboolean reload);
-void scan_device_resources(gboolean reload);
-
-gboolean root_required_for_resources(void);
-
-gchar *hi_more_info(gchar *entry);
-
-enum {
- ENTRY_DTREE,
- ENTRY_PROCESSOR,
- ENTRY_MEMORY,
- ENTRY_PCI,
- ENTRY_USB,
- 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_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_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},
-#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] = {"#"},
-#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},
- { NULL }
-};
-
-static GSList *processors = NULL;
-gchar *printer_list = NULL;
-gchar *printer_icons = NULL;
-gchar *pci_list = NULL;
-gchar *input_list = NULL;
-gchar *storage_list = NULL;
-gchar *battery_list = NULL;
-gchar *meminfo = NULL;
-gchar *lginterval = NULL;
-
-#include <vendor.h>
-
-static gint proc_cmp_model_name(Processor *a, Processor *b) {
- return g_strcmp0(a->model_name, b->model_name);
-}
-
-static gint proc_cmp_max_freq(Processor *a, Processor *b) {
- if (a->cpu_mhz == b->cpu_mhz)
- return 0;
- if (a->cpu_mhz > b->cpu_mhz)
- return -1;
- return 1;
-}
-
-gchar *processor_describe_default(GSList * processors)
-{
- int packs, cores, threads;
- const gchar *packs_fmt, *cores_fmt, *threads_fmt;
- gchar *ret, *full_fmt;
-
- cpu_procs_cores_threads(&packs, &cores, &threads);
-
- /* 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);
- g_free(full_fmt);
- return ret;
- } else {
- return processor_describe_by_counting_names(processors);
- }
-}
-
-gchar *processor_name_default(GSList * processors)
-{
- gchar *ret = g_strdup("");
- GSList *tmp, *l;
- Processor *p;
- gchar *cur_str = NULL;
- gint cur_count = 0;
-
- tmp = g_slist_copy(processors);
- tmp = g_slist_sort(tmp, (GCompareFunc)proc_cmp_model_name);
-
- for (l = tmp; l; l = l->next) {
- p = (Processor*)l->data;
- if (cur_str == NULL) {
- cur_str = p->model_name;
- cur_count = 1;
- } else {
- if(g_strcmp0(cur_str, p->model_name)) {
- ret = h_strdup_cprintf("%s%s", ret, strlen(ret) ? "; " : "", cur_str);
- cur_str = p->model_name;
- cur_count = 1;
- } else {
- cur_count++;
- }
- }
- }
- ret = h_strdup_cprintf("%s%s", ret, strlen(ret) ? "; " : "", cur_str);
- g_slist_free(tmp);
- return ret;
-}
-
-/* TODO: prefix counts are threads when they should be cores. */
-gchar *processor_describe_by_counting_names(GSList * processors)
-{
- gchar *ret = g_strdup("");
- GSList *tmp, *l;
- Processor *p;
- gchar *cur_str = NULL;
- gint cur_count = 0;
-
- tmp = g_slist_copy(processors);
- tmp = g_slist_sort(tmp, (GCompareFunc)proc_cmp_model_name);
-
- for (l = tmp; l; l = l->next) {
- p = (Processor*)l->data;
- if (cur_str == NULL) {
- cur_str = p->model_name;
- cur_count = 1;
- } else {
- if(g_strcmp0(cur_str, p->model_name)) {
- ret = h_strdup_cprintf("%s%dx %s", ret, strlen(ret) ? " + " : "", cur_count, cur_str);
- cur_str = p->model_name;
- cur_count = 1;
- } else {
- cur_count++;
- }
- }
- }
- ret = h_strdup_cprintf("%s%dx %s", ret, strlen(ret) ? " + " : "", cur_count, cur_str);
- g_slist_free(tmp);
- return ret;
-}
-
-gchar *get_processor_name(void)
-{
- scan_processors(FALSE);
- return processor_name(processors);
-}
-
-gchar *get_processor_desc(void)
-{
- scan_processors(FALSE);
- return processor_describe(processors);
-}
-
-gchar *get_processor_name_and_desc(void)
-{
- scan_processors(FALSE);
- gchar* name = processor_name(processors);
- gchar* desc = processor_describe(processors);
- gchar* nd = g_strdup_printf("%s\n%s", name, desc);
- g_free(name);
- g_free(desc);
- return nd;
-}
-
-
-gchar *get_storage_devices(void)
-{
- scan_storage(FALSE);
-
- return storage_list;
-}
-
-gchar *get_printers(void)
-{
- scan_printers(FALSE);
-
- return printer_list;
-}
-
-gchar *get_input_devices(void)
-{
- scan_input(FALSE);
-
- return input_list;
-}
-
-gchar *get_processor_count(void)
-{
- scan_processors(FALSE);
-
- return g_strdup_printf("%d", g_slist_length(processors));
-}
-
-/* TODO: maybe move into processor.c along with processor_name() etc.
- * Could mention the big.LITTLE cluster arangement for ARM that kind of thing.
- * TODO: prefix counts are threads when they should be cores. */
-gchar *processor_frequency_desc(GSList * processors)
-{
- gchar *ret = g_strdup("");
- GSList *tmp, *l;
- Processor *p;
- float cur_val = -1;
- gint cur_count = 0;
-
- tmp = g_slist_copy(processors);
- tmp = g_slist_sort(tmp, (GCompareFunc)proc_cmp_max_freq);
-
- for (l = tmp; l; l = l->next) {
- p = (Processor*)l->data;
- if (cur_val == -1) {
- cur_val = p->cpu_mhz;
- cur_count = 1;
- } else {
- if(cur_val != p->cpu_mhz) {
- ret = h_strdup_cprintf("%s%dx %.2f %s", ret, strlen(ret) ? " + " : "", cur_count, cur_val, _("MHz") );
- cur_val = p->cpu_mhz;
- cur_count = 1;
- } else {
- cur_count++;
- }
- }
- }
- ret = h_strdup_cprintf("%s%dx %.2f %s", ret, strlen(ret) ? " + " : "", cur_count, cur_val, _("MHz"));
- g_slist_free(tmp);
- return ret;
-}
-
-gchar *get_processor_frequency_desc(void)
-{
- scan_processors(FALSE);
- return processor_frequency_desc(processors);
-}
-
-gchar *get_processor_max_frequency(void)
-{
- GSList *l;
- Processor *p;
- float max_freq = 0;
-
- scan_processors(FALSE);
-
- for (l = processors; l; l = l->next) {
- p = (Processor*)l->data;
- if (p->cpu_mhz > max_freq)
- max_freq = p->cpu_mhz;
- }
-
- if (max_freq == 0.0f) {
- return g_strdup(N_("Unknown"));
- } else {
- return g_strdup_printf("%.2f %s", max_freq, _("MHz") );
- }
-}
-
-gchar *get_pci_device_description(gchar *pci_id)
-{
- gchar *description;
-
- if (!_pci_devices) {
- scan_pci(FALSE);
- }
-
- if ((description = g_hash_table_lookup(_pci_devices, pci_id))) {
- return g_strdup(description);
- }
-
- return NULL;
-}
-
-gchar *get_memory_total(void)
-{
- scan_memory(FALSE);
- return moreinfo_lookup ("DEV:MemTotal");
-}
-
-gchar *get_motherboard(void)
-{
- char *board_name, *board_vendor, *system_version;
- char *ret;
-
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
- scan_dmi(FALSE);
-
- board_name = dmi_get_str("baseboard-product-name");
- if (board_name == NULL)
- board_name = dmi_get_str("system-product-name");
-
- 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);
- else
- ret = g_strdup(_("(Unknown)"));
-
- free(board_name);
- free(board_vendor);
- free(system_version);
- return ret;
-#endif
-
- /* use device tree "model" */
- board_vendor = dtr_get_string("/model", 0);
- if (board_vendor != NULL)
- return board_vendor;
-
- 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}
- };
-
- return m;
-}
-
-gchar *hi_more_info(gchar * entry)
-{
- gchar *info = moreinfo_lookup_with_prefix("DEV", entry);
-
- if (info)
- return g_strdup(info);
-
- return g_strdup("?");
-}
-
-gchar *hi_get_field(gchar * field)
-{
- gchar *info = moreinfo_lookup_with_prefix("DEV", field);
-
- if (info)
- return g_strdup(info);
-
- return g_strdup(field);
-}
-
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
-void scan_dmi(gboolean reload)
-{
- SCAN_START();
- __scan_dmi();
- SCAN_END();
-}
-
-void scan_spd(gboolean reload)
-{
- SCAN_START();
- scan_spd_do();
- SCAN_END();
-}
-#endif
-
-void scan_dtree(gboolean reload)
-{
- SCAN_START();
- __scan_dtree();
- SCAN_END();
-}
-
-void scan_processors(gboolean reload)
-{
- SCAN_START();
- if (!processors)
- processors = processor_scan();
- SCAN_END();
-}
-
-void scan_memory(gboolean reload)
-{
- SCAN_START();
- scan_memory_do();
- SCAN_END();
-}
-
-void scan_battery(gboolean reload)
-{
- SCAN_START();
- scan_battery_do();
- SCAN_END();
-}
-
-void scan_pci(gboolean reload)
-{
- SCAN_START();
- scan_pci_do();
- SCAN_END();
-}
-
-void scan_sensors(gboolean reload)
-{
- SCAN_START();
- scan_sensors_do();
- SCAN_END();
-}
-
-void scan_printers(gboolean reload)
-{
- SCAN_START();
- scan_printers_do();
- SCAN_END();
-}
-
-void scan_storage(gboolean reload)
-{
- SCAN_START();
- g_free(storage_list);
- storage_list = g_strdup("");
-
- __scan_ide_devices();
- __scan_scsi_devices();
- SCAN_END();
-}
-
-void scan_input(gboolean reload)
-{
- SCAN_START();
- __scan_input_devices();
- SCAN_END();
-}
-
-void scan_usb(gboolean reload)
-{
- SCAN_START();
- __scan_usb();
- SCAN_END();
-}
-
-gchar *callback_processors()
-{
- return processor_get_info(processors);
-}
-
-#if defined(ARCH_x86) || defined(ARCH_x86_64)
-gchar *callback_dmi()
-{
- return g_strdup(dmi_info);
-}
-
-gchar *callback_spd()
-{
- return g_strdup(spd_info);
-}
-#endif
-
-gchar *callback_dtree()
-{
- return g_strdup_printf("%s"
- "[$ShellParam$]\n"
- "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"
- "ReloadInterval=4000\n", battery_list);
-}
-
-gchar *callback_pci()
-{
- return g_strdup_printf("[PCI Devices]\n"
- "%s"
- "[$ShellParam$]\n" "ViewType=1\n", pci_list);
-}
-
-gchar *callback_sensors()
-{
- return g_strdup_printf("[Sensors]\n"
- "%s\n"
- "[$ShellParam$]\n"
- "ViewType=2\n"
- "LoadGraphSuffix=\n"
- "ColumnTitle$TextValue=%s\n"
- "ColumnTitle$Value=%s\n"
- "ColumnTitle$Extra1=%s\n"
- "ShowColumnHeaders=true\n"
- "RescanInterval=5000\n"
- "%s",
- sensors,
- _("Sensor"), _("Value"), _("Type"), /* column labels */
- lginterval);
-}
-
-gchar *callback_printers()
-{
- return g_strdup_printf("%s\n"
- "[$ShellParam$]\n"
- "ViewType=1\n"
- "ReloadInterval=5000\n"
- "%s", printer_list, printer_icons);
-}
-
-gchar *callback_storage()
-{
- return g_strdup_printf("%s\n"
- "[$ShellParam$]\n"
- "ReloadInterval=5000\n"
- "ViewType=1\n%s", storage_list, 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);
-}
-
-gchar *callback_usb()
-{
- return g_strdup_printf("%s"
- "[$ShellParam$]\n"
- "ViewType=1\n"
- "ReloadInterval=5000\n", usb_list);
-}
-
-ModuleEntry *hi_module_get_entries(void)
-{
- return entries;
-}
-
-gchar *hi_module_get_name(void)
-{
- return g_strdup(_("Devices"));
-}
-
-guchar hi_module_get_weight(void)
-{
- return 85;
-}
-
-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);
- }
-
-#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) */
-
- init_memory_labels();
- init_cups();
- sensors_init();
-}
-
-void hi_module_deinit(void)
-{
- moreinfo_del_with_prefix("DEV");
- sensors_shutdown();
- g_hash_table_destroy(memlabels);
- g_module_close(cups);
-}
-
-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"}
- };
-
- return ma;
-}
-
-gchar **hi_module_get_dependencies(void)
-{
- static gchar *deps[] = { "computer.so", NULL };
-
- return deps;
-}
-
-const gchar *hi_note_func(gint entry)
-{
- if (entry == ENTRY_RESOURCES) {
- if (root_required_for_resources()) {
- return g_strdup(_("Resource information requires superuser privileges"));
- }
- }
- return NULL;
-}