From 0f33f2a429fba749fca7453ebf25850fc8fbb925 Mon Sep 17 00:00:00 2001 From: Rik Veenboer Date: Thu, 16 Jul 2015 22:37:59 +0100 Subject: [PATCH] Near complete implementation, untested --- .../boukefalos/tm1638/AbstractTM1638.java | 121 ++++++++++++++++-- .../com/github/boukefalos/tm1638/TM1638.java | 4 + .../tm1638/implementation/Local.java | 1 + src/main/proto/tm1638.proto | 17 ++- src/test/java/test/Test.java | 40 ------ src/test/java/test/TestLocal.java | 16 ++- 6 files changed, 138 insertions(+), 61 deletions(-) delete mode 100644 src/test/java/test/Test.java diff --git a/src/main/java/com/github/boukefalos/tm1638/AbstractTM1638.java b/src/main/java/com/github/boukefalos/tm1638/AbstractTM1638.java index ffa70f3..3d71b44 100644 --- a/src/main/java/com/github/boukefalos/tm1638/AbstractTM1638.java +++ b/src/main/java/com/github/boukefalos/tm1638/AbstractTM1638.java @@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import tm1638.Tm1638.Buttons; +import tm1638.Tm1638.ClearDisplayDigit; import tm1638.Tm1638.Color; import tm1638.Tm1638.Command; import tm1638.Tm1638.Command.Type; @@ -11,15 +12,20 @@ import tm1638.Tm1638.Construct; import tm1638.Tm1638.Message; import tm1638.Tm1638.Ping; import tm1638.Tm1638.Pong; +import tm1638.Tm1638.SetDisplay; +import tm1638.Tm1638.SetDisplayDigit; +import tm1638.Tm1638.SetDisplayToNumber; +import tm1638.Tm1638.SetDisplayToString; +import tm1638.Tm1638.SetDisplayToString.Builder; import tm1638.Tm1638.SetLED; +import tm1638.Tm1638.SetLEDs; import tm1638.Tm1638.SetupDisplay; import tm1638.Tm1638.Text; -import base.work.Listen; import com.github.boukefalos.arduino.AbstractArduino; -import com.github.boukefalos.arduino.exception.ArduinoException; +import com.google.protobuf.ByteString; -public class AbstractTM1638 extends AbstractArduino implements TM1638 { +public abstract class AbstractTM1638 extends AbstractArduino implements TM1638 { public void input(Message message) { System.out.println(message); switch (message.getType()) { @@ -68,30 +74,125 @@ public class AbstractTM1638 extends AbstractArduino implements TM1638 { } public void clearDisplay() { + command(Command.newBuilder() + .setType(Type.CLEAR_DISPLAY).build()); } public void clearDisplayDigit(int pos, boolean dot) { + command(Command.newBuilder() + .setType(Type.CLEAR_DISPLAY_DIGIT) + .setClearDisplayDigit( + ClearDisplayDigit.newBuilder() + .setPos(pos) + .setDot(dot).build()).build()); } public void setDisplay(byte[] values) { + command(Command.newBuilder() + .setType(Type.SET_DISPLAY) + .setSetDisplay( + SetDisplay.newBuilder() + .setValues(ByteString.copyFrom(values)).build()).build()); + } + + public void setDisplayDigit(int digit, int pos, boolean dot) { + setDisplayDigit(digit, pos, dot, null); } public void setDisplayDigit(int digit, int pos, boolean dot, byte[] font) { + tm1638.Tm1638.SetDisplayDigit.Builder builder = SetDisplayDigit.newBuilder() + .setDigit(digit) + .setPos(pos) + .setDot(dot); + boolean has_font = font != null; + builder.setHasFont(has_font); + if (has_font) { + builder.setFont(ByteString.copyFrom(font)); + } + command(Command.newBuilder() + .setType(Type.SET_DISPLAY_DIGIT) + .setSetDisplayDigit(builder.build()).build()); + } + + public void setDisplayToBinNumber(int number, int dots) { + setDisplayToBinNumber(number, dots, null); } public void setDisplayToBinNumber(int number, int dots, byte[] font) { + command(Command.newBuilder() + .setType(Type.SET_DISPLAY_TO_BIN_NUMBER) + .setSetDisplayToNumber( + SetDisplayToNumber.newBuilder() + .setNumber(number) + .setDots(dots) + .setFont(ByteString.copyFrom(font)).build()).build()); + } + + public void setDisplayToDecNumber(int number, int dots, boolean leadingZeros) { + setDisplayToDecNumber(number, dots, leadingZeros, null); } public void setDisplayToDecNumber(int number, int dots, boolean leadingZeros, byte[] font) { + tm1638.Tm1638.SetDisplayToNumber.Builder builder = SetDisplayToNumber.newBuilder() + .setNumber(number) + .setDots(dots) + .setLeadingZeros(leadingZeros); + boolean has_font = font != null; + builder.setHasFont(has_font); + if (has_font) { + builder.setFont(ByteString.copyFrom(font)); + } + command(Command.newBuilder() + .setType(Type.SET_DISPLAY_TO_DEC_NUMBER) + .setSetDisplayToNumber(builder.build()).build()); + } + + public void setDisplayToHexNumber(int number, int dots, boolean leadingZeros) { + setDisplayToHexNumber(number, dots, leadingZeros, null); } public void setDisplayToHexNumber(int number, int dots, boolean leadingZeros, byte[] font) { + tm1638.Tm1638.SetDisplayToNumber.Builder builder = SetDisplayToNumber.newBuilder() + .setNumber(number) + .setDots(dots) + .setLeadingZeros(leadingZeros); + boolean has_font = font != null; + builder.setHasFont(has_font); + if (has_font) { + builder.setFont(ByteString.copyFrom(font)); + } + command(Command.newBuilder() + .setType(Type.SET_DISPLAY_TO_HEX_NUMBER) + .setSetDisplayToNumber( + builder.build()).build()); } public void setDisplayToError() { + command(Command.newBuilder() + .setType(Type.SET_DISPLAY_TO_ERROR).build()); + } + + public void setDisplayToString(String string, int dots, int pos) { + setDisplayToString(string, dots, pos, null); } public void setDisplayToString(String string, int dots, int pos, byte[] font) { + Builder builder = SetDisplayToString.newBuilder() + .setString(string) + .setDots(dots) + .setPos(pos); + boolean has_font = font != null; + builder.setHasFont(has_font); + if (has_font) { + builder.setFont(ByteString.copyFrom(font)); + } + if (has_font) { + builder.setFont(ByteString.copyFrom(font)); + } + command(Command.newBuilder() + .setType(Type.SET_DISPLAY_TO_STRING) + .setSetDisplayToString( + builder.build()).build()); } public void setLED(Color color, int pos) { @@ -104,6 +205,11 @@ public class AbstractTM1638 extends AbstractArduino implements TM1638 { } public void setLEDs(int led) { + command(Command.newBuilder() + .setType(Type.SET_LEDS) + .setSetLEDs( + SetLEDs.newBuilder() + .setLed(led).build()).build()); } public void setupDisplay(boolean active, int intensity) { @@ -114,13 +220,4 @@ public class AbstractTM1638 extends AbstractArduino implements TM1638 { .setActive(active) .setIntensity(intensity).build()).build()); } - - public void register(Listen listen) { - } - - public void remove(Listen listen) { - } - - public void send(byte[] buffer) throws ArduinoException { - } } diff --git a/src/main/java/com/github/boukefalos/tm1638/TM1638.java b/src/main/java/com/github/boukefalos/tm1638/TM1638.java index fffc6ed..51b636e 100644 --- a/src/main/java/com/github/boukefalos/tm1638/TM1638.java +++ b/src/main/java/com/github/boukefalos/tm1638/TM1638.java @@ -10,11 +10,15 @@ public interface TM1638 extends Arduino { public void clearDisplay(); public void clearDisplayDigit(int pos, boolean dot); public void setDisplay(byte[] values); + public void setDisplayDigit(int digit, int pos, boolean dot); public void setDisplayDigit(int digit, int pos, boolean dot, byte[] font); public void setDisplayToBinNumber(int number, int dots, byte[] font); + public void setDisplayToDecNumber(int number, int dots, boolean leadingZeros); public void setDisplayToDecNumber(int number, int dots, boolean leadingZeros, byte[] font); + public void setDisplayToHexNumber(int number, int dots, boolean leadingZeros); public void setDisplayToHexNumber(int number, int dots, boolean leadingZeros, byte[] font); public void setDisplayToError(); + public void setDisplayToString(String string, int dots, int pos); public void setDisplayToString(String string, int dots, int pos, byte[] font); public void setLED(Color color, int pos); public void setLEDs(int led); diff --git a/src/main/java/com/github/boukefalos/tm1638/implementation/Local.java b/src/main/java/com/github/boukefalos/tm1638/implementation/Local.java index 7bb9025..80dd384 100644 --- a/src/main/java/com/github/boukefalos/tm1638/implementation/Local.java +++ b/src/main/java/com/github/boukefalos/tm1638/implementation/Local.java @@ -44,6 +44,7 @@ public class Local extends AbstractTM1638 { try { outputStream.write(buffer); outputStream.flush(); + sleep(100); } catch (IOException e) { throw new ArduinoException("Failed to write to arduino"); } diff --git a/src/main/proto/tm1638.proto b/src/main/proto/tm1638.proto index 51a5fd5..b1c79da 100644 --- a/src/main/proto/tm1638.proto +++ b/src/main/proto/tm1638.proto @@ -69,22 +69,25 @@ message SetDisplayDigit { required int32 digit = 1; required int32 pos = 2; required bool dot = 3; - optional bytes font = 4; + required bool has_font = 4; + optional bytes font = 5; } message SetDisplayToNumber { - required int32 number = 1; - required bool dots = 2; - optional bytes font = 3; - optional bool leadingZeros = 4 [default = false]; - optional bool sign = 5 [default = true]; + required sint32 number = 1; + required int32 dots = 2; + required bool has_font = 3; + optional bytes font = 4; + optional bool leadingZeros = 5 [default = false]; + optional bool sign = 6 [default = true]; } message SetDisplayToString { required string string = 1; required int32 dots = 2; required int32 pos = 3; - optional bytes font = 4; + required bool has_font = 4; + optional bytes font = 5; } message SetLED { diff --git a/src/test/java/test/Test.java b/src/test/java/test/Test.java deleted file mode 100644 index 59834de..0000000 --- a/src/test/java/test/Test.java +++ /dev/null @@ -1,40 +0,0 @@ -package test; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.InputStream; -import java.lang.reflect.Method; - -import tm1638.Tm1638.Buttons; -import tm1638.Tm1638.Message; -import tm1638.Tm1638.Ping; -import tm1638.Tm1638.Pong; -import tm1638.Tm1638.Text; - -public class Test { - public static void main(String[] args) throws Exception { - Ping ping = Ping.newBuilder().setId(123).build(); - ByteArrayOutputStream output = new ByteArrayOutputStream(); - ping.writeDelimitedTo(output); - byte[] buffer = output.toByteArray(); - ByteArrayInputStream input = new ByteArrayInputStream(buffer); - Class messageClass = Message.class; - Method m = messageClass.getMethod("parseDelimitedFrom", InputStream.class); - Object object = m.invoke(null, input); - Message message = (Message) object; - switch (message.getType()) { - case PONG: - Pong pong = message.getPong(); - System.out.println(pong.getId()); - break; - case TEXT: - Text text = message.getText(); - System.out.println(text.getText()); - break; - case BUTTONS: - Buttons buttons = message.getButtons(); - System.out.println(buttons.getButtons()); - break; - } - } -} diff --git a/src/test/java/test/TestLocal.java b/src/test/java/test/TestLocal.java index 1d77562..8e04cc8 100644 --- a/src/test/java/test/TestLocal.java +++ b/src/test/java/test/TestLocal.java @@ -1,6 +1,5 @@ package test; -import tm1638.Tm1638.Color; import base.work.Listen; import com.github.boukefalos.tm1638.TM1638; @@ -15,8 +14,21 @@ public class TestLocal extends Listen { public static void main(TM1638 TM1638) throws InterruptedException { TM1638.register(new TestLocal()); TM1638.start(); - TM1638.construct(8, 9, 7); + + /*TM1638.construct(8, 9, 7); TM1638.setupDisplay(true, 1); + TM1638.setLEDs(0xff00);*/ + + // Light up all the green LEDs + TM1638.setLEDs(0x00ff); + Thread.sleep(2000); + //TM1638.setLEDs(0x0000); + + // Light up all the red LEDs + TM1638.setLEDs(0xff00); + Thread.sleep(2000); + TM1638.setLEDs(0x0000); + int i = 0; while (i < 10000) { //TM1638.setLED(i % 2 == 0 ? Color.GREEN : Color.RED, i % 8);