I've previously posted this question on the Apple IOS developers forum but this didn't provide answers. In IOS6 the default BLE connection interval has changed from 105ms to 30ms. Also it now ignores the Peripheral Preferred Connection Parameters characteristic and expects connection parameter preferences to be in an L2CAP Connection Parameter Update Request "sent at the appropriate time". (https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf p18).
When the connection interval decreased to 30ms my device started using 37% more power. It is important I change it back.
I've followed the apple bluetooth guidelines and used the L2CAP functionality built into the V1.2.1 and V1.3 stack (tried both). These are the settings that will work best for my project. I have tried a range of others and had the same issues.
#define DEFAULT_DESIRED_MIN_CONN_INTERVAL 50 //(1.25ms) = 62.5 ms
#define DEFAULT_DESIRED_MAX_CONN_INTERVAL 120 //(1.25ms) = 150 ms
#define DEFAULT_DESIRED_SLAVE_LATENCY 0 //(1.25ms) = 0 ms
#define DEFAULT_DESIRED_CONN_TIMEOUT 550 //(10ms) = 5.5 s
When using an Iphone 4S everything works correctly. The connection interval changes to something between 62.5 and 150ms. When using an Ipod touch 5th generation there are major problems. The BLE connection becomes unstable and breaks. Usual behaviour is for the device to spend five minutes connecting then losing the connection before eventually going to the 30ms default and establishing a stable connection. Both devices are running IOS6.0.1. Can anyone explain what's going on here? Has anyone experienced similar problems?