[Bluetooth][Pre-6.0] Fix BluetoothLEDevice::getServiceAllUuids() 58/244458/1
authorPawel Wasowski <p.wasowski2@samsung.com>
Wed, 5 Feb 2020 13:00:47 +0000 (14:00 +0100)
committerPiotr Kosko/Native/Web API (PLT) /SRPOL/Engineer/Samsung Electronics <p.kosko@samsung.com>
Fri, 18 Sep 2020 11:59:41 +0000 (13:59 +0200)
commit4f81d6636b089b184b21ba5644cd955ed7f1f515
tree2b94b3132d35233f1f8f658dddcc0fd559bdcb99
parentb2124cd3a6e116aeba64cf3a6876d6d3fa887a1c
[Bluetooth][Pre-6.0] Fix BluetoothLEDevice::getServiceAllUuids()

[Bug] When some remote device advertises non-standard UUID, it was invalidly
translated to 16bit UUID. Which caused "NotFoundError: Service not found" error
in case of reading this service.

Inlcudes:
* fix for BluetoothLEDevice::getServiceAllUuids based on 6.0 implementation
* moving toLowerCase() from messaging to common module (needed for a fix)

[Verification]
Auto TCT 100% pass.

Tested in console:

Precondition:
Remote device need to have a GATT server advertising some non-standard UUID service, e.g.
"12341234-1234-1234-1234-123412341234". Below code should work if your remote device "MyDevice"
has proper service with a characteristic.

Last result will be something like "Value read from 1 characteristic -> 116,101,115,116"

var testDeviceName = "MyDevice";
var nonStandardUUID = "12341234-1234-1234-1234-123412341234";

var device;
function testBle(name) {
    var adapter = tizen.bluetooth.getLEAdapter();

    adapter.startScan(function (device_) {
        device = device_;
        //Item one occurs here:
        if (device.name)
            console.log("Found: " + JSON.stringify(device))
        if (device.name === name) {
            console.log("[Found device] address: " + JSON.stringify(device));
            adapter.stopScan();

            device.connect(function () {
                console.log("[Connected]");
                uuids = device.getServiceAllUuids();
                console.log("all UUIDS\n" + JSON.stringify(uuids))

                if (uuids.includes(nonStandardUUID)) {
                    console.log("Reading: " + nonStandardUUID);
                    var service = device.getService(nonStandardUUID);
                    if (service.characteristics.length > 0) {
                        for (j = 0; j < service.characteristics.length; ++j) {
                            var characteristic = service.characteristics[j];
                            characteristic.readValue(function (val) {
                                console.log("Value read from " + j + " characteristic -> " + val);
                            });
                        }
                    } else {
                        console.log("no characteristics found for service: " + uuid)
                    }
                } else {
                    console.error("UUID " + nonStandardUUID + " not found ");
                }
            }, (e) => console.log(e));
        }
    }, (e) => console.log(e))
}
testBle(testDeviceName)

Change-Id: I38494b6b5037cf06ee7c4bc32d2f8f5e8e6ce97e
src/bluetooth/bluetooth.gyp
src/bluetooth/bluetooth_gatt_service.cc
src/bluetooth/uuid.cc [new file with mode: 0644]
src/bluetooth/uuid.h [new file with mode: 0644]
src/common/tools.cc
src/common/tools.h