summaryrefslogtreecommitdiff
path: root/serial.c
diff options
context:
space:
mode:
authorSimon Quigley <tsimonq2@ubuntu.com>2017-06-19 14:38:30 -0500
committerSimon Quigley <tsimonq2@ubuntu.com>2017-06-19 14:38:30 -0500
commit8c1612d32c5682a86216adb8c8d11ce715fe5475 (patch)
tree2a51954d577955c8ad19e517e4c7b6b8972982e4 /serial.c
parent0864b0a8e6f0b0983c3536931cfbad1414137d6b (diff)
Import Upstream version 0.3.6
Diffstat (limited to 'serial.c')
-rw-r--r--serial.c123
1 files changed, 123 insertions, 0 deletions
diff --git a/serial.c b/serial.c
new file mode 100644
index 00000000..0de96982
--- /dev/null
+++ b/serial.c
@@ -0,0 +1,123 @@
+/*
+ * Hardware Information, version 0.3.1b
+ * Copyright (C) 2003 Leandro Pereira <leandro@linuxmag.com.br>
+ *
+ * May be modified and/or distributed under the terms of GNU GPL version 2.
+ */
+
+#include "hardinfo.h"
+#include "serial.h"
+
+SerialDevice *hi_scan_serial(void)
+{
+ FILE *proc_tty;
+ struct stat st;
+ const gchar *ser_drv="/proc/tty/driver/serial";
+ gint n=0;
+ SerialDevice *serial_dev, *serial;
+
+ serial = NULL;
+
+ if (!stat(ser_drv, &st)) {
+ gchar buffer[256];
+
+ proc_tty = fopen(ser_drv, "r");
+ while(fgets(buffer, 256, proc_tty)){
+ gint port, irq;
+ gpointer start, end;
+ gchar *buf = buffer;
+
+ if(*buf == 's') continue;
+ if(strstr(buf, "unknown")) continue;
+
+ serial_dev = g_new0(SerialDevice, 1);
+
+ serial_dev->next = serial;
+ serial = serial_dev;
+
+ serial_dev->name = g_strdup_printf
+ ("Serial Port (tty%d)", buffer[0]-'0');
+
+ walk_until('t');
+ buf+=2;
+ start = buf;
+ walk_until(' ');
+ end = buf;
+ *buf = 0;
+ buf = start;
+
+ serial_dev->uart = g_strdup(buf);
+
+ buf = end;
+ *buf = ' ';
+
+ sscanf(buf, " port:%x irq:%d", &port, &irq);
+ serial->port = port;
+ serial->irq = irq;
+ n++;
+ }
+ fclose(proc_tty);
+ }
+
+ return serial;
+}
+
+void hi_show_serial_info(MainWindow *mainwindow, SerialDevice *device)
+{
+ GtkWidget *hbox, *vbox, *label;
+ gchar *buf;
+#ifdef GTK2
+ GtkWidget *pixmap;
+
+ pixmap = gtk_image_new_from_file(IMG_PREFIX "gen_connector.png");
+ gtk_widget_show(pixmap);
+#endif
+
+ if(!device) return;
+
+ hbox = gtk_hbox_new(FALSE, 2);
+ gtk_container_set_border_width(GTK_CONTAINER(hbox), 4);
+ gtk_widget_show(hbox);
+
+ if(mainwindow->framec)
+ gtk_widget_destroy(mainwindow->framec);
+
+ gtk_container_add(GTK_CONTAINER(mainwindow->frame), hbox);
+ mainwindow->framec = hbox;
+
+ gtk_frame_set_label(GTK_FRAME(mainwindow->frame), _("Communication Port"));
+
+#ifdef GTK2
+ gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, FALSE, 0);
+#endif
+
+ vbox = gtk_vbox_new(FALSE, 2);
+ gtk_widget_show(vbox);
+ gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
+
+#ifdef GTK2
+ buf = g_strdup_printf("<b>%s</b>", device->name);
+ label = gtk_label_new(buf);
+ gtk_label_set_use_markup(GTK_LABEL(label), TRUE);
+ gtk_label_set_selectable(GTK_LABEL(label), TRUE);
+
+ g_free(buf);
+#else
+ label = gtk_label_new(device->name);
+#endif
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+
+ buf = g_strdup_printf(_("I/O port: 0x%x, IRQ: %d"), device->port, device->irq);
+ label = gtk_label_new(buf);
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+ g_free(buf);
+
+ buf = g_strdup_printf("UART: %s", device->uart);
+ label = gtk_label_new(buf);
+ gtk_widget_show(label);
+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
+ g_free(buf);
+
+}