[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