mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
Make device enumeration use the device transport data
This removes some special-case code for Uemis, replacing it with simply passing in the device transport information. This makes device enumeration work for the Garmin Descent (if it is listed by libdivecomputer as a USB storage device, that is). I don't actually do any of the libdivecomputer parsing yet, and only have a stub for the Garmin Descent, but now the directory selection works with that stub. The actual download obviously does not. [Dirk Hohndel: removed obsolete FIXME from code] Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
bb067b6ee4
commit
270e9eccad
13 changed files with 40 additions and 33 deletions
|
|
@ -81,7 +81,7 @@ const char *system_default_filename(void)
|
|||
return path;
|
||||
}
|
||||
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, unsigned int transport)
|
||||
{
|
||||
/* FIXME: we need to enumerate in some other way on android */
|
||||
/* qtserialport maybee? */
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@
|
|||
#ifndef DISPLAY_H
|
||||
#define DISPLAY_H
|
||||
|
||||
#include "libdivecomputer.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
|
@ -44,11 +46,7 @@ extern int is_default_dive_computer(const char *, const char *);
|
|||
|
||||
typedef void (*device_callback_t)(const char *name, void *userdata);
|
||||
|
||||
#define DC_TYPE_SERIAL 1
|
||||
#define DC_TYPE_UEMIS 2
|
||||
#define DC_TYPE_OTHER 3
|
||||
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, int dc_type);
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, unsigned int transport);
|
||||
|
||||
extern const char *default_dive_computer_vendor;
|
||||
extern const char *default_dive_computer_product;
|
||||
|
|
|
|||
|
|
@ -158,6 +158,7 @@ void fill_computer_list()
|
|||
mydescriptor->product = "Zurich";
|
||||
mydescriptor->type = DC_FAMILY_NULL;
|
||||
mydescriptor->model = 0;
|
||||
mydescriptor->transports = DC_TRANSPORT_USBSTORAGE;
|
||||
|
||||
if (!vendorList.contains("Uemis"))
|
||||
vendorList.append("Uemis");
|
||||
|
|
@ -171,14 +172,15 @@ void fill_computer_list()
|
|||
qSort(vendorList);
|
||||
}
|
||||
|
||||
#define NUMTRANSPORTS 6
|
||||
#define NUMTRANSPORTS 7
|
||||
static QString transportStringTable[NUMTRANSPORTS] = {
|
||||
QStringLiteral("SERIAL"),
|
||||
QStringLiteral("USB"),
|
||||
QStringLiteral("USBHID"),
|
||||
QStringLiteral("IRDA"),
|
||||
QStringLiteral("BT"),
|
||||
QStringLiteral("BLE")
|
||||
QStringLiteral("BLE"),
|
||||
QStringLiteral("USBSTORAGE"),
|
||||
};
|
||||
|
||||
static QString getTransportString(unsigned int transport)
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ struct mydescriptor {
|
|||
const char *product;
|
||||
dc_family_t type;
|
||||
unsigned int model;
|
||||
unsigned int transports;
|
||||
};
|
||||
|
||||
/* This fills the vendor list QStringList and related members.
|
||||
|
|
|
|||
|
|
@ -68,7 +68,7 @@ const char *system_default_filename(void)
|
|||
return path;
|
||||
}
|
||||
|
||||
int enumerate_devices(device_callback_t, void *, int)
|
||||
int enumerate_devices(device_callback_t, void *, unsigned int)
|
||||
{
|
||||
// we can't read from devices on iOS
|
||||
return -1;
|
||||
|
|
|
|||
|
|
@ -12,6 +12,11 @@
|
|||
#include <libdivecomputer/device.h>
|
||||
#include <libdivecomputer/parser.h>
|
||||
|
||||
// Even if we have an old libdivecomputer, Uemis uses this
|
||||
#ifndef DC_TRANSPORT_USBSTORAGE
|
||||
#define DC_TRANSPORT_USBSTORAGE (1 << 6)
|
||||
#endif
|
||||
|
||||
#include "dive.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
|||
|
|
@ -97,13 +97,13 @@ const char *system_default_filename(void)
|
|||
return path;
|
||||
}
|
||||
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, unsigned int transport)
|
||||
{
|
||||
int index = -1, entries = 0;
|
||||
DIR *dp = NULL;
|
||||
struct dirent *ep = NULL;
|
||||
size_t i;
|
||||
if (dc_type != DC_TYPE_UEMIS) {
|
||||
if (transport & DC_TRANSPORT_SERIAL) {
|
||||
const char *dirname = "/dev";
|
||||
const char *patterns[] = {
|
||||
"tty.*",
|
||||
|
|
@ -135,7 +135,7 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
|||
}
|
||||
closedir(dp);
|
||||
}
|
||||
if (dc_type != DC_TYPE_SERIAL) {
|
||||
if (transport & DC_TRANSPORT_USBSTORAGE) {
|
||||
const char *dirname = "/Volumes";
|
||||
int num_uemis = 0;
|
||||
dp = opendir(dirname);
|
||||
|
|
|
|||
|
|
@ -100,7 +100,7 @@ const char *system_default_filename(void)
|
|||
return path;
|
||||
}
|
||||
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, unsigned int transport)
|
||||
{
|
||||
int index = -1, entries = 0;
|
||||
DIR *dp = NULL;
|
||||
|
|
@ -110,7 +110,7 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
|||
char *line = NULL;
|
||||
char *fname;
|
||||
size_t len;
|
||||
if (dc_type != DC_TYPE_UEMIS) {
|
||||
if (transport & DC_TRANSPORT_SERIAL) {
|
||||
const char *dirname = "/dev";
|
||||
#ifdef __OpenBSD__
|
||||
const char *patterns[] = {
|
||||
|
|
@ -153,7 +153,7 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
|||
closedir(dp);
|
||||
}
|
||||
#ifdef __linux__
|
||||
if (dc_type != DC_TYPE_SERIAL) {
|
||||
if (transport & DC_TRANSPORT_USBSTORAGE) {
|
||||
int num_uemis = 0;
|
||||
file = fopen("/proc/mounts", "r");
|
||||
if (file == NULL)
|
||||
|
|
|
|||
|
|
@ -117,11 +117,11 @@ const char *system_default_filename(void)
|
|||
return path;
|
||||
}
|
||||
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
||||
int enumerate_devices(device_callback_t callback, void *userdata, unsigned int transport)
|
||||
{
|
||||
int index = -1;
|
||||
DWORD i;
|
||||
if (dc_type != DC_TYPE_UEMIS) {
|
||||
if (transport & DC_TRANSPORT_SERIAL) {
|
||||
// Open the registry key.
|
||||
HKEY hKey;
|
||||
LONG rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\SERIALCOMM", 0, KEY_QUERY_VALUE, &hKey);
|
||||
|
|
@ -169,7 +169,7 @@ int enumerate_devices(device_callback_t callback, void *userdata, int dc_type)
|
|||
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
if (dc_type != DC_TYPE_SERIAL) {
|
||||
if (transport & DC_TRANSPORT_USBSTORAGE) {
|
||||
int i;
|
||||
int count_drives = 0;
|
||||
const int bufdef = 512;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue