mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
mobile UI: rescan button on DC Download page rescans BT/BLE/USB
This way even if a USB device wasn't added through an Android intent, we still have a way to scan for it and select it. This is especially important in case a user has a cable that we haven't seen yet (i.e. with a VID/PID that we haven't added to Subsurface-mobile), but that nevertheless works with the android usb serial drivers. This also makes the flow a little more logical / consistent when deciding which connections to show. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
parent
274dbc2ebf
commit
ff2f199eed
3 changed files with 38 additions and 18 deletions
|
@ -353,7 +353,7 @@ Kirigami.Page {
|
||||||
text: qsTr("Rescan")
|
text: qsTr("Rescan")
|
||||||
enabled: manager.btEnabled
|
enabled: manager.btEnabled
|
||||||
onClicked: {
|
onClicked: {
|
||||||
manager.btRescan()
|
manager.rescanConnections()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,23 @@ void QMLManager::btRescan()
|
||||||
BTDiscovery::instance()->BTDiscoveryReDiscover();
|
BTDiscovery::instance()->BTDiscoveryReDiscover();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QMLManager::rescanConnections()
|
||||||
|
{
|
||||||
|
connectionListModel.removeAllAddresses();
|
||||||
|
btRescan();
|
||||||
|
usbRescan();
|
||||||
|
#if defined(SERIAL_FTDI)
|
||||||
|
connectionListModel.addAddress("FTDI");
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void QMLManager::usbRescan()
|
||||||
|
{
|
||||||
|
#if defined(Q_OS_ANDROID)
|
||||||
|
androidUsbPopoulateConnections();
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
QMLManager::QMLManager() : m_locationServiceEnabled(false),
|
QMLManager::QMLManager() : m_locationServiceEnabled(false),
|
||||||
m_verboseEnabled(false),
|
m_verboseEnabled(false),
|
||||||
alreadySaving(false),
|
alreadySaving(false),
|
||||||
|
@ -2086,6 +2103,20 @@ QString QMLManager::getProductVendorConnectionIdx(android_usb_serial_device_desc
|
||||||
return QString("%1;%2;%3").arg(vendIdx).arg(prodIdx).arg(connIdx);
|
return QString("%1;%2;%3").arg(vendIdx).arg(prodIdx).arg(connIdx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QMLManager::androidUsbPopoulateConnections()
|
||||||
|
{
|
||||||
|
// let's understand what devices are available
|
||||||
|
androidSerialDevices = serial_usb_android_get_devices();
|
||||||
|
appendTextToLog(QString("rescanning USB: %1 devices reported").arg(androidSerialDevices.size()));
|
||||||
|
|
||||||
|
// list all USB devices, this will include the one that triggered the intent
|
||||||
|
for (unsigned int i = 0; i < androidSerialDevices.size(); i++) {
|
||||||
|
QString uiString = QString::fromStdString(androidSerialDevices[i].uiRepresentation);
|
||||||
|
appendTextToLog(QString("found USB device with ui string %1").arg(uiString));
|
||||||
|
connectionListModel.addAddress(uiString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void QMLManager::showDownloadPage(QAndroidJniObject usbDevice)
|
void QMLManager::showDownloadPage(QAndroidJniObject usbDevice)
|
||||||
{
|
{
|
||||||
if (!usbDevice.isValid()) {
|
if (!usbDevice.isValid()) {
|
||||||
|
@ -2093,26 +2124,12 @@ void QMLManager::showDownloadPage(QAndroidJniObject usbDevice)
|
||||||
// if that happens, just make sure the DownloadPage is reopened
|
// if that happens, just make sure the DownloadPage is reopened
|
||||||
m_pluggedInDeviceName = QString("reopen");
|
m_pluggedInDeviceName = QString("reopen");
|
||||||
} else {
|
} else {
|
||||||
|
// repopulate the connection list
|
||||||
|
rescanConnections();
|
||||||
|
|
||||||
// parse the usbDevice
|
// parse the usbDevice
|
||||||
android_usb_serial_device_descriptor usbDeviceDescriptor = getDescriptor(usbDevice);
|
android_usb_serial_device_descriptor usbDeviceDescriptor = getDescriptor(usbDevice);
|
||||||
|
|
||||||
// let's understand what devices are available
|
|
||||||
androidSerialDevices = serial_usb_android_get_devices();
|
|
||||||
appendTextToLog(QString("entered showDownloadPage with %1 devices reported").arg(androidSerialDevices.size()));
|
|
||||||
|
|
||||||
// list all USB devices, this will include the one that triggered the intent
|
|
||||||
for (unsigned int i = 0; i < androidSerialDevices.size(); i++) {
|
|
||||||
// the expected case -- does this match the deviceString we got from the intent?
|
|
||||||
QString uiString = QString::fromStdString(androidSerialDevices[i].uiRepresentation);
|
|
||||||
//QString deviceName = uiString.left(uiString.indexOf(QString(" (")) + 1);
|
|
||||||
appendTextToLog(QString("looking at USB device with ui representation %1").arg(uiString));
|
|
||||||
if (androidSerialDevices[i].uiRepresentation == usbDeviceDescriptor.uiRepresentation) {
|
|
||||||
appendTextToLog("matches the information we received from the intent");
|
|
||||||
} else {
|
|
||||||
appendTextToLog("doesn't match the device received from the intent");
|
|
||||||
}
|
|
||||||
connectionListModel.addAddress(QString::fromStdString(androidSerialDevices[i].uiRepresentation));
|
|
||||||
}
|
|
||||||
// inform the QML UI that it should show the download page
|
// inform the QML UI that it should show the download page
|
||||||
m_pluggedInDeviceName = getProductVendorConnectionIdx(usbDeviceDescriptor);
|
m_pluggedInDeviceName = getProductVendorConnectionIdx(usbDeviceDescriptor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -231,8 +231,11 @@ public slots:
|
||||||
void quit();
|
void quit();
|
||||||
void hasLocationSourceChanged();
|
void hasLocationSourceChanged();
|
||||||
void btRescan();
|
void btRescan();
|
||||||
|
void usbRescan();
|
||||||
|
void rescanConnections();
|
||||||
#if defined(Q_OS_ANDROID)
|
#if defined(Q_OS_ANDROID)
|
||||||
void showDownloadPage(QAndroidJniObject usbDevice);
|
void showDownloadPage(QAndroidJniObject usbDevice);
|
||||||
|
void androidUsbPopoulateConnections();
|
||||||
QString getProductVendorConnectionIdx(android_usb_serial_device_descriptor descriptor);
|
QString getProductVendorConnectionIdx(android_usb_serial_device_descriptor descriptor);
|
||||||
#endif
|
#endif
|
||||||
void divesChanged(const QVector<dive *> &dives, DiveField field);
|
void divesChanged(const QVector<dive *> &dives, DiveField field);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue