diff --git a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/AM43Configuration.java b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/AM43Configuration.java index d0fbc157e74..a6b1efc5664 100644 --- a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/AM43Configuration.java +++ b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/AM43Configuration.java @@ -12,14 +12,17 @@ */ package org.openhab.binding.bluetooth.am43.internal; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * Configuration class for AM43 Binding. * * @author Connor Petty - Initial contribution */ +@NonNullByDefault public class AM43Configuration { - public String address; + public String address = ""; public int refreshInterval; public boolean invertPosition; public int commandTimeout; diff --git a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/command/AM43Command.java b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/command/AM43Command.java index 3d67a41988c..2c20f1fe479 100644 --- a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/command/AM43Command.java +++ b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/command/AM43Command.java @@ -18,7 +18,6 @@ import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; -import org.apache.commons.lang3.ArrayUtils; import org.eclipse.jdt.annotation.NonNullByDefault; import org.eclipse.jdt.annotation.Nullable; @@ -121,19 +120,27 @@ public abstract class AM43Command { } public byte[] getRequest() { - byte[] value = ArrayUtils.EMPTY_BYTE_ARRAY; - value = ArrayUtils.add(value, HEADER_PREFIX); - value = ArrayUtils.add(value, header); - value = ArrayUtils.add(value, (byte) data.length); - value = ArrayUtils.addAll(value, data); - value = ArrayUtils.add(value, createChecksum(value)); - return ArrayUtils.addAll(REQUEST_PREFIX, value); + byte[] value = new byte[4 + data.length + REQUEST_PREFIX.length]; + System.arraycopy(REQUEST_PREFIX, 0, value, 0, REQUEST_PREFIX.length); + value[REQUEST_PREFIX.length] = HEADER_PREFIX; + value[REQUEST_PREFIX.length + 1] = header; + value[REQUEST_PREFIX.length + 2] = (byte) data.length; + System.arraycopy(data, 0, value, REQUEST_PREFIX.length + 3, data.length); + value[value.length - 1] = createChecksum(value, REQUEST_PREFIX.length, 3 + data.length); + return value; } - protected byte createChecksum(byte[] data) { - // this is a basic checksum - byte crc = data[0]; - for (int i = 1; i < data.length; i++) { + /** + * A basic method to calculate the checksum + * + * @param data source for the checksum calculation + * @param startIndex the zero-based start index to include in the calculation + * @param length the length of the range to include in the calculation + * @return the CRC-checksum result in {@link byte} + */ + protected byte createChecksum(byte[] data, int startIndex, int length) { + byte crc = data[startIndex]; + for (int i = startIndex + 1; i < startIndex + length; i++) { crc ^= data[i]; } return crc; diff --git a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/ControlAction.java b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/ControlAction.java index 453d5acddd8..a05c7aa2ab6 100644 --- a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/ControlAction.java +++ b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/ControlAction.java @@ -12,12 +12,15 @@ */ package org.openhab.binding.bluetooth.am43.internal.data; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * The {@link ControlAction} list possible controls actions that can be sent through * {@link org.openhab.binding.bluetooth.am43.internal.command.ControlCommand} * * @author Connor Petty - Initial contribution */ +@NonNullByDefault public enum ControlAction { CLOSE(0xee), OPEN(0xdd), diff --git a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/Direction.java b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/Direction.java index 0e8bf45a260..c2314632c73 100644 --- a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/Direction.java +++ b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/Direction.java @@ -12,11 +12,14 @@ */ package org.openhab.binding.bluetooth.am43.internal.data; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * This is an enum representing possible motor direction settings * * @author Connor Petty - Initial contribution */ +@NonNullByDefault public enum Direction { Forward(0x1), Reverse(0x0); diff --git a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/OperationMode.java b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/OperationMode.java index 7fbee5c3ab5..63b03e62c6b 100644 --- a/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/OperationMode.java +++ b/bundles/org.openhab.binding.bluetooth.am43/src/main/java/org/openhab/binding/bluetooth/am43/internal/data/OperationMode.java @@ -12,11 +12,14 @@ */ package org.openhab.binding.bluetooth.am43.internal.data; +import org.eclipse.jdt.annotation.NonNullByDefault; + /** * This is an enum representing possible motor modes settings * * @author Connor Petty - Initial contribution */ +@NonNullByDefault public enum OperationMode { Inching(0x1), Continuous(0x0);