Wilfried Klaas 6 лет назад
Родитель
Сommit
5f045c2293

+ 2 - 0
.gitignore

@@ -11,3 +11,5 @@ dependency-reduced-pom\.xml
 \.settings/
 \.settings/
 
 
 examples/Blink\.txt
 examples/Blink\.txt
+
+programData\.txt

+ 117 - 58
src/main/java/de/mcs/tools/midicontroller/ConvertJsonData2Hex.java

@@ -26,15 +26,14 @@ import java.io.BufferedOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.FileOutputStream;
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStream;
 import java.io.UnsupportedEncodingException;
 import java.io.UnsupportedEncodingException;
 
 
-import com.fasterxml.jackson.core.JsonParseException;
-import com.fasterxml.jackson.databind.JsonMappingException;
-
+import de.mcs.tools.midicontroller.data.ButtonData;
+import de.mcs.tools.midicontroller.data.EventData;
 import de.mcs.tools.midicontroller.data.ProgramData;
 import de.mcs.tools.midicontroller.data.ProgramData;
 import de.mcs.tools.sps.utils.IntelHex;
 import de.mcs.tools.sps.utils.IntelHex;
+import de.mcs.utils.Files;
 import de.mcs.utils.JacksonUtils;
 import de.mcs.utils.JacksonUtils;
 
 
 /**
 /**
@@ -43,65 +42,125 @@ import de.mcs.utils.JacksonUtils;
  */
  */
 public class ConvertJsonData2Hex {
 public class ConvertJsonData2Hex {
 
 
-	/**
-	 * @param args
-	 * @throws IOException
-	 * @throws JsonMappingException
-	 * @throws JsonParseException
-	 */
-	public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
-		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));
+
+        out.write(name);
+
+        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 = 0xE0;
+              break;
+            case BUTTON:
+              eventTyp = 0x20 * (eventData.getValue() + 1);
+              break;
+            default:
+              break;
+            }
+            eventTyp = eventTyp | eventData.getEvent().ordinal();
+            data[0] = (byte) (eventTyp & 0xFF);
+          }
+          out.write(data);
+        }
 
 
-		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(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(name);
+      System.out.printf("The file has %d bytes.\r\n", outBytes.length);
 
 
-				out.write((byte) programData.getPrgNumber());
+      File dest = new File("programData.hex");
+      try (BufferedOutputStream output = new BufferedOutputStream(new FileOutputStream(dest))) {
+        IntelHex intelHex = new IntelHex();
+        intelHex.writeHexStream(output, outBytes);
+      }
+    }
 
 
-				for (int i = 0; i < 3; i++) {
-					byte[] button = getEmptyByteArray(8);
-					if ((programData.getButtons() != null) && (i < programData.getButtons().length)) {
-						button = copyInto(button, getStringAsByte(programData.getButtons()[i].getName(), 8));
-					}
-					out.write(button);
-				}
-				out.write(0xFF);
-			}
-			out.close();
-			byte[] outBytes = out.toByteArray();
-			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);
-			}
-		}
-	}
+  }
 
 
-	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;
+  }
 }
 }

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

@@ -27,31 +27,31 @@ package de.mcs.tools.midicontroller.data;
  *
  *
  */
  */
 public class ButtonData {
 public class ButtonData {
-	enum TYPE {
-		SWITCH, MOMENTARY
-	}
+  public enum TYPE {
+    SWITCH, MOMENTARY
+  }
 
 
-	private String name;
-	private TYPE type;
+  private String name;
+  private TYPE type;
 
 
-	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());
+  }
 }
 }

+ 39 - 38
src/main/java/de/mcs/tools/midicontroller/data/EventData.java

@@ -29,56 +29,57 @@ import java.util.Arrays;
  *
  *
  */
  */
 public class EventData {
 public class EventData {
-	enum EVENTTYPE {
-		INTERNAL, BUTTON, EXPRESSION
-	};
+  public enum EVENTTYPE {
+    INTERNAL, BUTTON, EXPRESSION
+  };
 
 
-	enum EVENT {
-		START, STOP, PUSH, RELEASE, CLICK, DOUBLECLICK, LONGCLICK, VALUECHANGE, CC
-	}
+  public enum EVENT {
+    START, STOP, PUSH, RELEASE, CLICK, DOUBLECLICK, LONGCLICK, VALUECHANGE, CC
+  }
 
 
-	private EVENTTYPE type;
+  private EVENTTYPE type;
 
 
-	private EVENT event;
+  private EVENT event;
 
 
-	private int value;
+  private int value;
 
 
-	private DataData[] datas;
+  private DataData[] datas;
 
 
-	@Override
-	public String toString() {
-		return String.format("Event[ type: %s, event: %s, value: %d, datas: %s]", type.name(), event.name(), value, Arrays.toString(datas));
-	}
+  @Override
+  public String toString() {
+    return String.format("Event[ type: %s, event: %s, value: %d, datas: %s]", type.name(), event.name(), value,
+        Arrays.toString(datas));
+  }
 
 
-	public EVENTTYPE getType() {
-		return type;
-	}
+  public EVENTTYPE getType() {
+    return type;
+  }
 
 
-	public void setType(EVENTTYPE type) {
-		this.type = type;
-	}
+  public void setType(EVENTTYPE type) {
+    this.type = type;
+  }
 
 
-	public EVENT getEvent() {
-		return event;
-	}
+  public EVENT getEvent() {
+    return event;
+  }
 
 
-	public void setEvent(EVENT event) {
-		this.event = event;
-	}
+  public void setEvent(EVENT event) {
+    this.event = event;
+  }
 
 
-	public DataData[] getDatas() {
-		return datas;
-	}
+  public DataData[] getDatas() {
+    return datas;
+  }
 
 
-	public void setDatas(DataData[] datas) {
-		this.datas = datas;
-	}
+  public void setDatas(DataData[] datas) {
+    this.datas = datas;
+  }
 
 
-	public int getValue() {
-		return value;
-	}
+  public int getValue() {
+    return value;
+  }
 
 
-	public void setValue(int value) {
-		this.value = value;
-	}
+  public void setValue(int value) {
+    this.value = value;
+  }
 }
 }

