diff --git a/.project b/.project
new file mode 100644
index 0000000000..d3ccd34266
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ zigbee
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/com.zsmartsystems.zigbee.console.main/src/main/java/com/zsmartsystems/zigbee/console/main/ZigBeeConsole.java b/com.zsmartsystems.zigbee.console.main/src/main/java/com/zsmartsystems/zigbee/console/main/ZigBeeConsole.java
index 3f6d2e0c5b..0901801e18 100644
--- a/com.zsmartsystems.zigbee.console.main/src/main/java/com/zsmartsystems/zigbee/console/main/ZigBeeConsole.java
+++ b/com.zsmartsystems.zigbee.console.main/src/main/java/com/zsmartsystems/zigbee/console/main/ZigBeeConsole.java
@@ -284,21 +284,18 @@ public void commandReceived(ZigBeeCommand command) {
}
});
- Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
- @Override
- public void run() {
- shutdown = true;
- try {
- System.in.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- mainThread.interrupt();
- mainThread.join();
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ Runtime.getRuntime().addShutdownHook(new Thread(() -> {
+ shutdown = true;
+ try {
+ System.in.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ try {
+ mainThread.interrupt();
+ mainThread.join();
+ } catch (InterruptedException e) {
+ e.printStackTrace();
}
}));
}
@@ -945,74 +942,62 @@ public boolean process(final ZigBeeApi zigbeeApi, final String[] args, final Pri
return false;
}
- new Thread(new Runnable() {
- @Override
- public void run() {
- int cnt = 0;
- while (true) {
- print("STRESSING 1 CNT: " + cnt++, out);
- ZclOnOffCluster cluster = (ZclOnOffCluster) endpoint
- .getInputCluster(ZclOnOffCluster.CLUSTER_ID);
- cluster.onCommand();
- try {
- Thread.sleep(167);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ new Thread(() -> {
+ int cnt = 0;
+ while (true) {
+ print("STRESSING 1 CNT: " + cnt++, out);
+ ZclOnOffCluster cluster = (ZclOnOffCluster) endpoint
+ .getInputCluster(ZclOnOffCluster.CLUSTER_ID);
+ cluster.onCommand();
+ try {
+ Thread.sleep(167);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
}
}
}).start();
- new Thread(new Runnable() {
- @Override
- public void run() {
- int cnt = 0;
- while (true) {
- print("STRESSING 2 CNT: " + cnt++, out);
- ZclOnOffCluster cluster = (ZclOnOffCluster) endpoint
- .getInputCluster(ZclOnOffCluster.CLUSTER_ID);
- cluster.onCommand();
- try {
- Thread.sleep(107);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ new Thread(() -> {
+ int cnt = 0;
+ while (true) {
+ print("STRESSING 2 CNT: " + cnt++, out);
+ ZclOnOffCluster cluster = (ZclOnOffCluster) endpoint
+ .getInputCluster(ZclOnOffCluster.CLUSTER_ID);
+ cluster.onCommand();
+ try {
+ Thread.sleep(107);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
}
}
}).start();
- new Thread(new Runnable() {
- @Override
- public void run() {
- int cnt = 0;
- while (true) {
- print("STRESSING 3 CNT: " + cnt++, out);
- ZclOnOffCluster cluster = (ZclOnOffCluster) endpoint
- .getInputCluster(ZclOnOffCluster.CLUSTER_ID);
- cluster.onCommand();
- try {
- Thread.sleep(131);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ new Thread(() -> {
+ int cnt = 0;
+ while (true) {
+ print("STRESSING 3 CNT: " + cnt++, out);
+ ZclOnOffCluster cluster = (ZclOnOffCluster) endpoint
+ .getInputCluster(ZclOnOffCluster.CLUSTER_ID);
+ cluster.onCommand();
+ try {
+ Thread.sleep(131);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
}
}
}).start();
- new Thread(new Runnable() {
- @Override
- public void run() {
- int cnt = 0;
- while (true) {
- print("STRESSING 4 CNT: " + cnt++, out);
- ZclOnOffCluster cluster = (ZclOnOffCluster) endpoint
- .getInputCluster(ZclOnOffCluster.CLUSTER_ID);
- cluster.onCommand();
- try {
- Thread.sleep(187);
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
+ new Thread(() -> {
+ int cnt = 0;
+ while (true) {
+ print("STRESSING 4 CNT: " + cnt++, out);
+ ZclOnOffCluster cluster = (ZclOnOffCluster) endpoint
+ .getInputCluster(ZclOnOffCluster.CLUSTER_ID);
+ cluster.onCommand();
+ try {
+ Thread.sleep(187);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
}
}
}).start();
@@ -1089,46 +1074,42 @@ public String getSyntax() {
*/
@Override
public boolean process(final ZigBeeApi zigbeeApi, final String[] args, final PrintStream out) throws Exception {
- new Thread(new Runnable() {
- @Override
- public void run() {
- int cnts = 1000;
- int errors = 0;
- int cnt = 0;
- List lqi = new ArrayList<>();
- while (cnt < cnts) {
- print("LQI Poll CNT: " + cnt++, out);
- final ManagementLqiRequest neighborRequest = new ManagementLqiRequest(0);
- neighborRequest.setDestinationAddress(new ZigBeeEndpointAddress(0));
-
- CommandResult response;
- try {
- response = networkManager.sendTransaction(neighborRequest, neighborRequest).get();
- final ManagementLqiResponse neighborResponse = response.getResponse();
-
- if (neighborResponse == null || neighborResponse.getStatus() != ZdoStatus.SUCCESS) {
- errors++;
- continue;
- }
- if (neighborResponse.getNeighborTableList().isEmpty()) {
- print("No neighbors", out);
- continue;
- }
- lqi.add(neighborResponse.getNeighborTableList().get(0).getLqi());
- } catch (InterruptedException | ExecutionException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ new Thread(() -> {
+ int cnts = 1000;
+ int errors = 0;
+ int cnt = 0;
+ List lqi = new ArrayList<>();
+ while (cnt < cnts) {
+ print("LQI Poll CNT: " + cnt++, out);
+ final ManagementLqiRequest neighborRequest = new ManagementLqiRequest(0);
+ neighborRequest.setDestinationAddress(new ZigBeeEndpointAddress(0));
+
+ CommandResult response;
+ try {
+ response = networkManager.sendTransaction(neighborRequest, neighborRequest).get();
+ final ManagementLqiResponse neighborResponse = response.getResponse();
+
+ if (neighborResponse == null || neighborResponse.getStatus() != ZdoStatus.SUCCESS) {
+ errors++;
+ continue;
}
+ if (neighborResponse.getNeighborTableList().isEmpty()) {
+ print("No neighbors", out);
+ continue;
+ }
+ lqi.add(neighborResponse.getNeighborTableList().get(0).getLqi());
+ } catch (InterruptedException | ExecutionException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
- IntSummaryStatistics stats = lqi.stream().mapToInt((x) -> x).summaryStatistics();
-
- print("LQI Polling Complete", out);
- print("Errors: " + errors, out);
- print("Min : " + stats.getMin(), out);
- print("Max : " + stats.getMax(), out);
- print("Avg : " + stats.getAverage(), out);
-
}
+ IntSummaryStatistics stats = lqi.stream().mapToInt((x) -> x).summaryStatistics();
+
+ print("LQI Polling Complete", out);
+ print("Errors: " + errors, out);
+ print("Min : " + stats.getMin(), out);
+ print("Max : " + stats.getMax(), out);
+ print("Avg : " + stats.getAverage(), out);
}).start();
return true;
@@ -1157,12 +1138,7 @@ public String getSyntax() {
*/
@Override
public boolean process(final ZigBeeApi zigbeeApi, final String[] args, final PrintStream out) throws Exception {
- new Thread(new Runnable() {
- @Override
- public void run() {
- networkManager.reinitialize();
- }
- }).start();
+ new Thread(networkManager::reinitialize).start();
return true;
}
diff --git a/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/ZigBeeDongleEzsp.java b/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/ZigBeeDongleEzsp.java
index 334e9a3f97..2bf2bfafd2 100644
--- a/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/ZigBeeDongleEzsp.java
+++ b/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/ZigBeeDongleEzsp.java
@@ -630,17 +630,14 @@ private void scheduleNetworkStatePolling() {
return;
}
- pollingTimer = executorService.scheduleWithFixedDelay(new Runnable() {
- @Override
- public void run() {
- // Don't poll the state if the network is down
- // or we've sent a command to the dongle within the pollRate
- if (!networkStateUp || (lastSendCommand + pollRate > System.currentTimeMillis())) {
- return;
- }
- // Don't wait for the response. This is running in a single thread scheduler
- frameHandler.queueFrame(new EzspNetworkStateRequest());
+ pollingTimer = executorService.scheduleWithFixedDelay(() -> {
+ // Don't poll the state if the network is down
+ // or we've sent a command to the dongle within the pollRate
+ if (!networkStateUp || (lastSendCommand + pollRate > System.currentTimeMillis())) {
+ return;
}
+ // Don't wait for the response. This is running in a single thread scheduler
+ frameHandler.queueFrame(new EzspNetworkStateRequest());
}, pollRate, pollRate, TimeUnit.MILLISECONDS);
}
@@ -808,40 +805,37 @@ public void sendCommand(final int msgTag, final ZigBeeApsFrame apsFrame) {
// The response from the SendXxxcast messages returns the network layer sequence number
// We need to correlate this with the messageTag
- executorService.execute(new Runnable() {
- @Override
- public void run() {
- synchronized (isConfiguredSync) {
- if (!isConfigured) {
- logger.debug("EZSP Dongle is not configured. Frame not sent: {}", apsFrame);
- return;
- }
+ executorService.execute(() -> {
+ synchronized (isConfiguredSync) {
+ if (!isConfigured) {
+ logger.debug("EZSP Dongle is not configured. Frame not sent: {}", apsFrame);
+ return;
+ }
- lastSendCommand = System.currentTimeMillis();
- frameHandler.sendEzspTransaction(transaction);
-
- EmberStatus status = null;
- if (transaction.getResponse() instanceof EzspSendUnicastResponse) {
- fragmentationApsCounters.put(msgTag,
- ((EzspSendUnicastResponse) transaction.getResponse()).getSequence());
- status = ((EzspSendUnicastResponse) transaction.getResponse()).getStatus();
- } else if (transaction.getResponse() instanceof EzspSendBroadcastResponse) {
- status = ((EzspSendBroadcastResponse) transaction.getResponse()).getStatus();
- } else if (transaction.getResponse() instanceof EzspSendMulticastResponse) {
- status = ((EzspSendMulticastResponse) transaction.getResponse()).getStatus();
- } else {
- logger.debug("Unable to get response from {} :: {}", transaction.getRequest(),
- transaction.getResponse());
- return;
- }
+ lastSendCommand = System.currentTimeMillis();
+ frameHandler.sendEzspTransaction(transaction);
+
+ EmberStatus status = null;
+ if (transaction.getResponse() instanceof EzspSendUnicastResponse) {
+ fragmentationApsCounters.put(msgTag,
+ ((EzspSendUnicastResponse) transaction.getResponse()).getSequence());
+ status = ((EzspSendUnicastResponse) transaction.getResponse()).getStatus();
+ } else if (transaction.getResponse() instanceof EzspSendBroadcastResponse) {
+ status = ((EzspSendBroadcastResponse) transaction.getResponse()).getStatus();
+ } else if (transaction.getResponse() instanceof EzspSendMulticastResponse) {
+ status = ((EzspSendMulticastResponse) transaction.getResponse()).getStatus();
+ } else {
+ logger.debug("Unable to get response from {} :: {}", transaction.getRequest(),
+ transaction.getResponse());
+ return;
+ }
- // If this is EMBER_SUCCESS, then do nothing as the command is still not transmitted.
- // If there was an error, then we let the system know we've failed already!
- if (status == EmberStatus.EMBER_SUCCESS) {
- return;
- }
- zigbeeTransportReceive.receiveCommandState(msgTag, ZigBeeTransportProgressState.TX_NAK);
+ // If this is EMBER_SUCCESS, then do nothing as the command is still not transmitted.
+ // If there was an error, then we let the system know we've failed already!
+ if (status == EmberStatus.EMBER_SUCCESS) {
+ return;
}
+ zigbeeTransportReceive.receiveCommandState(msgTag, ZigBeeTransportProgressState.TX_NAK);
}
});
}
@@ -941,18 +935,15 @@ public void handlePacket(EzspFrame response) {
// Message has been completed by the NCP
if (response instanceof EzspMessageSentHandler) {
- executorService.execute(new Runnable() {
- @Override
- public void run() {
- EzspMessageSentHandler sentHandler = (EzspMessageSentHandler) response;
- ZigBeeTransportProgressState sentHandlerState;
- if (sentHandler.getStatus() == EmberStatus.EMBER_SUCCESS) {
- sentHandlerState = ZigBeeTransportProgressState.RX_ACK;
- } else {
- sentHandlerState = ZigBeeTransportProgressState.RX_NAK;
- }
- zigbeeTransportReceive.receiveCommandState(sentHandler.getMessageTag(), sentHandlerState);
+ executorService.execute(() -> {
+ EzspMessageSentHandler sentHandler = (EzspMessageSentHandler) response;
+ ZigBeeTransportProgressState sentHandlerState;
+ if (sentHandler.getStatus() == EmberStatus.EMBER_SUCCESS) {
+ sentHandlerState = ZigBeeTransportProgressState.RX_ACK;
+ } else {
+ sentHandlerState = ZigBeeTransportProgressState.RX_NAK;
}
+ zigbeeTransportReceive.receiveCommandState(sentHandler.getMessageTag(), sentHandlerState);
});
return;
}
diff --git a/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/EzspNeighborTable.java b/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/EzspNeighborTable.java
index 74caceb97c..158abfd57f 100644
--- a/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/EzspNeighborTable.java
+++ b/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/EzspNeighborTable.java
@@ -55,16 +55,9 @@ public class EzspNeighborTable {
public EzspNeighborTable(AshFrameHandler ashHandler, int updatePeriod) {
this.ashHandler = ashHandler;
- Runnable neighborUpdateThread = new Runnable() {
- @Override
- public void run() {
- updateNeighbors();
- }
- };
-
routingEntries = getConfiguration(EzspConfigId.EZSP_CONFIG_SOURCE_ROUTE_TABLE_SIZE);
- scheduler.scheduleAtFixedRate(neighborUpdateThread, updatePeriod, updatePeriod, TimeUnit.SECONDS);
+ scheduler.scheduleAtFixedRate(this::updateNeighbors, updatePeriod, updatePeriod, TimeUnit.SECONDS);
}
private void updateNeighbors() {
diff --git a/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/spi/SpiFrameHandler.java b/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/spi/SpiFrameHandler.java
index 0b362a1b6d..96483a9591 100644
--- a/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/spi/SpiFrameHandler.java
+++ b/com.zsmartsystems.zigbee.dongle.ember/src/main/java/com/zsmartsystems/zigbee/dongle/ember/internal/spi/SpiFrameHandler.java
@@ -606,13 +606,10 @@ private synchronized void restartPolling() {
return;
}
- pollingTimer = pollingScheduler.scheduleAtFixedRate(new Runnable() {
- @Override
- public void run() {
- if (stateConnected && sendQueue.isEmpty()) {
- doCallbackRequest.set(true);
- sendNextFrame();
- }
+ pollingTimer = pollingScheduler.scheduleAtFixedRate(() -> {
+ if (stateConnected && sendQueue.isEmpty()) {
+ doCallbackRequest.set(true);
+ sendNextFrame();
}
}, pollRate, pollRate, TimeUnit.MILLISECONDS);
}
diff --git a/com.zsmartsystems.zigbee.dongle.telegesis/src/main/java/com/zsmartsystems/zigbee/dongle/telegesis/ZigBeeDongleTelegesis.java b/com.zsmartsystems.zigbee.dongle.telegesis/src/main/java/com/zsmartsystems/zigbee/dongle/telegesis/ZigBeeDongleTelegesis.java
index 4ecda560ff..e1b2318c7e 100644
--- a/com.zsmartsystems.zigbee.dongle.telegesis/src/main/java/com/zsmartsystems/zigbee/dongle/telegesis/ZigBeeDongleTelegesis.java
+++ b/com.zsmartsystems.zigbee.dongle.telegesis/src/main/java/com/zsmartsystems/zigbee/dongle/telegesis/ZigBeeDongleTelegesis.java
@@ -736,31 +736,28 @@ public void sendCommand(final int msgTag, final ZigBeeApsFrame apsFrame) {
// We need to get the Telegesis SEQ number for the transaction so we can correlate the transaction ID
// This is done in a separate thread that puts all the responses from the dongle in a pipeline
- commandScheduler.execute(new Runnable() {
- @Override
- public void run() {
- synchronized (isConfiguredSync) {
- if (!isConfigured) {
- logger.debug("Telegesis dongle is not configured. Frame not sent: {}", apsFrame);
- return;
- }
-
- lastSendCommand = System.currentTimeMillis();
- frameHandler.sendRequest(command);
-
- // Let the stack know the frame is sent
- zigbeeTransportReceive.receiveCommandState(msgTag,
- command.getStatus() == TelegesisStatusCode.SUCCESS ? ZigBeeTransportProgressState.TX_ACK
- : ZigBeeTransportProgressState.TX_NAK);
-
- // Multicast doesn't have a sequence returned, so nothing more to do here
- if (command instanceof TelegesisSendMulticastCommand) {
- return;
- }
-
- if (((TelegesisSendUnicastCommand) command).getMessageId() != null) {
- messageIdMap.put(((TelegesisSendUnicastCommand) command).getMessageId(), msgTag);
- }
+ commandScheduler.execute(() -> {
+ synchronized (isConfiguredSync) {
+ if (!isConfigured) {
+ logger.debug("Telegesis dongle is not configured. Frame not sent: {}", apsFrame);
+ return;
+ }
+
+ lastSendCommand = System.currentTimeMillis();
+ frameHandler.sendRequest(command);
+
+ // Let the stack know the frame is sent
+ zigbeeTransportReceive.receiveCommandState(msgTag,
+ command.getStatus() == TelegesisStatusCode.SUCCESS ? ZigBeeTransportProgressState.TX_ACK
+ : ZigBeeTransportProgressState.TX_NAK);
+
+ // Multicast doesn't have a sequence returned, so nothing more to do here
+ if (command instanceof TelegesisSendMulticastCommand) {
+ return;
+ }
+
+ if (((TelegesisSendUnicastCommand) command).getMessageId() != null) {
+ messageIdMap.put(((TelegesisSendUnicastCommand) command).getMessageId(), msgTag);
}
}
});
@@ -779,11 +776,8 @@ public void telegesisEventReceived(TelegesisEvent event) {
}
// This is done in a separate thread that puts all the responses from the dongle in a pipeline
- commandScheduler.execute(new Runnable() {
- @Override
- public void run() {
- telegesisEventReceivedRunnable(event);
- }
+ commandScheduler.execute(() -> {
+ telegesisEventReceivedRunnable(event);
});
}
@@ -1211,17 +1205,14 @@ private void scheduleNetworkStatePolling() {
pollingTimer.cancel(true);
}
- pollingTimer = executorService.scheduleWithFixedDelay(new Runnable() {
- @Override
- public void run() {
- // Don't poll the state if the network is down
- // or we've sent a command to the dongle within the pollRate
- if (!networkStateUp || (lastSendCommand + pollRate > System.currentTimeMillis())) {
- return;
- }
- // Don't wait for the response. This is running in a single thread scheduler
- frameHandler.queueFrame(new TelegesisDisplayNetworkInformationCommand());
+ pollingTimer = executorService.scheduleWithFixedDelay(() -> {
+ // Don't poll the state if the network is down
+ // or we've sent a command to the dongle within the pollRate
+ if (!networkStateUp || (lastSendCommand + pollRate > System.currentTimeMillis())) {
+ return;
}
+ // Don't wait for the response. This is running in a single thread scheduler
+ frameHandler.queueFrame(new TelegesisDisplayNetworkInformationCommand());
}, pollRate, pollRate, TimeUnit.MILLISECONDS);
}
diff --git a/com.zsmartsystems.zigbee.dongle.telegesis/src/main/java/com/zsmartsystems/zigbee/dongle/telegesis/internal/TelegesisFrameHandler.java b/com.zsmartsystems.zigbee.dongle.telegesis/src/main/java/com/zsmartsystems/zigbee/dongle/telegesis/internal/TelegesisFrameHandler.java
index 5b84eaf65e..a17a46813f 100644
--- a/com.zsmartsystems.zigbee.dongle.telegesis/src/main/java/com/zsmartsystems/zigbee/dongle/telegesis/internal/TelegesisFrameHandler.java
+++ b/com.zsmartsystems.zigbee.dongle.telegesis/src/main/java/com/zsmartsystems/zigbee/dongle/telegesis/internal/TelegesisFrameHandler.java
@@ -639,25 +639,22 @@ public TelegesisEvent eventWait(final Class> eventClass) {
private void startTimer() {
stopTimer();
logger.trace("TELEGESIS Timer: Start");
- timeoutTimer = timeoutScheduler.schedule(new Runnable() {
- @Override
- public void run() {
- timeoutTimer = null;
- logger.debug("TELEGESIS Timer: Timeout {}", retries);
- synchronized (commandLock) {
- if (retries++ >= ACK_TIMEOUTS) {
- // Too many retries.
- // We should alert the upper layer so they can reset the link?
- zigBeeDongleTelegesis.notifyStateUpdate(false);
-
- logger.debug("Error: number of retries exceeded [{}].", retries);
- return;
- }
+ timeoutTimer = timeoutScheduler.schedule(() -> {
+ timeoutTimer = null;
+ logger.debug("TELEGESIS Timer: Timeout {}", retries);
+ synchronized (commandLock) {
+ if (retries++ >= ACK_TIMEOUTS) {
+ // Too many retries.
+ // We should alert the upper layer so they can reset the link?
+ zigBeeDongleTelegesis.notifyStateUpdate(false);
+
+ logger.debug("Error: number of retries exceeded [{}].", retries);
+ return;
+ }
- if (sentCommand != null) {
- sentCommand = null;
- sendNextFrame();
- }
+ if (sentCommand != null) {
+ sentCommand = null;
+ sendNextFrame();
}
}
}, commandTimeout, TimeUnit.MILLISECONDS);
diff --git a/com.zsmartsystems.zigbee.dongle.xbee/src/main/java/com/zsmartsystems/zigbee/dongle/xbee/ZigBeeDongleXBee.java b/com.zsmartsystems.zigbee.dongle.xbee/src/main/java/com/zsmartsystems/zigbee/dongle/xbee/ZigBeeDongleXBee.java
index 4be4a0f644..bb6b97c859 100644
--- a/com.zsmartsystems.zigbee.dongle.xbee/src/main/java/com/zsmartsystems/zigbee/dongle/xbee/ZigBeeDongleXBee.java
+++ b/com.zsmartsystems.zigbee.dongle.xbee/src/main/java/com/zsmartsystems/zigbee/dongle/xbee/ZigBeeDongleXBee.java
@@ -372,27 +372,24 @@ public void sendCommand(final int msgTag, final ZigBeeApsFrame apsFrame) {
logger.debug("XBee send: {}", command.toString());
Future responseFuture = frameHandler.sendRequestAsync(command);
- executorService.execute(new Runnable() {
- @Override
- public void run() {
- // Let the stack know the frame is sent.
- // We don't really have confirmation of this from the XBee, but this is the best we can do
- zigbeeTransportReceive.receiveCommandState(msgTag, ZigBeeTransportProgressState.TX_ACK);
-
- ZigBeeTransportProgressState sentHandlerState = ZigBeeTransportProgressState.RX_NAK;
- try {
- XBeeResponse response = responseFuture.get(RESPONSE_TIMEOUT, TimeUnit.MILLISECONDS);
- if (response instanceof XBeeTransmitStatusResponse) {
- XBeeTransmitStatusResponse sentHandler = (XBeeTransmitStatusResponse) response;
- if (sentHandler.getDeliveryStatus() == DeliveryStatus.SUCCESS) {
- sentHandlerState = ZigBeeTransportProgressState.RX_ACK;
- }
+ executorService.execute(() -> {
+ // Let the stack know the frame is sent.
+ // We don't really have confirmation of this from the XBee, but this is the best we can do
+ zigbeeTransportReceive.receiveCommandState(msgTag, ZigBeeTransportProgressState.TX_ACK);
+
+ ZigBeeTransportProgressState sentHandlerState = ZigBeeTransportProgressState.RX_NAK;
+ try {
+ XBeeResponse response = responseFuture.get(RESPONSE_TIMEOUT, TimeUnit.MILLISECONDS);
+ if (response instanceof XBeeTransmitStatusResponse) {
+ XBeeTransmitStatusResponse sentHandler = (XBeeTransmitStatusResponse) response;
+ if (sentHandler.getDeliveryStatus() == DeliveryStatus.SUCCESS) {
+ sentHandlerState = ZigBeeTransportProgressState.RX_ACK;
}
- } catch (InterruptedException | ExecutionException | TimeoutException e) {
}
-
- zigbeeTransportReceive.receiveCommandState(msgTag, sentHandlerState);
+ } catch (InterruptedException | ExecutionException | TimeoutException e) {
}
+
+ zigbeeTransportReceive.receiveCommandState(msgTag, sentHandlerState);
});
}
diff --git a/com.zsmartsystems.zigbee.dongle.xbee/src/main/java/com/zsmartsystems/zigbee/dongle/xbee/internal/XBeeFrameHandler.java b/com.zsmartsystems.zigbee.dongle.xbee/src/main/java/com/zsmartsystems/zigbee/dongle/xbee/internal/XBeeFrameHandler.java
index 2a739a2f1f..34332df4d3 100644
--- a/com.zsmartsystems.zigbee.dongle.xbee/src/main/java/com/zsmartsystems/zigbee/dongle/xbee/internal/XBeeFrameHandler.java
+++ b/com.zsmartsystems.zigbee.dongle.xbee/src/main/java/com/zsmartsystems/zigbee/dongle/xbee/internal/XBeeFrameHandler.java
@@ -660,16 +660,13 @@ public XBeeEvent eventWait(final Class> eventClass) {
private void startTimer() {
stopTimer();
logger.trace("XBEE Timer: Start");
- timeoutTimer = timeoutScheduler.schedule(new Runnable() {
- @Override
- public void run() {
- timeoutTimer = null;
- logger.debug("XBEE Timer: Timeout");
- synchronized (commandLock) {
- if (sentCommand != null) {
- sentCommand = null;
- sendNextFrame();
- }
+ timeoutTimer = timeoutScheduler.schedule(() -> {
+ timeoutTimer = null;
+ logger.debug("XBEE Timer: Timeout");
+ synchronized (commandLock) {
+ if (sentCommand != null) {
+ sentCommand = null;
+ sendNextFrame();
}
}
}, commandTimeout, TimeUnit.MILLISECONDS);
diff --git a/com.zsmartsystems.zigbee.test/.project b/com.zsmartsystems.zigbee.test/.project
new file mode 100644
index 0000000000..d5291eac12
--- /dev/null
+++ b/com.zsmartsystems.zigbee.test/.project
@@ -0,0 +1,17 @@
+
+
+ com.zsmartsystems.zigbee.test
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+
+
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/ZigBeeNetworkManager.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/ZigBeeNetworkManager.java
index 0213851b41..4512139d80 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/ZigBeeNetworkManager.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/ZigBeeNetworkManager.java
@@ -945,11 +945,8 @@ public void receiveCommand(final ZigBeeApsFrame incomingApsFrame) {
// Notify the listeners that we have heard a command that was unknown to us
for (final ZigBeeAnnounceListener announceListener : announceListeners) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- announceListener.announceUnknownDevice(apsFrame.getSourceAddress());
- }
+ notificationService.execute(() -> {
+ announceListener.announceUnknownDevice(apsFrame.getSourceAddress());
});
}
}
@@ -1021,11 +1018,8 @@ public void run() {
// Directly distribute commands to nodes
ZigBeeNode node = getNode(command.getSourceAddress().getAddress());
if (node != null) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- node.commandReceived(finalCommand, apsFrame.getReceivedRssi(), apsFrame.getReceivedLqi());
- }
+ notificationService.execute(() -> {
+ node.commandReceived(finalCommand, apsFrame.getReceivedRssi(), apsFrame.getReceivedLqi());
});
}
@@ -1256,11 +1250,8 @@ public void nodeStatusUpdate(final ZigBeeNodeStatus deviceStatus, final Integer
// Notify the announce listeners
for (final ZigBeeAnnounceListener announceListener : announceListeners) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- announceListener.deviceStatusUpdate(deviceStatus, networkAddress, ieeeAddress);
- }
+ notificationService.execute(() -> {
+ announceListener.deviceStatusUpdate(deviceStatus, networkAddress, ieeeAddress);
});
}
}
@@ -1317,22 +1308,14 @@ private synchronized void setNetworkState(final ZigBeeNetworkState state) {
// and ensure that the local node is added.
// This is done in another thread which will then notify users.
if (state == ZigBeeNetworkState.ONLINE) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- setNetworkStateOnline();
- }
- });
+ notificationService.execute(this::setNetworkStateOnline);
return;
}
for (final ZigBeeNetworkStateListener stateListener : stateListeners) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- stateListener.networkStateUpdated(state);
- }
+ notificationService.execute(() -> {
+ stateListener.networkStateUpdated(state);
});
}
}
@@ -1364,31 +1347,22 @@ private void setNetworkStateOnline() {
logger.debug("Network state ONLINE: Notifying node {} [{}]", node.getIeeeAddress(),
String.format("%04X", node.getNetworkAddress()));
if (node.getNodeDescriptor() != null) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- transport.setNodeDescriptor(node.getIeeeAddress(), node.getNodeDescriptor());
- }
+ notificationService.execute(() -> {
+ transport.setNodeDescriptor(node.getIeeeAddress(), node.getNodeDescriptor());
});
}
for (final ZigBeeNetworkNodeListener listener : nodeListeners) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- listener.nodeAdded(node);
- }
+ notificationService.execute(() -> {
+ listener.nodeAdded(node);
});
}
}
// Now that everything is added and started, notify the listeners that the state has updated
for (final ZigBeeNetworkStateListener stateListener : stateListeners) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- stateListener.networkStateUpdated(ZigBeeNetworkState.ONLINE);
- }
+ notificationService.execute(() -> {
+ stateListener.networkStateUpdated(ZigBeeNetworkState.ONLINE);
});
}
}
@@ -1676,11 +1650,8 @@ public void removeNode(final ZigBeeNode node) {
}
for (final ZigBeeNetworkNodeListener listener : nodeListeners) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- listener.nodeRemoved(node);
- }
+ notificationService.execute(() -> {
+ listener.nodeRemoved(node);
});
}
}
@@ -1718,20 +1689,14 @@ public void updateNode(final ZigBeeNode node) {
}
if (node.getNodeDescriptor() != null) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- transport.setNodeDescriptor(node.getIeeeAddress(), node.getNodeDescriptor());
- }
+ notificationService.execute(() -> {
+ transport.setNodeDescriptor(node.getIeeeAddress(), node.getNodeDescriptor());
});
}
for (final ZigBeeNetworkNodeListener listener : nodeListeners) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- listener.nodeAdded(node);
- }
+ notificationService.execute(() -> {
+ listener.nodeAdded(node);
});
}
}
@@ -1771,11 +1736,8 @@ private Future refreshNode(final ZigBeeNode node) {
}
if (node.getNodeDescriptor() != null && currentNode.getNodeDescriptor() != null) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- transport.setNodeDescriptor(currentNode.getIeeeAddress(), currentNode.getNodeDescriptor());
- }
+ notificationService.execute(() -> {
+ transport.setNodeDescriptor(currentNode.getIeeeAddress(), currentNode.getNodeDescriptor());
});
}
@@ -1803,16 +1765,13 @@ public void run() {
synchronized (nodeListeners) {
latch = new CountDownLatch(nodeListeners.size());
for (final ZigBeeNetworkNodeListener listener : nodeListeners) {
- notificationService.execute(new Runnable() {
- @Override
- public void run() {
- if (sendNodeAdded) {
- listener.nodeAdded(currentNode);
- } else {
- listener.nodeUpdated(currentNode);
- }
- latch.countDown();
+ notificationService.execute(() -> {
+ if (sendNodeAdded) {
+ listener.nodeAdded(currentNode);
+ } else {
+ listener.nodeUpdated(currentNode);
}
+ latch.countDown();
});
}
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/ZigBeeNode.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/ZigBeeNode.java
index 9f506181f3..4592c3378d 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/ZigBeeNode.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/ZigBeeNode.java
@@ -617,11 +617,8 @@ public void addEndpoint(final ZigBeeEndpoint endpoint) {
}
synchronized (this) {
for (final ZigBeeNetworkEndpointListener listener : endpointListeners) {
- getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- listener.deviceAdded(endpoint);
- }
+ getNotificationService().execute(() -> {
+ listener.deviceAdded(endpoint);
});
}
}
@@ -638,11 +635,8 @@ public void updateEndpoint(final ZigBeeEndpoint endpoint) {
}
synchronized (this) {
for (final ZigBeeNetworkEndpointListener listener : endpointListeners) {
- getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- listener.deviceUpdated(endpoint);
- }
+ getNotificationService().execute(() -> {
+ listener.deviceUpdated(endpoint);
});
}
}
@@ -661,11 +655,8 @@ public void removeEndpoint(final int endpointId) {
synchronized (this) {
if (endpoint != null) {
for (final ZigBeeNetworkEndpointListener listener : endpointListeners) {
- getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- listener.deviceRemoved(endpoint);
- }
+ getNotificationService().execute(() -> {
+ listener.deviceRemoved(endpoint);
});
}
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/discovery/ZigBeeDiscoveryExtension.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/discovery/ZigBeeDiscoveryExtension.java
index 3a84494b6d..2f90a34dee 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/discovery/ZigBeeDiscoveryExtension.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/discovery/ZigBeeDiscoveryExtension.java
@@ -339,24 +339,21 @@ protected void stopScheduler() {
protected void startScheduler(int initialPeriod) {
stopScheduler();
- Runnable meshUpdateThread = new Runnable() {
- @Override
- public void run() {
- synchronized (nodeDiscovery) {
- logger.debug("DISCOVERY Extension: Starting mesh update");
- for (ZigBeeNodeServiceDiscoverer node : nodeDiscovery.values()) {
- logger.debug("{}: DISCOVERY Extension: Starting mesh update", node.getNode().getIeeeAddress());
- node.setUpdateMeshTasks(meshUpdateTasks);
- node.updateMesh();
- }
- }
- }
- };
-
- futureTask = networkManager.scheduleTask(meshUpdateThread, initialPeriod,
+ futureTask = networkManager.scheduleTask(this::meshUpdateThread, initialPeriod,
TimeUnit.SECONDS.toMillis(updatePeriod));
}
+ private void meshUpdateThread() {
+ synchronized (nodeDiscovery) {
+ logger.debug("DISCOVERY Extension: Starting mesh update");
+ for (ZigBeeNodeServiceDiscoverer node : nodeDiscovery.values()) {
+ logger.debug("{}: DISCOVERY Extension: Starting mesh update", node.getNode().getIeeeAddress());
+ node.setUpdateMeshTasks(meshUpdateTasks);
+ node.updateMesh();
+ }
+ }
+ };
+
/**
* Gets the Collection of {@link ZigBeeNodeServiceDiscoverer}s for all nodes
*
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/discovery/ZigBeeNetworkDiscoverer.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/discovery/ZigBeeNetworkDiscoverer.java
index 63188f5f80..e5e3a66834 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/discovery/ZigBeeNetworkDiscoverer.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/discovery/ZigBeeNetworkDiscoverer.java
@@ -165,52 +165,49 @@ protected void rediscoverNode(final int networkAddress) {
return;
}
- networkManager.executeTask(new Runnable() {
- @Override
- public void run() {
- logger.debug("NWK Discovery starting node rediscovery {}", String.format("%04X", networkAddress));
-
- try {
- if (Thread.currentThread().isInterrupted()) {
- return;
- }
-
- IeeeAddressResponse ieeeAddressResponse = null;
- logger.debug("NWK Discovery: Rediscovery of {} using unicast",
+ networkManager.executeTask(() -> {
+ logger.debug("NWK Discovery starting node rediscovery {}", String.format("%04X", networkAddress));
+
+ try {
+ if (Thread.currentThread().isInterrupted()) {
+ return;
+ }
+
+ IeeeAddressResponse ieeeAddressResponse = null;
+ logger.debug("NWK Discovery: Rediscovery of {} using unicast",
+ String.format("%04X", networkAddress));
+ IeeeAddressRequest request = new IeeeAddressRequest(networkAddress, 0, 0);
+ request.setDestinationAddress(new ZigBeeEndpointAddress(networkAddress));
+ CommandResult response = networkManager.sendTransaction(request, request).get();
+ ieeeAddressResponse = response.getResponse();
+
+ if (ieeeAddressResponse == null) {
+ logger.debug("NWK Discovery: Rediscovery of {} using broadcast",
String.format("%04X", networkAddress));
- IeeeAddressRequest request = new IeeeAddressRequest(networkAddress, 0, 0);
- request.setDestinationAddress(new ZigBeeEndpointAddress(networkAddress));
- CommandResult response = networkManager.sendTransaction(request, request).get();
+ request = new IeeeAddressRequest(networkAddress, 0, 0);
+ request.setDestinationAddress(
+ new ZigBeeEndpointAddress(ZigBeeBroadcastDestination.BROADCAST_RX_ON.getKey()));
+ response = networkManager.sendTransaction(request, request).get();
ieeeAddressResponse = response.getResponse();
+ }
- if (ieeeAddressResponse == null) {
- logger.debug("NWK Discovery: Rediscovery of {} using broadcast",
- String.format("%04X", networkAddress));
- request = new IeeeAddressRequest(networkAddress, 0, 0);
- request.setDestinationAddress(
- new ZigBeeEndpointAddress(ZigBeeBroadcastDestination.BROADCAST_RX_ON.getKey()));
- response = networkManager.sendTransaction(request, request).get();
- ieeeAddressResponse = response.getResponse();
- }
-
- logger.debug("{}: NWK Discovery IeeeAddressRequest returned from {}", ieeeAddressResponse,
- String.format("%04X", networkAddress));
- if (ieeeAddressResponse != null && ieeeAddressResponse.getStatus() == ZdoStatus.SUCCESS) {
- addNode(ieeeAddressResponse.getIeeeAddrRemoteDev(),
- ieeeAddressResponse.getNwkAddrRemoteDev());
- startNodeDiscovery(ieeeAddressResponse.getNwkAddrRemoteDev());
- return;
- }
-
- // We failed with the request
- logger.debug("NWK Discovery node rediscovery for {} request failed.",
- String.format("%04X", networkAddress));
- } catch (InterruptedException | ExecutionException e) {
- logger.debug("NWK Discovery interrupted in checkIeeeAddressResponse");
+ logger.debug("{}: NWK Discovery IeeeAddressRequest returned from {}", ieeeAddressResponse,
+ String.format("%04X", networkAddress));
+ if (ieeeAddressResponse != null && ieeeAddressResponse.getStatus() == ZdoStatus.SUCCESS) {
+ addNode(ieeeAddressResponse.getIeeeAddrRemoteDev(),
+ ieeeAddressResponse.getNwkAddrRemoteDev());
+ startNodeDiscovery(ieeeAddressResponse.getNwkAddrRemoteDev());
+ return;
}
- logger.debug("NWK Discovery for {} finishing node rediscovery",
+
+ // We failed with the request
+ logger.debug("NWK Discovery node rediscovery for {} request failed.",
String.format("%04X", networkAddress));
+ } catch (InterruptedException | ExecutionException e) {
+ logger.debug("NWK Discovery interrupted in checkIeeeAddressResponse");
}
+ logger.debug("NWK Discovery for {} finishing node rediscovery",
+ String.format("%04X", networkAddress));
});
}
@@ -227,54 +224,51 @@ protected void rediscoverNode(final IeeeAddress ieeeAddress) {
return;
}
- networkManager.executeTask(new Runnable() {
- @Override
- public void run() {
- logger.debug("{}: NWK Discovery starting node rediscovery", ieeeAddress);
- try {
- if (Thread.currentThread().isInterrupted()) {
- return;
- }
-
- NetworkAddressResponse nwkAddressResponse = null;
- ZigBeeNode node = networkManager.getNode(ieeeAddress);
- if (node != null) {
- logger.debug("{}: NWK Discovery: Rediscovery using unicast to {}", ieeeAddress,
- String.format("%04X", node.getNetworkAddress()));
- NetworkAddressRequest request = new NetworkAddressRequest(ieeeAddress, 0, 0);
- request.setDestinationAddress(new ZigBeeEndpointAddress(node.getNetworkAddress()));
- CommandResult response = networkManager.sendTransaction(request, request).get();
- nwkAddressResponse = response.getResponse();
- }
-
- if (nwkAddressResponse == null) {
- logger.debug("{}: NWK Discovery: Rediscovery using broadcast", ieeeAddress);
- NetworkAddressRequest request = new NetworkAddressRequest(ieeeAddress, 0, 0);
- request.setDestinationAddress(
- new ZigBeeEndpointAddress(ZigBeeBroadcastDestination.BROADCAST_RX_ON.getKey()));
- CommandResult response = networkManager.sendTransaction(request, request).get();
- nwkAddressResponse = response.getResponse();
- }
-
- logger.debug("{}: NWK Discovery NetworkAddressRequest returned from {}", ieeeAddress,
- nwkAddressResponse);
- if (nwkAddressResponse != null && nwkAddressResponse.getStatus() == ZdoStatus.SUCCESS) {
- logger.debug("{}: NWK Discovery: Rediscovery found network address to {}", ieeeAddress,
- String.format("%04X", nwkAddressResponse.getNwkAddrRemoteDev()));
- addNode(nwkAddressResponse.getIeeeAddrRemoteDev(),
- nwkAddressResponse.getNwkAddrRemoteDev());
- startNodeDiscovery(nwkAddressResponse.getNwkAddrRemoteDev());
- return;
- }
-
- // We failed with the request
- logger.debug("{}: NWK Discovery node rediscovery request failed.",
- ieeeAddress);
- } catch (InterruptedException | ExecutionException e) {
- logger.debug("NWK Discovery interrupt in rediscoverNode");
+ networkManager.executeTask(() -> {
+ logger.debug("{}: NWK Discovery starting node rediscovery", ieeeAddress);
+ try {
+ if (Thread.currentThread().isInterrupted()) {
+ return;
+ }
+
+ NetworkAddressResponse nwkAddressResponse = null;
+ ZigBeeNode node = networkManager.getNode(ieeeAddress);
+ if (node != null) {
+ logger.debug("{}: NWK Discovery: Rediscovery using unicast to {}", ieeeAddress,
+ String.format("%04X", node.getNetworkAddress()));
+ NetworkAddressRequest request = new NetworkAddressRequest(ieeeAddress, 0, 0);
+ request.setDestinationAddress(new ZigBeeEndpointAddress(node.getNetworkAddress()));
+ CommandResult response = networkManager.sendTransaction(request, request).get();
+ nwkAddressResponse = response.getResponse();
}
- logger.debug("{}: NWK Discovery finishing node rediscovery", ieeeAddress);
+
+ if (nwkAddressResponse == null) {
+ logger.debug("{}: NWK Discovery: Rediscovery using broadcast", ieeeAddress);
+ NetworkAddressRequest request = new NetworkAddressRequest(ieeeAddress, 0, 0);
+ request.setDestinationAddress(
+ new ZigBeeEndpointAddress(ZigBeeBroadcastDestination.BROADCAST_RX_ON.getKey()));
+ CommandResult response = networkManager.sendTransaction(request, request).get();
+ nwkAddressResponse = response.getResponse();
+ }
+
+ logger.debug("{}: NWK Discovery NetworkAddressRequest returned from {}", ieeeAddress,
+ nwkAddressResponse);
+ if (nwkAddressResponse != null && nwkAddressResponse.getStatus() == ZdoStatus.SUCCESS) {
+ logger.debug("{}: NWK Discovery: Rediscovery found network address to {}", ieeeAddress,
+ String.format("%04X", nwkAddressResponse.getNwkAddrRemoteDev()));
+ addNode(nwkAddressResponse.getIeeeAddrRemoteDev(),
+ nwkAddressResponse.getNwkAddrRemoteDev());
+ startNodeDiscovery(nwkAddressResponse.getNwkAddrRemoteDev());
+ return;
+ }
+
+ // We failed with the request
+ logger.debug("{}: NWK Discovery node rediscovery request failed.",
+ ieeeAddress);
+ } catch (InterruptedException | ExecutionException e) {
+ logger.debug("NWK Discovery interrupt in rediscoverNode");
}
+ logger.debug("{}: NWK Discovery finishing node rediscovery", ieeeAddress);
});
}
@@ -298,42 +292,39 @@ private void startNodeDiscovery(final int nodeNetworkAddress) {
}
logger.debug("NWK Discovery for {} scheduling node discovery", String.format("%04X", nodeNetworkAddress));
- networkManager.executeTask(new Runnable() {
- @Override
- public void run() {
- try {
- logger.debug("NWK Discovery for {} starting node discovery",
- String.format("%04X", nodeNetworkAddress));
- boolean success = true;
- if (Thread.currentThread().isInterrupted()) {
- return;
- }
-
- if (!success) {
- // We failed with the request.
- return;
- }
-
- // If we don't know the node yet, then try to find the IEEE address
- // before requesting the associated nodes.
- if (networkManager.getNode(nodeNetworkAddress) == null) {
- success = getIeeeAddress(nodeNetworkAddress);
- return;
- }
-
- success = getAssociatedNodes(nodeNetworkAddress);
- if (success) {
- return;
- }
-
- logger.debug("NWK Discovery for {} ending node discovery. Success={}.",
- String.format("%04X", nodeNetworkAddress), success);
- } catch (InterruptedException | ExecutionException e) {
- logger.debug("NWK Discovery interrupted");
- } catch (Exception e) {
- logger.error("NWK Discovery for {} error during node discovery: ",
- String.format("%04X", nodeNetworkAddress), e);
+ networkManager.executeTask(() -> {
+ try {
+ logger.debug("NWK Discovery for {} starting node discovery",
+ String.format("%04X", nodeNetworkAddress));
+ boolean success = true;
+ if (Thread.currentThread().isInterrupted()) {
+ return;
}
+
+ if (!success) {
+ // We failed with the request.
+ return;
+ }
+
+ // If we don't know the node yet, then try to find the IEEE address
+ // before requesting the associated nodes.
+ if (networkManager.getNode(nodeNetworkAddress) == null) {
+ success = getIeeeAddress(nodeNetworkAddress);
+ return;
+ }
+
+ success = getAssociatedNodes(nodeNetworkAddress);
+ if (success) {
+ return;
+ }
+
+ logger.debug("NWK Discovery for {} ending node discovery. Success={}.",
+ String.format("%04X", nodeNetworkAddress), success);
+ } catch (InterruptedException | ExecutionException e) {
+ logger.debug("NWK Discovery interrupted");
+ } catch (Exception e) {
+ logger.error("NWK Discovery for {} error during node discovery: ",
+ String.format("%04X", nodeNetworkAddress), e);
}
});
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/otaserver/ZclOtaUpgradeServer.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/otaserver/ZclOtaUpgradeServer.java
index e128286a0d..1b3ef0ab3d 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/otaserver/ZclOtaUpgradeServer.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/otaserver/ZclOtaUpgradeServer.java
@@ -577,11 +577,8 @@ private void updateStatus(final ZigBeeOtaServerStatus updatedStatus) {
synchronized (this) {
// Notify the listeners
for (final ZigBeeOtaStatusCallback statusListener : statusListeners) {
- cluster.getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- statusListener.otaStatusUpdate(updatedStatus, percentComplete);
- }
+ cluster.getNotificationService().execute(() -> {
+ statusListener.otaStatusUpdate(updatedStatus, percentComplete);
});
}
}
@@ -990,21 +987,18 @@ private ZigBeeOtaFile notifyUpdateRequestReceived(final QueryNextImageCommand co
// Notify the listeners
latch = new CountDownLatch(statusListeners.size());
for (final ZigBeeOtaStatusCallback statusListener : statusListeners) {
- cluster.getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- logger.trace("{}: ZigBeeOtaServer.notifyUpdateRequestReceived {} of {}",
- cluster.getZigBeeAddress(), statusListener, command);
-
- ZigBeeOtaFile response = statusListener.otaIncomingRequest(command);
- if (response != null) {
- otaFiles.add(response);
- while (latch.getCount() > 0) {
- latch.countDown();
- }
- } else {
+ cluster.getNotificationService().execute(() -> {
+ logger.trace("{}: ZigBeeOtaServer.notifyUpdateRequestReceived {} of {}",
+ cluster.getZigBeeAddress(), statusListener, command);
+
+ ZigBeeOtaFile response = statusListener.otaIncomingRequest(command);
+ if (response != null) {
+ otaFiles.add(response);
+ while (latch.getCount() > 0) {
latch.countDown();
}
+ } else {
+ latch.countDown();
}
});
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/SmartEnergyClient.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/SmartEnergyClient.java
index f187977b76..6c24ae9aa0 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/SmartEnergyClient.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/SmartEnergyClient.java
@@ -393,11 +393,8 @@ private void updateClientState(SmartEnergyClientState newState) {
synchronized (this) {
// Notify the listeners
for (final SmartEnergyStatusCallback statusListener : statusListeners) {
- networkManager.getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- statusListener.sepStatusUpdate(updatedStatus);
- }
+ networkManager.getNotificationService().execute(() -> {
+ statusListener.sepStatusUpdate(updatedStatus);
});
}
}
@@ -465,78 +462,75 @@ private void discoveryStop() {
private void timerStart(int milliseconds) {
logger.debug("SEP Extension: SEP discovery timer start in {}ms at state {}", milliseconds, seState);
timerCancel();
- timer = networkManager.scheduleTask(new Runnable() {
- @Override
- public void run() {
- logger.debug("SEP Extension: SEP discovery running task {}, attempt {}", seState, retryCounter);
- if (retryCounter++ > SEP_RETRIES) {
- logger.debug("SEP Extension: SEP discovery terminated - too many retries");
- discoveryStop();
- return;
- }
- logger.debug("SEP Extension: SEP discovery running task {}, attempt {}", seState, retryCounter);
-
- switch (seState) {
- case DISCOVER_TRUST_CENTRE:
- if (networkManager.getNode(0) != null
- && networkManager.getNode(0).getLogicalType() != LogicalType.UNKNOWN) {
- logger.debug("SEP Extension: Trust centre already known");
- updateClientState(SmartEnergyClientState.DISCOVER_KEY_ESTABLISHMENT_CLUSTER);
- timerStart(TIMER_IMMEDIATE);
- break;
- }
- ZigBeeNode trustCentre = networkManager.getNode(0);
- if (trustCentre == null) {
- IeeeAddress ieeeAddress = requestIeeeAddress(0);
- if (ieeeAddress == null) {
- logger.debug("SEP Extension: SEP discovery did not find TC IEEE address");
- timerStart(SEP_RETRY_PERIOD);
- break;
- }
- logger.debug("SEP Extension: SEP discovery found TC IEEE address - {}", ieeeAddress);
-
- trustCentre = new ZigBeeNode(networkManager, ieeeAddress);
- trustCentre.setNetworkAddress(0);
- }
- try {
- if (requestNodeDescriptor(trustCentre)) {
- }
- } catch (InterruptedException | ExecutionException e) {
- logger.debug("SEP Extension: Exception getting node descriptor for address - {}",
- trustCentre.getIeeeAddress());
- }
- networkManager.updateNode(trustCentre);
+ timer = networkManager.scheduleTask(() -> {
+ logger.debug("SEP Extension: SEP discovery running task {}, attempt {}", seState, retryCounter);
+ if (retryCounter++ > SEP_RETRIES) {
+ logger.debug("SEP Extension: SEP discovery terminated - too many retries");
+ discoveryStop();
+ return;
+ }
+ logger.debug("SEP Extension: SEP discovery running task {}, attempt {}", seState, retryCounter);
+ switch (seState) {
+ case DISCOVER_TRUST_CENTRE:
+ if (networkManager.getNode(0) != null
+ && networkManager.getNode(0).getLogicalType() != LogicalType.UNKNOWN) {
+ logger.debug("SEP Extension: Trust centre already known");
updateClientState(SmartEnergyClientState.DISCOVER_KEY_ESTABLISHMENT_CLUSTER);
timerStart(TIMER_IMMEDIATE);
break;
- case DISCOVER_KEY_ESTABLISHMENT_CLUSTER:
- discoverKeyEstablishmentServer();
- // Timer restarted in discoverServices
- break;
- case PERFORM_KEY_ESTABLISHMENT:
- performKeyEstablishment();
- // Timer restarted in keyEstablishmentCallback
- break;
- case DISCOVER_METERING_SERVERS:
- discoverMeteringServers();
- // Timer restarted in discoverServices
- break;
- case DISCOVER_KEEP_ALIVE:
- discoverKeepAlive();
- // Timer restarted in discoverServices
- break;
- case DISCOVER_KEEP_ALIVE_TIMEOUT:
- discoverKeepAliveTimeout();
- // Timer restarted in updateClientState
- break;
- case KEEP_ALIVE:
- keepalivePoll();
- timerStart(keepaliveTimeout);
- break;
- default:
- break;
- }
+ }
+ ZigBeeNode trustCentre = networkManager.getNode(0);
+ if (trustCentre == null) {
+ IeeeAddress ieeeAddress = requestIeeeAddress(0);
+ if (ieeeAddress == null) {
+ logger.debug("SEP Extension: SEP discovery did not find TC IEEE address");
+ timerStart(SEP_RETRY_PERIOD);
+ break;
+ }
+ logger.debug("SEP Extension: SEP discovery found TC IEEE address - {}", ieeeAddress);
+
+ trustCentre = new ZigBeeNode(networkManager, ieeeAddress);
+ trustCentre.setNetworkAddress(0);
+ }
+ try {
+ if (requestNodeDescriptor(trustCentre)) {
+ }
+ } catch (InterruptedException | ExecutionException e) {
+ logger.debug("SEP Extension: Exception getting node descriptor for address - {}",
+ trustCentre.getIeeeAddress());
+ }
+ networkManager.updateNode(trustCentre);
+
+ updateClientState(SmartEnergyClientState.DISCOVER_KEY_ESTABLISHMENT_CLUSTER);
+ timerStart(TIMER_IMMEDIATE);
+ break;
+ case DISCOVER_KEY_ESTABLISHMENT_CLUSTER:
+ discoverKeyEstablishmentServer();
+ // Timer restarted in discoverServices
+ break;
+ case PERFORM_KEY_ESTABLISHMENT:
+ performKeyEstablishment();
+ // Timer restarted in keyEstablishmentCallback
+ break;
+ case DISCOVER_METERING_SERVERS:
+ discoverMeteringServers();
+ // Timer restarted in discoverServices
+ break;
+ case DISCOVER_KEEP_ALIVE:
+ discoverKeepAlive();
+ // Timer restarted in discoverServices
+ break;
+ case DISCOVER_KEEP_ALIVE_TIMEOUT:
+ discoverKeepAliveTimeout();
+ // Timer restarted in updateClientState
+ break;
+ case KEEP_ALIVE:
+ keepalivePoll();
+ timerStart(keepaliveTimeout);
+ break;
+ default:
+ break;
}
}, milliseconds);
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/ZclKeyEstablishmentClient.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/ZclKeyEstablishmentClient.java
index baf54fbf50..ddd9878982 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/ZclKeyEstablishmentClient.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/ZclKeyEstablishmentClient.java
@@ -650,16 +650,13 @@ private void startTerminationTimer(int delay) {
logger.debug("{}: CBKE Key Establishment Client: Timer started for {} seconds at {}", ieeeAddress, delay,
state);
- timer = timerService.schedule(new Runnable() {
- @Override
- public void run() {
- timer = null;
- logger.debug("{}: CBKE Key Establishment Client: Timeout waiting for message in state {}", ieeeAddress,
- state);
- // Note that no TerminateKeyEstablishment message should be sent.
- setState(KeyEstablishmentState.FAILED);
- stopCbke(0);
- }
+ timer = timerService.schedule(() -> {
+ timer = null;
+ logger.debug("{}: CBKE Key Establishment Client: Timeout waiting for message in state {}", ieeeAddress,
+ state);
+ // Note that no TerminateKeyEstablishment message should be sent.
+ setState(KeyEstablishmentState.FAILED);
+ stopCbke(0);
}, delay, TimeUnit.SECONDS);
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/ZclKeyEstablishmentServer.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/ZclKeyEstablishmentServer.java
index bc0bfd2df4..e569cf04d0 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/ZclKeyEstablishmentServer.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/app/seclient/ZclKeyEstablishmentServer.java
@@ -486,16 +486,13 @@ private void startTerminationTimer(int delay) {
logger.debug("{}: CBKE Key Establishment Server: Timer started for {} seconds at {}", ieeeAddress, delay,
keyEstablishmentState);
- timer = timerService.schedule(new Runnable() {
- @Override
- public void run() {
- timer = null;
- logger.debug("{}: CBKE Key Establishment Server: Timeout waiting for message in state {}", ieeeAddress,
- keyEstablishmentState);
- // Note that no TerminateKeyEstablishment message should be sent.
- setState(KeyEstablishmentState.FAILED);
- stopCbke();
- }
+ timer = timerService.schedule(() -> {
+ timer = null;
+ logger.debug("{}: CBKE Key Establishment Server: Timeout waiting for message in state {}", ieeeAddress,
+ keyEstablishmentState);
+ // Note that no TerminateKeyEstablishment message should be sent.
+ setState(KeyEstablishmentState.FAILED);
+ stopCbke();
}, delay, TimeUnit.SECONDS);
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/internal/ZigBeeCommandNotifier.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/internal/ZigBeeCommandNotifier.java
index 1a7bb3500b..a92292199d 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/internal/ZigBeeCommandNotifier.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/internal/ZigBeeCommandNotifier.java
@@ -60,11 +60,8 @@ public synchronized void removeCommandListener(ZigBeeCommandListener commandList
public synchronized void notifyCommandListeners(final ZigBeeCommand command) {
// Notify the listeners
for (final ZigBeeCommandListener commandListener : commandListeners) {
- networkManager.getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- commandListener.commandReceived(command);
- }
+ networkManager.getNotificationService().execute(() -> {
+ commandListener.commandReceived(command);
});
}
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/transaction/ZigBeeTransaction.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/transaction/ZigBeeTransaction.java
index a5e01e9d47..2a7f469d96 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/transaction/ZigBeeTransaction.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/transaction/ZigBeeTransaction.java
@@ -401,18 +401,15 @@ private void startTimer(int timeout) {
stopTimer();
// Schedule a task to timeout the transaction
- timeoutTask = transactionManager.scheduleTask(new Runnable() {
- @Override
- public void run() {
- if (transactionFuture.isCancelled() || state == TransactionState.RESPONDED) {
- // Even though this transaction has timed out waiting for the transport,
- // we did receive a response that completed the transaction at application level
- // Additionally, if the future was cancelled, we assume this was done by the application
- // so it's treated as complete.
- completeTransaction(completionCommand);
- } else {
- failTransaction();
- }
+ timeoutTask = transactionManager.scheduleTask(() -> {
+ if (transactionFuture.isCancelled() || state == TransactionState.RESPONDED) {
+ // Even though this transaction has timed out waiting for the transport,
+ // we did receive a response that completed the transaction at application level
+ // Additionally, if the future was cancelled, we assume this was done by the application
+ // so it's treated as complete.
+ completeTransaction(completionCommand);
+ } else {
+ failTransaction();
}
}, timeout);
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/transaction/ZigBeeTransactionManager.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/transaction/ZigBeeTransactionManager.java
index 38e31d2f27..0cc0e9b804 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/transaction/ZigBeeTransactionManager.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/transaction/ZigBeeTransactionManager.java
@@ -208,12 +208,7 @@ public void shutdown() {
synchronized (outstandingTransactions) {
// Notify the listeners
for (final ZigBeeTransaction transaction : outstandingTransactions) {
- networkManager.getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- transaction.cancel();
- }
- });
+ networkManager.getNotificationService().execute(transaction::cancel);
}
}
executorService.shutdownNow();
@@ -552,11 +547,8 @@ private void notifyTransactionCommand(final ZigBeeCommand command) {
// Notify the listeners
for (final ZigBeeTransaction transaction : outstandingTransactions) {
logger.trace("notifyTransactionCommand: {} {}", command, transaction);
- networkManager.getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- transaction.commandReceived(command);
- }
+ networkManager.getNotificationService().execute(() -> {
+ transaction.commandReceived(command);
});
}
}
@@ -574,11 +566,8 @@ private void notifyTransactionProgress(final int transactionId, ZigBeeTransportP
synchronized (outstandingTransactions) {
// Notify the listeners
for (final ZigBeeTransaction transaction : outstandingTransactions) {
- networkManager.getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- transaction.transactionStatusReceived(state, transactionId);
- }
+ networkManager.getNotificationService().execute(() -> {
+ transaction.transactionStatusReceived(state, transactionId);
});
}
}
@@ -716,12 +705,7 @@ private void sendNextTransaction() {
private void startRequeueTimer(final long timeout) {
// Schedule a task to kick off the next transaction
try {
- timeoutTask = scheduleTask(new Runnable() {
- @Override
- public void run() {
- sendNextTransaction();
- }
- }, timeout);
+ timeoutTask = scheduleTask(this::sendNextTransaction, timeout);
} catch (RejectedExecutionException e) {
logger.debug("Unable to start requeue timer.");
}
diff --git a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/zcl/ZclCluster.java b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/zcl/ZclCluster.java
index 13e15fd95f..0563675b48 100644
--- a/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/zcl/ZclCluster.java
+++ b/com.zsmartsystems.zigbee/src/main/java/com/zsmartsystems/zigbee/zcl/ZclCluster.java
@@ -1286,18 +1286,15 @@ public void removeAttributeListener(final ZclAttributeListener listener) {
*/
private void notifyAttributeListener(final ZclAttribute attribute, final Object value) {
for (final ZclAttributeListener listener : attributeListeners) {
- getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- logger.trace("{}: ZclCluster.notifyAttributeListener {} of {} with value {}",
- zigbeeEndpoint.getEndpointAddress(), listener, attribute, value);
-
- try {
- listener.attributeUpdated(attribute, value);
- } catch (Exception e) {
- logger.warn("{}: Exception when notifying attribute listener {} of {} with value {}",
- zigbeeEndpoint.getEndpointAddress(), listener, attribute, value, e);
- }
+ getNotificationService().execute(() -> {
+ logger.trace("{}: ZclCluster.notifyAttributeListener {} of {} with value {}",
+ zigbeeEndpoint.getEndpointAddress(), listener, attribute, value);
+
+ try {
+ listener.attributeUpdated(attribute, value);
+ } catch (Exception e) {
+ logger.warn("{}: Exception when notifying attribute listener {} of {} with value {}",
+ zigbeeEndpoint.getEndpointAddress(), listener, attribute, value, e);
}
});
}
@@ -1344,20 +1341,17 @@ private boolean notifyCommandListener(final ZclCommand command) {
synchronized (commandListeners) {
latch = new CountDownLatch(commandListeners.size());
for (final ZclCommandListener listener : commandListeners) {
- getNotificationService().execute(new Runnable() {
- @Override
- public void run() {
- logger.trace("{}: ZclCluster.notifyCommandListener {} of {}",
- zigbeeEndpoint.getEndpointAddress(), listener, command);
-
- if (listener.commandReceived(command)) {
- response.set(true);
- while (latch.getCount() > 0) {
- latch.countDown();
- }
- } else {
+ getNotificationService().execute(() -> {
+ logger.trace("{}: ZclCluster.notifyCommandListener {} of {}",
+ zigbeeEndpoint.getEndpointAddress(), listener, command);
+
+ if (listener.commandReceived(command)) {
+ response.set(true);
+ while (latch.getCount() > 0) {
latch.countDown();
}
+ } else {
+ latch.countDown();
}
});
}
diff --git a/releng/p2repo/.project b/releng/p2repo/.project
new file mode 100644
index 0000000000..d43c439315
--- /dev/null
+++ b/releng/p2repo/.project
@@ -0,0 +1,17 @@
+
+
+ com.zsmartsystems.zigbee.p2repo
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Builder
+
+
+
+
+
+ org.eclipse.m2e.core.maven2Nature
+
+