diff --git a/Firmata/pom.xml b/Firmata/pom.xml index 2b8ecaf..879f291 100644 --- a/Firmata/pom.xml +++ b/Firmata/pom.xml @@ -12,7 +12,7 @@ name.antonsmirnov.firmata Firmata - 2.1 + 2.2 Firmata @@ -31,6 +31,12 @@ 1.0 + + org.slf4j + slf4j-api + 1.6.4 + + junit junit diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/Firmata.java b/Firmata/src/main/java/name/antonsmirnov/firmata/Firmata.java index 0d7df9f..3908ee0 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/Firmata.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/Firmata.java @@ -1,9 +1,11 @@ package name.antonsmirnov.firmata; -import name.antonsmirnov.firmata.deserializer.*; import name.antonsmirnov.firmata.message.*; +import name.antonsmirnov.firmata.reader.*; import name.antonsmirnov.firmata.serial.ISerial; -import name.antonsmirnov.firmata.serializer.*; +import name.antonsmirnov.firmata.writer.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.ArrayList; import java.util.HashMap; @@ -17,6 +19,8 @@ */ public class Firmata { + private static final Logger log = LoggerFactory.getLogger(Firmata.class); + private static final int BUFFER_SIZE = 64; /** @@ -61,7 +65,7 @@ public static interface Listener { void onStringSysexMessageReceived(StringSysexMessage message); /** - * Unknown byte received (no active Deserializers) + * Unknown byte received (no active MessageReader) * @param byteValue */ void onUnknownByteReceived(int byteValue); @@ -91,8 +95,8 @@ public void setSerial(ISerial serial) { } public Firmata() { - initSerializers(); - initDeserializers(); + initWriters(); + initReaders(); } private Listener listener; @@ -105,40 +109,40 @@ public void setListener(Listener listener) { this.listener = listener; } - private static Map, IMessageSerializer> serializers; + private static Map, IMessageWriter> writers; - private void initSerializers() { - serializers = new HashMap, IMessageSerializer>(); + private void initWriters() { + writers = new HashMap, IMessageWriter>(); - serializers.put(AnalogMessage.class, new AnalogMessageSerializer()); - serializers.put(DigitalMessage.class, new DigitalMessageSerializer()); - serializers.put(ReportAnalogPinMessage.class, new ReportAnalogPinMessageSerializer()); - serializers.put(ReportDigitalPortMessage.class, new ReportDigitalPortMessageSerializer()); - serializers.put(ReportProtocolVersionMessage.class, new ReportProtocolVersionMessageSerializer()); - serializers.put(SetPinModeMessage.class, new SetPinModeMessageSerializer()); - serializers.put(SystemResetMessage.class, new SystemResetMessageSerializer()); + writers.put(AnalogMessage.class, new AnalogMessageWriter()); + writers.put(DigitalMessage.class, new DigitalMessageWriter()); + writers.put(ReportAnalogPinMessage.class, new ReportAnalogPinMessageWriter()); + writers.put(ReportDigitalPortMessage.class, new ReportDigitalPortMessageWriter()); + writers.put(ReportProtocolVersionMessage.class, new ReportProtocolVersionMessageWriter()); + writers.put(SetPinModeMessage.class, new SetPinModeMessageWriter()); + writers.put(SystemResetMessage.class, new SystemResetMessageWriter()); // sysex messages - SysexMessageSerializer sysexMessageSerializer = new SysexMessageSerializer(); - serializers.put(SysexMessage.class, sysexMessageSerializer); - serializers.put(StringSysexMessage.class, sysexMessageSerializer); - serializers.put(ReportFirmwareVersionMessage.class, sysexMessageSerializer); + SysexMessageWriter sysexMessageWriter = new SysexMessageWriter(); + writers.put(SysexMessage.class, sysexMessageWriter); + writers.put(StringSysexMessage.class, sysexMessageWriter); + writers.put(ReportFirmwareVersionMessage.class, sysexMessageWriter); } - private static List deserializers; + private static List readers; - private IMessageDeserializer activeDeserializer; + private IMessageReader activeReader; - private void initDeserializers() { - deserializers = new ArrayList(); - potentialDeserializers = new ArrayList(); + private void initReaders() { + readers = new ArrayList(); + potentialReaders = new ArrayList(); - deserializers.add(new AnalogMessageDeserializer()); - deserializers.add(new DigitalMessageDeserializer()); - deserializers.add(new FirmwareVersionMessageDeserializer()); - deserializers.add(new ProtocolVersionMessageDeserializer()); - deserializers.add(new SysexMessageDeserializer()); - deserializers.add(new StringSysexMessageDeserializer()); + readers.add(new AnalogMessageReader()); + readers.add(new DigitalMessageReader()); + readers.add(new FirmwareVersionMessageReader()); + readers.add(new ProtocolVersionMessageReader()); + readers.add(new SysexMessageReader()); + readers.add(new StringSysexMessageReader()); } /** @@ -157,14 +161,15 @@ public Firmata(ISerial serial) { * @param message concrete outcoming message */ public void send(Message message) { - IMessageSerializer serializer = serializers.get(message.getClass()); - if (serializer == null) + IMessageWriter writer = writers.get(message.getClass()); + if (writer == null) throw new RuntimeException("Unknown message type: " + message.getClass()); - serializer.writeToSerial(message, serial); + log.info("Sending {}", message); + writer.write(message, serial); } - private List potentialDeserializers; + private List potentialReaders; private byte[] buffer = new byte[BUFFER_SIZE]; @@ -172,55 +177,60 @@ public void send(Message message) { private Message lastReceivedMessage; - public Message getLastReceivedMessage() { + protected synchronized void setLastReceivedMessage(Message message) { + this.lastReceivedMessage = message; + log.info("Received {}", lastReceivedMessage); + } + + public synchronized Message getLastReceivedMessage() { return lastReceivedMessage; } public void onDataReceived(int incomingByte) { buffer[bufferLength++] = (byte)incomingByte; - if (activeDeserializer == null) { + if (activeReader == null) { // new message byte is received int command = DECODE_COMMAND(incomingByte); - if (potentialDeserializers.size() == 0) { + if (potentialReaders.size() == 0) { // first byte check - findPotentialDeserializers(command); + findPotentialReaders(command); } else { // not first byte check - // few potential deserializers found, so we should check the next bytes to define Deserializer - filterPotentialDeserializers(command); + // few potential readers found, so we should check the next bytes to define MessageReader + filterPotentialReaders(command); } tryHandle(); } else { - // continue handling with activeDeserializer - activeDeserializer.handle(buffer, bufferLength); + // continue handling with activeReader + activeReader.read(buffer, bufferLength); - if (activeDeserializer.finishedHandling()) { + if (activeReader.finishedReading()) { // message is ready - lastReceivedMessage = activeDeserializer.getMessage(); - activeDeserializer.fireEvent(listener); + activeReader.fireEvent(listener); + setLastReceivedMessage(activeReader.getMessage()); reinitBuffer(); } } } - // pass the next bytes in order to define according deserializer - private void filterPotentialDeserializers(int command) { - List newPotentialDeserializers = new ArrayList(); + // pass the next bytes in order to define according reader + private void filterPotentialReaders(int command) { + List newPotentialReaders = new ArrayList(); - for (IMessageDeserializer eachPotentialDeserializer : potentialDeserializers) - if (eachPotentialDeserializer.canHandle(buffer, bufferLength, command)) - newPotentialDeserializers.add(eachPotentialDeserializer); + for (IMessageReader eachPotentialReader : potentialReaders) + if (eachPotentialReader.canRead(buffer, bufferLength, command)) + newPotentialReaders.add(eachPotentialReader); - potentialDeserializers = newPotentialDeserializers; + potentialReaders = newPotentialReaders; } private void tryHandle() { - int potentialDeserializersCount = potentialDeserializers.size(); - switch (potentialDeserializersCount) { + int potentialReadersCount = potentialReaders.size(); + switch (potentialReadersCount) { // unknown byte case 0: @@ -229,27 +239,28 @@ private void tryHandle() { reinitBuffer(); break; - // the only one deserializer + // the only one reader case 1: - activeDeserializer = potentialDeserializers.get(0); - activeDeserializer.startHandling(); + activeReader = potentialReaders.get(0); + activeReader.startHandling(); + log.info("Started reading with {} ...", activeReader.getClass().getSimpleName()); break; // default: - // (in case if few serializers are found, we should pass the next bytes to define final deserializer) + // (in case if few writers are found, we should pass the next bytes to define final reader) } } private void reinitBuffer() { bufferLength = 0; - activeDeserializer = null; - potentialDeserializers.clear(); + activeReader = null; + potentialReaders.clear(); } - private void findPotentialDeserializers(int command) { - for (IMessageDeserializer eachDeserializer : deserializers) { - if (eachDeserializer.canHandle(buffer, bufferLength, command)) { - potentialDeserializers.add(eachDeserializer); + private void findPotentialReaders(int command) { + for (IMessageReader eachReader : readers) { + if (eachReader.canRead(buffer, bufferLength, command)) { + potentialReaders.add(eachReader); } } } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/message/ReportProtocolVersionMessage.java b/Firmata/src/main/java/name/antonsmirnov/firmata/message/ReportProtocolVersionMessage.java index 73eb50c..97ef177 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/message/ReportProtocolVersionMessage.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/message/ReportProtocolVersionMessage.java @@ -19,6 +19,6 @@ public boolean equals(Object obj) { @Override public String toString() { - return "ReportFirmwareVersionMessage[]"; + return "ReportProtocolVersionMessage[]"; } } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/AnalogMessageDeserializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/AnalogMessageReader.java similarity index 64% rename from Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/AnalogMessageDeserializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/reader/AnalogMessageReader.java index cdabc85..4bbeda2 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/AnalogMessageDeserializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/AnalogMessageReader.java @@ -1,19 +1,19 @@ -package name.antonsmirnov.firmata.deserializer; +package name.antonsmirnov.firmata.reader; import name.antonsmirnov.firmata.Firmata; import name.antonsmirnov.firmata.message.AnalogMessage; -import name.antonsmirnov.firmata.serializer.AnalogMessageSerializer; +import name.antonsmirnov.firmata.writer.AnalogMessageWriter; import static name.antonsmirnov.firmata.BytesHelper.DECODE_BYTE; import static name.antonsmirnov.firmata.BytesHelper.DECODE_CHANNEL; /** - * MessageDeserializer for AnalogMessage + * MessageReader for AnalogMessage */ -public class AnalogMessageDeserializer implements IMessageDeserializer { +public class AnalogMessageReader implements IMessageReader { - public boolean canHandle(byte[] buffer, int bufferLength, int command) { - return command == AnalogMessageSerializer.COMMAND; + public boolean canRead(byte[] buffer, int bufferLength, int command) { + return command == AnalogMessageWriter.COMMAND; } private boolean isHandling; @@ -23,7 +23,7 @@ public void startHandling() { message = new AnalogMessage(); } - public void handle(byte[] buffer, int length) { + public void read(byte[] buffer, int length) { if (length == 2) { message.setPin(DECODE_CHANNEL(buffer[0])); } else { @@ -32,7 +32,7 @@ public void handle(byte[] buffer, int length) { } } - public boolean finishedHandling() { + public boolean finishedReading() { return !isHandling; } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/BaseSysexMessageDeserializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/BaseSysexMessageReader.java similarity index 67% rename from Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/BaseSysexMessageDeserializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/reader/BaseSysexMessageReader.java index 326cd8e..824299e 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/BaseSysexMessageDeserializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/BaseSysexMessageReader.java @@ -1,24 +1,24 @@ -package name.antonsmirnov.firmata.deserializer; +package name.antonsmirnov.firmata.reader; import name.antonsmirnov.firmata.message.SysexMessage; -import name.antonsmirnov.firmata.serializer.SysexMessageSerializer; +import name.antonsmirnov.firmata.writer.SysexMessageWriter; import static name.antonsmirnov.firmata.BytesHelper.DECODE_STRING; /** - * Base MessageDeserializer for SysexMessage + * Base MessageReader for SysexMessage */ -public abstract class BaseSysexMessageDeserializer - implements IMessageDeserializer { +public abstract class BaseSysexMessageReader + implements IMessageReader { private Byte sysexCommand; - public BaseSysexMessageDeserializer(Byte sysexCommand) { + public BaseSysexMessageReader(Byte sysexCommand) { this.sysexCommand = sysexCommand; } - public boolean canHandle(byte[] buffer, int bufferLength, int command) { - return (bufferLength == 1 && buffer[0] == (byte)SysexMessageSerializer.COMMAND_START) // is sysex message? + public boolean canRead(byte[] buffer, int bufferLength, int command) { + return (bufferLength == 1 && buffer[0] == (byte) SysexMessageWriter.COMMAND_START) // is sysex message? || (bufferLength == 2 && (sysexCommand == null || sysexCommand.equals(buffer[1]))) // is needed sysex command || @@ -33,10 +33,10 @@ public void startHandling() { protected ConcreteSysexMessage message; - public void handle(byte[] buffer, int length) { + public void read(byte[] buffer, int length) { byte incomingByte = buffer[length-1]; - if (incomingByte == (byte)SysexMessageSerializer.COMMAND_END) { + if (incomingByte == (byte) SysexMessageWriter.COMMAND_END) { isHandling = false; message = buildSysexMessage(buffer, length); @@ -56,7 +56,7 @@ public ConcreteSysexMessage getMessage() { return message; } - public boolean finishedHandling() { + public boolean finishedReading() { return !isHandling; } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/DigitalMessageDeserializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/DigitalMessageReader.java similarity index 64% rename from Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/DigitalMessageDeserializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/reader/DigitalMessageReader.java index 5efd106..9d8b011 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/DigitalMessageDeserializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/DigitalMessageReader.java @@ -1,19 +1,19 @@ -package name.antonsmirnov.firmata.deserializer; +package name.antonsmirnov.firmata.reader; import name.antonsmirnov.firmata.Firmata; import name.antonsmirnov.firmata.message.DigitalMessage; -import name.antonsmirnov.firmata.serializer.DigitalMessageSerializer; +import name.antonsmirnov.firmata.writer.DigitalMessageWriter; import static name.antonsmirnov.firmata.BytesHelper.DECODE_BYTE; import static name.antonsmirnov.firmata.BytesHelper.DECODE_CHANNEL; /** - * MessageDeserializer for DigitalMessage + * MessageReader for DigitalMessage */ -public class DigitalMessageDeserializer implements IMessageDeserializer { +public class DigitalMessageReader implements IMessageReader { - public boolean canHandle(byte[] buffer, int bufferLength, int command) { - return command == DigitalMessageSerializer.COMMAND; + public boolean canRead(byte[] buffer, int bufferLength, int command) { + return command == DigitalMessageWriter.COMMAND; } private boolean isHandling; @@ -23,7 +23,7 @@ public void startHandling() { message = new DigitalMessage(); } - public void handle(byte[] buffer, int length) { + public void read(byte[] buffer, int length) { if (length == 2) { message.setPort(DECODE_CHANNEL(buffer[0])); } else { @@ -32,7 +32,7 @@ public void handle(byte[] buffer, int length) { } } - public boolean finishedHandling() { + public boolean finishedReading() { return !isHandling; } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/FirmwareVersionMessageDeserializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/FirmwareVersionMessageReader.java similarity index 74% rename from Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/FirmwareVersionMessageDeserializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/reader/FirmwareVersionMessageReader.java index c14a677..f22adfb 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/FirmwareVersionMessageDeserializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/FirmwareVersionMessageReader.java @@ -1,15 +1,15 @@ -package name.antonsmirnov.firmata.deserializer; +package name.antonsmirnov.firmata.reader; import name.antonsmirnov.firmata.Firmata; import name.antonsmirnov.firmata.message.FirmwareVersionMessage; import name.antonsmirnov.firmata.message.ReportFirmwareVersionMessage; /** - * MessageDeserializer for FirmwareVersionMessage + * MessageReader for FirmwareVersionMessage */ -public class FirmwareVersionMessageDeserializer extends BaseSysexMessageDeserializer { +public class FirmwareVersionMessageReader extends BaseSysexMessageReader { - public FirmwareVersionMessageDeserializer() { + public FirmwareVersionMessageReader() { super((byte)ReportFirmwareVersionMessage.COMMAND); } @@ -19,7 +19,7 @@ protected FirmwareVersionMessage buildSysexMessage(byte[] buffer, int bufferLeng message.setMajor(buffer[2]); message.setMinor(buffer[3]); // skip 4 first bytes - COMMAND_START, sysex command byte, major, minor - message.setName(extractStringFromBuffer(buffer, 4, bufferLength -2)); + message.setName(extractStringFromBuffer(buffer, 4, bufferLength - 2)); return message; } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/IMessageDeserializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/IMessageReader.java similarity index 66% rename from Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/IMessageDeserializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/reader/IMessageReader.java index 39b53f6..a2f5af9 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/IMessageDeserializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/IMessageReader.java @@ -1,20 +1,21 @@ -package name.antonsmirnov.firmata.deserializer; +package name.antonsmirnov.firmata.reader; import name.antonsmirnov.firmata.Firmata; import name.antonsmirnov.firmata.message.Message; /** - * Message serializer + * Message reader */ -public interface IMessageDeserializer { +public interface IMessageReader { /** - * Can handle command + * Can read command + * * @param buffer incoming buffer * @param bufferLength current buffer length * @return true if it's his command message type */ - boolean canHandle(byte[] buffer, int bufferLength, int command); + boolean canRead(byte[] buffer, int bufferLength, int command); /** * Start handling message @@ -22,21 +23,23 @@ public interface IMessageDeserializer { void startHandling(); /** - * Handle next message byte + * Read next message byte + * * @param buffer incoming buffer * @param length current buffer length */ - public void handle(byte[] buffer, int length); + public void read(byte[] buffer, int length); /** * Has it finished message handling + * * @return is it has received all the message bytes */ - boolean finishedHandling(); + boolean finishedReading(); /** * Message if it finished handling - * (check finishedHandling before) + * (check finishedReading before) * @return */ ConcreteMessage getMessage(); diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/ProtocolVersionMessageDeserializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/ProtocolVersionMessageReader.java similarity index 60% rename from Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/ProtocolVersionMessageDeserializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/reader/ProtocolVersionMessageReader.java index 796b123..8d04bea 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/ProtocolVersionMessageDeserializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/ProtocolVersionMessageReader.java @@ -1,18 +1,18 @@ -package name.antonsmirnov.firmata.deserializer; +package name.antonsmirnov.firmata.reader; import name.antonsmirnov.firmata.Firmata; import name.antonsmirnov.firmata.message.ProtocolVersionMessage; -import name.antonsmirnov.firmata.serializer.ReportProtocolVersionMessageSerializer; +import name.antonsmirnov.firmata.writer.ReportProtocolVersionMessageWriter; /** - * MessageDeserializer for ProtocolVersionMessage + * MessageReader for ProtocolVersionMessage */ -public class ProtocolVersionMessageDeserializer implements IMessageDeserializer { +public class ProtocolVersionMessageReader implements IMessageReader { - public boolean canHandle(byte[] buffer, int bufferLength, int command) { + public boolean canRead(byte[] buffer, int bufferLength, int command) { return bufferLength == 1 && - buffer[0] == (byte)ReportProtocolVersionMessageSerializer.COMMAND; + buffer[0] == (byte) ReportProtocolVersionMessageWriter.COMMAND; } private boolean isHandling; @@ -22,7 +22,7 @@ public void startHandling() { message = new ProtocolVersionMessage(); } - public void handle(byte[] buffer, int length) { + public void read(byte[] buffer, int length) { byte incomingByte = buffer[length-1]; if (length == 2) { message.setMajor(incomingByte); @@ -32,7 +32,7 @@ public void handle(byte[] buffer, int length) { } } - public boolean finishedHandling() { + public boolean finishedReading() { return !isHandling; } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/StringSysexMessageDeserializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/StringSysexMessageReader.java similarity index 72% rename from Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/StringSysexMessageDeserializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/reader/StringSysexMessageReader.java index cb95a06..7738be4 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/StringSysexMessageDeserializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/StringSysexMessageReader.java @@ -1,14 +1,14 @@ -package name.antonsmirnov.firmata.deserializer; +package name.antonsmirnov.firmata.reader; import name.antonsmirnov.firmata.Firmata; import name.antonsmirnov.firmata.message.StringSysexMessage; /** - * MessageDeserializer for StringSysexMessage + * MessageReader for StringSysexMessage */ -public class StringSysexMessageDeserializer extends BaseSysexMessageDeserializer { +public class StringSysexMessageReader extends BaseSysexMessageReader { - public StringSysexMessageDeserializer() { + public StringSysexMessageReader() { super((byte)StringSysexMessage.COMMAND); } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/SysexMessageDeserializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/SysexMessageReader.java similarity index 75% rename from Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/SysexMessageDeserializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/reader/SysexMessageReader.java index 01baae8..1c14b50 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/deserializer/SysexMessageDeserializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/reader/SysexMessageReader.java @@ -1,14 +1,14 @@ -package name.antonsmirnov.firmata.deserializer; +package name.antonsmirnov.firmata.reader; import name.antonsmirnov.firmata.Firmata; import name.antonsmirnov.firmata.message.SysexMessage; /** - * MessageDeserializer for SysexMessage + * MessageReader for SysexMessage */ -public class SysexMessageDeserializer extends BaseSysexMessageDeserializer { +public class SysexMessageReader extends BaseSysexMessageReader { - public SysexMessageDeserializer() { + public SysexMessageReader() { super(null); // null means that 'no command byte specified' } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/IMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/IMessageSerializer.java deleted file mode 100644 index 6b726ad..0000000 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/IMessageSerializer.java +++ /dev/null @@ -1,15 +0,0 @@ -package name.antonsmirnov.firmata.serializer; - -import name.antonsmirnov.firmata.message.Message; -import name.antonsmirnov.firmata.serial.ISerial; - -/** - * Message serializer - */ -public interface IMessageSerializer { - - /** - * Write command to Serial - */ - void writeToSerial(ConcreteMessage message, ISerial serial); -} diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportProtocolVersionMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportProtocolVersionMessageSerializer.java deleted file mode 100644 index efa439e..0000000 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportProtocolVersionMessageSerializer.java +++ /dev/null @@ -1,16 +0,0 @@ -package name.antonsmirnov.firmata.serializer; - -import name.antonsmirnov.firmata.message.ReportProtocolVersionMessage; -import name.antonsmirnov.firmata.serial.ISerial; - -/** - * MessageSerializer for ReportProtocolVersionMessage - */ -public class ReportProtocolVersionMessageSerializer implements IMessageSerializer { - - public static final int COMMAND = 0xF9; - - public void writeToSerial(ReportProtocolVersionMessage message, ISerial serial) { - serial.write(COMMAND); - } -} diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SystemResetMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SystemResetMessageSerializer.java deleted file mode 100644 index c2b0783..0000000 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SystemResetMessageSerializer.java +++ /dev/null @@ -1,16 +0,0 @@ -package name.antonsmirnov.firmata.serializer; - -import name.antonsmirnov.firmata.message.SystemResetMessage; -import name.antonsmirnov.firmata.serial.ISerial; - -/** - * MessageSerializer for SystemResetMessage - */ -public class SystemResetMessageSerializer implements IMessageSerializer { - - public static final int COMMAND = (byte)0xFF; - - public void writeToSerial(SystemResetMessage message, ISerial serial) { - serial.write(COMMAND); - } -} diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/AnalogMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/AnalogMessageWriter.java similarity index 62% rename from Firmata/src/main/java/name/antonsmirnov/firmata/serializer/AnalogMessageSerializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/writer/AnalogMessageWriter.java index 04c7507..1992df9 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/AnalogMessageSerializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/AnalogMessageWriter.java @@ -1,4 +1,4 @@ -package name.antonsmirnov.firmata.serializer; +package name.antonsmirnov.firmata.writer; import name.antonsmirnov.firmata.message.AnalogMessage; import name.antonsmirnov.firmata.serial.ISerial; @@ -6,13 +6,13 @@ import static name.antonsmirnov.firmata.BytesHelper.*; /** - * Serializer for AnalogMessage + * MessageWriter for AnalogMessage */ -public class AnalogMessageSerializer implements IMessageSerializer { +public class AnalogMessageWriter implements IMessageWriter { public static final int COMMAND = 0xE0; - public void writeToSerial(AnalogMessage message, ISerial serial) { + public void write(AnalogMessage message, ISerial serial) { serial.write(COMMAND | ENCODE_CHANNEL(message.getPin())); serial.write(LSB(message.getValue())); serial.write(MSB(message.getValue())); diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/DigitalMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/DigitalMessageWriter.java similarity index 62% rename from Firmata/src/main/java/name/antonsmirnov/firmata/serializer/DigitalMessageSerializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/writer/DigitalMessageWriter.java index bdc08b0..70fbfd1 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/DigitalMessageSerializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/DigitalMessageWriter.java @@ -1,4 +1,4 @@ -package name.antonsmirnov.firmata.serializer; +package name.antonsmirnov.firmata.writer; import name.antonsmirnov.firmata.message.DigitalMessage; import name.antonsmirnov.firmata.serial.ISerial; @@ -6,13 +6,13 @@ import static name.antonsmirnov.firmata.BytesHelper.*; /** - * Serializer for DigitalMessage + * MessageWriter for DigitalMessage */ -public class DigitalMessageSerializer implements IMessageSerializer { +public class DigitalMessageWriter implements IMessageWriter { public static final int COMMAND = 0x90; - public void writeToSerial(DigitalMessage message, ISerial serial) { + public void write(DigitalMessage message, ISerial serial) { serial.write(COMMAND | ENCODE_CHANNEL(message.getPort())); serial.write(LSB(message.getValue())); serial.write(MSB(message.getValue())); diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/writer/IMessageWriter.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/IMessageWriter.java new file mode 100644 index 0000000..4e96fdb --- /dev/null +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/IMessageWriter.java @@ -0,0 +1,15 @@ +package name.antonsmirnov.firmata.writer; + +import name.antonsmirnov.firmata.message.Message; +import name.antonsmirnov.firmata.serial.ISerial; + +/** + * Message writer + */ +public interface IMessageWriter { + + /** + * Write command to Serial + */ + void write(ConcreteMessage message, ISerial serial); +} diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportAnalogPinMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportAnalogPinMessageWriter.java similarity index 56% rename from Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportAnalogPinMessageSerializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportAnalogPinMessageWriter.java index 0b5003c..6254aed 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportAnalogPinMessageSerializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportAnalogPinMessageWriter.java @@ -1,4 +1,4 @@ -package name.antonsmirnov.firmata.serializer; +package name.antonsmirnov.firmata.writer; import name.antonsmirnov.firmata.message.ReportAnalogPinMessage; import name.antonsmirnov.firmata.serial.ISerial; @@ -6,13 +6,13 @@ import static name.antonsmirnov.firmata.BytesHelper.ENCODE_CHANNEL; /** - * MessageSerializer for ReportAnalogPinMessage + * MessageWriter for ReportAnalogPinMessage */ -public class ReportAnalogPinMessageSerializer implements IMessageSerializer { +public class ReportAnalogPinMessageWriter implements IMessageWriter { public static final int COMMAND = 0xC0; - public void writeToSerial(ReportAnalogPinMessage message, ISerial serial) { + public void write(ReportAnalogPinMessage message, ISerial serial) { serial.write(COMMAND | ENCODE_CHANNEL(message.getPin())); serial.write(message.isEnable() ? 1 : 0); } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportDigitalPortMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportDigitalPortMessageWriter.java similarity index 56% rename from Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportDigitalPortMessageSerializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportDigitalPortMessageWriter.java index b929805..3b98444 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/ReportDigitalPortMessageSerializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportDigitalPortMessageWriter.java @@ -1,4 +1,4 @@ -package name.antonsmirnov.firmata.serializer; +package name.antonsmirnov.firmata.writer; import name.antonsmirnov.firmata.message.ReportDigitalPortMessage; import name.antonsmirnov.firmata.serial.ISerial; @@ -6,13 +6,13 @@ import static name.antonsmirnov.firmata.BytesHelper.ENCODE_CHANNEL; /** - * MessageSerializer for ReportDigitalPortMessage + * MessageWriter for ReportDigitalPortMessage */ -public class ReportDigitalPortMessageSerializer implements IMessageSerializer { +public class ReportDigitalPortMessageWriter implements IMessageWriter { public static final int COMMAND = 0xD0; - public void writeToSerial(ReportDigitalPortMessage message, ISerial serial) { + public void write(ReportDigitalPortMessage message, ISerial serial) { serial.write(COMMAND | ENCODE_CHANNEL(message.getPort())); serial.write(message.isEnable() ? 1 : 0); } diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportProtocolVersionMessageWriter.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportProtocolVersionMessageWriter.java new file mode 100644 index 0000000..9f9f0f5 --- /dev/null +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/ReportProtocolVersionMessageWriter.java @@ -0,0 +1,16 @@ +package name.antonsmirnov.firmata.writer; + +import name.antonsmirnov.firmata.message.ReportProtocolVersionMessage; +import name.antonsmirnov.firmata.serial.ISerial; + +/** + * MessageWriter for ReportProtocolVersionMessage + */ +public class ReportProtocolVersionMessageWriter implements IMessageWriter { + + public static final int COMMAND = 0xF9; + + public void write(ReportProtocolVersionMessage message, ISerial serial) { + serial.write(COMMAND); + } +} diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SetPinModeMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/SetPinModeMessageWriter.java similarity index 52% rename from Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SetPinModeMessageSerializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/writer/SetPinModeMessageWriter.java index 2deec3f..e3c378f 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SetPinModeMessageSerializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/SetPinModeMessageWriter.java @@ -1,16 +1,16 @@ -package name.antonsmirnov.firmata.serializer; +package name.antonsmirnov.firmata.writer; import name.antonsmirnov.firmata.message.SetPinModeMessage; import name.antonsmirnov.firmata.serial.ISerial; /** - * MessageSerializer for SetPinModeMessage + * MessageWriter for SetPinModeMessage */ -public class SetPinModeMessageSerializer implements IMessageSerializer { +public class SetPinModeMessageWriter implements IMessageWriter { public static final int COMMAND = 0xF4; - public void writeToSerial(SetPinModeMessage message, ISerial serial) { + public void write(SetPinModeMessage message, ISerial serial) { serial.write(COMMAND); serial.write(message.getPin()); serial.write(message.getMode()); diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SysexMessageSerializer.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/SysexMessageWriter.java similarity index 69% rename from Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SysexMessageSerializer.java rename to Firmata/src/main/java/name/antonsmirnov/firmata/writer/SysexMessageWriter.java index aa13bfc..3498570 100644 --- a/Firmata/src/main/java/name/antonsmirnov/firmata/serializer/SysexMessageSerializer.java +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/SysexMessageWriter.java @@ -1,4 +1,4 @@ -package name.antonsmirnov.firmata.serializer; +package name.antonsmirnov.firmata.writer; import name.antonsmirnov.firmata.message.SysexMessage; import name.antonsmirnov.firmata.serial.ISerial; @@ -6,14 +6,14 @@ import static name.antonsmirnov.firmata.BytesHelper.ENCODE_STRING; /** - * MessageSerializer for SysexMessage and inheritors + * MessageWriter for SysexMessage and inheritors */ -public class SysexMessageSerializer implements IMessageSerializer { +public class SysexMessageWriter implements IMessageWriter { public static final int COMMAND_START = 0xF0; public static final int COMMAND_END = 0xF7; - public void writeToSerial(SysexMessage message, ISerial serial) { + public void write(SysexMessage message, ISerial serial) { serial.write(COMMAND_START); serial.write(message.getCommand()); diff --git a/Firmata/src/main/java/name/antonsmirnov/firmata/writer/SystemResetMessageWriter.java b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/SystemResetMessageWriter.java new file mode 100644 index 0000000..9d29065 --- /dev/null +++ b/Firmata/src/main/java/name/antonsmirnov/firmata/writer/SystemResetMessageWriter.java @@ -0,0 +1,16 @@ +package name.antonsmirnov.firmata.writer; + +import name.antonsmirnov.firmata.message.SystemResetMessage; +import name.antonsmirnov.firmata.serial.ISerial; + +/** + * MessageWriter for SystemResetMessage + */ +public class SystemResetMessageWriter implements IMessageWriter { + + public static final int COMMAND = (byte)0xFF; + + public void write(SystemResetMessage message, ISerial serial) { + serial.write(COMMAND); + } +} diff --git a/Firmata/src/test/java/name/antonsmirnov/firmata/OriginalFirmata.java b/FirmataTests/src/main/java/name/antonsmirnov/firmata/OriginalFirmata.java similarity index 99% rename from Firmata/src/test/java/name/antonsmirnov/firmata/OriginalFirmata.java rename to FirmataTests/src/main/java/name/antonsmirnov/firmata/OriginalFirmata.java index e0dbaed..da27d6a 100644 --- a/Firmata/src/test/java/name/antonsmirnov/firmata/OriginalFirmata.java +++ b/FirmataTests/src/main/java/name/antonsmirnov/firmata/OriginalFirmata.java @@ -3,7 +3,7 @@ import name.antonsmirnov.firmata.serial.ISerial; /** - * Almost original Firmata (Arduino.java) + * Almost original Firmata (Arduino.java) 1.5.1 */ public class OriginalFirmata { diff --git a/Firmata/src/test/java/name/antonsmirnov/firmata/TestSerial.java b/FirmataTests/src/main/java/name/antonsmirnov/firmata/TestSerial.java similarity index 100% rename from Firmata/src/test/java/name/antonsmirnov/firmata/TestSerial.java rename to FirmataTests/src/main/java/name/antonsmirnov/firmata/TestSerial.java diff --git a/Firmata/src/test/java/name/antonsmirnov/firmata/tests/AnalogMessageTest.java b/FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/AnalogMessageTest.java similarity index 100% rename from Firmata/src/test/java/name/antonsmirnov/firmata/tests/AnalogMessageTest.java rename to FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/AnalogMessageTest.java diff --git a/Firmata/src/test/java/name/antonsmirnov/firmata/tests/BaseFirmataTest.java b/FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/BaseFirmataTest.java similarity index 100% rename from Firmata/src/test/java/name/antonsmirnov/firmata/tests/BaseFirmataTest.java rename to FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/BaseFirmataTest.java diff --git a/Firmata/src/test/java/name/antonsmirnov/firmata/tests/DigitalMessageTest.java b/FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/DigitalMessageTest.java similarity index 100% rename from Firmata/src/test/java/name/antonsmirnov/firmata/tests/DigitalMessageTest.java rename to FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/DigitalMessageTest.java diff --git a/Firmata/src/test/java/name/antonsmirnov/firmata/tests/FirmwareVersionMessageTest.java b/FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/FirmwareVersionMessageTest.java similarity index 71% rename from Firmata/src/test/java/name/antonsmirnov/firmata/tests/FirmwareVersionMessageTest.java rename to FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/FirmwareVersionMessageTest.java index 9a89e9d..3b411f0 100644 --- a/Firmata/src/test/java/name/antonsmirnov/firmata/tests/FirmwareVersionMessageTest.java +++ b/FirmataTests/src/test/java/name/antonsmirnov/firmata/tests/FirmwareVersionMessageTest.java @@ -1,17 +1,15 @@ package name.antonsmirnov.firmata.tests; -import name.antonsmirnov.firmata.deserializer.FirmwareVersionMessageDeserializer; import name.antonsmirnov.firmata.message.FirmwareVersionMessage; import name.antonsmirnov.firmata.message.Message; import name.antonsmirnov.firmata.message.ReportFirmwareVersionMessage; -import name.antonsmirnov.firmata.serializer.SysexMessageSerializer; +import name.antonsmirnov.firmata.reader.FirmwareVersionMessageReader; +import name.antonsmirnov.firmata.writer.SysexMessageWriter; import org.junit.Test; import java.nio.ByteBuffer; import static name.antonsmirnov.firmata.BytesHelper.ENCODE_STRING; -import static name.antonsmirnov.firmata.BytesHelper.LSB; -import static name.antonsmirnov.firmata.BytesHelper.MSB; /** * Test for FirmwareVersionMessage @@ -29,32 +27,31 @@ private byte[] getInput() { // 2: each name byte is encoded into 2 bytes int offset = 0; - input[offset++] = (byte)SysexMessageSerializer.COMMAND_START; + input[offset++] = (byte) SysexMessageWriter.COMMAND_START; input[offset++] = (byte)ReportFirmwareVersionMessage.COMMAND; input[offset++] = (byte)expectedMessage.getMajor(); input[offset++] = (byte)expectedMessage.getMinor(); ENCODE_STRING(NAME, ByteBuffer.wrap(input), offset); offset += 2 * NAME.length; - input[offset] = (byte)SysexMessageSerializer.COMMAND_END; + input[offset] = (byte) SysexMessageWriter.COMMAND_END; return input; } @Test public void testDeserialize() { - byte[] input = getInput(); // feed input - FirmwareVersionMessageDeserializer deserializer = new FirmwareVersionMessageDeserializer(); - deserializer.startHandling(); - // from 2 (not 0), because COMMAND_START and sysex command bytes were walked during canHandle() + FirmwareVersionMessageReader reader = new FirmwareVersionMessageReader(); + reader.startHandling(); + // from 2 (not 0), because COMMAND_START and sysex command bytes were walked during canRead() for (int i=2; i4.8.1 test + - - - - org.apache.maven.plugins - maven-surefire-plugin - 2.10 - - - **/RealSerialTest.java - - - - - \ No newline at end of file diff --git a/IndepProcessingSerial/src/main/java/processing/serial/IndepProcessingSerial.java b/IndepProcessingSerial/src/main/java/processing/serial/IndepProcessingSerial.java index a8d030b..9f4c37b 100644 --- a/IndepProcessingSerial/src/main/java/processing/serial/IndepProcessingSerial.java +++ b/IndepProcessingSerial/src/main/java/processing/serial/IndepProcessingSerial.java @@ -516,7 +516,7 @@ public String readStringUntil(int interesting) { /** - * This will handle both ints, bytes and chars transparently. + * This will read both ints, bytes and chars transparently. */ public void write(int what) { // will also cover char try { diff --git a/IndepProcessingSerial/src/test/java/name/antonsmirnov/firmata/serial/RealSerialTest.java b/IndepProcessingSerial/src/test/java/name/antonsmirnov/firmata/serial/RealSerialTest.java deleted file mode 100644 index aa5fb2b..0000000 --- a/IndepProcessingSerial/src/test/java/name/antonsmirnov/firmata/serial/RealSerialTest.java +++ /dev/null @@ -1,46 +0,0 @@ -package name.antonsmirnov.firmata.serial; - -import junit.framework.TestCase; -import org.junit.Test; -import processing.serial.IndepProcessingSerial; - -import javax.sound.sampled.Port; - -/** - * To test with blinking LED to see board reaction - * (should not be used in CI (configured to be skipped in pom.xml), just to see with eye };) - */ -public class RealSerialTest extends TestCase { - - private ISerial serial; - - // default port - private static final String PORT_NAME = "COM8"; - private static final int PORT_BAUD_RATE = 9600; - - private static final int SLEEP_TIME = 1000; // 1 sec - - @Test - public void testWrite() { - serial = new IndepProcessingSerialAdapter(new IndepProcessingSerial(PORT_NAME, PORT_BAUD_RATE)); - try { - serial.start(); - sleep(); - serial.write("-"); // LED will be switched ON - sleep(); - serial.write("-"); // LED will be switched OFF - sleep(); - System.out.println(serial.readString()); - } finally{ - serial.stop(); - } - } - - private void sleep() { - try { - Thread.sleep(SLEEP_TIME); - } catch (InterruptedException e) { - e.printStackTrace(); - } - } -} diff --git a/pom.xml b/pom.xml index 93d2674..212222c 100644 --- a/pom.xml +++ b/pom.xml @@ -36,6 +36,7 @@ ./Serial ./Firmata + ./FirmataTests ./ProcessingSerial ./IndepProcessingSerial