diff --git a/java_tools/bin2header.jar b/java_tools/bin2header.jar
new file mode 100644
index 0000000000..0820f6de29
Binary files /dev/null and b/java_tools/bin2header.jar differ
diff --git a/java_tools/bin2header/Bin2Header.iml b/java_tools/bin2header/Bin2Header.iml
new file mode 100644
index 0000000000..d5c0743275
--- /dev/null
+++ b/java_tools/bin2header/Bin2Header.iml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/java_tools/bin2header/build.xml b/java_tools/bin2header/build.xml
new file mode 100644
index 0000000000..bbb45c0cab
--- /dev/null
+++ b/java_tools/bin2header/build.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/java_tools/bin2header/src/rusefi/Bin2Header.java b/java_tools/bin2header/src/rusefi/Bin2Header.java
new file mode 100644
index 0000000000..fbe789fca9
--- /dev/null
+++ b/java_tools/bin2header/src/rusefi/Bin2Header.java
@@ -0,0 +1,64 @@
+package rusefi;
+
+import java.io.*;
+import java.nio.file.*;
+import java.util.Date;
+
+public class Bin2Header {
+ private static final String NL = "\n";//System.getProperty("line.separator");
+ private final static char[] hexChars = "0123456789abcdef".toCharArray();
+
+ private Bin2Header() {
+ }
+
+ public static void main(String[] args) throws IOException {
+ if (args.length < 3) {
+ System.out.println("This tool converts a binary file to C/C++ header file");
+ System.out.println("usage:");
+ System.out.println("Bin2Header in_file.bin out_file.h arrayVariableDecl");
+ return;
+ }
+
+ String binFile = args[0];
+ String hFile = args[1];
+ String arrayVariableDecl = args[2];
+
+ System.out.println("Converting " + binFile + " into " + hFile);
+
+ // This will reference one line at a time
+ String line = null;
+
+
+ BufferedWriter bw = new BufferedWriter(new FileWriter(hFile));
+ Path path = Paths.get(binFile);
+ byte[] data = Files.readAllBytes(path);
+
+ String headerTag = hFile;
+ int pos = headerTag.lastIndexOf("/");
+ if (pos >= 0)
+ headerTag = headerTag.substring(pos + 1);
+ headerTag = headerTag.toUpperCase().replace(".", "_") + "_";
+
+ bw.write("// This file was generated by Bin2Header" + NL);
+ bw.write("// " + new Date() + NL);
+ bw.write("#ifndef " + headerTag + NL);
+ bw.write("#define " + headerTag + NL + NL);
+
+ bw.write(arrayVariableDecl + " = {");
+
+ for (int i = 0; i < data.length; i++) {
+ if ((i & 0xf) == 0)
+ bw.write(NL + "\t");
+ int b = data[i] & 0xFF;
+ bw.write("0x");
+ bw.write(hexChars[b >>> 4]);
+ bw.write(hexChars[b & 0xf]);
+ bw.write(", ");
+ }
+
+ bw.write(NL + "};" + NL + NL);
+ bw.write("#endif /* " + headerTag + " */" + NL + NL);
+ bw.close();
+ }
+
+}