Posts

Post marked as solved
1 Replies
0 Views
I finally figured out the problem, and it turned out to be something simple and obvious (as usual): Both apps used for testing were simultaneously running a Bluetooth LE scan the entire time. The solution is to stop scanning while the iAP data stream needs full throughput. In retrospect, this is obvious. While I haven't found any documentation confirming this, my suspicion is that iOS gives more radio time to an ongoing BLE scan for a short time (20 seconds) after an app enters the foreground, logically assuming that it is scanning for a good reason and will want to be notified as soon as possible when any matching devices are found. Then, if the scan continues for more than 20 seconds, iOS throttles it back so the radio can be allocated more heavily to other things. This suspicion matches what I saw while investigating with Apple's ATS tool, as the HCI packet capture revealed a flurry of LE Scan Parameter modifications right around the time the iAP throughput returned to normal. This explanation fits with all of the evidence we have, and the fix works, so I'm pretty sure it's the right answer. Crisis averted!