主節(jié)點的鄰居表的大小為24,意味著主節(jié)點最多只可以有24個子節(jié)點(enddevice或router)。
在主節(jié)點中的JZA_vStackEvent事件中,在網(wǎng)絡(luò)成功啟動時可以設(shè)置這樣一個參數(shù):
JZS_vEnableEDAddrReuse(1800);
括號里德參數(shù)單位是s,表示的是,如果1800s內(nèi)子節(jié)點還沒有跟主節(jié)點進(jìn)行數(shù)據(jù)通訊,則主節(jié)點會認(rèn)為子節(jié)點死掉,接著就會觸發(fā)JZS_EVENT_INACTIVE_ED_DELETED事件,將子節(jié)點從自己的鄰居表刪除,因此,當(dāng)子節(jié)點成功入網(wǎng)后,如果設(shè)置了JZS_vEnableEDAddrReuse(1800),底層代碼中最好在要最多每隔1800s就要跟主節(jié)點進(jìn)行數(shù)據(jù)通訊,否則,主節(jié)點會將該節(jié)點的網(wǎng)絡(luò)信息從鄰居表中刪除,這樣,主節(jié)點發(fā)送出的數(shù)據(jù),子節(jié)點就收不到了。
但是在這種情況下,如果,子節(jié)點默認(rèn)的發(fā)送目標(biāo)地址是其父節(jié)點,發(fā)送出來的數(shù)據(jù),父節(jié)點還是能收到了。這樣,子節(jié)點能找到父節(jié)點,但是父節(jié)點找不到子節(jié)點,唯一的方法是將子節(jié)點的網(wǎng)絡(luò)信息擦除再重新入網(wǎng)。
下面的代碼描述的是如何讀鄰居表:
PUBLIC void vReadNeighbourTable(uint8 notify_flag)
{ int i; vPrintf("\n-- network table --\n"); //Neighbor table for (i = 0; i < gsNIB.nwkNeighborTableSize; i++) { if(gsNIB.nwkNeighborTable[i].u16Addr==0xffff) continue; vPrintf("Neighbor %d: addr = %d, mac:%x-%x, Device Type=%d, LQI = %d, Channel = %d\n", i, gsNIB.nwkNeighborTable[i].u16Addr, gsNIB.nwkNeighborTable[i].sExtAddr.u32H, gsNIB.nwkNeighborTable[i].sExtAddr.u32L, gsNIB.nwkNeighborTable[i].eDevicetype, gsNIB.nwkNeighborTable[i].u8LQI, gsNIB.nwkNeighborTable[i].u8Channel ); if(notify_flag){} } |
|