This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

GAP_UpdateLinkParamReq vs L2CAP_ConnParamUpdateReq

Other Parts Discussed in Thread: CC2541, CC2540

In the BLE transfer bottleneck? thread, it is suggested that one needs to call "GAPCentralRole_UpdateLink(BLEConnHandle,5,5,0,1000);" to set up the lowest latency communication.

However, I am using the CC254X in network processor mode and I don't have access to that API call. Looking for similar interface in the TI_BLE_Vendor_Specific_HCI_Guide, I have found GAP_UpdateLinkParamReq and L2CAP_ConnParamUpdateReq. I got them to "work" but they don't behave as expected.

Reading the manual, it seems that GAP_UpdateLinkParamReq should be called on the central. When I call it, it returns failure status and no more information.

If I call L2CAP_ConnParamUpdateReq on the device, I get a L2CAP_ConnParamUpdateRsp with status "Connection Parameters rejected", but then I get on both central and device a GAP_LinkParamUpdate message, containing the latency setting that I've just selected! And they clearly are changed, since I can send data at lower latency.

What is going on here, is the manual incorrect or the 1.3 firmware?

Also, the Bluetooth spec mentions that the lowest latency is 7.5 ms but the manual states that the range for the "intervalMin" and "intervalMax" is 6 to 3200, which would indicate a lowest bound of 9 ms. Edited, the multiplication factor is 1.25ms not 1.5ms.

  • Hi Bit,

    The peripheral may request a parameter update. Since it got rejected, I'm guessing you asked an iOS device for some parameters. The guidelines are strict for what it accepts, and in BLE it is up to the master to accept/reject and then effectuate the change.

    See the ios bt guidelines on our wiki, or directly on https://developer.apple.com/hardwaredrivers/BluetoothDesignGuidelines.pdf

    BR,
    Aslak 

  • Hi Aslak,

    The 'peripheral' is an application processor connected over UART to CC2541 (running HostTestRelease). The 'central' was a CC2540 USB dongle.

    On the 'central' device, I'm getting a notification that the parameters have changed, but I don't actually get a proposal that my code can vote on.

    Signed,

    Bit

  • Gotcha,

    Must have mixed up something.

    Our master will accept whatever is valid by default. You get no vote, sadly.

    You should be able to send LL param update request from the master via HCI_LE_ConnUpdateCmd (hci.h) with the last two params set to 0.

    From slave you can issue a request via GAPRoleSendUpdateParam (peripheral.c, uses L2CAP_ConnParamUpdateReq). Not sure how you managed to get a rejected message and then still saw updated parameters.

    Best regards,
    Aslak