summaryrefslogtreecommitdiffstats
path: root/macos.c
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2012-10-26 15:52:39 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2012-10-27 21:12:14 -0700
commit2de6f796354ad029e9e786027210fcf1b02868e2 (patch)
treed3b31a6f17eaf866db943769e75159d7c77a1815 /macos.c
parentd88c69b97a9aa563cba0dc5c2b4aad2b4ce61b12 (diff)
downloadsubsurface-2de6f796354ad029e9e786027210fcf1b02868e2.tar.gz
Improve the dive computer device selection
We try to identify devices that are connected and their matching device names (and mount paths in the case of the Uemis Zurich). Those are presented as a drop down menu to choose from. The user can still override this by simply entering a different device / path name. On Windows this is not functional. How do I find out which drive letter corresponds to the USB device named "UEMISSDA"? Similarly we need code that finds serial ports that are present. For now we once again default to COM3 (so this isn't a step back, but of course it's far from what we want). Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'macos.c')
-rw-r--r--macos.c52
1 files changed, 50 insertions, 2 deletions
diff --git a/macos.c b/macos.c
index 6727c1053..56b5b3bdf 100644
--- a/macos.c
+++ b/macos.c
@@ -72,9 +72,57 @@ void subsurface_close_conf(void)
/* Nothing */
}
-const char *subsurface_USB_name()
+Int subsurface_fill_device_list(GtkListStore *store)
{
- return "/dev/tty.SLAB_USBtoUART";
+ int i = 0;
+ int index = -1;
+ GtkTreeIter iter;
+ GDir *dev;
+ const char *name;
+ char *buffer;
+ gsize length;
+
+ dev = g_dir_open("/dev", 0, NULL);
+ while (dev && (name = g_dir_read_name(dev)) != NULL) {
+ if (strstr(name, "usbserial")) {
+ int len = strlen(name) + 6;
+ char *devicename = malloc(len);
+ snprintf(devicename, len, "/dev/%s", name);
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ 0, devicename, -1);
+ if (is_default_dive_computer_device(devicename))
+ index = i;
+ i++;
+ }
+ }
+ if (dev)
+ g_dir_close(dev);
+ dev = g_dir_open("/Volumes", 0, NULL);
+ while (dev && (name = g_dir_read_name(dev)) != NULL) {
+ if (strstr(name, "UEMISSDA")) {
+ int len = strlen(name) + 10;
+ char *devicename = malloc(len);
+ snprintf(devicename, len, "/Volumes/%s", name);
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ 0, devicename, -1);
+ if (is_default_dive_computer_device(devicename))
+ index = i;
+ i++;
+ }
+ }
+ if (dev)
+ g_dir_close(dev);
+ if (i == 0) {
+ /* if we can't find anything, use the default */
+ gtk_list_store_append(store, &iter);
+ gtk_list_store_set(store, &iter,
+ 0, "/dev/tty.SLAB_USBtoUART", -1);
+ if (is_default_dive_computer_device("/dev/tty.SLAB_USBtoUART"))
+ index = i;
+ }
+ return index;
}
const char *subsurface_icon_name()