aboutsummaryrefslogtreecommitdiff
path: root/modules
diff options
context:
space:
mode:
Diffstat (limited to 'modules')
-rw-r--r--modules/computer.c1
-rw-r--r--modules/devices.c20
-rw-r--r--modules/devices/dmi.c20
3 files changed, 37 insertions, 4 deletions
diff --git a/modules/computer.c b/modules/computer.c
index cb349408..de4e8abe 100644
--- a/modules/computer.c
+++ b/modules/computer.c
@@ -611,6 +611,7 @@ gchar *hi_module_get_summary(void)
"Method=devices::getMemoryTotal\n"
"[Motherboard]\n"
"Icon=module.png\n"
+ "Method=devices::getMotherboard\n"
"[Graphics]\n"
"Icon=monitor.png\n"
"Method=computer::getDisplaySummary\n"
diff --git a/modules/devices.c b/modules/devices.c
index 0fd797c0..b7286f8a 100644
--- a/modules/devices.c
+++ b/modules/devices.c
@@ -180,6 +180,25 @@ gchar *get_memory_total(void)
return hi_more_info("Total Memory");
}
+gchar *get_motherboard(void)
+{
+ char *board_name, *board_vendor;
+
+ scan_dmi(FALSE);
+
+ board_name = (gchar *)g_hash_table_lookup(moreinfo, "DMI:Board:Name");
+ board_vendor = (gchar *)g_hash_table_lookup(moreinfo, "DMI:Board:Vendor");
+
+ if (board_name && board_vendor && *board_name && *board_vendor)
+ return g_strconcat(board_vendor, " ", board_name, NULL);
+ else if (board_name && *board_name)
+ return g_strconcat(board_name, " (vendor unknown)", NULL);
+ else if (board_vendor && *board_vendor)
+ return g_strconcat(board_vendor, " (model unknown)", NULL);
+
+ return g_strdup("Unknown");
+}
+
ShellModuleMethod *hi_exported_methods(void)
{
static ShellModuleMethod m[] = {
@@ -191,6 +210,7 @@ ShellModuleMethod *hi_exported_methods(void)
{"getPrinters", get_printers},
{"getInputDevices", get_input_devices},
{"getPCIDeviceDescription", get_pci_device_description},
+ {"getMotherboard", get_motherboard},
{NULL}
};
diff --git a/modules/devices/dmi.c b/modules/devices/dmi.c
index 8cc45462..9d54fa9c 100644
--- a/modules/devices/dmi.c
+++ b/modules/devices/dmi.c
@@ -43,10 +43,17 @@ DMIInfo dmi_info_table[] = {
gchar *dmi_info = NULL;
+static void add_to_moreinfo(const char *group, const char *key, char *value)
+{
+ char *new_key = g_strconcat("DMI:", group, ":", key, NULL);
+ g_hash_table_replace(moreinfo, new_key, g_strdup(g_strstrip(value)));
+}
+
gboolean dmi_get_info_dmidecode()
{
FILE *dmi_pipe;
gchar buffer[256];
+ const gchar *group;
DMIInfo *info;
gboolean dmi_failed = FALSE;
gint i;
@@ -60,8 +67,8 @@ gboolean dmi_get_info_dmidecode()
info = &dmi_info_table[i];
if (*(info->name) == '$') {
- dmi_info = h_strdup_cprintf("[%s]\n", dmi_info,
- (info->name) + 1);
+ group = info->name + 1;
+ dmi_info = h_strdup_cprintf("[%s]\n", dmi_info, group);
} else {
gchar *temp;
@@ -77,6 +84,8 @@ gboolean dmi_get_info_dmidecode()
dmi_failed = TRUE;
break;
}
+
+ add_to_moreinfo(group, info->name, buffer);
const gchar *url = vendor_get_url(buffer);
if (url) {
@@ -121,6 +130,7 @@ gboolean dmi_get_info_sys()
{
FILE *dmi_file;
gchar buffer[256];
+ const gchar *group;
DMIInfo *info;
gboolean dmi_failed = FALSE;
gint i;
@@ -134,8 +144,8 @@ gboolean dmi_get_info_sys()
info = &dmi_info_table[i];
if (*(info->name) == '$') {
- dmi_info = h_strdup_cprintf("[%s]\n", dmi_info,
- (info->name) + 1);
+ group = info->name + 1;
+ dmi_info = h_strdup_cprintf("[%s]\n", dmi_info, group);
} else {
if (!info->file)
continue;
@@ -143,6 +153,8 @@ gboolean dmi_get_info_sys()
if ((dmi_file = fopen(info->file, "r"))) {
(void)fgets(buffer, 256, dmi_file);
fclose(dmi_file);
+
+ add_to_moreinfo(group, info->name, buffer);
const gchar *url = vendor_get_url(buffer);
if (url) {