TI中文支持网
TI专业的中文技术问题搜集分享网站

切换网络sensor/collector

if(devInfoBlock.panID == JDLLC_INVALID_PAN)
                        {
                            /* Device can join any network , associate with
                             * first coordinator from which beacon is received */
                            devInfoBlock.panID = pData->panDesc.coordPanId;
                            panIdMatch = true;
                        }
                        /* Check the incoming PAN ID to see if it's a valid coordinator */
                        else if (devInfoBlock.panID == pData->panDesc.coordPanId)
                        {
                            panIdMatch = true;
                        } 
 devInfoBlock.channel = pData->panDesc.logicalChannel;
                        devInfoBlock.coordShortAddr = pData->panDesc
                                        .coordAddress.addr.shortAddr;
                        if(APIMAC_SFS_BEACON_ORDER( pData->panDesc.superframeSpec)
                                        != JDLLC_BEACON_ORDER_NON_BEACON)
                        {
                            devInfoBlock.beaconOrder = APIMAC_SFS_BEACON_ORDER(
                                            pData->panDesc.superframeSpec);
                            devInfoBlock.superframeOrder =
                                APIMAC_SFS_SUPERFRAME_ORDER(
                                                pData->panDesc.superframeSpec);
                        }

                        if(devInfoBlock.beaconOrder == JDLLC_BEACON_ORDER_NON_BEACON)
                        {
                            parentFound = true;
#ifdef FREQ_2_4G
                            ApiMac_srcMatchEnable();
#endif
                            Ssf_stopScanBackoffClock();
                        }

在非信标中,入网回调中例子有这样一段代码,这判断了panid为空和相同网络,如果我是在所有信道中扫描,回调回来的是某个网络panid=123,但是我的devInfoBlock.panid确是234,根据例子执行代码,已经把信道和地址都写入进devInfoBlock中,如果我要回调某个指定网络,应该修改的地方是?
Alvin Chen:

static void beaconNotifyIndCb(ApiMac_mlmeBeaconNotifyInd_t *pData)
这是Beacon Notification callback.
这里有个Ssf_findBlackListIndex 可以作为管理使用。

user5322468:

回复 Alvin Chen:

这个只是从NV中匹配是否黑名单,我不可能把所有的网络黑名单都加入进去。
A,B,C三个网络,sensor这个时候想去连接A网络,可是扫描过来的却是B网络,然而例子中判断
if(devInfoBlock.panID == JDLLC_INVALID_PAN)
else if (devInfoBlock.panID == pData->panDesc.coordPanId)
如果都不满足,还是会把devInfoBlock.channel = pData->panDesc.logicalChannel;devInfoBlock.coordShortAddr = pData->panDesc.coordAddress.addr.shortAddr;
信道和地址保存起来,难道不会出现if和elseif都不满足的情况?
如果我想连接A网络,此处的改动应该是?

user5322468:

回复 Alvin Chen:

上述的有点不同,请解释下

Alvin Chen:

回复 user5322468:

你可以通过不同的PANID来做区分。
只有当panIdMatch成功匹配才会进行ASSOCIATE_REQ
static void scanCnfCb(ApiMac_mlmeScanCnf_t *pData)
{if(pData->status == ApiMac_status_success){if(pData->scanType == ApiMac_scantype_active){/* Only send association requests for a matching PAN */if(panIdMatch){/* Set event to send Association Request */Util_setEvent(&Jdllc_events, JDLLC_ASSOCIATE_REQ_EVT);}

user5322468:

回复 Alvin Chen:

我的意思是:panIdMatch=true
在beaconNotifyIndCb中的
devInfoBlock.channel = pData->panDesc.logicalChannel;
devInfoBlock.coordShortAddr = pData->panDesc.coordAddress.addr.shortAddr;

这行代码是在
if(devInfoBlock.panID == JDLLC_INVALID_PAN)
else if (devInfoBlock.panID == pData->panDesc.coordPanId)
之后,没有条件限制,只要进来,都会把devInfoBlock.channel和devInfoBlock.coordShortAddr赋值,如果if-elseif都不满足,岂不是出错饿。不懂

Alvin Chen:

回复 user5322468:

请参考:
if(devInfoBlock.panID == JDLLC_INVALID_PAN){/* Device can join any network , associate with* first coordinator from which beacon is received */devInfoBlock.panID = pData->panDesc.coordPanId;panIdMatch = true;}/* Check the incoming PAN ID to see if it's a valid coordinator */else if (devInfoBlock.panID == pData->panDesc.coordPanId){panIdMatch = true;}

只有panIdMatch=true 才会进行ASSOCIATE_REQ ,后面虽然填充了,但是除了devInfoBlock.beaconOrder == JDLLC_BEACON_ORDER_NON_BEACON都不会设置panIdMatch = true;
也是无法触发的ASSOCIATE_REQ 的

user5322468:

回复 Alvin Chen:

那就是说,只有devInfoBlock.panID等于空和当前扫描的panid,才会关联咯,我刚刚改代码,首先启动A,B网络,入网许可都打开,连接A,先发送分离,然后在分离中把devInfoBlock.panID=B网络panid,然后switchstate(scanActive),beaconNotifyIndCb回调直接跳过。是我代码环节错误,还是思路不对?

Alvin Chen:

回复 user5322468:

你要等sensor 进入jdllcDisassocIndCb ,然后会Ssf_clearNetworkInfo,之后再设置新的devInfoBlock.panID。我的理解是这样的,你试试看。

user5322468:

回复 Alvin Chen:

我在sensor通讯中,把当前连接的collector关闭,sensor抓包信息如图下:正常通讯,发送的地址变成FFFF,这是为什么呀?

YiKai Chen:

回复 user5322468:

0xFFFF是廣播訊息,beacon request是你的sensor在找網路重連

赞(0)
未经允许不得转载:TI中文支持网 » 切换网络sensor/collector
分享到: 更多 (0)