+ 63 - 32
src/main/java/de/mcs/tools/midicontroller/data/ProgramData.java

@@ -29,45 +29,76 @@ import java.util.Arrays;
  *
  *
  */
  */
 public class ProgramData {
 public class ProgramData {
-	private String name;
-	private int prgNumber;
-	private ButtonData[] buttons;
-	private EventData[] events;
+  private String name;
+  private int prgNumber;
+  private int internalMidi;
+  private int externalMidi;
+  private ButtonData[] buttons;
+  private EventData[] events;
 
 
-	@Override
-	public String toString() {
-		return String.format("PRG[name: %s, prgNumber: %d, buttons: %s, events: %s]", name, prgNumber, Arrays.toString(buttons), Arrays.toString(events));
-	}
+  @Override
+  public String toString() {
+    return String.format("PRG[name: %s, prgNumber: %d, buttons: %s, events: %s]", name, prgNumber,
+        Arrays.toString(buttons), Arrays.toString(events));
+  }
 
 
-	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 int getPrgNumber() {
-		return prgNumber;
-	}
+  public int getPrgNumber() {
+    return prgNumber;
+  }
 
 
-	public void setPrgNumber(int prgNumber) {
-		this.prgNumber = prgNumber;
-	}
+  public void setPrgNumber(int prgNumber) {
+    this.prgNumber = prgNumber;
+  }
 
 
-	public ButtonData[] getButtons() {
-		return buttons;
-	}
+  public ButtonData[] getButtons() {
+    return buttons;
+  }
 
 
-	public void setButtons(ButtonData[] buttons) {
-		this.buttons = buttons;
-	}
+  public void setButtons(ButtonData[] buttons) {
+    this.buttons = buttons;
+  }
 
 
-	public EventData[] getEvents() {
-		return events;
-	}
+  public EventData[] getEvents() {
+    return events;
+  }
 
 
-	public void setEvents(EventData[] events) {
-		this.events = events;
-	}
+  public void setEvents(EventData[] events) {
+    this.events = events;
+  }
+
+  /**
+   * @return the internalMidi
+   */
+  public int getInternalMidi() {
+    return internalMidi;
+  }
+
+  /**
+   * @param internalMidi the internalMidi to set
+   */
+  public void setInternalMidi(int internalMidi) {
+    this.internalMidi = internalMidi;
+  }
+
+  /**
+   * @return the externalMidi
+   */
+  public int getExternalMidi() {
+    return externalMidi;
+  }
+
+  /**
+   * @param externalMidi the externalMidi to set
+   */
+  public void setExternalMidi(int externalMidi) {
+    this.externalMidi = externalMidi;
+  }
 }
 }

+ 32 - 0
src/main/resources/programdata.json

@@ -1,6 +1,8 @@
 [{
 [{
 		"name": "Rock",
 		"name": "Rock",
 		"prgNumber": 100,
 		"prgNumber": 100,
+		"internalMidi" : 0,
+		"externalMidi" : 1,
 		"buttons": [{
 		"buttons": [{
 				"name": "EQ0",
 				"name": "EQ0",
 				"type": "SWITCH"
 				"type": "SWITCH"
@@ -54,11 +56,39 @@
                         "data2" : 0
                         "data2" : 0
 					}
 					}
 				]
 				]
+			},{
+				"type": "BUTTON",
+                "value": 2,
+				"event": "PUSH",
+				"datas": [{
+						"channel": "EXTERNAL",
+						"type": "CC",
+						"data1": 9,
+                        "data2" : 127
+					},{
+						"channel": "EXTERNAL",
+						"type": "CC",
+						"data1": 10,
+                        "data2" : 0
+					}
+				]
+			},{
+				"type": "EXPRESSION",
+				"event": "VALUECHANGE",
+				"datas": [{
+						"channel": "EXTERNAL",
+						"type": "CC",
+						"data1": 30,
+                        "data2" : 127
+					}
+				]
 			}
 			}
 		]
 		]
 	}, {
 	}, {
 		"name": "Pop",
 		"name": "Pop",
 		"prgNumber": 0,
 		"prgNumber": 0,
+		"internalMidi" : 0,
+		"externalMidi" : 1,
 		"buttons": [{
 		"buttons": [{
 				"name": "EQ0",
 				"name": "EQ0",
 				"type": "SWITCH"
 				"type": "SWITCH"
@@ -73,6 +103,8 @@
 	}, {
 	}, {
 		"name": "Soul",
 		"name": "Soul",
 		"prgNumber": -1,
 		"prgNumber": -1,
+		"internalMidi" : 0,
+		"externalMidi" : 1,
 		"buttons": [{
 		"buttons": [{
 				"name": "EQ0",
 				"name": "EQ0",
 				"type": "MOMENTARY"
 				"type": "MOMENTARY"