I am experimenting with the LE Data Length Extension feature in the CC2640 and 2.2 stack. I am attempting to negotiate the use of extended data lengths between the CC2640 and various Android phones running the V6.0 Marshmallow operating system.
If I enable the data length extension in the 2.2 stack, the following LL sequence occurs when I initiate a connection with the CC2640 as the peripheral:
- The Nexus 6P sends a LL_LENGTH_REQ with a RX of 251 bytes and TX of 27 bytes.
- The CC2640 sends a LL_LENGTH_RSP with a RX of 251 bytes and TX of 27 bytes.
- The CC2640 then sends a LL_LENGTH_REQ with a RX of 251 bytes and TX of 27 bytes.
- The Nexus 6P sends a LL_LENGTH_RSP with a RX of 251 bytes and TX of 27 bytes.
If I add the HCI_LE_SetDataLenCmd() call to my CC2640's link event handler with a PDU size of 251 and time of 2120 the following LL sequence occurs:
- The Nexus 6P sends a LL_LENGTH_REQ with a RX of 251 bytes and TX of 27 bytes.
- The CC2640 sends a LL_LENGTH_RSP with a RX of 251 bytes and TX of 251 bytes.
- The CC2640 then sends a LL_LENGTH_REQ with a RX of 251 bytes and TX of 251 bytes.
- The Nexus 6P sends a LL_LENGTH_RSP with a RX of 251 bytes and TX of 27 bytes.
It looks to me like the CC2640 is properly requesting TX and RX PDU's of 251 bytes but the Nexus 6P will only allow a RX of 251 and a TX of 27. I don't see any method in the Android API's that allows adjustment of the TX PDU size. Am I missing something or is this a current limitation of the Android BT 4.2 support?
I have also tested this with a Samsung Galaxy 7 with similar results. I have also tried various other PDU sizes.
Thanks
Mike