[zb4osgi-changeset] [scm] ZigBee 4 OSGi repository change: r462 - /projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.osgi.zigbee.basedriver/src/main/java/it/cnr/isti/zigbee/basedriver/discovery/ImportingQueue.java

scm-notify at zb4osgi.aaloa.org scm-notify at zb4osgi.aaloa.org
Mon Sep 24 17:27:13 CEST 2012


Author: manlio.bacco
Date: Mon Sep 24 17:27:13 2012
New Revision: 462

Log:
devices already instantiated are now correctly handled

Modified:
    projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.osgi.zigbee.basedriver/src/main/java/it/cnr/isti/zigbee/basedriver/discovery/ImportingQueue.java

Modified: projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.osgi.zigbee.basedriver/src/main/java/it/cnr/isti/zigbee/basedriver/discovery/ImportingQueue.java
==============================================================================
--- projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.osgi.zigbee.basedriver/src/main/java/it/cnr/isti/zigbee/basedriver/discovery/ImportingQueue.java (original)
+++ projects/zb4osgi/sandbox/manlio.bacco/org.aaloa.osgi.zigbee.basedriver/src/main/java/it/cnr/isti/zigbee/basedriver/discovery/ImportingQueue.java Mon Sep 24 17:27:13 2012
@@ -18,7 +18,7 @@
    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    See the License for the specific language governing permissions and
    limitations under the License.
-*/
+ */
 
 package it.cnr.isti.zigbee.basedriver.discovery;
 
@@ -39,35 +39,53 @@
  *
  */
 public class ImportingQueue {
-	
+
 	private static final Logger logger = LoggerFactory.getLogger(ImportingQueue.class);
-	
+
 	public class ZigBeeNodeAddress {
-		
+
 		private final ZToolAddress16 networkAddress;
 		private final ZToolAddress64 ieeeAddress;
+		private final String permitJoin;
+		private final short lqi;
+
+		public ZigBeeNodeAddress(final ZToolAddress16 networkAddress, final ZToolAddress64 ieeeAddress, final String permitJoin, final short lqi) {			
+			this.networkAddress = networkAddress;
+			this.ieeeAddress = ieeeAddress;
+			this.permitJoin = permitJoin;
+			this.lqi = lqi;
+		}
 		
 		public ZigBeeNodeAddress(final ZToolAddress16 networkAddress, final ZToolAddress64 ieeeAddress) {			
 			this.networkAddress = networkAddress;
 			this.ieeeAddress = ieeeAddress;
+			this.permitJoin = "";
+			this.lqi = 0;
 		}
-		
+
 		public final ZToolAddress16 getNetworkAddress() {
 			return networkAddress;
 		}
 		public final ZToolAddress64 getIEEEAddress() {
 			return ieeeAddress;
 		}
+		public final String getPermitJoin() {
+			return permitJoin;
+		}
+		public final short getLqi() {
+			return lqi;
+		}
 	}
-	
+
 	private final ArrayList<ZigBeeNodeAddress> addresses = new ArrayList<ZigBeeNodeAddress>();		
-	
+	private final ArrayList<ZigBeeNodeAddress> addressesAlreadyInserted = new ArrayList<ZigBeeNodeAddress>();		
+
 	public void clear() {
 		synchronized (addresses) {
 			addresses.clear();
 		}
 	}
-	
+
 	public boolean isEmpty() {
 		synchronized (addresses) {
 			return addresses.size() == 0;
@@ -79,19 +97,39 @@
 			return addresses.size();
 		}
 	}
-	
-	
+
+	public void deviceCorrectlyDiscovered(ZToolAddress16 nwkAddress, ZToolAddress64 ieeeAddress){
+
+		ZigBeeNodeAddress inserted = new ZigBeeNodeAddress(nwkAddress, ieeeAddress);
+		addressesAlreadyInserted.add(inserted);
+	}
+
 	public void push(ZToolAddress16 nwkAddress, ZToolAddress64 ieeeAddress){
+
 		ZigBeeNodeAddress inserting = new ZigBeeNodeAddress(nwkAddress, ieeeAddress);
-		logger.debug("Adding {} ({})",nwkAddress,ieeeAddress);
-		synchronized (addresses) {
-			addresses.add(inserting);
-			addresses.notify();
-		}		
-		logger.debug("Added {} ({})",nwkAddress,ieeeAddress);
+		boolean found = false;
+		for(int i = 0; i < addressesAlreadyInserted.size(); i++){
+			if(addressesAlreadyInserted.get(i).getIEEEAddress().equals(inserting.getIEEEAddress())){
+				found = true;
+				break;
+			}
+		}
+
+		if(!found){
+			// insert only one time a device (IEEE address) 
+			// LQI request cause inserting same devices multiple times because of different nwkAddress
+
+			logger.debug("Adding {} ({})", nwkAddress, ieeeAddress);
+			synchronized (addresses) {
+				addresses.add(inserting);
+				addresses.notify();
+			}		
+			logger.debug("Added {} ({})", nwkAddress, ieeeAddress);
+		}
 	}
 
 	public ZigBeeNodeAddress pop(){
+
 		ZigBeeNodeAddress result = null;
 		logger.debug("Removing element");
 		synchronized (addresses) {
@@ -105,7 +143,5 @@
 		}
 		logger.debug("Removed {} {}", result.networkAddress, result.ieeeAddress);		
 		return result;
-	}
-	
-	
-}
+	}	
+}




More information about the Commit mailing list