1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
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);
}
|