Near complete implementation, untested

This commit is contained in:
2015-07-16 22:37:59 +01:00
parent 676ac1748f
commit 0f33f2a429
6 changed files with 138 additions and 61 deletions

View File

@@ -4,6 +4,7 @@ import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import tm1638.Tm1638.Buttons; import tm1638.Tm1638.Buttons;
import tm1638.Tm1638.ClearDisplayDigit;
import tm1638.Tm1638.Color; import tm1638.Tm1638.Color;
import tm1638.Tm1638.Command; import tm1638.Tm1638.Command;
import tm1638.Tm1638.Command.Type; import tm1638.Tm1638.Command.Type;
@@ -11,15 +12,20 @@ import tm1638.Tm1638.Construct;
import tm1638.Tm1638.Message; import tm1638.Tm1638.Message;
import tm1638.Tm1638.Ping; import tm1638.Tm1638.Ping;
import tm1638.Tm1638.Pong; 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.SetLED;
import tm1638.Tm1638.SetLEDs;
import tm1638.Tm1638.SetupDisplay; import tm1638.Tm1638.SetupDisplay;
import tm1638.Tm1638.Text; import tm1638.Tm1638.Text;
import base.work.Listen;
import com.github.boukefalos.arduino.AbstractArduino; 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) { public void input(Message message) {
System.out.println(message); System.out.println(message);
switch (message.getType()) { switch (message.getType()) {
@@ -68,30 +74,125 @@ public class AbstractTM1638 extends AbstractArduino implements TM1638 {
} }
public void clearDisplay() { public void clearDisplay() {
command(Command.newBuilder()
.setType(Type.CLEAR_DISPLAY).build());
} }
public void clearDisplayDigit(int pos, boolean dot) { 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) { 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) { 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) { 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) { 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) { 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() { 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) { 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) { public void setLED(Color color, int pos) {
@@ -104,6 +205,11 @@ public class AbstractTM1638 extends AbstractArduino implements TM1638 {
} }
public void setLEDs(int led) { 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) { public void setupDisplay(boolean active, int intensity) {
@@ -114,13 +220,4 @@ public class AbstractTM1638 extends AbstractArduino implements TM1638 {
.setActive(active) .setActive(active)
.setIntensity(intensity).build()).build()); .setIntensity(intensity).build()).build());
} }
public void register(Listen<Object> listen) {
}
public void remove(Listen<Object> listen) {
}
public void send(byte[] buffer) throws ArduinoException {
}
} }

View File

@@ -10,11 +10,15 @@ public interface TM1638 extends Arduino {
public void clearDisplay(); public void clearDisplay();
public void clearDisplayDigit(int pos, boolean dot); public void clearDisplayDigit(int pos, boolean dot);
public void setDisplay(byte[] values); 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 setDisplayDigit(int digit, int pos, boolean dot, byte[] font);
public void setDisplayToBinNumber(int number, int dots, 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 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 setDisplayToHexNumber(int number, int dots, boolean leadingZeros, byte[] font);
public void setDisplayToError(); 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 setDisplayToString(String string, int dots, int pos, byte[] font);
public void setLED(Color color, int pos); public void setLED(Color color, int pos);
public void setLEDs(int led); public void setLEDs(int led);

View File

@@ -44,6 +44,7 @@ public class Local extends AbstractTM1638 {
try { try {
outputStream.write(buffer); outputStream.write(buffer);
outputStream.flush(); outputStream.flush();
sleep(100);
} catch (IOException e) { } catch (IOException e) {
throw new ArduinoException("Failed to write to arduino"); throw new ArduinoException("Failed to write to arduino");
} }

View File

@@ -69,22 +69,25 @@ message SetDisplayDigit {
required int32 digit = 1; required int32 digit = 1;
required int32 pos = 2; required int32 pos = 2;
required bool dot = 3; required bool dot = 3;
optional bytes font = 4; required bool has_font = 4;
optional bytes font = 5;
} }
message SetDisplayToNumber { message SetDisplayToNumber {
required int32 number = 1; required sint32 number = 1;
required bool dots = 2; required int32 dots = 2;
optional bytes font = 3; required bool has_font = 3;
optional bool leadingZeros = 4 [default = false]; optional bytes font = 4;
optional bool sign = 5 [default = true]; optional bool leadingZeros = 5 [default = false];
optional bool sign = 6 [default = true];
} }
message SetDisplayToString { message SetDisplayToString {
required string string = 1; required string string = 1;
required int32 dots = 2; required int32 dots = 2;
required int32 pos = 3; required int32 pos = 3;
optional bytes font = 4; required bool has_font = 4;
optional bytes font = 5;
} }
message SetLED { message SetLED {

View File

@@ -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;
}
}
}

View File

@@ -1,6 +1,5 @@
package test; package test;
import tm1638.Tm1638.Color;
import base.work.Listen; import base.work.Listen;
import com.github.boukefalos.tm1638.TM1638; import com.github.boukefalos.tm1638.TM1638;
@@ -15,8 +14,21 @@ public class TestLocal extends Listen<Object> {
public static void main(TM1638 TM1638) throws InterruptedException { public static void main(TM1638 TM1638) throws InterruptedException {
TM1638.register(new TestLocal()); TM1638.register(new TestLocal());
TM1638.start(); TM1638.start();
TM1638.construct(8, 9, 7);
/*TM1638.construct(8, 9, 7);
TM1638.setupDisplay(true, 1); 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; int i = 0;
while (i < 10000) { while (i < 10000) {
//TM1638.setLED(i % 2 == 0 ? Color.GREEN : Color.RED, i % 8); //TM1638.setLED(i % 2 == 0 ? Color.GREEN : Color.RED, i % 8);