none
Windows 10 Creators Update disconnects BLE connection after 20-30 seconds for no reason RRS feed

  • Question

  • Visual Studio 2017

    Platform x86/x64 -  Win10 Creators Update OS Build 150063.540

    BLE Radio : Intel Wireless Bluetooth (Up to date drivers)

    BLE GATT Server Device : Known good medical device that performs perfectly communicating with android and linux(bluez).

    Hello,

    I  am connecting to a as a GATT Client to a BLE medical device using a windows universal app developed using VS2017.  I am experiencing disconnects after 20-30 seconds predictably each connection for no apparent reason.  Everything is working fine, windows bonds to my device, I am able to discover services, and I am able to read and write characteristics and receive indications.  No errors are occurring that I can see, Windows is just deciding to disconnect.  I suspect a timeout of some kind.  Windows is forcing the supervisory timeout to 9.6 seconds, but data is flowing the entire time w/o any crc errors so that should never fire. 

    I am careful to make my bluetooth device/service/characteristics as object level fields so they dont get disposed....

    Any help is appreciated...

    Code :

                StatusMsg("Connecting....");
                myDevice.setReady(false);
                device = await BluetoothLEDevice.FromBluetoothAddressAsync(args.BluetoothAddress);
    
                // delete bonds by removing 'pairing' from Windows
                if (device.DeviceInformation.Pairing.IsPaired)
                {
                    await device.DeviceInformation.Pairing.UnpairAsync();
                    StatusMsg("Bonding at level 2");
                    await device.DeviceInformation.Pairing.PairAsync(DevicePairingProtectionLevel.Encryption);
                    if (!device.DeviceInformation.Pairing.IsPaired)
                    {
                        StatusMsg("Delete Bonding / Rebond failed");
                        return;
                    }
                }
                else if (device.DeviceInformation.Pairing.CanPair)
                {
                    StatusMsg("Bonding at level 2");
                    await device.DeviceInformation.Pairing.PairAsync(DevicePairingProtectionLevel.Encryption);
                    if (!device.DeviceInformation.Pairing.IsPaired)
                    {
                        StatusMsg("Bonding failed");
                        // This test is not working.  Ignore since it actually is paired
                    }
                }
    
                gatt = await device.GetGattServicesAsync();
    
                if (device.ConnectionStatus == BluetoothConnectionStatus.Connected)
                {
                    StatusMsg("Connected!");
                    device.ConnectionStatusChanged += Device_ConnectionStatusChanged;
                }
                else
                {
                    StatusMsg("Connect Failed");
                    return;
                }
    
                if (gatt.Status == GattCommunicationStatus.Success)
                {
                    StatusMsg(args.Advertisement.LocalName + " has " + gatt.Services.Count + " Services!!!");
                    myDevice.services = gatt.Services;
                    foreach (var service in myDevice.services)
                    {
                        StatusMsg(service.Uuid.ToString());
                    }
                }
                else
                {
                    StatusMsg("Read Services Failed! Status : " + gatt.Status.ToString());
                    return;
                }
    
                var result = await gatt.Services.Single(s => s.Uuid == MyDevice.MYDEVICE_SERVICE_UUID).GetCharacteristicsAsync();
                myDevice.characteristics = result.Characteristics;
                if (result.Status == GattCommunicationStatus.Success)
                {
                    StatusMsg("Characteristics: " + myDevice.characteristics.Count);
                    foreach (var c in myDevice.characteristics)
                    {
                        StatusMsg(c.Uuid.ToString());
                    }
                }
                else
                {
                    StatusMsg("Read Characteristics Failed! Status : " + result.Status.ToString());
                    return;
                }
    
                myDevice.setReady(true);
                myDevice.EnableDataStream();
                myDevice.EnableStreamDataIndications();



    Monday, August 28, 2017 5:06 PM

