Hi guys,
We've written a small test on-top of our internal Bluetooth library (glorified wrapper sat on-top of SDK 15.2.0 SD140 6.1.1) on the nRF52840 to send dummy bulk data via notification on a single characteristic.
When we run this test on iOS, we get exactly what we expect, a 30ms connection interval and ~3KB/s.
When we run this test on a fully up-to-date Samsung Galaxy S8 (Android 8.0.0) we observe a 7.5ms connection interval but receive only ~2KB/s, where we would expect at least greater than iOS, ideally much more so.
We perform the test as follows:
- When notifications are turned on by the nRF Connect App (have also tried LightBlue), we post 4 notifications of 20B each via sd_ble_gatts_hvx().
- Upon the BLE_GATTS_EVT_HVN_TX_COMPLETE event, we inspect event->evt.gatts_evt.params.hvn_tx_complete.count and post a callback to the nRF scheduler for each sent notification (the scheduler is not busy doing anything else).
- For each callback, we increment a counter and we post 4 more notifications, we don't care about dropping data as this is a throughput test, we're just trying to keep the internal buffer populated.
- We transfer continuously for 1 minute then pause execution and inspect the counter.
We verify the connection interval by inspecting p_actual_conn_params in ble_conn_params.c.
Other parameters:
- Preferred Min Connection Interval 6
- Preferred Max Connection Interval 100
- Preferred Salve Latency 1
- Preferred Supervision Timeout 100
Any suggestion as to why we might be seeing reduced performance on Android vs iOS?
Many thanks