diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2020-04-10 14:51:27 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2020-04-10 17:18:17 -0700 |
commit | fe6ecb4cd8854c052ce59df2442fa387f65a1a96 (patch) | |
tree | 752393b81782790272d86feb18ffe96ef9580417 /core | |
parent | 55bbdc2728854d06a26b59d7402b9ba948e82a60 (diff) | |
download | subsurface-fe6ecb4cd8854c052ce59df2442fa387f65a1a96.tar.gz |
code cleanup: once we find a match, stop checking
This isn't really a useful performance improvement, but it's still better,
IMHO, because we don't have a less specific match later on potentially change
an already executed match.
Because of our coding style the comment covering multiple cases of Pelagic dive
computers now is associated just with the first of those entries. I don't see a
way to do this differently without being in violation of our coding style, so
I'll just keep it like this.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'core')
-rw-r--r-- | core/btdiscovery.cpp | 93 |
1 files changed, 33 insertions, 60 deletions
diff --git a/core/btdiscovery.cpp b/core/btdiscovery.cpp index 396ba4867..b70330410 100644 --- a/core/btdiscovery.cpp +++ b/core/btdiscovery.cpp @@ -34,13 +34,11 @@ static dc_descriptor_t *getDeviceType(QString btName) // just use a default product that allows the codoe to download from the // user's dive computer else product = "OSTC 2"; - } - - if (btName.startsWith("Predator") || - btName.startsWith("Petrel") || - btName.startsWith("Perdix") || - btName.startsWith("Teric") || - btName.startsWith("NERD")) { + } else if (btName.startsWith("Predator") || + btName.startsWith("Petrel") || + btName.startsWith("Perdix") || + btName.startsWith("Teric") || + btName.startsWith("NERD")) { vendor = "Shearwater"; // both the Petrel and Petrel 2 identify as "Petrel" as BT/BLE device // but only the Petrel 2 is listed as available dive computer on iOS (which requires BLE support) @@ -51,31 +49,21 @@ static dc_descriptor_t *getDeviceType(QString btName) if (btName.startsWith("Teric")) product = "Teric"; if (btName.startsWith("NERD")) product = "Nerd"; // next line might override this if (btName.startsWith("NERD 2")) product = "Nerd 2"; - } - - if (btName.startsWith("EON Steel")) { + } else if (btName.startsWith("EON Steel")) { vendor = "Suunto"; product = "EON Steel"; - } - - if (btName.startsWith("EON Core")) { + } else if (btName.startsWith("EON Core")) { vendor = "Suunto"; product = "EON Core"; - } - - if (btName.startsWith("Suunto D5")) { + } else if (btName.startsWith("Suunto D5")) { vendor = "Suunto"; product = "D5"; - } - - if (btName.startsWith("G2") || btName.startsWith("Aladin") || btName.startsWith("HUD")) { + } else if (btName.startsWith("G2") || btName.startsWith("Aladin") || btName.startsWith("HUD")) { vendor = "Scubapro"; if (btName.startsWith("G2")) product = "G2"; if (btName.startsWith("HUD")) product = "G2 HUD"; if (btName.startsWith("Aladin")) product = "Aladin Sport Matrix"; - } - - if (btName.startsWith("Mares")) { + } else if (btName.startsWith("Mares")) { vendor = "Mares"; // we don't know which of the dive computers it is, // so let's just randomly pick one @@ -83,66 +71,51 @@ static dc_descriptor_t *getDeviceType(QString btName) // Some we can pick out directly if (btName.startsWith("Mares Genius")) product = "Genius"; - } - - if (btName.startsWith("CARTESIO_")) { + } else if (btName.startsWith("CARTESIO_")) { vendor = "Cressi"; product = "Cartesio"; - } - - if (btName.startsWith("GOA_")) { + } else if (btName.startsWith("GOA_")) { vendor = "Cressi"; product = "Goa"; - } - - // The Pelagic dive computers (generally branded as Oceanic or Aqualung) - // show up with a two-byte model code followed by six bytes of serial - // number. The model code matches the hex model (so "FQ" is 0x4651, - // where 'F' is 46h and 'Q' is 51h in ASCII). - if (btName.contains(QRegularExpression("^FI\\d{6}$"))) { + } else if (btName.contains(QRegularExpression("^FI\\d{6}$"))) { + // The Pelagic dive computers (generally branded as Oceanic or Aqualung) + // show up with a two-byte model code followed by six bytes of serial + // number. The model code matches the hex model (so "FQ" is 0x4651, + // where 'F' is 46h and 'Q' is 51h in ASCII). vendor = "Aqualung"; product = "i200c"; - } - - if (btName.contains(QRegularExpression("^FH\\d{6}$"))) { + } else if (btName.contains(QRegularExpression("^FH\\d{6}$"))) { vendor = "Aqualung"; product = "i300c"; - } - - if (btName.contains(QRegularExpression("^FQ\\d{6}$"))) { + } else if (btName.contains(QRegularExpression("^FQ\\d{6}$"))) { vendor = "Aqualung"; product = "i770R"; - } - - if (btName.contains(QRegularExpression("^FR\\d{6}$"))) { + } else if (btName.contains(QRegularExpression("^FR\\d{6}$"))) { vendor = "Aqualung"; product = "i550c"; - } - - if (btName.contains(QRegularExpression("^ER\\d{6}$"))) { + } else if (btName.contains(QRegularExpression("^ER\\d{6}$"))) { vendor = "Oceanic"; product = "Pro Plus X"; - } - - if (btName.contains(QRegularExpression("^FS\\d{6}$"))) { + } else if (btName.contains(QRegularExpression("^FS\\d{6}$"))) { vendor = "Oceanic"; product = "Geo 4.0"; - } - - // The Ratio bluetooth name looks like the Pelagic ones, - // but that seems to be just happenstance. - if (btName.contains(QRegularExpression("^DS\\d{6}"))) { + } else if (btName.contains(QRegularExpression("^DS\\d{6}"))) { + // The Ratio bluetooth name looks like the Pelagic ones, + // but that seems to be just happenstance. vendor = "Ratio"; product = "iX3M GPS Easy"; // we don't know which of the GPS models, so set one - } - - if (btName == "COSMIQ") { + } else if (btName == "COSMIQ") { vendor = "Deepblu"; product = "Cosmiq+"; } - if (!vendor.isEmpty() && !product.isEmpty()) - return descriptorLookup.value(vendor + product); + // check if we found a known dive computer + if (!vendor.isEmpty() && !product.isEmpty()) { + dc_descriptor_t *lookup = descriptorLookup.value(vendor + product); + if (!lookup) + qWarning("known dive computer %s not found in descriptorLookup", qPrintable(QString(vendor + product))); + return lookup; + } return nullptr; } |