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-CC1352R1: Collector/Sensor - Sensor do not go into orphan state after collector power loss, re-join issue

Part Number: LAUNCHXL-CC1352R1

Hey,

I am using the SimpleLink SDK examples of the Collector and Sensor in FH mode.
https://dev.ti.com/tirex/explore/node?a=BSEc4rl__6.40.00.13&devtools=LAUNCHXL-CC1352R1&node=A__ADh8veUDmQ809L8z0l6GtQ__com.ti.SIMPLELINK_CC13XX_CC26XX_SDK__BSEc4rl__6.40.00.13&r=BSEc4rl__7.10.00.98

Regarding this post that says that quote "If the power loss is to short for the sensor to notice that the collector was offline, it will not go to orphan state. As it still knows the network, it will be able to send messages to the collector."

 

The problem is When I disconnect the collector during more than 1 minute, in a network of 10 sensors, there are always one or two sensors that do not go into orphan state and thus loss of synchronism happens and PER start to increase. I can tell that because I force them to reset when they go orphan and then they enter in the "search for network phase". That fix the issues when they enter in orphan state. 

My question is, there is any possibility for the sensor go to an undefined state ?

In the jdllc.c in static void pollCnfCb(ApiMac_mlmePollCnf_t *pData) function if no ack is receiveid from the collector and if(devInfoBlock.dataFailures == CONFIG_MAX_DATA_FAILURES) is true, there is another IF statement: 
if(CONFIG_MAC_BEACON_ORDER == JDLLC_BEACON_ORDER_NON_BEACON)

is there any change of that IF being false at any given moment in time? My CONFIG_MAC_BEACON_ORDER is 15 (default).

 else if(pData->status == ApiMac_status_noAck)
    {

            /* track the number of failures  */
            devInfoBlock.dataFailures++;

        if((devInfoBlock.currentJdllcState == Jdllc_states_joined)
           || (devInfoBlock.currentJdllcState == Jdllc_states_rejoined))
        {
            if(!CONFIG_FH_ENABLE)
            {
                /* retry poll with shorter interval in busy network */
                Ssf_setPollClock(JDLLC_RETRY_POLL);
            }
        }

        if(devInfoBlock.dataFailures == CONFIG_MAX_DATA_FAILURES)
        {
            if(CONFIG_MAC_BEACON_ORDER == JDLLC_BEACON_ORDER_NON_BEACON)
            {
                handleMaxDataFail();
            }
        }
        else
        {
            if(devInfoBlock.currentJdllcState == Jdllc_states_initRestoring)
            {
                if((!CONFIG_RX_ON_IDLE) && (!CONFIG_FH_ENABLE))
                {
                    /* set event for polling if sleepy device*/
                    Util_setEvent(&Jdllc_events, JDLLC_POLL_EVT);
                }
            }
        }
    }