Prechádzať zdrojové kódy

Buttondata adding color.

Willie 6 rokov pred
rodič
commit
a3cade154a

+ 139 - 136
src/main/java/de/mcs/tools/midicontroller/ConvertJsonData2Hex.java

@@ -43,151 +43,154 @@ import de.mcs.utils.JacksonUtils;
  */
 public class ConvertJsonData2Hex {
 
-  /**
-   * @param args
-   * @throws Exception
-   */
-  public static void main(String[] args) throws Exception {
-    InputStream source = ClassLoader.getSystemResourceAsStream("programdata.json");
-    ProgramData[] programDatas = JacksonUtils.getJsonMapper().readValue(source, ProgramData[].class);
+	/**
+	 * @param args
+	 * @throws Exception
+	 */
+	public static void main(String[] args) throws Exception {
+		InputStream source = ClassLoader.getSystemResourceAsStream("programdata.json");
+		ProgramData[] programDatas = JacksonUtils.getJsonMapper().readValue(source, ProgramData[].class);
 
-    try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
-      for (ProgramData programData : programDatas) {
-        System.out.println(programData.toString());
-        byte[] name = copyInto(getEmptyByteArray(12), getStringAsByte(programData.getName(), 12));
+		try (ByteArrayOutputStream out = new ByteArrayOutputStream()) {
+			for (ProgramData programData : programDatas) {
+				System.out.println(programData.toString());
+				byte[] name = copyInto(getEmptyByteArray(12), getStringAsByte(programData.getName(), 12));
 
-        out.write(name);
+				out.write(name);
 
-        out.write((byte) programData.getPrgNumber());
-        out.write((byte) programData.getInternalMidi());
-        out.write((byte) programData.getExternalMidi());
+				out.write((byte) programData.getPrgNumber());
+				out.write((byte) programData.getInternalMidi());
+				out.write((byte) programData.getExternalMidi());
 
-        byte switchSettings = 0x00;
-        if ((programData.getButtons() != null) && (programData.getButtons().length > 2)) {
-          for (int i = 0; i < programData.getButtons().length; i++) {
-            byte[] buttonName = getEmptyByteArray(8);
-            ButtonData buttonData = programData.getButtons()[i];
-            if (i < 3) {
-              buttonName = copyInto(buttonName, getStringAsByte(buttonData.getName(), 8));
-              out.write(buttonName);
-            }
-            if (ButtonData.TYPE.SWITCH.equals(buttonData.getType())) {
-              switchSettings = (byte) (switchSettings | (0x01 << i));
-            }
-          }
-        } else {
-          throw new Exception("buttons not correct configured.");
-        }
-        out.write(switchSettings);
-        for (int i = 0; i < 15; i++) {
-          byte[] data = getEmptyByteArray(33);
-          if ((programData.getEvents() != null) && (programData.getEvents().length > i)) {
-            int eventTyp = 0;
-            EventData eventData = programData.getEvents()[i];
-            switch (eventData.getType()) {
-            case INTERNAL:
-              eventTyp = 0;
-              break;
-            case EXPRESSION:
-              eventTyp = 0x70;
-              break;
-            case BUTTON:
-              eventTyp = 0x10 * (eventData.getValue() + 1);
-              break;
-            default:
-              break;
-            }
-            eventTyp = eventTyp | eventData.getEvent().ordinal();
-            data[0] = (byte) (eventTyp & 0xFF);
-            DataData[] datas = eventData.getDatas();
-            int pos = 1;
-            for (DataData dataData : datas) {
-              data[pos++] = dataData.getType().getByte();
-              if ((pos + 1) < data.length) { // mindestens 2 noch platz
-                switch (dataData.getType()) {
-                case CC:
-                case NOTE_OFF:
-                case NOTE_ON:
-                  data[pos++] = (byte) dataData.getData1();
-                  data[pos++] = (byte) dataData.getData2();
-                  break;
-                case ALL_NOTE_OFF:
-                  data[pos++] = 0x78;
-                  data[pos++] = 0x00;
-                  break;
-                case PC:
-                  data[pos++] = (byte) dataData.getData1();
-                  break;
-                default:
-                  break;
-                }
-              } else {
-                throw new Exception("not enough memory.");
-              }
-            }
-          }
-          out.write(data);
-        }
+				byte switchSettings = 0x00;
+				if ((programData.getButtons() != null) && (programData.getButtons().length > 2)) {
+					for (int i = 0; i < programData.getButtons().length; i++) {
+						byte[] buttonName = getEmptyByteArray(8);
+						ButtonData buttonData = programData.getButtons()[i];
+						if (i < 3) {
+							buttonName = copyInto(buttonName, getStringAsByte(buttonData.getName(), 8));
+							out.write(buttonName);
+							out.write((byte) buttonData.getColor());
+						}
+						if (ButtonData.TYPE.SWITCH.equals(buttonData.getType())) {
+							switchSettings = (byte) (switchSettings | (0x01 << i));
+						}
+					}
+				} else {
+					throw new Exception("buttons not correct configured.");
+				}
+				out.write(switchSettings);
+				for (int i = 0; i < 15; i++) {
+					byte[] data = getEmptyByteArray(33);
+					if ((programData.getEvents() != null) && (programData.getEvents().length > i)) {
+						int eventTyp = 0;
+						EventData eventData = programData.getEvents()[i];
+						switch (eventData.getType()) {
+						case INTERNAL:
+							eventTyp = 0;
+							break;
+						case EXPRESSION:
+							eventTyp = 0x70;
+							break;
+						case BUTTON:
+							eventTyp = 0x10 * (eventData.getValue() + 1);
+							break;
+						default:
+							break;
+						}
+						eventTyp = eventTyp | eventData.getEvent().ordinal();
+						data[0] = (byte) (eventTyp & 0xFF);
+						DataData[] datas = eventData.getDatas();
+						int pos = 1;
+						for (DataData dataData : datas) {
+							data[pos++] = dataData.getType().getByte();
+							if ((pos + 1) < data.length) { // mindestens 2 noch
+															// platz
+								switch (dataData.getType()) {
+								case CC:
+								case NOTE_OFF:
+								case NOTE_ON:
+									data[pos++] = (byte) dataData.getData1();
+									data[pos++] = (byte) dataData.getData2();
+									break;
+								case ALL_NOTE_OFF:
+									data[pos++] = 0x78;
+									data[pos++] = 0x00;
+									break;
+								case PC:
+									data[pos++] = (byte) dataData.getData1();
+									break;
+								default:
+									break;
+								}
+							} else {
+								throw new Exception("not enough memory.");
+							}
+						}
+					}
+					out.write(data);
+				}
 
-        out.write(0xFF);
-      }
-      out.close();
-      byte[] outBytes = out.toByteArray();
-      StringBuilder b1 = new StringBuilder();
-      StringBuilder b2 = new StringBuilder();
-      StringBuilder b3 = new StringBuilder();
-      for (int i = 0; i < outBytes.length; i++) {
-        byte myByte = outBytes[i];
-        if ((myByte & 0xFF) == 0xFF) {
-          b1.append(String.format("    ", (char) myByte));
-        } else {
-          b1.append(String.format("  %1s ", (char) myByte));
-        }
-        b2.append(String.format(" %2x,", myByte));
-        if (((i + 1) % 8) == 0) {
-          b3.append(b1.toString());
-          b3.append("\r\n");
-          b3.append(b2.toString());
-          b3.append("\r\n");
-          b1 = new StringBuilder();
-          b2 = new StringBuilder();
-        }
-      }
-      System.out.println(b3.toString());
-      File text = new File("programData.txt");
-      Files.writeStringToFile(text, b3.toString());
+				out.write(0xFF);
+				System.out.println(String.format("actual size: %d", out.size()));
+			}
+			out.close();
+			byte[] outBytes = out.toByteArray();
+			StringBuilder b1 = new StringBuilder();
+			StringBuilder b2 = new StringBuilder();
+			StringBuilder b3 = new StringBuilder();
+			for (int i = 0; i < outBytes.length; i++) {
+				byte myByte = outBytes[i];
+				if ((myByte & 0xFF) == 0xFF) {
+					b1.append(String.format("    ", (char) myByte));
+				} else {
+					b1.append(String.format("  %1s ", (char) myByte));
+				}
+				b2.append(String.format(" %2x,", myByte));
+				if (((i + 1) % 8) == 0) {
+					b3.append(b1.toString());
+					b3.append("\r\n");
+					b3.append(b2.toString());
+					b3.append("\r\n");
+					b1 = new StringBuilder();
+					b2 = new StringBuilder();
+				}
+			}
+			System.out.println(b3.toString());
+			File text = new File("programData.txt");
+			Files.writeStringToFile(text, b3.toString());
 
-      System.out.printf("The file has %d bytes.\r\n", outBytes.length);
+			System.out.printf("The file has %d bytes.\r\n", outBytes.length);
 
-      File dest = new File("programData.hex");
-      try (BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(dest))) {
-        IntelHex intelHex = new IntelHex();
-        intelHex.writeHexStream(output, outBytes);
-      }
-    }
+			File dest = new File("programData.hex");
+			try (BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(dest))) {
+				IntelHex intelHex = new IntelHex();
+				intelHex.writeHexStream(output, outBytes);
+			}
+		}
 
