diff --git a/bom/BOM.xlsx b/bom/BOM.xlsx
new file mode 100644
index 0000000..7050ffd
Binary files /dev/null and b/bom/BOM.xlsx differ
diff --git a/currentmonitor/lantern-currentmonitor/pom.xml b/currentmonitor/lantern-currentmonitor/pom.xml
index 25ece54..b6966ad 100644
--- a/currentmonitor/lantern-currentmonitor/pom.xml
+++ b/currentmonitor/lantern-currentmonitor/pom.xml
@@ -3,7 +3,7 @@
com.lanternsoftware.currentmonitor
lantern-currentmonitor
jar
- 0.9.5
+ 0.9.6
lantern-currentmonitor
diff --git a/util/lantern-util-common/src/main/java/com/lanternsoftware/util/ResourceLoader.java b/util/lantern-util-common/src/main/java/com/lanternsoftware/util/ResourceLoader.java
index 9e649c8..c20d22a 100644
--- a/util/lantern-util-common/src/main/java/com/lanternsoftware/util/ResourceLoader.java
+++ b/util/lantern-util-common/src/main/java/com/lanternsoftware/util/ResourceLoader.java
@@ -118,6 +118,8 @@ public abstract class ResourceLoader {
try {
os = new FileOutputStream(_sFile, false);
os.write(_btData);
+ os.flush();
+ os.getFD().sync();
}
catch (Throwable t) {
LOG.error("Failed to write file: " + _sFile, t);
diff --git a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/controller/Controller.java b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/controller/Controller.java
index ee78e31..a89cc68 100644
--- a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/controller/Controller.java
+++ b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/controller/Controller.java
@@ -161,7 +161,7 @@ public class Controller {
callbacks.put(callback, message.getNodeId());
log += " callback: " + callback;
}
- logger.info(log);
+ logger.debug(log);
byte[] data = message.toByteArray((byte) 0, callback);
logger.debug("Sending outbound: {}", NullUtils.toHexBytes(data));
responseReceived = false;
@@ -206,7 +206,7 @@ public class Controller {
sendRaw(new byte[]{ACK});
Message message = MessageEngine.decode(_buffer);
if (message != null) {
- logger.info("Received message inbound: {}", message.describe());
+ logger.debug("Received message inbound: {}", message.describe());
MessageEngine.publish(message);
if (message instanceof ResponseMessage) {
synchronized (responseMutex) {
diff --git a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/CommandClass.java b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/CommandClass.java
index 2f83015..c099b13 100644
--- a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/CommandClass.java
+++ b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/CommandClass.java
@@ -42,6 +42,7 @@ public enum CommandClass {
SCHEDULE_ENTRY_LOCK((byte)0x4E, "SCHEDULE_ENTRY_LOCK"),
BASIC_WINDOW_COVERING((byte)0x50, "BASIC_WINDOW_COVERING"),
MTP_WINDOW_COVERING((byte)0x51, "MTP_WINDOW_COVERING"),
+ CRC_16_ENCAP((byte)0x5B, "CRC_16_ENCAP"),
MULTI_INSTANCE((byte)0x60, "MULTI_INSTANCE"),
DOOR_LOCK((byte)0x62, "DOOR_LOCK"),
USER_CODE((byte)0x63, "USER_CODE"),
diff --git a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/CRC16EncapRequest.java b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/CRC16EncapRequest.java
new file mode 100644
index 0000000..d6a85f1
--- /dev/null
+++ b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/CRC16EncapRequest.java
@@ -0,0 +1,28 @@
+package com.lanternsoftware.zwave.message.impl;
+
+import com.lanternsoftware.zwave.message.CommandClass;
+import com.lanternsoftware.zwave.message.ControllerMessageType;
+import com.lanternsoftware.zwave.message.RequestMessage;
+
+public class CRC16EncapRequest extends RequestMessage {
+ private boolean on;
+
+ public CRC16EncapRequest() {
+ super(ControllerMessageType.ApplicationCommandHandler, CommandClass.CRC_16_ENCAP, (byte) 0x03);
+ }
+
+ @Override
+ public void fromPayload(byte[] _payload) {
+ nodeId = _payload[5];
+ on = _payload[11] == 1;
+ }
+
+ public boolean isOn() {
+ return on;
+ }
+
+ @Override
+ public String describe() {
+ return name() + " node: " + nodeId + " on: " + on;
+ }
+}
diff --git a/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/ConfigurationSetRequest.java b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/ConfigurationSetRequest.java
new file mode 100644
index 0000000..ce8065c
--- /dev/null
+++ b/zwave/lantern-zwave/src/main/java/com/lanternsoftware/zwave/message/impl/ConfigurationSetRequest.java
@@ -0,0 +1,47 @@
+package com.lanternsoftware.zwave.message.impl;
+
+import com.lanternsoftware.util.CollectionUtils;
+import com.lanternsoftware.util.NullUtils;
+import com.lanternsoftware.zwave.message.CommandClass;
+import com.lanternsoftware.zwave.message.SendDataRequestMessage;
+
+public class ConfigurationSetRequest extends SendDataRequestMessage {
+ private byte parameter;
+ private byte[] value;
+
+ public ConfigurationSetRequest() {
+ this((byte)0, (byte)0, null);
+ }
+
+ public ConfigurationSetRequest(byte _nodeId, byte _parameter, byte[] _value) {
+ super(_nodeId, CommandClass.CONFIGURATION, (byte) 0x04);
+ parameter = _parameter;
+ value = _value;
+ }
+
+ public byte getParameter() {
+ return parameter;
+ }
+
+ public void setParameter(byte _parameter) {
+ parameter = _parameter;
+ }
+
+ public byte[] getValue() {
+ return value;
+ }
+
+ public void setValue(byte[] _value) {
+ value = _value;
+ }
+
+ @Override
+ public byte[] getPayload() {
+ return CollectionUtils.merge(asByteArray(parameter), asByteArray((byte)CollectionUtils.length(value)), value);
+ }
+
+ @Override
+ public String describe() {
+ return name() + " node: " + nodeId + " parameter: " + parameter + " value: " + NullUtils.toHex(value);
+ }
+}
diff --git a/zwave/lantern-zwave/src/main/resources/META-INF/services/com.lanternsoftware.zwave.message.Message b/zwave/lantern-zwave/src/main/resources/META-INF/services/com.lanternsoftware.zwave.message.Message
index 9a6e892..ea84139 100644
--- a/zwave/lantern-zwave/src/main/resources/META-INF/services/com.lanternsoftware.zwave.message.Message
+++ b/zwave/lantern-zwave/src/main/resources/META-INF/services/com.lanternsoftware.zwave.message.Message
@@ -2,10 +2,12 @@ com.lanternsoftware.zwave.message.impl.ApplicationUpdateRequest
com.lanternsoftware.zwave.message.impl.BinarySwitchSetRequest
com.lanternsoftware.zwave.message.impl.BinarySwitchReportRequest
com.lanternsoftware.zwave.message.impl.ByteMessage
+com.lanternsoftware.zwave.message.impl.ConfigurationSetRequest
com.lanternsoftware.zwave.message.impl.ControllerCapabilitiesRequest
com.lanternsoftware.zwave.message.impl.ControllerCapabilitiesResponse
com.lanternsoftware.zwave.message.impl.ControllerInitialDataRequest
com.lanternsoftware.zwave.message.impl.ControllerInitialDataResponse
+com.lanternsoftware.zwave.message.impl.CRC16EncapRequest
com.lanternsoftware.zwave.message.impl.DeviceManufacturerActionRequest
com.lanternsoftware.zwave.message.impl.GetControllerIdRequest
com.lanternsoftware.zwave.message.impl.GetControllerIdResponse