]> sigrok.org Git - libsigrok.git/blob - hardware/common/serial.c
Start of code base layout restructuring.
[libsigrok.git] / hardware / common / serial.c
1 /*
2  * This file is part of the sigrok project.
3  *
4  * Copyright (C) 2010 Bert Vermeulen <bert@biot.com>
5  *
6  * This program is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18  */
19
20 #include <glob.h>
21 #include <glib.h>
22
23
24 char *serial_port_glob[] = {
25         /* Linux */
26         "/dev/ttyS*",
27         "/dev/ttyUSB*",
28         "/dev/ttyACM*",
29         /* MacOS X */
30         "/dev/ttys*",
31         "/dev/tty.USB-*",
32         "/dev/tty.Modem-*",
33         NULL
34 };
35
36
37 GSList *list_serial_ports(void)
38 {
39         glob_t g;
40         GSList *ports;
41         int i, j;
42
43         ports = NULL;
44         for(i = 0; serial_port_glob[i]; i++)
45         {
46                 if(!glob(serial_port_glob[i], 0, NULL, &g))
47                 {
48                         for(j = 0; j < g.gl_pathc; j++)
49                                 ports = g_slist_append(ports, g_strdup(g.gl_pathv[j]));
50                         globfree(&g);
51                 }
52         }
53
54         return ports;
55 }
56
57