-  }
+	}
 
-  private static byte[] getStringAsByte(String value, int count) throws UnsupportedEncodingException {
-    String newValue = value;
-    if (newValue.length() > count) {
-      newValue = newValue.substring(0, count);
-    }
-    return newValue.getBytes("US-ASCII");
-  }
+	private static byte[] getStringAsByte(String value, int count) throws UnsupportedEncodingException {
+		String newValue = value;
+		if (newValue.length() > count) {
+			newValue = newValue.substring(0, count);
+		}
+		return newValue.getBytes("US-ASCII");
+	}
 
-  private static byte[] getEmptyByteArray(int count) {
-    byte[] value = new byte[count];
-    for (int i = 0; i < value.length; i++) {
-      value[i] = 0;
-    }
-    return value;
-  }
+	private static byte[] getEmptyByteArray(int count) {
+		byte[] value = new byte[count];
+		for (int i = 0; i < value.length; i++) {
+			value[i] = 0;
+		}
+		return value;
+	}
 
-  private static byte[] copyInto(byte[] dest, byte[] source) {
-    for (int i = 0; i < source.length; i++) {
-      dest[i] = source[i];
-    }
-    return dest;
-  }
+	private static byte[] copyInto(byte[] dest, byte[] source) {
+		for (int i = 0; i < source.length; i++) {
+			dest[i] = source[i];
+		}
+		return dest;
+	}
 }

