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.

LAUNCHXL-CC26X2R1: HCI_LE_SetDefaultPhyCmd() not honoured and doc typo?

Part Number: LAUNCHXL-CC26X2R1
Other Parts Discussed in Thread: CC2642R

Hello,

Our goal here is to allow either 1M or Coded but not 2M. 

On init and before connection was established we call 

    HCI_LE_SetDefaultPhyCmd(HCI_PHY_USE_PHY_PARAM, HCI_PHY_1_MBPS|HCI_PHY_CODED, HCI_PHY_1_MBPS|HCI_PHY_CODED);

However, after connection was established, iPhone SE is requesting to change the PHY to 2M and the request is accepted (without having any such request in the app). I am able to see this on the Ellisys Bluetooth capture. 

First thing to note, both the doc and the source code are of rather low quality I would say. It seems from the link bellow, that `allPhys` can be HCI_PHY_USE_PHY_PARAM or HCI_PHY_USE_ANY_PHY. There is no detailed and clear explanation on those anywhere.

In fact, looking at 

https://software-dl.ti.com/lprf/simplelink_cc26x2_latest/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/phy-coded.html#id8 

Whoever wrote that article may have made a mistake too? Shouldn't this be HCI_PHY_USE_PHY_PARAM if we wanted the given params to be used? 

I'm just guessing based on the next example if we consider the API to be consistent.

we use multi role, and I see the following 

Does this mean that, if we don't want our call to `HCI_LE_SetPhyCmd` for a connected device, to impact and change change the default PHY for a potentially connecting other device in the future, we we need to call HCI_LE_SetDefaultPhyCmd every time after HCI_LE_SetPhyCmd in order to "revert" the default PHY for subsequent connections?

Thank you,
Jerome 

  • Hi Jerome,

    Thank you for reaching out. We will look into this and get back to you as soon as possible. In the meantime, could you provide us with the SDK version you are using?

    Best Regards,

    Jan

  • Hi Jerome,

    If I may, you are referring to fairly old documentation, and I would recommend to refer to the following doc: https://software-dl.ti.com/simplelink/esd/simplelink_cc13xx_cc26xx_sdk/7.10.01.24/exports/docs/ble5stack/ble_user_guide/html/ble-stack-5.x/phy.html

    In addition, you can find the newest SDK version here: https://www.ti.com/tool/download/SIMPLELINK-LOWPOWER-F2-SDK

    When it comes to your initial question (i.e. force the CC2642R to use either the 1M or the Coded PHYs), the best approach is actually to "tell" the other devices the 2M PHY is not supported. Otherwise, other devices may want to use the LE 2M PHY and you will be forced to switch to it as you claim to support it.
    Here is a way to disable support for the LE 2M PHY:

    • Go to the init function of your application and add HCI_LE_ReadLocalSupportedFeaturesCmd(); to the very end of it.
    • Go to the processCmdCompleteEvt function of your application, and add the following case to the switch statement
      case HCI_LE_READ_LOCAL_SUPPORTED_FEATURES:
          {
              if (pktStatus == SUCCESS)
              {
                uint8_t featSet[8];
      
                // Get current feature set from received event (bits 1-9)
                // of the returned data
                memcpy( featSet, &pMsg->pReturnParam[1], 8 );
      
                // Clear relevant bit(s) of byte 1 
                CLR_FEATURE_FLAG( featSet[1], LL_FEATURE_2M_PHY );
                // CLR_FEATURE_FLAG( featSet[1], LL_FEATURE_CODED_PHY ); // This one is only if you want to disable LE Coded PHYs too
      
                // Update controller with modified features
                HCI_EXT_SetLocalSupportedFeaturesCmd( featSet );
            }
          }
          break;

    I hope this will help.

    Best regards,

  • Thank you Clément, I did not realise the URL didn't point to the latest doc despite the name. This CLR_FEATURE_FLAG LL_FEATURE_2M_PHY did solve our problem. Thank you!