diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2014-05-18 13:29:40 +0900 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-05-19 20:12:55 +0900 |
commit | 047032ee46ef00d924dea0ee68b0f2726975fcd6 (patch) | |
tree | b3a8c1120e2bc873e6996842fba7a820a7a0c282 /macos.c | |
parent | 6d42a99e7f6d3ea3a9c977604c7cc980a4215f18 (diff) | |
download | subsurface-047032ee46ef00d924dea0ee68b0f2726975fcd6.tar.gz |
Divecomputer download: try to offer only those devices that make sense
If the user selects a Uemis divecomputer, don't show serial devices.
If the user selects a serial divecomputer, don't show the Uemis
filesystem.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'macos.c')
-rw-r--r-- | macos.c | 57 |
1 files changed, 40 insertions, 17 deletions
@@ -45,27 +45,52 @@ const char *system_default_filename(void) return buffer; } -int enumerate_devices(device_callback_t callback, void *userdata) +int enumerate_devices(device_callback_t callback, void *userdata, int dc_type) { int index = -1; DIR *dp = NULL; struct dirent *ep = NULL; size_t i; - const char *dirname = "/dev"; - const char *patterns[] = { - "tty.*", - "usbserial", - NULL - }; - - dp = opendir(dirname); - if (dp == NULL) { - return -1; + if (dc_type != DC_TYPE_UEMIS) { + const char *dirname = "/dev"; + const char *patterns[] = { + "tty.*", + "usbserial", + NULL + }; + + dp = opendir(dirname); + if (dp == NULL) { + return -1; + } + + while ((ep = readdir(dp)) != NULL) { + for (i = 0; patterns[i] != NULL; ++i) { + if (fnmatch(patterns[i], ep->d_name, 0) == 0) { + char filename[1024]; + int n = snprintf(filename, sizeof(filename), "%s/%s", dirname, ep->d_name); + if (n >= sizeof(filename)) { + closedir(dp); + return -1; + } + callback(filename, userdata); + if (is_default_dive_computer_device(filename)) + index = i; + break; + } + } + } + closedir(dp); } + if (dc_type != DC_TYPE_SERIAL) { + const char *dirname = "/Volumes"; + dp = opendir(dirname); + if (dp == NULL) { + return -1; + } - while ((ep = readdir(dp)) != NULL) { - for (i = 0; patterns[i] != NULL; ++i) { - if (fnmatch(patterns[i], ep->d_name, 0) == 0) { + while ((ep = readdir(dp)) != NULL) { + if (fnmatch("UEMISSDA", ep->d_name, 0) == 0) { char filename[1024]; int n = snprintf(filename, sizeof(filename), "%s/%s", dirname, ep->d_name); if (n >= sizeof(filename)) { @@ -78,10 +103,8 @@ int enumerate_devices(device_callback_t callback, void *userdata) break; } } + closedir(dp); } - // TODO: list UEMIS mount point from /proc/mounts - - closedir(dp); return index; } |