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-CC2650: Android 8.x Oreo can't connect to CC2650 Launchpad or custom board

Part Number: LAUNCHXL-CC2650
Other Parts Discussed in Thread: CC2540, CC2650

Hi all,

I've already had a look at the stickied post regarding this issue as well as e2e.ti.com/.../670467

Ever since the Android 8.0 update, my Galaxy S8 is unable to connect to my custom firmware (based on cc2650lp code) Launchpad through the app I've developed for my product. I've already tried the out of the box example SimplePeripheral as well and my phone still cannot connect to the Launchpad through my app. This has been tested on a Note8 running Android 8.0 Oreo as well. The TI apps in the Play Store can't connect to the SimplePeripheral device nor my custom firmware, it will time out after the 4 retries. After tweaking the lengths of the scanRspData, I can see the device fine through the TI apps, my own app, and under bluetooth settings just fine. However, I still cannot connect.

Since the out of the box example doesn't work either, the problem seems to be with TI's base code. Are there are plans to fix/address this in the future? Or are there suggestions for me to try?

  • Hi Greg,

    Can you post a sniffer capture of this happening? (I don't have a Note 8 here to test with.)
  • Marie H said:
    Hi Greg,

    Can you post a sniffer capture of this happening? (I don't have a Note 8 here to test with.)

    I don't have any CC2540 dongles or any other BLE sniffers on hand, I'll probably be able to get one in tomorrow. In the mean time, I've pasted the code snippet of my scanRspData and advertData:

    // GAP - SCAN RSP data (max size = 31 bytes)
    static uint8_t scanRspData[] =
    {
      // complete name
      0x0C,   // length of this data
      GAP_ADTYPE_LOCAL_NAME_COMPLETE,
    #ifdef CC1350_LAUNCHXL
      'C', 'C', '1', '3', '5', '0', ' ',
    //#else
    //  'C', 'C', '2', '6', '5', '0', ' ',
    //#endif
    //  'S', 'e', 'n',  's',  'o',  'r',  'T',  'a',  'g',
    #else
      'M', // 1
      'y', // 2
      ' ', // 3
      'P', // 4
      'r', // 5
      'o', // 6
      'j', // 7
      'e', // 8
      'c', // 9
      't', // 10
      '0', // 11
    #endif
      // connection interval range
      0x05,   // length of this data
      GAP_ADTYPE_SLAVE_CONN_INTERVAL_RANGE,
      LO_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL),
      HI_UINT16(DEFAULT_DESIRED_MIN_CONN_INTERVAL),
      LO_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL),
      HI_UINT16(DEFAULT_DESIRED_MAX_CONN_INTERVAL),
    
      // Tx power level
      0x02,   // length of this data
      GAP_ADTYPE_POWER_LEVEL,
      0       // 0dBm
    };
    
    // GAP - Advertisement data (max size = 31 bytes, though this is
    // best kept short to conserve power while advertising)
    static uint8_t advertData[] =
    {
      // Flags; this sets the device to use limited discoverable
      // mode (advertises for 30 seconds at a time) instead of general
      // discoverable mode (advertises indefinitely)
      0x02,   // length of this data
      GAP_ADTYPE_FLAGS,
      DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
    
      // service UUID, to notify central devices what services are included
      // in this peripheral
      0x03,   // length of this data
      GAP_ADTYPE_16BIT_MORE,      // some of the UUID's, but not all
    #ifdef INCLUDE_DISPLAY
      LO_UINT16(DISPLAY_SERV_UUID),
      HI_UINT16(DISPLAY_SERV_UUID),
    #else
      LO_UINT16(SK_SERV_UUID),
      HI_UINT16(SK_SERV_UUID),
    #endif
    
      // Manufacturer specific advertising data
      0x06,
      GAP_ADTYPE_MANUFACTURER_SPECIFIC,
      LO_UINT16(TI_COMPANY_ID),
      HI_UINT16(TI_COMPANY_ID),
      TI_ST_DEVICE_ID,
      TI_ST_KEY_DATA_ID,
      0x00                                    // Key state
    };

    I've tried extending the scanRspData size to use the full 31 bytes (minus headers and such) but that doesn't seem to do anything.

  • I downloaded nRF Connect for Mobile on my Galaxy S8 and have this as the raw:
    0x0201050302E0FF06FF0D000300001509446967697363616E33363020322E303020202020051208002003020A00

    From what I can see, its seperated like this

    0201050302E0FF06FF0D00030000 - advertData
    1509446967697363616E33363020322E303020202020051208002003020A00 - scanRspData

    The length is 31 for the scanRspData and I don't see any garbage data.

    On an Android phone running Android 6.x, I see the exact same raw data using nRF Connect. Only difference between the 2 is that the Android 6.x connects while the Galaxy S8 does not.

    For the Simple Peripheral project:

    Galaxy S8: 0x0201060302F0FF140953696D706C65424C455065726970686572616C051250002003020A00

    Android 6.x: 0x0201060302F0FF140953696D706C65424C455065726970686572616C051250002003020A00

    UPDATE:
    I've tried flashing the original CC2650 Launchpad hex file. Using nRF Connect, the phone I have running Android 6.x can connect using that app but my Galaxy S8 running Android 8.0 cannot. 

    UPDATE #2:
    I installed a ~50MB I received on my Galaxy S8 and this seemed to have fixed it. I tested on a OnePlus 5 running Android 8.1 that had no issues connecting. Just FYI for anyone running into this issue, Google has resolved this with an update. Basically, you'd have to wait for Google to push the update to your phone to fix this.

  • Hi Greg,

    Is it working on all your devices now?

    I think a sniffer capture could tell us more about why the connection fails and which device is not responding correctly.