Hello, I use nRF51822 based device with s110
softdevice. I noticed that data exchange is different on different connected centrals.
For test I used Windows and Android powered central.
The task is to send request and receive responce in notification from the device.
After connection I request similar connection parameters (conn interval 30ms, slave latency 16) and they are accepted by both centrals.
The speed results are different. Data exchange with windows is about 10 times faster than with Android.
After sniffing I noticed that softdevice send Empty PDU
after each notification packet and then enables slave latency functionality (i.e. skipping n central's packets). Windows driver in some way send next write request just after notification sent. And communication is very fast, like with slave latency = 0. In case of Android the driver send Empty PDU
after notification from peripheral and than write request, but soft device do not react for it fot slave latency number times.
Windows:
M->S Write Command (request1)
S->M Empty PDU
M->S Empty PDU
S->M Notification (responce1)
M->S Write Command (request2) !!!
S->M Empty PDU
M->S Empty PDU
S->M Notification (responce2)
Android:
M->S Write Command (request1)
S->M Empty PDU
M->S Empty PDU
S->M Notification (responce1)
M->S Empty PDU <- This makes data exchange slow
S->M Empty PDU
M->S Write Command (request2) !!!
M->S Write Command (request2)
M->S Write Command (request2)
...
M->S Write Command (request2)
S->M Empty PDU
M->S Empty PDU
S->M Notification (responce2)
I feel the softdevice has some pause after sending the packet before enabling slave latency function. Am I right? If yes what exact pause time is?
Thanks
UPDATED:
Android: from line 730 ANDROID_CAP
Windows: from line 851 WINDOWS_CAP