• TI Thinks Resolved

CCS/CC1352P: Collection Board is not connected with Sensor Board!

Intellectual 310 points

Replies: 15

Views: 223

Part Number: CC1352P

Tool/software: Code Composer Studio

Hello Sir!

Now i test that two board (collector & sensor) are connection test

I used that sdk is simplelink_cc13x2_26x2_sdk_3_20_00_68 and boards are not cc1352p_lunchxl(there are developed for my system)

RF Configuration is set by syscfg tool

It looks like below that

1.sensor board run unlimit loop

void Sensor_process(void)
{
/* Start the collector device in the network */
if(Sensor_events & SENSOR_START_EVT)
{

GPIO_write(Board_PIN_LED0,0); // GPIO_write() is operating
GPIO_write(Board_PIN_LED1,0); // GPIO_write() is operating

ApiMac_deviceDescriptor_t devInfo;
Llc_netInfo_t parentInfo;
#ifdef USE_DMM
uint32_t frameCounter = 0;

/* update policy */
DMMPolicy_updateStackState(DMMPolicy_StackRole_154Sensor, DMMPOLICY_STACKSTATE_154SENSOR_PROVISIONING);

Sensor_securityInit(frameCounter);
#endif /* USE_DMM */

if(Ssf_getNetworkInfo(&devInfo, &parentInfo ) == true)
{
Ssf_configSettings_t configInfo;
#ifdef FEATURE_MAC_SECURITY
ApiMac_status_t stat;
#endif /* FEATURE_MAC_SECURITY */

/* Do we have config settings? */
if(Ssf_getConfigInfo(&configInfo) == true)
{
/* Save the config information */
configSettings.frameControl = configInfo.frameControl;
configSettings.reportingInterval = configInfo.reportingInterval;
configSettings.pollingInterval = configInfo.pollingInterval;

/* Update the polling interval in the LLC */
Jdllc_setPollRate(configSettings.pollingInterval);
}

/* Initially, setup the parent as the collector */
if(parentInfo.fh == true && CONFIG_RX_ON_IDLE)
{
collectorAddr.addrMode = ApiMac_addrType_extended;
memcpy(&collectorAddr.addr.extAddr,
parentInfo.devInfo.extAddress, APIMAC_SADDR_EXT_LEN);
}
else
{
collectorAddr.addrMode = ApiMac_addrType_short;
collectorAddr.addr.shortAddr = parentInfo.devInfo.shortAddress;
}

#ifdef FEATURE_MAC_SECURITY
/* Put the parent in the security device list */
stat = Jdllc_addSecDevice(parentInfo.devInfo.panID,
parentInfo.devInfo.shortAddress,
&parentInfo.devInfo.extAddress, 0);
if(stat != ApiMac_status_success)
{
Ssf_displayError("Auth Error: 0x", (uint8_t)stat);
}
#endif /* FEATURE_MAC_SECURITY */

#ifdef FEATURE_SECURE_COMMISSIONING
if(!CONFIG_FH_ENABLE)
{
nvDeviceKeyInfo_t devKeyInfo;
SM_seedKey_Entry_t * pSeedKeyEnty;
if(Ssf_getDeviceKeyInfo(&devKeyInfo) == TRUE)
{
/* Update the seedKeyTable and MAC Key Table */
/* Use its own ext address */
updateSeedKeyFromNV(&devInfo,&devKeyInfo);
pSeedKeyEnty = getEntryFromSeedKeyTable(devInfo.extAddress,devInfo.shortAddress);
/* Do not change the order below to lines */
/* Copy collector ext Address first */
memcpy(commissionDevInfo.extAddress, parentInfo.devInfo.extAddress, sizeof(ApiMac_sAddrExt_t));
addDeviceKey(pSeedKeyEnty,devKeyInfo.deviceKey, true);
LCD_WRITE_STRING("KeyInfo recovered", 6);
}
}
#endif
Jdllc_rejoin(&devInfo, &parentInfo);
rejoining = true;

}
else
{

GPIO_write(Board_PIN_LED0,1); // GPIO_write() is operating
GPIO_write(Board_PIN_LED1,1); // GPIO_write() is operating
/* Get Start Timestamp */
#ifdef OSAL_PORT2TIRTOS                                                                  <-- sensor board run and not action anyother  
joinTimeTicks = Clock_getTicks();
#else
joinTimeTicks = ICall_getTicks();
#endif
Jdllc_join();
}

}

So i thank that 

If Ssf_getNetworkinfo() function is reading data from Flash memory but I not write data to Flash memory so flash memory is empty

2.Collector board is run unlimit repeat 

 Collector_events & COLLECTOR_TRACKING_TIMEOUT_EVT -> Collector_events & COLLECTOR_BROADCAST_TIMEOUT_EVT

 ->Collector_events & COLLECTOR_TRACKING_TIMEOUT_EVT

void Collector_process(void)
{

/* Start the collector device in the network */
if(Collector_events & COLLECTOR_START_EVT)
{
if(cllcState == Cllc_states_initWaiting)
{
processStartEvent();
}



}

/* Is it time to send the next tracking message? */
if(Collector_events & COLLECTOR_TRACKING_TIMEOUT_EVT)
{
/* Process Tracking Event */
generateTrackingRequests();
display = Display_open(Display_Type_HOST, NULL);
Display_printf(display, 0, 0, "Collect tracking timeout event", NULL, NULL);
GPIO_write(Board_STATE_LED2,0); // GPIO_write() is operating
GPIO_write(Board_STATE_LED1,1); // GPIO_write() is operating
GPIO_write(Board_STATE_LED3,1); // GPIO_write() is operating

/* Clear the event */
Util_clearEvent(&Collector_events, COLLECTOR_TRACKING_TIMEOUT_EVT);
}

/*
The generate a config request for all associated devices that need one
*/
if(Collector_events & COLLECTOR_CONFIG_EVT)
{
#ifdef FEATURE_SECURE_COMMISSIONING
if(SM_Last_State != SM_CM_InProgress) {
generateConfigRequests();
}
#else
generateConfigRequests();
#endif

/* Clear the event */
Util_clearEvent(&Collector_events, COLLECTOR_CONFIG_EVT);
}

/*
Collector generate a broadcast command message for FH mode
*/
if(Collector_events & COLLECTOR_BROADCAST_TIMEOUT_EVT)
{
/* Clear the event */
Util_clearEvent(&Collector_events, COLLECTOR_BROADCAST_TIMEOUT_EVT);
if(FH_BROADCAST_INTERVAL > 0 && (!CERTIFICATION_TEST_MODE))
{
generateBroadcastCmd();
/* set clock for next broadcast command */
Csf_setBroadcastClock(FH_BROADCAST_INTERVAL);
}
display = Display_open(Display_Type_HOST, NULL);
Display_printf(display, 0, 0, "Collect broadcast timeout event", NULL, NULL);
GPIO_write(Board_STATE_LED1,1); // GPIO_write() is operating
GPIO_write(Board_STATE_LED2,1); // GPIO_write() is operating
GPIO_write(Board_STATE_LED3,1); // GPIO_write() is operating
}

/* Process LLC Events */
Cllc_process();

/* Allow the Specific functions to process */
Csf_processEvents();

#ifdef FEATURE_SECURE_COMMISSIONING
/* Allow the security manager specific functions to process */
SM_process();
#endif /* FEATURE_SECURE_COMMISSIONING */
/*
Don't process ApiMac messages until all of the collector events
are processed.
*/
#ifdef FEATURE_SECURE_COMMISSIONING
if((Collector_events == 0) && (SM_events == 0))
#else
if(Collector_events == 0)
#endif
{
/* Wait for response message or events */
ApiMac_processIncoming();
}
}

It is not connect with collector and sensor but i don't why 

I always thank that your answer. 

  • Hey Sung,

    The changes to your code listed above don't look like they'll affect the operation of the 15.4 network. Which SDK are you using?

    What network settings are you configuring with SysConfig? Make sure to match the settings you're using on the collector with the sensor (i.e. channel mask, phy mode, etc).

    Can you provide sniffer logs so that we may see what's happening over the air?

    Regards,

    Ammar

    Please click the "This Resolved My Issue" button on this post if it answers your question

  • In reply to Ammar N:

    Thank for your answer!

    I used SDK 3.2 and setting configure valuable is same all(collector and sensor) by SysConfig tool

    I check board(collector and sensor) state used debugging tools

    But not checked same time because I have only one debugging tool.

    1.Sensor board  

    [Cortex_M4_0] Sensor start event
    Ssf_getNetworkInfo() is return fail   <- I don't know, why Ssf_getNetworkInfo() function is return fail
    Jdllc_event is JDLLC_PAS_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT

    Unlimit operating

    2.Collector 

    [Cortex_M4_0] Collect start
    Collector_events is COLLECT_START_EVT
    Collect panID 1
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT

    I think that Collector is not found sensor device, and don't understand that.

    My system circuit is designed external flash memory so i set 'external' in NVS Type part SysConfig tool(same all)   

    Unlimit operating

    3.Below text is location, debugging log in source 

    3.1.Sensor -> sensor.c, Jdllc.c

    void Sensor_process(void)
    {
    bool Check_state;
    display = Display_open(Display_Type_HOST, NULL);
    
    /* Start the collector device in the network */
    if(Sensor_events & SENSOR_START_EVT)
    {
    
    Display_printf(display, 0, 0, "Sensor start event", NULL, NULL);
    
    if(Ssf_getNetworkInfo(&devInfo, &parentInfo ) == true) // Original source
    
    {
    
    Display_printf(display, 0, 0, "Ssf_getNetworkInfo true", NULL, NULL);
    
    
    
    
    
    }
    else
    {
    Display_printf(display, 0, 0, "Ssf_getNetworkInfo() is return fail", NULL, NULL);
    
    /* Get Start Timestamp */
    #ifdef OSAL_PORT2TIRTOS
    joinTimeTicks = Clock_getTicks();
    #else
    joinTimeTicks = ICall_getTicks();
    #endif
    Jdllc_join();
    }
    
    
    
    void Jdllc_process(void)
    
    {
    
    display1 = Display_open(Display_Type_HOST, NULL);
    /* The LLC has an event */
    if(Jdllc_events & JDLLC_PAS_EVT)
    {
    
    Display_printf(display1, 0, 0, "Jdllc_event is JDLLC_PAS_EVT", NULL, NULL);
    
    if(CONFIG_FH_ENABLE)
    {
    
    processFHEvent(&fhNumPASRcvdInTrickleWindow,
    ApiMac_wisunAsyncFrame_advertisementSolicit,
    fhPanAdvInterval);
    }
    
    /* Clear the event */
    Util_clearEvent(&Jdllc_events, JDLLC_PAS_EVT);
    }
    
    /* The LLC has an PC event */
    if(Jdllc_events & JDLLC_PCS_EVT)
    {
    
    if(CONFIG_FH_ENABLE)
    {
    processFHEvent(&fhNumPCSRcvdInTrickleWindow,
    ApiMac_wisunAsyncFrame_configSolicit,
    fhPanConfigInterval);
    
    Display_printf(display1, 0, 0, "Jdllc_event is JDLLC_PCS_EVT", NULL, NULL);
    }
    
    /* Clear the event */
    Util_clearEvent(&Jdllc_events, JDLLC_PCS_EVT);
    }
    
    /* Process poll event */
    if(Jdllc_events & JDLLC_POLL_EVT)
    {
    Display_printf(display1, 0, 0, "Jdllc_event is JDLLC_POLL_EVT", NULL, NULL);
    
    bool autoRequest;
    
    ApiMac_mlmeGetReqBool(ApiMac_attribute_autoRequest, &autoRequest);
    
    if( ( (CONFIG_MAC_BEACON_ORDER == JDLLC_BEACON_ORDER_NON_BEACON) ||
    (autoRequest == false) ) &&
    !CERTIFICATION_TEST_MODE)
    {
    if((devInfoBlock.currentJdllcState == Jdllc_states_joined)
    || (devInfoBlock.currentJdllcState == Jdllc_states_rejoined))
    {
    /* set poll timer */
    Ssf_setPollClock(devInfoBlock.pollInterval);
    }
    
    /* send poll request */
    sendPollReq();
    }
    
    /* Clear the event */
    Util_clearEvent(&Jdllc_events, JDLLC_POLL_EVT);
    }
    
    /* Send association request */
    if(Jdllc_events & JDLLC_ASSOCIATE_REQ_EVT)
    {
    Display_printf(display1, 0, 0, "Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT", NULL, NULL);
    
    /* Send Associate request */
    sendAssocReq();
    
    /* Clear the event */
    Util_clearEvent(&Jdllc_events, JDLLC_ASSOCIATE_REQ_EVT);
    }
    
    /* Process coordinator realignment */
    if(Jdllc_events & JDLLC_COORD_REALIGN)
    {
    Display_printf(display1, 0, 0, "Jdllc_event is JDLLC_COORD_REALING", NULL, NULL);
    
    if(!CONFIG_FH_ENABLE)
    {
    processCoordRealign();
    }
    /* Clear the event */
    Util_clearEvent(&Jdllc_events, JDLLC_COORD_REALIGN);
    }
    
    /* Process scan backoff in case of orphan scan */
    if(Jdllc_events & JDLLC_SCAN_BACKOFF)
    {
    Display_printf(display1, 0, 0, "Jdllc_event is JDLLC_SCAN_BACKOFF", NULL, NULL);
    
    switchState(devInfoBlock.prevDevState);
    if(devInfoBlock.prevDevState == Jdllc_deviceStates_scanOrphan) {
    ApiMac_mlmeSetReqBool(ApiMac_attribute_RxOnWhenIdle, true);
    }
    /* Clear the event */
    Util_clearEvent(&Jdllc_events, JDLLC_SCAN_BACKOFF);
    }
    
    /* Process state change event */
    if(Jdllc_events & JDLLC_STATE_CHANGE_EVT)
    {
    Display_printf(display1, 0, 0, "Jdllc_event is JDLLC_STATE_CHANGE_EVT", NULL, NULL);
    
    /* Process LLC Event */
    processState(devInfoBlock.currentDevState);
    
    /* Clear the event */
    Util_clearEvent(&Jdllc_events, JDLLC_STATE_CHANGE_EVT);
    }
    
    /* If any events have been set then post the application
    * semaphore so the event is processed.
    */
    if(Jdllc_events)
    {
    Ssf_PostAppSem();
    }
    }

    3.2 Collector

    static void generateTrackingRequests(void)
    
    {
    #ifndef POWER_MEAS
    int x;
    
    /* Run through all of the devices, looking for previous activity */
    for(x = 0; x < CONFIG_MAX_DEVICES; x++)
    {
    
    Display_printf(display, 0, 0, "generate TrackingRequests1 %d", x, NULL);
    
    if(CERTIFICATION_TEST_MODE)
    {
    /* In Certification mode only back to back up-link
    * data traffic shall be supported*/
    return;
    }
    /* Make sure the entry is valid. */
    if((Cllc_associatedDevList[x].shortAddr != CSF_INVALID_SHORT_ADDR)
    && (Cllc_associatedDevList[x].status & CLLC_ASSOC_STATUS_ALIVE))
    {
    
    Display_printf(display, 0, 0, "shortAddr is %d", Cllc_associatedDevList[x].shortAddr, NULL);
    
    uint16_t status = Cllc_associatedDevList[x].status;
    
    /*
    Has the device been sent a tracking request or received a
    tracking response?
    */
    if(status & ASSOC_TRACKING_RETRY)
    {
    sendTrackingRequest(&Cllc_associatedDevList[x]);
    return;
    }
    else if((status & (ASSOC_TRACKING_SENT | ASSOC_TRACKING_RSP
    | ASSOC_TRACKING_ERROR)))
    {
    Cllc_associated_devices_t *pDev = NULL;
    int y;
    
    if(status & (ASSOC_TRACKING_SENT | ASSOC_TRACKING_ERROR))
    {
    ApiMac_deviceDescriptor_t devInfo;
    Llc_deviceListItem_t item;
    ApiMac_sAddr_t devAddr;
    
    /*
    Timeout occurred, notify the user that the tracking
    failed.
    */
    memset(&devInfo, 0, sizeof(ApiMac_deviceDescriptor_t));
    
    devAddr.addrMode = ApiMac_addrType_short;
    devAddr.addr.shortAddr =
    Cllc_associatedDevList[x].shortAddr;
    
    if(Csf_getDevice(&devAddr, &item))
    {
    memcpy(&devInfo.extAddress,
    &item.devInfo.extAddress,
    sizeof(ApiMac_sAddrExt_t));
    }
    devInfo.shortAddress = Cllc_associatedDevList[x].shortAddr;
    devInfo.panID = devicePanId;
    Csf_deviceNotActiveUpdate(&devInfo,
    ((status & ASSOC_TRACKING_SENT) ? true : false));
    
    /* Not responding, so remove the alive marker */
    Cllc_associatedDevList[x].status
    &= ~(CLLC_ASSOC_STATUS_ALIVE
    | ASSOC_CONFIG_SENT | ASSOC_CONFIG_RSP);
    }
    
    /* Clear the tracking bits */
    Cllc_associatedDevList[x].status &= ~(ASSOC_TRACKING_ERROR
    | ASSOC_TRACKING_SENT | ASSOC_TRACKING_RSP);
    
    /* Find the next valid device */
    y = x;
    while(pDev == NULL)
    {
    /* Check for roll over */
    if(y == (CONFIG_MAX_DEVICES-1))
    {
    /* Move to the beginning */
    y = 0;
    }
    else
    {
    /* Move the the next device */
    y++;
    }
    
    if(y == x)
    {
    /* We've come back around */
    break;
    }
    
    /*
    Is the entry valid and active */
    if((Cllc_associatedDevList[y].shortAddr
    != CSF_INVALID_SHORT_ADDR)
    && (Cllc_associatedDevList[y].status
    & CLLC_ASSOC_STATUS_ALIVE))
    {
    pDev = &Cllc_associatedDevList[y];
    }
    }
    
    if(pDev == NULL)
    {
    /* Another device wasn't found, send to same device */
    pDev = &Cllc_associatedDevList[x];
    }
    
    sendTrackingRequest(pDev);
    
    /* Only do one at a time */
    return;
    }
    }
    }
    
    /* If no activity found, find the first active device */
    for(x = 0; x < CONFIG_MAX_DEVICES; x++)
    {
    Display_printf(display, 0, 0, "generate TrackingRequests2 %d", x, NULL);
    /* Make sure the entry is valid. */
    if((Cllc_associatedDevList[x].shortAddr != CSF_INVALID_SHORT_ADDR)
    && (Cllc_associatedDevList[x].status & CLLC_ASSOC_STATUS_ALIVE))
    {
    sendTrackingRequest(&Cllc_associatedDevList[x]);
    break;
    }
    }
    
    if(x == CONFIG_MAX_DEVICES)
    {
    /* No device found, Setup delay for next tracking message */
    Csf_setTrackingClock(TRACKING_DELAY_TIME);
    Display_printf(display, 0, 0, "No device found, Setup delay for next tracking message", NULL, NULL);
    }
    #endif
    }
    
    
    
    void Collector_process(void)
    {
    
    display = Display_open(Display_Type_HOST, NULL);
    
    /* Start the collector device in the network */
    if(Collector_events & COLLECTOR_START_EVT)
    {
    if(cllcState == Cllc_states_initWaiting)
    {
    processStartEvent();
    
    Display_printf(display, 0, 0, "Collector_events is COLLECT_START_EVT", NULL, NULL);
    }
    
    //display = Display_open(Display_Type_HOST, NULL);
    //Display_printf(display, 0, 0, "Collect start event", NULL, NULL);
    GPIO_write(Board_STATE_LED3,0); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED1,1); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED2,1); // GPIO_write() is operating
    
    /* Clear the event */
    Util_clearEvent(&Collector_events, COLLECTOR_START_EVT);
    }
    
    /* Is it time to send the next tracking message? */
    if(Collector_events & COLLECTOR_TRACKING_TIMEOUT_EVT)
    {
    /* Process Tracking Event */
    generateTrackingRequests();
    
    //display = Display_open(Display_Type_HOST, NULL);
    
    Display_printf(display, 0, 0, "Collector_events is COLLECT_TRACKING_TIMEOUT_EVT", NULL, NULL);
    GPIO_write(Board_STATE_LED2,0); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED1,1); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED3,1); // GPIO_write() is operating
    
    /* Clear the event */
    Util_clearEvent(&Collector_events, COLLECTOR_TRACKING_TIMEOUT_EVT);
    }
    
    /*
    The generate a config request for all associated devices that need one
    */
    if(Collector_events & COLLECTOR_CONFIG_EVT)
    {
    #ifdef FEATURE_SECURE_COMMISSIONING
    if(SM_Last_State != SM_CM_InProgress) {
    generateConfigRequests();
    }
    #else
    generateConfigRequests();
    #endif
    //display = Display_open(Display_Type_HOST, NULL);
    Display_printf(display, 0, 0, "Collect config event", NULL, NULL);
    GPIO_write(Board_STATE_LED1,0); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED3,1); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED2,1); // GPIO_write() is operating
    /* Clear the event */
    Util_clearEvent(&Collector_events, COLLECTOR_CONFIG_EVT);
    }
    
    /*
    Collector generate a broadcast command message for FH mode
    */
    if(Collector_events & COLLECTOR_BROADCAST_TIMEOUT_EVT)
    {
    /* Clear the event */
    Util_clearEvent(&Collector_events, COLLECTOR_BROADCAST_TIMEOUT_EVT);
    if(FH_BROADCAST_INTERVAL > 0 && (!CERTIFICATION_TEST_MODE))
    {
    generateBroadcastCmd();
    /* set clock for next broadcast command */
    Csf_setBroadcastClock(FH_BROADCAST_INTERVAL);
    }
    //display = Display_open(Display_Type_HOST, NULL);
    Display_printf(display, 0, 0, "Collector_events is COLLECTOR_BROADCAST_TIMEOUT_EVT", NULL, NULL);
    
    GPIO_write(Board_STATE_LED1,1); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED2,1); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED3,1); // GPIO_write() is operating
    }
    
    /* Process LLC Events */
    Cllc_process();
    
    /* Allow the Specific functions to process */
    Csf_processEvents();
    
    #ifdef FEATURE_SECURE_COMMISSIONING
    /* Allow the security manager specific functions to process */
    SM_process();
    #endif /* FEATURE_SECURE_COMMISSIONING */
    /*
    Don't process ApiMac messages until all of the collector events
    are processed.
    */
    #ifdef FEATURE_SECURE_COMMISSIONING
    if((Collector_events == 0) && (SM_events == 0))
    #else
    if(Collector_events == 0)
    #endif
    {
    /* Wait for response message or events */
    ApiMac_processIncoming();
    }
    }
  • In reply to sung keun lee:

    sung keun lee
    I don't know, why Ssf_getNetworkInfo() function is return fail

    This function simply checks the NV memory to see if there is previous network information stored in the device. If there is, then you may trigger the rejoin process. If Ssf_getNetworkInfo() returns false, it simply means you are forming a new connection to a collector device.

    Can you provide a sniffer log (using http://www.ti.com/tool/PACKET-SNIFFER or any other 15.4 sniffer)? This helps us confirm that the collector is sending a config request over the air.

    If no sniffer is available, this may take longer. Try printing (or toggle some LED) when the sensor receives a config request from the collector. You can add this inside sendConfigRsp() in sensor.c.

    Regards,

    Ammar

    Please click the "This Resolved My Issue" button on this post if it answers your question

  • In reply to Ammar N:

    Thank Ammar N, your answer!

    sorry i have not sniffer dongle so i can't transmit sniffer data to you.

    But Try printing inside sendConfigRsq() in sensor.c but my sensor board is not printed.

    I have some question 

    Q1.Sensor API is write network data to flash rom, when start program 

      -> If it is right, How to write network data to flash rom?

    Q2.Other Sensor API is write network data to flash rom after receive from collector  

    Q3.sensor board debugging log data is below that

    Jdllc_event is JDLLC_PAS_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_PCS_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT
    Jdllc_event is JDLLC_ASSOCIATE_REQ_EVT

    collector board debugging log 

    [Cortex_M4_0] Collect start
    Collector_events is COLLECT_START_EVT
    Cllc_events is CLLC_STATE_CHANGE_EVT
    Collect panID 1
    Cllc_events is CLLC_STATE_CHANGE_EVT
    Cllc_events is CLLC_PA_EVT
    Cllc_events is CLLC_PC_EVT
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT
    Cllc_events is CLLC_PC_EVT  <- It look like that collector board is complete transmit Pan config data to sensor board 
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT
    generate TrackingRequests1 0
    generate TrackingRequests1 1
    generate TrackingRequests2 0
    generate TrackingRequests2 1
    No device found, Setup delay for next tracking message
    Collector_events is COLLECT_TRACKING_TIMEOUT_EVT

    I think that sensor board is complete whit collector board from PA Solicit to Pan config.

    It look like that sensor board is transmit  'Associate request' to collector but not communicate with collector board any more

    (reference below picture)

      

    case 1

    collector board is received associate request data, but can not process any more

    -> If it is right , tel me how to check in collector API ?

    case 2

    collector board is transmit 'MAC ACK' data to sensor board, but sensor board is not process any more

    Q4.My board is difficult with CC1352P LUNCHXL board and Collect board has not Button0, Button1

    I read your reference manual that

    "Start the application by pressing Board_BUTTON0 and collector specific application information will be displayed, such as the channel number."

    "Open the network to allow network devices to join by pressing Board_BUTTON1."

     If it has button function, then collector board is not open network?

  • In reply to sung keun lee:

    I would suggest restructuring your prints, as they are misleading. For example, you should only print generateTracking when the sendTrackingRequest is actually called. So, please move this to inside the if() as shown below.

    /* If no activity found, find the first active device */
    for(x = 0; x < CONFIG_MAX_DEVICES; x++)
    {
    /* Make sure the entry is valid. */
    if((Cllc_associatedDevList[x].shortAddr != CSF_INVALID_SHORT_ADDR)
    && (Cllc_associatedDevList[x].status & CLLC_ASSOC_STATUS_ALIVE))
    {
    Display_printf(display, 0, 0, "generate TrackingRequests2 %d", x, NULL);
    sendTrackingRequest(&Cllc_associatedDevList[x]);
    break;
    }
    }

    sung keun lee

    Q1.Sensor API is write network data to flash rom, when start program 

      -> If it is right, How to write network data to flash rom?

    I would take a look at the code, as this is done for you when a successful connection is made between sensor and collector.

    sung keun lee
    Q4.My board is difficult with CC1352P LUNCHXL board and Collect board has not Button0, Button1

    You will have to modify the example code based on your application. You can manually trigger the Cllc_setJoinPermit() as done in Csf_processEvents().

    Please take a look at our 15.4 stack user's guide. It will explain in depth how to use our stack and enable you to debug further.

    Regards,

    Ammar

    Please click the "This Resolved My Issue" button on this post if it answers your question

  • In reply to Ammar N:

    Thank for your answer!

    I try manually trigger the Cllc_set_JoinPermit() function but I don,t know that sensor is connected or not.

    Sorry my board circuit is difficult whit CC1352P LUNCHXL EVK. so i want to display sensor(and collector) state by LED.

    So i want to know that

    If sensor is connected to collector then what is sensor(and collector) state or where is location in source.(what is function for process)   

  • In reply to sung keun lee:

    The sensor/collector states are located in the jdllc.h/cllc.h files. The states are updating using the updateState() APIs. For sensor.c, you can find the call to update the sensor state to "Joined" in the assocCnfCb() located in jdllc.c.

    Please let me know what state your device is in. Again, without a sniffer it will be difficult to resolve. In the meantime, take a look at this resource to ensure your custom hardware is setup correctly: http://dev.ti.com/tirex/content/simplelink_cc13x2_26x2_sdk_3_20_00_68/docs/ti154stack/html/ti154stack/creating-custom-applications.html.

    Additionally, take a look at this document to verify your hardware setup before attempting to run the stack: http://www.ti.com/lit/an/swra640c/swra640c.pdf.

    I hope this helps.

    Regards,

    Ammar

    Please click the "This Resolved My Issue" button on this post if it answers your question

  • In reply to Ammar N:

    Thank sir, your answer.

    I test collector board and debugging.

    collector is run cllcDeviceJoiningCB() function in collelctor.c

    so i break at  if(status==ApiMac_assocStatus_success) line and valuable check(status = Csf_deviceUpdate(pDevInfo, pCapInfo) and pDevInfo

    The status valuable is 1, It is mean status is ApiMac_assocStatus_panAtCapacity.

    and pDevInfo valuable and result is below picture

    static ApiMac_assocStatus_t cllcDeviceJoiningCB(
    ApiMac_deviceDescriptor_t *pDevInfo,
    ApiMac_capabilityInfo_t *pCapInfo)
    {
    ApiMac_assocStatus_t status;

    /* Make sure the device is in our PAN */
    if(pDevInfo->panID == devicePanId)
    {
    /* Update the user that a device is joining */
    status = Csf_deviceUpdate(pDevInfo, pCapInfo);

    /*=======================================================*/
    /* Added by SKLEE */
    #ifdef DlyLog
    display = Display_open(Display_Type_HOST, NULL);
    Display_printf(display, 0, 0, "device joined %d", pDevInfo->panID, NULL);
    Display_printf(display, 0, 0, "assocStatus %d", status, NULL);
    #endif
    /*=======================================================*/

    if(status==ApiMac_assocStatus_success)    <- break point
    {
    GPIO_write(Board_STATE_LED1,0); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED2,1); // GPIO_write() is operating
    GPIO_write(Board_STATE_LED3,0); // GPIO_write() is operating
    #ifdef FEATURE_MAC_SECURITY
    /* Add device to security device table */
    Cllc_addSecDevice(pDevInfo->panID,
    pDevInfo->shortAddress,
    &pDevInfo->extAddress, 0);
    #endif /* FEATURE_MAC_SECURITY */

    #ifdef FEATURE_SECURE_COMMISSIONING

    /* Strictly do not set the event for sending collector
    * config event as this has to be sent only after the
    * secure commissioning is finished successfully
    */

    #else
    /* Set event for sending collector config packet */
    Util_setEvent(&Collector_events, COLLECTOR_CONFIG_EVT);
    #endif
    }

    I want to know that 

    1.Is Collector not connected whit sensor?

    ->status = Csf_deviceUpdate(pDevInfo, pCapInfo) is after run, the status valuable is not 0(not ApiMac_assocStatus_success)

    2.what is mean?  sensor is not associate to collector or collector can not receive data from sensor

  • In reply to sung keun lee:

    If the ApiMac_assocStatus is not 0, then I don't believe the sensor device has joined. When a sensor joins, you will see an entry in Cllc_associatedDevList. Check there one the device enters the deviceJoiningCB.

    Let's take a step back and verify the RF functionality of your devices. Can you use SmartRF Studio to send raw packets from one device to the other? Please select from the "Typical Settings" option on both devices. It should auto populate some default settings, so just use those for now.

    Please let me know if you need more information regarding using SmartRF Studio.

    EDIT: I apologize for not making this clear, but, if you have a CC1352 or similar launchPad then you can use that as a sniffer too by loading our sniffer_fw.hex onto it.

    Regards,

    Ammar

    Please click the "This Resolved My Issue" button on this post if it answers your question

  • In reply to Ammar N:

    Thank sir AMMAR N

    I test communication used by SmartRF Studio(collector is set RX Mode)

    and result is blow picture

    I am not understand receiver data, but collector received data, some time interval from sensor

    I have some question below that,

    1. I try analysis sdk source used begging but difficult understand that

    void Sensor_process(void)
    {
    bool Check_state;
    display = Display_open(Display_Type_HOST, NULL);

    /* Start the collector device in the network */
    if(Sensor_events & SENSOR_START_EVT)
    {

    #ifdef DlyLog
    Display_printf(display, 0, 0, "Sensor start event4", NULL, NULL);
    #endif

    ApiMac_deviceDescriptor_t devInfo;
    Llc_netInfo_t parentInfo;
    #ifdef USE_DMM

    uint32_t frameCounter = 0;

    /* update policy */
    DMMPolicy_updateStackState(DMMPolicy_StackRole_154Sensor, DMMPOLICY_STACKSTATE_154SENSOR_PROVISIONING);

    Sensor_securityInit(frameCounter);
    #endif /* USE_DMM */

    if(Ssf_getNetworkInfo(&devInfo, &parentInfo ) == true) //  <- return fail 
    {
    Ssf_configSettings_t configInfo;
    #ifdef FEATURE_MAC_SECURITY
    ApiMac_status_t stat;
    #endif /* FEATURE_MAC_SECURITY */

    #ifdef DlyLog
    Display_printf(display, 0, 0, "Ssf_getNetworkInfo true1", NULL, NULL);
    #endif

    Ssf_getNetworkInfo() function is return false so not run if{}

    bool Ssf_getNetworkInfo(ApiMac_deviceDescriptor_t *pDevInfo,
    Llc_netInfo_t *pParentInfo)
    {
    display = Display_open(Display_Type_HOST, NULL);

    Display_printf(display, 0, 0, "Ssf_getNetworkInfo_setp1", NULL, NULL);

    if((pNV != NULL) && (pNV->readItem != NULL)
    && (pDevInfo != NULL) && (pParentInfo != NULL))
    {
    Display_printf(display, 0, 0, "Ssf_getNetworkInfo_setp2", NULL, NULL);
    NVINTF_itemID_t id;
    nvDeviceInfo_t nvItem;

    /* Setup NV ID */
    id.systemID = NVINTF_SYSID_APP;
    id.itemID = SSF_NV_NETWORK_INFO_ID;
    id.subID = 0;

    /*=================================
    Added by SKLEE
    ==================================*/
    pNV->writeItem(id, sizeof(nvDeviceInfo_t), &nvItem); <- Added 

    /* Read Network Information from NV */
    if(pNV->readItem(id, 0, sizeof(nvDeviceInfo_t),
    &nvItem) == NVINTF_SUCCESS)     <- pNV->readItem() is not NVINTF_SUCCESS 
    {
    Display_printf(display, 0, 0, "Ssf_getNetworkInfo_setp3", NULL, NULL);
    memcpy(pDevInfo, &nvItem.device,
    sizeof(ApiMac_deviceDescriptor_t));
    memcpy(pParentInfo, &nvItem.parent, sizeof(Llc_netInfo_t));

    return (true);
    }
    }
    return (false);
    }

    if(pNV->readItem(id, 0, sizeof(nvDeviceInfo_t), &nvItem)  is not NVINTF_SUCCESS 

    bool Ssf_getNetworkInfo(ApiMac_deviceDescriptor_t *pDevInfo, Llc_netInfo_t *pParentInfo) function return is false

     So I guess that

    1.Sensor is not associate collector by this problem. <- My guess is right?

    2.I used external flash rom so added NVS use syscfg

    3.bool Ssf_getNetworkInfo() function used pNV->readItem() function but syscfg. help document example function is

    status = NVS_write(nvsRegion, 0, "Hello", strlen("Hello")+1, NVS_POST_VERIFY);
    if (status != NVS_STATUS_SUCCESS) {
    // Error handling code
    }
    // Copy "Hello" from nvsRegion into local 'buf'
    status = NVS_read(nvsRegion, 0, buf, strlen("Hello")+1);
    if (status != NVS_STATUS_SUCCESS) {
    // Error handling code
    I confused what is right!
    I always Thanks your help