This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

pc-ble-driver-py missing high-rate notifications

Hello,

whilst implementing my embedded device software, I'm developing a tool running on a Windows laptop to validate my work.

The idea is to use pc-ble-driver-py python bindings to implement simple interactions with the device over BLE using the services exposed.

The current setup is:

  • pc-ble-driver-py 0.15.0 (latest)
  • nRF52840 Dongle (PCA10059) running connectivity FW 4.1.2 SD API v5 (latest supported)

Most of the functionalities seem to be working fine.

But when I try to collect notifications from a certain rate on, looks like the system is not able to "catch-up".

To give some context - from the embedded device, I'm polling data and queuing notifications on certain char every 10ms. The connection interval is set 15ms.

The moment I enable the notifications on this char from Client side(after the wanted connection intervals are updated), I start receiving as a return value from sd_ble_gatts_hvx the error code NRF_ERROR_RESOURCES on the server side - it's not always the case, but very often, at least 10/20 times per second.

The only explanation I can give to this is that the Central (i.e. the python script) is not meeting all the connection events at fixed interval (15ms), and this way the notification queue on the Server is increasing till its limit.

I tested this scenario with different platforms (Windows UWP, Android) and this is the only case I'm seeing this behaviour.

What I find rather odd is that using exactly the same dongle (with same FW), but from the nRF Connect Desktop App GUI this is NOT happening - I can subscribe to the notifications and getting them at the rate I expect.

Adding a couple of graph to make things clearer:

Notifications Intervals (ms) from nRF Connect Desktop:

Notifications Intervals (ms) from pc-ble-driver-py:

It's clear that in the first case, two notifications are sometimes very close as the queuing rate is higher than the connection interval (i.e you get more than one notification for conn interval).

Instead in the second case, interval is never below 15ms, meaning that for sure notifications are lost (I imagine due to missed connection events...).

I tried to do the same but changing the dongle with a nRF52-DK. The result is that in this case the system crashes and disconnects after a couple of seconds from the enabling of notifications with this log:

2020-10-20 15:17:21,194 [21092/LogThread] h5_decode error, code: 0x802c, H5 error count: 1. raw packet: c0 f0 0e 02 00 02 39 00 00 00 00 00 00 00 1c 00 01 12 00 f7 03 71 03 d0 02 de 02 fe 02 0e c0 

As a quick workaround, If I try to queue notifications every 20ms (or anything above the connection interval), I don't see any problem and the system works flawlessly.

Can you help me understanding what's going on?

I'm evaluating this python libraries for the system testing framework of our devices - and of course we'll need to evaluate also the high-rate notifications.

I think reproducing the issue would be quite trivial, but maybe there is something I'm missing that can solve this straightaway.

Thanks!

Parents
  • Hello!

    How did you developed a tool running on a Windows laptop? I need to do the same with C# but I don't know where to start. I'll appreciate your help.

  • Hello,

    hector_leon said:
    How did you developed a tool running on a Windows laptop?

    As discussed in the previous comments on this ticket you can use the (now deprecated) pc-ble-driver to create an windows application that does Bluetooth through a Nordic BLE Connectivity device.

    hector_leon said:
    I need to do the same with C# but I don't know where to start.

    As far as I know we do not have any application made using C#, could you elaborate on this requirement on your part? I personally have no experience working with C#, but could it not be a possibility to interface your C# based application with a standard C or python application?

    Please keep in mind that this ticket is over 3 years old, and so I would not expect the original poster to come back to this ticket quickly. In this case I would therefore recommend opening a new ticket for this issue.

    Best regards,
    Karl

Reply
  • Hello,

    hector_leon said:
    How did you developed a tool running on a Windows laptop?

    As discussed in the previous comments on this ticket you can use the (now deprecated) pc-ble-driver to create an windows application that does Bluetooth through a Nordic BLE Connectivity device.

    hector_leon said:
    I need to do the same with C# but I don't know where to start.

    As far as I know we do not have any application made using C#, could you elaborate on this requirement on your part? I personally have no experience working with C#, but could it not be a possibility to interface your C# based application with a standard C or python application?

    Please keep in mind that this ticket is over 3 years old, and so I would not expect the original poster to come back to this ticket quickly. In this case I would therefore recommend opening a new ticket for this issue.

    Best regards,
    Karl

Children
Related