I'm developing an accessory that communicates with iOS/iPadOS via Bluetooth Low Energy and observed some odd behavior. My accessory (peripheral) requests more forgiving BLE connection parameters from the OS (central). The request is initially accepted, but then immediately overwritten by the central with the default parameters. This ultimately leads to a an endless loop of negotiating parameters that eventually results in the peripheral getting overwhelmed and disconnecting.
The first solution I tried was simply going along with the central's parameters, but this proved to be less than optimal, as there were still sporadic disconnects. As best as I can tell, the parameters I'm requesting are compliant with Apple's spec (please correct me if I'm wrong):
Minimum Connection Interval: 30ms
Maximum Connection Interval: 60ms
Peripheral Latency: 30
Supervisory Timeout: 6s
So my question is this: Is there some mechanism that's causing the central to continuously renegotiate connection parameters, and is there anything I can do inside my accessory to avoid it?