All replies

  • Can you please help us get data for this issue:
    1. Launch the Feedback Hub.
    2. Select the "Add new feedback" button.
    3. Mark the issue as a problem.
    4. Fill out the summary and the details with relevant information, including basic scenario and what’s failing host device make and model.
    5. Bluetooth device make and model (and year if a vehicle).
    6. Select the "Hardware, devices and drivers" category.
    7. Select the appropriate Bluetooth subcategory based on the issue.
    8. Select "Start capture" link.
    9. Toggle the Bluetooth radio off-on via the quick action menu or force a power cycle of the remote device (we want the connection information).
    10. Reproduce the issue.
    11. Select the "Stop capture" link.
    12. Select the "Submit" button.
    13. Select the "Share" and copy the link and paste it in the forum?

    If this doesn't work you can manually trace and share the file.

    Tuesday, August 29, 2017 4:39 AM
  • Frank,

    No luck with feedback hub.  Ran it twice and posted, but it never gave me a link and my local copy of the trace file did not exist.  Here is a link to a trace file made with the bth_trace util.  You may need to rename it back to .etl from .bin after you download it.  I couldn't find any way to attach it here.  Please let me know when you have it.

    http://atk.caretakermedical.net/staging/bth_tracing.bin

    x64 (AMD A10 / HP Envy)

    Intel Wireless Bluetooth (19.30.1646.853)

    My program first LE scans, and I select my device.  When my program notices the device is 'paired', it unpairs and re-pairs it to delete the stored bonding information from windows.  Next it discovers services, enables Indications on a characteristic and writes an enable, then it begins polling a different characteristic 1x per second.  The polls succeed, and indications come in for around 30 seconds, then the connection drops.

    When I ran it with trace, my prints in the output window were slightly different, they were slower, and the hex dump of the polled characteristic was blank.  Not sure what that means.

    Thanks for looking at this,

    Bill

    Tuesday, August 29, 2017 3:25 PM
  • Hi Bill?

    Are you still seeing these Bluetooth issues? Can you try gathering traces again with Feedback hub? There were some issues with Feedback hub, which have been fixed now.

    To submit feedback, please follow these steps:

    1.      Search for “Feedback Hub” in Cortana search, then launch the app.

    2.      Navigate to Feedback in the left menu, then press + Add new feedback.

    3.      Select the Problem button, share any details you think are relevant, and choose an appropriate category and subcategory. (For proper Bluetooth logs to be captured it must be one of the Bluetooth context paths, e.g. Hardware, Devices, and Drivers -> Bluetooth – Discovery, Pairing, and Connectivity)

    4.      Important: If possible, reproduce the problem(s) after clicking Begin monitoring (or Start capture) near the end of the form; Stop monitoring when you’re done.

    5.      Once you’ve completed the form and monitoring, click Submit.

    6.      Click Continue using Feedback Hub.

    7.      Click My feedback at the top, then find the item you submitted (it may take a while to appear).

    8.      Open the item you submitted, then click Share.

    9.      Click Copy link, then paste the link here in your response.  (It will look like https://aka.ms/<unique link>.)

    Thanks,

    Aruna.

    Thursday, September 7, 2017 4:39 PM
  • Aruna, thank you for your interest.  We have moved on and are developing against a radio dongle with a built in BLE stack.  In the interest of helping others, I generated another debug file.  The link is here : https://aka.ms/Ic9sjr

    Operations my SW performs

    1 Scan

    2 Pair (Bond Security Level 2) which also connects to the device

    3 Discover services

    4 Write to a characteristic ("00000010-a2b1-11e4-89d3-123b93f75cba")

    5 Enable notifications from the BLE device from a different characteristic ("0000000B-a2b1-11e4-89d3-123b93f75cba")

    6 Collect the notification data forever.  After about 30 seconds the Windows BLE stack disconnects.  This is the problem.  The notifications flow every second or so.  There are no errors with data transmission as far as I can tell.

    For what it's worth Feedback Hub really seems to affect BLE performance in a negative way.  I had to change my test to not poll a characteristic and reboot a couple of times to get a good run with capture on.

    Regards,

    Bill

    Thursday, September 7, 2017 9:33 PM
  • Hi Bill,

    as I expect to see similar problems. Can you share, what radio dongle you are using?

    Kind regards,

    Torsten


    Saturday, September 23, 2017 1:00 PM