kopia lustrzana https://github.com/bertrik/ttnhabbridge
Replace BooleanFormatter by IntegerFormatter, add some tests
(inspired by https://github.com/ImperialSpaceSociety/ttnhabbridge )pull/3/head
rodzic
9dafa1106a
commit
e14a4158de
|
@ -8,18 +8,18 @@ import java.util.stream.Stream;
|
|||
import nl.sikken.bertrik.cayenne.formatter.FloatFormatter;
|
||||
import nl.sikken.bertrik.cayenne.formatter.GpsFormatter;
|
||||
import nl.sikken.bertrik.cayenne.formatter.IFormatter;
|
||||
import nl.sikken.bertrik.cayenne.formatter.BooleanFormatter;
|
||||
import nl.sikken.bertrik.cayenne.formatter.IntegerFormatter;
|
||||
|
||||
/**
|
||||
* Enumeration of possible Cayenne item types.
|
||||
*/
|
||||
public enum ECayenneItem {
|
||||
DIGITAL_INPUT(0, new BooleanFormatter(1, 1, false)),
|
||||
DIGITAL_OUTPUT(1, new BooleanFormatter(1, 1, false)),
|
||||
DIGITAL_INPUT(0, new IntegerFormatter(1, 1, false)),
|
||||
DIGITAL_OUTPUT(1, new IntegerFormatter(1, 1, false)),
|
||||
ANALOG_INPUT(2, new FloatFormatter(1, 2, 0.01, true)),
|
||||
ANALOG_OUTPUT(3, new FloatFormatter(1, 2, 0.01, true)),
|
||||
ILLUMINANCE(101, new FloatFormatter(1, 2, 1.0, false)),
|
||||
PRESENCE(102, new BooleanFormatter(1, 1, false)),
|
||||
PRESENCE(102, new IntegerFormatter(1, 1, false)),
|
||||
TEMPERATURE(103, new FloatFormatter(1, 2, 0.1, true)),
|
||||
HUMIDITY(104, new FloatFormatter(1, 1, 0.5, false)),
|
||||
ACCELEROMETER(113, new FloatFormatter(3, 2, 0.001, true)),
|
||||
|
|
|
@ -1,53 +1,50 @@
|
|||
package nl.sikken.bertrik.cayenne.formatter;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Locale;
|
||||
|
||||
/**
|
||||
* Formatter for cayenne items which represent booleans.
|
||||
*/
|
||||
public final class BooleanFormatter extends BaseFormatter {
|
||||
|
||||
private final int length;
|
||||
private final int size;
|
||||
private final boolean signed;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param length the length of the return vector
|
||||
* @param size the size of each element
|
||||
* @param signed if the element is signed
|
||||
*/
|
||||
public BooleanFormatter(int length, int size, boolean signed) {
|
||||
this.length = length;
|
||||
this.size = size;
|
||||
this.signed = signed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer[] parse(ByteBuffer bb) {
|
||||
Integer[] values = new Integer[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
values[i] = (getValue(bb, size, signed) > 0) ? 1 : 0;
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] format(Number[] values) {
|
||||
String[] formatted = new String[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
formatted[i] = String.format(Locale.ROOT, "%d", values[i].intValue());
|
||||
}
|
||||
return formatted;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encode(ByteBuffer bb, Number[] values) {
|
||||
for (int i = 0; i < length; i++) {
|
||||
putValue(bb, 1, values[i].intValue() > 0 ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
package nl.sikken.bertrik.cayenne.formatter;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.Locale;
|
||||
|
||||
public final class IntegerFormatter extends BaseFormatter {
|
||||
|
||||
private final int length;
|
||||
private final int size;
|
||||
private final boolean signed;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
* @param length the number of elements
|
||||
* @param size the size of each element
|
||||
* @param signed if the element is signed
|
||||
*/
|
||||
public IntegerFormatter(int length, int size, boolean signed) {
|
||||
this.length = length;
|
||||
this.size = size;
|
||||
this.signed = signed;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Number[] parse(ByteBuffer bb) {
|
||||
Integer[] values = new Integer[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
values[i] = getValue(bb, size, signed);
|
||||
}
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] format(Number[] values) {
|
||||
String[] formatted = new String[length];
|
||||
for (int i = 0; i < length; i++) {
|
||||
formatted[i] = String.format(Locale.ROOT, "%d", values[i].intValue());
|
||||
}
|
||||
return formatted;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void encode(ByteBuffer bb, Number[] values) {
|
||||
for (int i = 0; i < length; i++) {
|
||||
putValue(bb, size, values[i].intValue());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -186,21 +186,40 @@ public final class CayenneMessageTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* Verifies encoding of a boolean value.
|
||||
* Verifies encoding of a digital input.
|
||||
*
|
||||
* @throws CayenneException in case of a parsing exception
|
||||
*/
|
||||
@Test
|
||||
public void encodeBoolean() throws CayenneException {
|
||||
public void testDigitalInput() throws CayenneException {
|
||||
final CayenneMessage message = new CayenneMessage();
|
||||
message.add(new CayenneItem(1, ECayenneItem.PRESENCE, 1));
|
||||
message.add(new CayenneItem(1, ECayenneItem.DIGITAL_INPUT, 1));
|
||||
|
||||
final byte[] encoded = message.encode(MAX_BUF_SIZE);
|
||||
final CayenneMessage decoded = CayenneMessage.parse(encoded);
|
||||
|
||||
final CayenneItem item = decoded.getItems().get(0);
|
||||
Assert.assertEquals(ECayenneItem.DIGITAL_INPUT, item.getType());
|
||||
Assert.assertEquals(1, item.getValues()[0].intValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies encoding/decoding of a presence value (e.g. number of satellites)
|
||||
*
|
||||
* @throws CayenneException
|
||||
*/
|
||||
@Test
|
||||
public void testPresence() throws CayenneException {
|
||||
final CayenneMessage message = new CayenneMessage();
|
||||
message.add(new CayenneItem(1, ECayenneItem.PRESENCE, 7));
|
||||
|
||||
final byte[] encoded = message.encode(MAX_BUF_SIZE);
|
||||
final CayenneMessage decoded = CayenneMessage.parse(encoded);
|
||||
|
||||
final CayenneItem item = decoded.getItems().get(0);
|
||||
Assert.assertEquals(ECayenneItem.PRESENCE, item.getType());
|
||||
Assert.assertEquals(1, item.getValues()[0].intValue());
|
||||
Assert.assertEquals(7, item.getValues()[0].intValue());
|
||||
Assert.assertEquals("7", item.format()[0]);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Ładowanie…
Reference in New Issue