+ 30 - 21
src/main/java/de/mcs/tools/midicontroller/data/ButtonData.java

@@ -27,31 +27,40 @@ package de.mcs.tools.midicontroller.data;
  *
  */
 public class ButtonData {
-  public enum TYPE {
-    SWITCH, MOMENTARY
-  }
+	public enum TYPE {
+		SWITCH, MOMENTARY
+	}
 
-  private String name;
-  private TYPE type;
+	private String name;
+	private TYPE type;
+	private int color;
 
-  public String getName() {
-    return name;
-  }
+	public String getName() {
+		return name;
+	}
 
-  public void setName(String name) {
-    this.name = name;
-  }
+	public void setName(String name) {
+		this.name = name;
+	}
 
-  public TYPE getType() {
-    return type;
-  }
+	public TYPE getType() {
+		return type;
+	}
 
-  public void setType(TYPE type) {
-    this.type = type;
-  }
+	public void setType(TYPE type) {
+		this.type = type;
+	}
 
-  @Override
-  public String toString() {
-    return String.format("Button[name: %s, type: %s]", name, type.name());
-  }
+	@Override
+	public String toString() {
+		return String.format("Button[name: %s, type: %s]", name, type.name());
+	}
+
+	public int getColor() {
+		return color;
+	}
+
+	public void setColor(int color) {
+		this.color = color;
+	}
 }

+ 24 - 15
src/main/resources/programdata.json

@@ -7,15 +7,18 @@
 		"buttons": [
 			{
 				"name": "EQ0",
-				"type": "SWITCH"
+				"type": "SWITCH",
+				"color": 195
 			},
 			{
 				"name": "Drv0",
-				"type": "SWITCH"
+				"type": "SWITCH",
+				"color": 204
 			},
 			{
 				"name": "Chr0",
-				"type": "MOMENTARY"
+				"type": "MOMENTARY",
+				"color": 240
 			},
 			{
 				"type": "SWITCH"
@@ -133,16 +136,19 @@
 		"externalMidi": 1,
 		"buttons": [
 			{
-				"name": "EQ0",
-				"type": "SWITCH"
+				"name": "EQ1",
+				"type": "SWITCH",
+				"color": 240
 			},
 			{
-				"name": "Drv0",
-				"type": "MOMENTARY"
+				"name": "Drv1",
+				"type": "MOMENTARY",
+				"color": 195
 			},
 			{
-				"name": "Chr0",
-				"type": "SWITCH"
+				"name": "Chr1",
+				"type": "SWITCH",
+				"color": 204
 			}
 		]
 	},
@@ -153,16 +159,19 @@
 		"externalMidi": 1,
 		"buttons": [
 			{
-				"name": "EQ0",
-				"type": "MOMENTARY"
+				"name": "EQ2",
+				"type": "MOMENTARY",
+				"color": 204
 			},
 			{
-				"name": "Drv0",
-				"type": "SWITCH"
+				"name": "Drv2",
+				"type": "SWITCH",
+				"color": 240
 			},
 			{
-				"name": "Chr0",
-				"type": "SWITCH"
+				"name": "Chr2",
+				"type": "SWITCH",
+				"color": 195
 			}
 		]
 	}