diff --git a/.gitignore b/.gitignore
index 3fe9858..c1277ae 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,3 +2,5 @@
.classpath
.project
.settings/
+.idea
+.vscode
diff --git a/.travis.yml b/.travis.yml
index a6133a7..c745ab4 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -9,7 +9,7 @@ before_install:
- .travis/prepare
script:
-- mvn cobertura:cobertura
+- mvn clean test
after_success:
- bash <(curl -s https://codecov.io/bash)
diff --git a/pom.xml b/pom.xml
index f7862f2..3e48b06 100644
--- a/pom.xml
+++ b/pom.xml
@@ -116,6 +116,9 @@
org.apache.maven.plugins
maven-javadoc-plugin
2.9.1
+
+ 8
+
attach-javadocs
@@ -139,19 +142,26 @@
-
- org.codehaus.mojo
- cobertura-maven-plugin
- 2.7
-
-
- html
- xml
-
-
-
+
+ org.jacoco
+ jacoco-maven-plugin
+ 0.8.5
+
+
+
+ prepare-agent
+
+
+
+ report
+ test
+
+ report
+
+
+
-
+
1.0.1
diff --git a/src/main/java/com/github/mob41/blapi/A1Device.java b/src/main/java/com/github/mob41/blapi/A1Device.java
index 03e683e..bb3ce8b 100644
--- a/src/main/java/com/github/mob41/blapi/A1Device.java
+++ b/src/main/java/com/github/mob41/blapi/A1Device.java
@@ -31,7 +31,7 @@
import java.io.IOException;
import java.net.DatagramPacket;
-import javax.xml.bind.DatatypeConverter;
+import static com.github.mob41.blapi.HexUtil.bytes2hex;
import com.github.mob41.blapi.mac.Mac;
import com.github.mob41.blapi.pkt.CmdPayload;
@@ -68,13 +68,13 @@ public byte[] getData() {
});
byte[] data = packet.getData();
- log.debug("A1 check sensors received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("A1 check sensors received encrypted bytes: " + bytes2hex(data));
int err = data[0x22] | (data[0x23] << 8);
if (err == 0) {
byte[] pl = decryptFromDeviceMessage(data);
- log.debug("A1 check sensors received bytes (decrypted):" + DatatypeConverter.printHexBinary(pl));
+ log.debug("A1 check sensors received bytes (decrypted):" + bytes2hex(pl));
float temp = (float) ((pl[0x4] * 10 + pl[0x5]) / 10.0);
float hum = (float) ((pl[0x6] * 10 + pl[0x7]) / 10.0);
diff --git a/src/main/java/com/github/mob41/blapi/BLDevice.java b/src/main/java/com/github/mob41/blapi/BLDevice.java
index da60a5f..f9a49ab 100644
--- a/src/main/java/com/github/mob41/blapi/BLDevice.java
+++ b/src/main/java/com/github/mob41/blapi/BLDevice.java
@@ -38,7 +38,7 @@
import java.util.List;
import java.util.Random;
-import javax.xml.bind.DatatypeConverter;
+import static com.github.mob41.blapi.HexUtil.bytes2hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -389,7 +389,7 @@ public boolean auth(boolean reauth) throws IOException {
log.debug("auth Sending CmdPacket with AuthCmdPayload: cmd=" + Integer.toHexString(sendPayload.getCommand())
+ " len=" + sendPayload.getPayload().getData().length);
- log.debug("auth AuthPayload initial bytes to send: {}", DatatypeConverter.printHexBinary(sendPayload.getPayload().getData()));
+ log.debug("auth AuthPayload initial bytes to send: {}", bytes2hex(sendPayload.getPayload().getData()));
DatagramPacket recvPack = sendCmdPkt(10000, 2048, sendPayload);
@@ -401,7 +401,7 @@ public boolean auth(boolean reauth) throws IOException {
return false;
}
- log.debug("auth recv encrypted data bytes (" + data.length +") after initial req: {}", DatatypeConverter.printHexBinary(data));
+ log.debug("auth recv encrypted data bytes (" + data.length +") after initial req: {}", bytes2hex(data));
byte[] payload = null;
try {
@@ -417,11 +417,11 @@ public boolean auth(boolean reauth) throws IOException {
return false;
}
- log.debug("auth Packet received payload bytes: " + DatatypeConverter.printHexBinary(payload));
+ log.debug("auth Packet received payload bytes: " + bytes2hex(payload));
key = subbytes(payload, 0x04, 0x14);
- log.debug("auth Packet received key bytes: " + DatatypeConverter.printHexBinary(key));
+ log.debug("auth Packet received key bytes: " + bytes2hex(key));
if (key.length % 16 != 0) {
log.error("auth Received key len is not a multiple of 16! Aborting");
@@ -434,7 +434,7 @@ public boolean auth(boolean reauth) throws IOException {
id = subbytes(payload, 0x00, 0x04);
- log.debug("auth Packet received id bytes: " + DatatypeConverter.printHexBinary(id) + " with ID len=" + id.length);
+ log.debug("auth Packet received id bytes: " + bytes2hex(id) + " with ID len=" + id.length);
log.debug("auth End of authentication method");
alreadyAuthorized = true;
@@ -530,7 +530,7 @@ public DatagramPacket sendCmdPkt(int timeout, int bufSize, CmdPayload cmdPayload
public DatagramPacket sendCmdPkt(InetAddress sourceIpAddr, int sourcePort, int timeout, int bufSize,
CmdPayload cmdPayload) throws IOException {
CmdPacket cmdPkt = new CmdPacket(mac, pktCount++, id, aes, cmdPayload);
- log.debug("sendCmdPkt - Send Command Packet bytes: {}", DatatypeConverter.printHexBinary(cmdPkt.getData()));
+ log.debug("sendCmdPkt - Send Command Packet bytes: {}", bytes2hex(cmdPkt.getData()));
return sendPkt(sock, cmdPkt, InetAddress.getByName(host), 80, timeout, bufSize);
}
@@ -1041,7 +1041,7 @@ public static DatagramPacket sendPkt(DatagramSocket sock, Packet pkt, InetAddres
}
}
- log.debug("sendPkt - recv data bytes (" + recepack.getData().length +") after initial req: {}", DatatypeConverter.printHexBinary(recepack.getData()));
+ log.debug("sendPkt - recv data bytes (" + recepack.getData().length +") after initial req: {}", bytes2hex(recepack.getData()));
recepack.setData(removeNullsFromEnd(recepack.getData(), 0));
return recepack;
}
diff --git a/src/main/java/com/github/mob41/blapi/HexUtil.java b/src/main/java/com/github/mob41/blapi/HexUtil.java
new file mode 100644
index 0000000..8629929
--- /dev/null
+++ b/src/main/java/com/github/mob41/blapi/HexUtil.java
@@ -0,0 +1,30 @@
+package com.github.mob41.blapi;
+
+public class HexUtil {
+
+ private static final char[] hexCode = "0123456789abcdef".toCharArray();
+
+ public static String bytes2hex(byte[] data) {
+ StringBuilder r = new StringBuilder(data.length * 2);
+ byte[] var3 = data;
+ int var4 = data.length;
+
+ for(int var5 = 0; var5 < var4; ++var5) {
+ byte b = var3[var5];
+ r.append(hexCode[b >> 4 & 15]);
+ r.append(hexCode[b & 15]);
+ }
+
+ return r.toString();
+ }
+ public static final byte[] hex2bytes(String s) {
+ int len = s.length();
+ byte[] data = new byte[len / 2];
+ for (int i = 0; i < len; i += 2) {
+ data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ + Character.digit(s.charAt(i+1), 16));
+ }
+ return data;
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/java/com/github/mob41/blapi/MP1Device.java b/src/main/java/com/github/mob41/blapi/MP1Device.java
index c7a8143..d0f2c53 100644
--- a/src/main/java/com/github/mob41/blapi/MP1Device.java
+++ b/src/main/java/com/github/mob41/blapi/MP1Device.java
@@ -32,7 +32,7 @@
import java.io.IOException;
import java.net.DatagramPacket;
-import javax.xml.bind.DatatypeConverter;
+import static com.github.mob41.blapi.HexUtil.bytes2hex;
import com.github.mob41.blapi.mac.Mac;
import com.github.mob41.blapi.pkt.CmdPayload;
@@ -116,7 +116,7 @@ public byte[] getData() {
int err = data[0x22] | (data[0x23] << 8);
if (err == 0) {
- log.debug("MP1 set state mask received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("MP1 set state mask received encrypted bytes: " + bytes2hex(data));
} else {
log.warn("MP1 set state mask received returned err: " + Integer.toHexString(err) + " / " + err);
}
@@ -171,13 +171,13 @@ public byte[] getData() {
byte[] data = packet.getData();
- log.debug("MP1 get states raw received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("MP1 get states raw received encrypted bytes: " + bytes2hex(data));
int err = data[0x22] | (data[0x23] << 8);
if (err == 0) {
byte[] pl = decryptFromDeviceMessage(data);
- log.debug("MP1 get states raw received bytes (decrypted): " + DatatypeConverter.printHexBinary(pl));
+ log.debug("MP1 get states raw received bytes (decrypted): " + bytes2hex(pl));
byte state = 0;
if (pl[0x3c] >= 48 && pl[0x3c] <= 57) {
String decodeValue1;
diff --git a/src/main/java/com/github/mob41/blapi/RM2Device.java b/src/main/java/com/github/mob41/blapi/RM2Device.java
index 301644d..6b3ba1a 100644
--- a/src/main/java/com/github/mob41/blapi/RM2Device.java
+++ b/src/main/java/com/github/mob41/blapi/RM2Device.java
@@ -31,7 +31,7 @@
import java.io.IOException;
import java.net.DatagramPacket;
-import javax.xml.bind.DatatypeConverter;
+import com.github.mob41.blapi.HexUtil;
import com.github.mob41.blapi.mac.Mac;
import com.github.mob41.blapi.pkt.cmd.rm2.CheckDataCmdPayload;
@@ -88,7 +88,7 @@ public byte[] checkData() throws Exception {
int err = data[0x22] | (data[0x23] << 8);
- log.debug("RM2 check data received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("RM2 check data received encrypted bytes: " + HexUtil.bytes2hex(data));
if (err == 0) {
@@ -115,7 +115,7 @@ public boolean enterLearning() throws IOException {
DatagramPacket packet = sendCmdPkt(10000, cmdPayload);
byte[] data = packet.getData();
- log.debug("RM2 enter learning received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("RM2 enter learning received encrypted bytes: " + HexUtil.bytes2hex(data));
int err = data[0x22] | (data[0x23] << 8);
if (err == 0) {
@@ -139,12 +139,12 @@ public double getTemp() throws Exception {
DatagramPacket packet = sendCmdPkt(new RMTempCmdPayload());
byte[] data = packet.getData();
- log.debug("RM2 get temp received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("RM2 get temp received encrypted bytes: " + HexUtil.bytes2hex(data));
int err = data[0x22] | (data[0x23] << 8);
if (err == 0) {
byte[] pl = decryptFromDeviceMessage(data);
- log.debug("RM2 get temp received bytes (decrypted): " + DatatypeConverter.printHexBinary(pl));
+ log.debug("RM2 get temp received bytes (decrypted): " + HexUtil.bytes2hex(pl));
return (double) (pl[0x4] * 10 + pl[0x5]) / 10.0;
} else {
diff --git a/src/main/java/com/github/mob41/blapi/SP1Device.java b/src/main/java/com/github/mob41/blapi/SP1Device.java
index 6bc2829..056225c 100644
--- a/src/main/java/com/github/mob41/blapi/SP1Device.java
+++ b/src/main/java/com/github/mob41/blapi/SP1Device.java
@@ -32,7 +32,7 @@
import java.io.IOException;
import java.net.DatagramPacket;
-import javax.xml.bind.DatatypeConverter;
+import static com.github.mob41.blapi.HexUtil.bytes2hex;
import com.github.mob41.blapi.mac.Mac;
import com.github.mob41.blapi.pkt.CmdPayload;
@@ -70,7 +70,7 @@ public byte[] getData() {
byte[] data = packet.getData();
- log.debug("SP1 set power received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("SP1 set power received encrypted bytes: " + bytes2hex(data));
int err = data[0x22] | (data[0x23] << 8);
diff --git a/src/main/java/com/github/mob41/blapi/SP2Device.java b/src/main/java/com/github/mob41/blapi/SP2Device.java
index ba33cc8..dd03390 100644
--- a/src/main/java/com/github/mob41/blapi/SP2Device.java
+++ b/src/main/java/com/github/mob41/blapi/SP2Device.java
@@ -32,7 +32,7 @@
import java.io.IOException;
import java.net.DatagramPacket;
-import javax.xml.bind.DatatypeConverter;
+import static com.github.mob41.blapi.HexUtil.bytes2hex;
import com.github.mob41.blapi.mac.Mac;
import com.github.mob41.blapi.pkt.CmdPayload;
@@ -75,7 +75,7 @@ public byte[] getData() {
byte[] data = packet.getData();
- log.debug("SP2 set state received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("SP2 set state received encrypted bytes: " + bytes2hex(data));
int err = data[0x22] | (data[0x23] << 8);
@@ -109,13 +109,13 @@ public byte[] getData() {
});
byte[] data = packet.getData();
- log.debug("SP2 get state received encrypted bytes: " + DatatypeConverter.printHexBinary(data));
+ log.debug("SP2 get state received encrypted bytes: " + bytes2hex(data));
int err = data[0x22] | (data[0x23] << 8);
if (err == 0) {
byte[] pl = decryptFromDeviceMessage(data);
- log.debug("SP2 get state received bytes (decrypted): " + DatatypeConverter.printHexBinary(pl));
+ log.debug("SP2 get state received bytes (decrypted): " + bytes2hex(pl));
return pl[0x4] == 1 ? true : false;
} else {
log.warn("SP2 get state received an error: " + Integer.toHexString(err) + " / " + err);
diff --git a/src/main/java/com/github/mob41/blapi/dev/hysen/BaseHysenDevice.java b/src/main/java/com/github/mob41/blapi/dev/hysen/BaseHysenDevice.java
index d8cf639..4f2b631 100644
--- a/src/main/java/com/github/mob41/blapi/dev/hysen/BaseHysenDevice.java
+++ b/src/main/java/com/github/mob41/blapi/dev/hysen/BaseHysenDevice.java
@@ -31,7 +31,7 @@
import java.io.IOException;
-import javax.xml.bind.DatatypeConverter;
+import static com.github.mob41.blapi.HexUtil.bytes2hex;
import com.github.mob41.blapi.BLDevice;
import com.github.mob41.blapi.mac.Mac;
@@ -92,7 +92,7 @@ public double getRoomTemp() throws Exception {
public BaseStatusInfo getBasicStatus() throws Exception {
byte[] pl = new GetBasicInfoCommand().execute(this);
if (pl != null) {
- log.debug("getBasicStatus - received bytes: {}", DatatypeConverter.printHexBinary(pl));
+ log.debug("getBasicStatus - received bytes: {}", bytes2hex(pl));
return new BaseStatusInfo(pl);
}
return null;
@@ -101,7 +101,7 @@ public BaseStatusInfo getBasicStatus() throws Exception {
public AdvancedStatusInfo getAdvancedStatus() throws Exception {
byte[] pl = new GetStatusCommand().execute(this);
if (pl != null) {
- log.debug("getAdvancedStatus - received bytes: {}", DatatypeConverter.printHexBinary(pl));
+ log.debug("getAdvancedStatus - received bytes: {}", bytes2hex(pl));
return new AdvancedStatusInfo(pl);
}
return null;
diff --git a/src/main/java/com/github/mob41/blapi/pkt/CmdPacket.java b/src/main/java/com/github/mob41/blapi/pkt/CmdPacket.java
index 939625f..9033908 100644
--- a/src/main/java/com/github/mob41/blapi/pkt/CmdPacket.java
+++ b/src/main/java/com/github/mob41/blapi/pkt/CmdPacket.java
@@ -28,8 +28,6 @@
*******************************************************************************/
package com.github.mob41.blapi.pkt;
-import javax.xml.bind.DatatypeConverter;
-
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -37,7 +35,7 @@
import com.github.mob41.blapi.ex.BLApiRuntimeException;
import com.github.mob41.blapi.mac.Mac;
import com.github.mob41.blapi.pkt.auth.AES;
-
+import static com.github.mob41.blapi.HexUtil.bytes2hex;
/**
* This constructs a byte array with the format of a command to the Broadlink
* device
@@ -133,7 +131,7 @@ public CmdPacket(Mac targetMac, int count, byte[] id, AES aesInstance, CmdPayloa
int checksumpayload = 0xbeaf;
for (int i = 0; i < payloadPad.length; i++) {
- checksumpayload = checksumpayload + Byte.toUnsignedInt(payloadPad[i]);
+ checksumpayload = checksumpayload + (int)(Byte.valueOf(payloadPad[i]).intValue() & 0xff);
checksumpayload = checksumpayload & 0xffff;
}
@@ -146,7 +144,7 @@ public CmdPacket(Mac targetMac, int count, byte[] id, AES aesInstance, CmdPayloa
log.debug("Encrypting payload");
payload = aesInstance.encrypt(payloadPad);
- log.debug("Encrypted payload bytes: {}", DatatypeConverter.printHexBinary(payload));
+ log.debug("Encrypted payload bytes: {}", bytes2hex(payload));
log.debug("Encrypted. len=" + payload.length);
} catch (Exception e) {
@@ -168,7 +166,7 @@ public CmdPacket(Mac targetMac, int count, byte[] id, AES aesInstance, CmdPayloa
int checksumpkt = 0xbeaf;
for (int i = 0; i < data.length; i++) {
- checksumpkt = checksumpkt + Byte.toUnsignedInt(data[i]);
+ checksumpkt = checksumpkt + (int)(Byte.valueOf(data[i]).intValue() & 0xff);
checksumpkt = checksumpkt & 0xffff;
// log.debug("index: " + i + ", data byte: " + Byte.toUnsignedInt(data[i]) + ", checksum: " + checksumpkt);
}
diff --git a/src/main/java/com/github/mob41/blapi/pkt/cmd/hysen/BaseHysenCommand.java b/src/main/java/com/github/mob41/blapi/pkt/cmd/hysen/BaseHysenCommand.java
index 0273ad0..dca44c2 100644
--- a/src/main/java/com/github/mob41/blapi/pkt/cmd/hysen/BaseHysenCommand.java
+++ b/src/main/java/com/github/mob41/blapi/pkt/cmd/hysen/BaseHysenCommand.java
@@ -3,7 +3,7 @@
import java.net.DatagramPacket;
import java.util.Arrays;
-import javax.xml.bind.DatatypeConverter;
+import static com.github.mob41.blapi.HexUtil.bytes2hex;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -33,14 +33,14 @@ public byte[] execute(BaseHysenDevice device) throws Exception {
byte[] data = packet.getData();
log.debug(this.getClass().getSimpleName() + " received encrypted bytes: "
- + DatatypeConverter.printHexBinary(data));
+ + bytes2hex(data));
int err = data[0x22] | (data[0x23] << 8);
if (err == 0) {
byte[] pl = device.decryptFromDeviceMessage(data);
log.debug(this.getClass().getSimpleName() + " received bytes (decrypted): "
- + DatatypeConverter.printHexBinary(pl));
+ + bytes2hex(pl));
return Arrays.copyOfRange(pl, 2, pl.length);
} else {
log.warn(this.getClass().getSimpleName() + " received an error: " + Integer.toHexString(err) + " / " + err);