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.

Radio range in orphan joining

Hi to all:

I let  node B to leave the network and  add it to node A's neighbor table by calling NLME_DirectJoinReq() on node A. Then I make node B to do a orphan join by calling NLME_OrphanJoinReq() on node B  and node B will join node A . This is the direct join process.

Now this process was successful which means node B successfully joined node A on condition that the two nodes was within a quite near range about 3m. When the two was out of this range, node B would blink its leds which means it couldn't find its parent just like you dont call NLME_DirectJoinReq() on node A. I think this is because node B couldn't detect the radio signal of node A.

But I tested the AF_DataRequest() function on the two nodes and both the two could transmit or receive data in the range far more than 3m.This means that you keep the two nodes in a distance far than 3m, they could communicate with each other but couldn't complete a  orphan join.When I was testing there were only three nodes:the coord,node A and node B and the coord  was also quite far away from both the two nodes.

I would like to know if  I can change this orphan joining distance further. It shouldn't be so near because they were within the radio distance.

Please advice. Thanks......!! 

  • Hmm interesting... what is the lqi value when you are at 3meters? The lqi is part of the AF incoming msg structure so you can print this out on an LCD.

  • Hi Double 0,

    The lqi between node B and node A in a distance of 3 meters is about 0x55~0x70. They can communicate with each other in a distance about 15~20 meters in the building.

    Actually node B couldn't orphan join node A when they were further than 1 meter. I want to see the lqi on node A when B calling the NLME_OrphanJoinRequest() ,but I don't know how to do that because it's not an AF incoming message.

    The fact is that when A and B were in a distance about 1 meter, they could transmit or receive AF message stablely from each other, but  node B couldn't accomplish an orphan join to node A.; Only when the two nodes were within a quite short distance  of about 50~60cm ,node B could successfully orphan join node A.  The only difference between is the distance of the two nodes.

    I don't know the codes in NLME_OrphanJoinRequest() but I guess it's different from AF_DataRequest. Maybe the signal would be weaker in NLME_OrphanJoinRequest ?

    I also tried MAC_MlmeScanReq() function instead of  NLME_OrphanJoinRequest() , here's my code:

              macMlmeScanReq_t *pData;
              pData->scanChannels=DEFAULT_CHANLIST;
              pData->scanType=MAC_SCAN_ORPHAN;
              pData->scanDuration=zgDefaultStartingScanDuration;
              pData->channelPage=MAC_CHANNEL_PAGE_0;
              MAC_MlmeScanReq(pData);

    but it didn't work at all.It seems that no action was performed after calling this.

    Thank you for your help. Waiting your advice......

     

  • Hi,

    I guess  the NLME_OrphanJoinRequest()  function actually invokes MAC_MlmeScanReq() . A device joining a network by association or  orphan joining or rejoining depends on the    pData->scanType parameter in the MAC_MlmeScanReq() . Network layer is based on the MAC layer.The orphan procedure in MAC layer was described on page 47 , chapter 9.4 in 802.15.4 MAC API _F8W-2005-1503_.pdf

    So I call MAC_MlmeScanReq()  as above on node B, then I add my codes in the MAC_CbackEvent() function in zmac_cb.c:

     if(msgPtr->hdr.event ==MACCB_ORPHAN_IND_CMD)
          {
            HalLedBlink(HAL_LED_1,5,50,200);
          }

    I let node B call MAC_MlmeScanReq()  by press a key , and node A blinked as expected.

    Then in the MAC_CbackEvent() function ,in case MAC_MLME_SCAN_CNF I add my codes to watch the pScan->hdr.status parameter. It indicates the result of the  MAC_MlmeScanReq() . In a distance of 50cm, I pressed a key on node B to call MAC_MlmeScanReq(), then node A blinked,and the pScan->hdr.status parameter of node B is 0x00 which means MAC_SUCCESS; Then in a distance of  1.5 meter , I pressed the key,and node A blinked, and the pScan->hdr.status parameter of node B is 0xEA which means MAC_NO_BEACON indicating "the orphan scan failed because no coordinator realignment was received"; I turned off node A and pressed the key on node B to call MAC_MlmeScanReq(), and the pScan->hdr.status parameter of node B is also 0xEA.

    I guess the problem is  when the distance is further than 1 meter, node A could receive the orphan notification of node B, but node B didn't receive any Over The Air information from node A .So node B reported a MAC_NO_BEACON to the application; when in the distance within 1 meter, all is OK.I think the problem was on node A, maybe concerned with LQI.

    So I have to look into the callback function of MAC_MLME_ORPHAN_IND.  In  MAC_CbackEvent() it is not handled and  is sent to NWK layer .But the code in NWK is invisible.I think I can't change anything.Maybe this is a little bug?

    Please advice

  • For not having the full source code you made some great progress!

    Are you using your own hardware or which development board?

    You should have the same issue with regular joining then.

  • Hi ,

    Thanks for your help. I'm not using TI's hardware,  and actually the effective range of regular join is about 20 meters in building.That's acceptable. I just would like  to make sure that my  operation of  direct join is correct. I 'd like to know if using TI's development board, how long is the distance of orphan joining? If someone tested the real distance in orphan joining and the distance is not so short as mine, then I think I have to change the hardware to have a try. That's because anyone who performing an orphan joining wil actually invoke MAC_MlmeScanReq function and this function is invisible.So I just want to know a successful example in a long distance of orphan joining to locate the error on my hardware.

    Waiting your advice. Thanks!