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.

CC1352P: Cannot receive "BDB_COMMISSIONING_SUCCESS" in xxx_ProcessCommissioningStatus()

Part Number: CC1352P

Hi all,

My setting is showing below

SDK : simplelink_cc13x2_sdk_2_30_00_45(zc_light/zed_switch)

HW : CC1352P2-DK(launchPad) x 2

After Steering and F&B, I can toggle LED on the ZC, but I cannot receive "BDB_COMMISSIONING_SUCCESS" in zcl_samplesw.c --> zclSampleSw_ProcessCommissioningStatus() --> case BDB_COMMISSIONING_FINDING_BINDING. Can you help to check this issue? thank you.

  • Can you elaborate when or what circumstance we will get BDB_COMMISSIONING_SUCCESS?
  • Hi Kimi Hu,

    Please provide a sniffer log of the joining procedure and the toggle commands.

  • Hi Kimi Hu,

    Since a light application is a target device for F&B procedure the success event must be triggered at the end of Identify time according to BDB spec. I found that the code that sends the message to the application is missing so here is the code that you need to add in order to fix this issue. In bdb.c look for BDB_IDENTIFY_TIMEOUT event and add the next lines of code:

      if(events & BDB_IDENTIFY_TIMEOUT)
      {
        zclAttrRec_t identifyAttrRec;
        epList_t *bdb_CurrEpDescriptorNextInList = NULL;
        bdb_CurrEpDescriptorNextInList = bdb_HeadEpDescriptorList;
        
        bool KeepIdentifyTimerRunning = FALSE;
        
        while(bdb_CurrEpDescriptorNextInList != NULL )
        {
          endPointDesc_t *bdb_EpDescriptor = NULL;
          bdb_EpDescriptor = bdb_CurrEpDescriptorNextInList->epDesc;
        
          //Do not check ZDO or Zigbee reserved endpoints
          if((bdb_CurrEpDescriptorNextInList->epDesc->endPoint == 0) || (bdb_CurrEpDescriptorNextInList->epDesc->endPoint >= BDB_ZIGBEE_RESERVED_ENDPOINTS_START))
          {
            bdb_CurrEpDescriptorNextInList = bdb_CurrEpDescriptorNextInList->nextDesc;
            continue;
          }
          
          if ( zclFindAttrRec( bdb_EpDescriptor->endPoint, ZCL_CLUSTER_ID_GEN_IDENTIFY,
                            ATTRID_IDENTIFY_TIME, &identifyAttrRec ) )
          {
            if(*((uint16*)identifyAttrRec.attr.dataPtr) > 0)
            {
              (uint16)(*((uint16*)identifyAttrRec.attr.dataPtr))--;
              KeepIdentifyTimerRunning = TRUE;
            }
            else
            {
              bdbCommissioningModeMsg_t bdbCommissioningModeMsg;                                  //ADD THIS LINE
    
              // Use bdb success main state
              bdbAttributes.bdbCommissioningStatus = BDB_COMMISSIONING_SUCCESS;
              bdbCommissioningModeMsg.bdbCommissioningMode = BDB_COMMISSIONING_FINDING_BINDING;   // ADD THIS LINE
              bdbCommissioningModeMsg.bdbCommissioningStatus = BDB_COMMISSIONING_SUCCESS;         // ADD THIS LINE
              bdb_NotifyApp((uint8*)&bdbCommissioningModeMsg);                                    // ADD THIS LINE
       .
       .
       .

  • Hi Jose Maria Alvarez,

    After adding your patch, I still cannot receive "BDB_COMMISSIONING_FINDING_BINDING" in zcl_samplelight.c --> zclSampleLight_ProcessCommissioningStatus(). Is it work in your test? By the way, I also cannot receive in zcl_samplesw.c --> zclSampleSw_ProcessCommissioningStatus. 

  • Hi Kimi Hu,

    Yes is working for me, you can place a breakpoint on BDB_COMMISSIONING_FINDING_BINDING event so you will hit the breakpoint when identify time ends. Try using a fresh new project just adding the patch.

  • Hi Jose Maria Alvarez,
    It works. Thank you