Skip to content

Commit

Permalink
Bluetooth: make LE-only devices add "LE:" as an address prefix
Browse files Browse the repository at this point in the history
This seems a bit odd, but it actually has three different reasons for it:

 - It's a visual indication of BT LE mode for users

 - the rfcomm code only works with legacy BT support, and if we scan a
   device that only does LE, we want the custom serial code to instead
   automatically fall back on a "emulate serial over LE packets" model.

 - we want rfcomm to remain the default for devices that do both legacy
   BT _and_ LE, but we want people to have the ability to override the
   choice manually.  They can now do so by just editing the address
   field and adding the "LE:" prefix manually, and it automatically gets
   saved for next time.

So while a bit hacky, it's actually a very convenient model that not
only works automatically, but allows the manual override.

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
  • Loading branch information
torvalds authored and dirkhh committed Jun 27, 2017
1 parent bbde0a1 commit d0c3ef4
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
10 changes: 10 additions & 0 deletions core/qt-ble.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,16 @@ dc_status_t BLEObject::read(void* data, size_t size, size_t *actual)

dc_status_t qt_ble_open(dc_custom_io_t *io, dc_context_t *context, const char *devaddr)
{
/*
* LE-only devices get the "LE:" prepended by the scanning
* code, so that the rfcomm code can see they only do LE.
*
* We just skip that prefix (and it doesn't always exist,
* since the device may support both legacy BT and LE).
*/
if (!strncmp(devaddr, "LE:", 3))
devaddr += 3;

QBluetoothAddress remoteDeviceAddress(devaddr);

// HACK ALERT! Qt 5.9 needs this for proper Bluez operation
Expand Down
9 changes: 8 additions & 1 deletion desktop-widgets/btdeviceselectiondialog.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,14 @@ void BtDeviceSelectionDialog::deviceDiscoveryError(QBluetoothDeviceDiscoveryAgen
QString BtDeviceSelectionDialog::getSelectedDeviceAddress()
{
if (selectedRemoteDeviceInfo) {
return selectedRemoteDeviceInfo.data()->address().toString();
QBluetoothDeviceInfo *deviceInfo = selectedRemoteDeviceInfo.data();
QBluetoothDeviceInfo::CoreConfigurations flags;
QString prefix = "";

flags = deviceInfo->coreConfigurations();
if (flags == QBluetoothDeviceInfo::LowEnergyCoreConfiguration)
prefix = "LE:";
return prefix + deviceInfo->address().toString();
}

return QString();
Expand Down

0 comments on commit d0c3ef4

Please sign in to comment.