find_cygwin . -type f -print0 | xargs -0 dos2unix

for java_console
This commit is contained in:
rusefi 2017-03-24 13:19:25 -04:00
parent a204e05ae5
commit 5785677582
11 changed files with 2322 additions and 2322 deletions

View File

@ -1,24 +1,24 @@
package com.rusefi.io;
/**
* @author Andrey Belomutskiy
* 3/1/2017
*/
public interface ConnectionStateListener {
ConnectionStateListener VOID = new ConnectionStateListener() {
@Override
public void onConnectionEstablished() {
}
@Override
public void onConnectionFailed() {
}
};
/**
* This method is invoked once we have connection & configuration from controller
*/
void onConnectionEstablished();
void onConnectionFailed();
}
package com.rusefi.io;
/**
* @author Andrey Belomutskiy
* 3/1/2017
*/
public interface ConnectionStateListener {
ConnectionStateListener VOID = new ConnectionStateListener() {
@Override
public void onConnectionEstablished() {
}
@Override
public void onConnectionFailed() {
}
};
/**
* This method is invoked once we have connection & configuration from controller
*/
void onConnectionEstablished();
void onConnectionFailed();
}

File diff suppressed because it is too large Load Diff

View File

@ -1,33 +1,33 @@
package com.opensr5;
import com.opensr5.io.IniFileMetaInfo;
import com.opensr5.io.IniFileReader;
import com.opensr5.io.RawIniFile;
import java.io.File;
public class Main {
public static void main(String[] args) {
System.out.println("OpenSR5 - load/program tune via serial port utility");
System.out.println(" (c) 2017 Andrey Belomutskiy");
System.out.println(" https://github.com/rusefi/opensr5_flash");
System.out.flush();
if (args.length < 1) {
System.err.println("Usage:");
System.err.println("opensr5 DEFINITION_FILE.INI");
System.exit(-1);
}
String projectIniFileName = args[0];
RawIniFile content = IniFileReader.read(new File(projectIniFileName));
IniFileMetaInfo meta = new IniFileMetaInfo(content);
System.out.println("nPages = " + meta.getnPages());
System.out.println("blockingFactor = " + meta.getBlockingFactor());
}
}
package com.opensr5;
import com.opensr5.io.IniFileMetaInfo;
import com.opensr5.io.IniFileReader;
import com.opensr5.io.RawIniFile;
import java.io.File;
public class Main {
public static void main(String[] args) {
System.out.println("OpenSR5 - load/program tune via serial port utility");
System.out.println(" (c) 2017 Andrey Belomutskiy");
System.out.println(" https://github.com/rusefi/opensr5_flash");
System.out.flush();
if (args.length < 1) {
System.err.println("Usage:");
System.err.println("opensr5 DEFINITION_FILE.INI");
System.exit(-1);
}
String projectIniFileName = args[0];
RawIniFile content = IniFileReader.read(new File(projectIniFileName));
IniFileMetaInfo meta = new IniFileMetaInfo(content);
System.out.println("nPages = " + meta.getnPages());
System.out.println("blockingFactor = " + meta.getBlockingFactor());
}
}

View File

@ -1,8 +1,8 @@
package com.opensr5.io;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class BasicBinaryProtocol {
}
package com.opensr5.io;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class BasicBinaryProtocol {
}

View File

@ -1,69 +1,69 @@
package com.opensr5.io;
import java.util.ArrayList;
import java.util.List;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class IniFileMetaInfo {
public static final int DEFAULT_BLOCKING_FACTOR = 16000;
private final int nPages;
private final String signature;
private final List<String> pageReadCommands;
private int totalSize;
private final List<Integer> pageSizes = new ArrayList<>();
/**
* read maximum chunk size
*/
private final int blockingFactor; // todo: this is probably an optional propery, come up with some default
public IniFileMetaInfo(RawIniFile file) {
nPages = file.getSimpleIntegerProperty("nPages");
blockingFactor = file.getSimpleIntegerProperty("blockingFactor", DEFAULT_BLOCKING_FACTOR);
signature = file.getValues("signature").get(0);
List<String> individualPageSizes = file.getValues("pageSize");
if (individualPageSizes.size() != nPages)
throw new IllegalStateException("Unexpected individual sizes: " + individualPageSizes);
for (String value : individualPageSizes) {
int size = Integer.parseInt(value);
pageSizes.add(size);
totalSize += size;
}
pageReadCommands = file.getValues("pageReadCommand");
}
public int getnPages() {
return nPages;
}
public int getBlockingFactor() {
return blockingFactor;
}
public int getTotalSize() {
return totalSize;
}
public String getSignature() {
return signature;
}
public String getPageReadCommand(int pageIndex) {
return pageReadCommands.get(pageIndex);
}
public int getPageSize(int pageIndex) {
return pageSizes.get(pageIndex);
}
}
package com.opensr5.io;
import java.util.ArrayList;
import java.util.List;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class IniFileMetaInfo {
public static final int DEFAULT_BLOCKING_FACTOR = 16000;
private final int nPages;
private final String signature;
private final List<String> pageReadCommands;
private int totalSize;
private final List<Integer> pageSizes = new ArrayList<>();
/**
* read maximum chunk size
*/
private final int blockingFactor; // todo: this is probably an optional propery, come up with some default
public IniFileMetaInfo(RawIniFile file) {
nPages = file.getSimpleIntegerProperty("nPages");
blockingFactor = file.getSimpleIntegerProperty("blockingFactor", DEFAULT_BLOCKING_FACTOR);
signature = file.getValues("signature").get(0);
List<String> individualPageSizes = file.getValues("pageSize");
if (individualPageSizes.size() != nPages)
throw new IllegalStateException("Unexpected individual sizes: " + individualPageSizes);
for (String value : individualPageSizes) {
int size = Integer.parseInt(value);
pageSizes.add(size);
totalSize += size;
}
pageReadCommands = file.getValues("pageReadCommand");
}
public int getnPages() {
return nPages;
}
public int getBlockingFactor() {
return blockingFactor;
}
public int getTotalSize() {
return totalSize;
}
public String getSignature() {
return signature;
}
public String getPageReadCommand(int pageIndex) {
return pageReadCommands.get(pageIndex);
}
public int getPageSize(int pageIndex) {
return pageSizes.get(pageIndex);
}
}

View File

@ -1,84 +1,84 @@
package com.opensr5.io;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class IniFileReader {
private IniFileReader() {
}
/**
* <pre>
* This method reads
* x = y, "Z"
* lines returning
* {x, y, "Z"}
* array of Strings
*
* equals sign, space, tab and commas are all equally considered not parts of the token, quotes are supportd
*
* Technically a line like
* x, y = z
* is also supported and would produce same valid output
*
* </pre>
*/
public static String[] splitTokens(String str) {
ArrayList<String> strings = new ArrayList<>();
boolean inQuote = false;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '\"' || isTokenSeparator(c) && !inQuote) {
if (c == '\"')
inQuote = !inQuote;
if (!inQuote && sb.length() > 0) {
strings.add(sb.toString());
sb.delete(0, sb.length());
}
} else
sb.append(c);
}
if (sb.length() > 0)
strings.add(sb.toString());
return strings.toArray(new String[strings.size()]);
}
private static boolean isTokenSeparator(int c) {
return c == ' ' || c == '\t' || c == '=' || c == ',';
}
public static RawIniFile read(InputStream in) {
List<RawIniFile.Line> lines = new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
try {
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().isEmpty() || RawIniFile.Line.isCommentLine(line)) {
// let's skip comments right here
continue;
}
lines.add(new RawIniFile.Line(line));
}
} catch (IOException e) {
throw new IllegalStateException(e);
}
return new RawIniFile(lines);
}
public static RawIniFile read(File input) {
try {
InputStream in = new FileInputStream(input);
return read(in);
} catch (FileNotFoundException e) {
throw new IllegalStateException(e);
}
}
}
package com.opensr5.io;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class IniFileReader {
private IniFileReader() {
}
/**
* <pre>
* This method reads
* x = y, "Z"
* lines returning
* {x, y, "Z"}
* array of Strings
*
* equals sign, space, tab and commas are all equally considered not parts of the token, quotes are supportd
*
* Technically a line like
* x, y = z
* is also supported and would produce same valid output
*
* </pre>
*/
public static String[] splitTokens(String str) {
ArrayList<String> strings = new ArrayList<>();
boolean inQuote = false;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c == '\"' || isTokenSeparator(c) && !inQuote) {
if (c == '\"')
inQuote = !inQuote;
if (!inQuote && sb.length() > 0) {
strings.add(sb.toString());
sb.delete(0, sb.length());
}
} else
sb.append(c);
}
if (sb.length() > 0)
strings.add(sb.toString());
return strings.toArray(new String[strings.size()]);
}
private static boolean isTokenSeparator(int c) {
return c == ' ' || c == '\t' || c == '=' || c == ',';
}
public static RawIniFile read(InputStream in) {
List<RawIniFile.Line> lines = new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
try {
String line;
while ((line = reader.readLine()) != null) {
if (line.trim().isEmpty() || RawIniFile.Line.isCommentLine(line)) {
// let's skip comments right here
continue;
}
lines.add(new RawIniFile.Line(line));
}
} catch (IOException e) {
throw new IllegalStateException(e);
}
return new RawIniFile(lines);
}
public static RawIniFile read(File input) {
try {
InputStream in = new FileInputStream(input);
return read(in);
} catch (FileNotFoundException e) {
throw new IllegalStateException(e);
}
}
}

View File

@ -1,95 +1,95 @@
package com.opensr5.io;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class RawIniFile {
/**
* A list of lines. Lines which are only a comment were filtered out already.
*/
private final List<Line> lines;
/**
* Often we want to look-up line by first token.
* Each line in this map has at least two tokens
*/
private final Map<String, Line> asSet = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
public RawIniFile(List<Line> lines) {
this.lines = lines;
for (Line line : lines) {
if (line.tokens.length > 1)
asSet.put(line.tokens[0], line);
}
}
@NotNull
public Line getMandatoryLine(String key) {
Line result = getByKey(key);
if (result == null)
throw new IllegalStateException("Line not found: " + key);
assert result.tokens.length > 1;
return result;
}
@Nullable
public Line getByKey(String key) {
return asSet.get(key);
}
public List<Line> getLines() {
return lines;
}
public int getSimpleIntegerProperty(String key) {
Line line = asSet.get(key);
if (line == null)
throw new IllegalStateException("Line not found: " + key);
String value = line.getTokens()[1];
return Integer.parseInt(value);
}
public int getSimpleIntegerProperty(String key, int defaultValue) {
if (!asSet.containsKey(key))
return defaultValue;
return getSimpleIntegerProperty(key);
}
public List<String> getValues(String key) {
RawIniFile.Line line = getMandatoryLine(key);
return Arrays.asList(line.getTokens()).subList(1, line.getTokens().length);
}
/**
* Immutable representation of since ini file line
*/
public static class Line {
private String rawText;
private String[] tokens;
public Line(String rawText) {
this.rawText = rawText;
tokens = IniFileReader.splitTokens(rawText);
}
public String[] getTokens() {
return tokens;
}
public static boolean isCommentLine(String rawText) {
return rawText.trim().startsWith(";");
}
public String getRawText() {
return rawText;
}
}
}
package com.opensr5.io;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.*;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class RawIniFile {
/**
* A list of lines. Lines which are only a comment were filtered out already.
*/
private final List<Line> lines;
/**
* Often we want to look-up line by first token.
* Each line in this map has at least two tokens
*/
private final Map<String, Line> asSet = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
public RawIniFile(List<Line> lines) {
this.lines = lines;
for (Line line : lines) {
if (line.tokens.length > 1)
asSet.put(line.tokens[0], line);
}
}
@NotNull
public Line getMandatoryLine(String key) {
Line result = getByKey(key);
if (result == null)
throw new IllegalStateException("Line not found: " + key);
assert result.tokens.length > 1;
return result;
}
@Nullable
public Line getByKey(String key) {
return asSet.get(key);
}
public List<Line> getLines() {
return lines;
}
public int getSimpleIntegerProperty(String key) {
Line line = asSet.get(key);
if (line == null)
throw new IllegalStateException("Line not found: " + key);
String value = line.getTokens()[1];
return Integer.parseInt(value);
}
public int getSimpleIntegerProperty(String key, int defaultValue) {
if (!asSet.containsKey(key))
return defaultValue;
return getSimpleIntegerProperty(key);
}
public List<String> getValues(String key) {
RawIniFile.Line line = getMandatoryLine(key);
return Arrays.asList(line.getTokens()).subList(1, line.getTokens().length);
}
/**
* Immutable representation of since ini file line
*/
public static class Line {
private String rawText;
private String[] tokens;
public Line(String rawText) {
this.rawText = rawText;
tokens = IniFileReader.splitTokens(rawText);
}
public String[] getTokens() {
return tokens;
}
public static boolean isCommentLine(String rawText) {
return rawText.trim().startsWith(";");
}
public String getRawText() {
return rawText;
}
}
}

View File

@ -1,14 +1,14 @@
package com.opensr5.io;
import java.io.IOException;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public interface WriteStream {
/**
* this blocking method would transmit the outgoing bytes
*/
void write(byte[] bytes) throws IOException;
}
package com.opensr5.io;
import java.io.IOException;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public interface WriteStream {
/**
* this blocking method would transmit the outgoing bytes
*/
void write(byte[] bytes) throws IOException;
}

View File

@ -1,81 +1,81 @@
package com.opensr5.io.test;
import com.opensr5.io.IniFileMetaInfo;
import com.opensr5.io.IniFileReader;
import com.opensr5.io.RawIniFile;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import static org.junit.Assert.assertEquals;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class IniFileReaderTest {
@Test
public void testSplit() {
{
String[] s = IniFileReader.splitTokens("1");
assertEquals(s.length, 1);
assertEquals("1", s[0]);
}
{
String[] s = IniFileReader.splitTokens("hello");
assertEquals(s.length, 1);
assertEquals("hello", s[0]);
}
{
String[] s = IniFileReader.splitTokens("\"hello\"");
assertEquals(s.length, 1);
assertEquals("hello", s[0]);
}
{
String[] s = IniFileReader.splitTokens("\"hello\",\"w\"");
assertEquals(s.length, 2);
assertEquals("hello", s[0]);
assertEquals("w", s[1]);
}
}
@Test
public void testQuotedTokens() {
{
String[] result = IniFileReader.splitTokens("\"hel lo\"");
assertEquals(result.length, 1);
assertEquals("hel lo", result[0]);
}
}
@Test
public void testRealLine() {
String[] result = IniFileReader.splitTokens("\tdialog = engineChars,\t\"Base Engine Settings\"");
assertEquals(result.length, 3);
assertEquals("dialog", result[0]);
assertEquals("engineChars", result[1]);
assertEquals("Base Engine Settings", result[2]);
}
@Test
public void testTotalPagesSize() {
String string = " nPages = 3\n" +
" signature = \"unit test\"\n" +
" pageReadCommand = \"X\", \"X\", \"X\"\n\n\n\n" +
" pageSize = 288, 64, 288\n";
RawIniFile content = IniFileReader.read(new ByteArrayInputStream(string.getBytes()));
IniFileMetaInfo meta = new IniFileMetaInfo(content);
assertEquals(3, meta.getnPages());
assertEquals(IniFileMetaInfo.DEFAULT_BLOCKING_FACTOR, meta.getBlockingFactor());
assertEquals(640, meta.getTotalSize());
assertEquals("unit test", meta.getSignature());
assertEquals(64, meta.getPageSize(1));
assertEquals("X", meta.getPageReadCommand(1));
}
}
package com.opensr5.io.test;
import com.opensr5.io.IniFileMetaInfo;
import com.opensr5.io.IniFileReader;
import com.opensr5.io.RawIniFile;
import org.junit.Test;
import java.io.ByteArrayInputStream;
import static org.junit.Assert.assertEquals;
/**
* (c) Andrey Belomutskiy
* 3/1/2017
*/
public class IniFileReaderTest {
@Test
public void testSplit() {
{
String[] s = IniFileReader.splitTokens("1");
assertEquals(s.length, 1);
assertEquals("1", s[0]);
}
{
String[] s = IniFileReader.splitTokens("hello");
assertEquals(s.length, 1);
assertEquals("hello", s[0]);
}
{
String[] s = IniFileReader.splitTokens("\"hello\"");
assertEquals(s.length, 1);
assertEquals("hello", s[0]);
}
{
String[] s = IniFileReader.splitTokens("\"hello\",\"w\"");
assertEquals(s.length, 2);
assertEquals("hello", s[0]);
assertEquals("w", s[1]);
}
}
@Test
public void testQuotedTokens() {
{
String[] result = IniFileReader.splitTokens("\"hel lo\"");
assertEquals(result.length, 1);
assertEquals("hel lo", result[0]);
}
}
@Test
public void testRealLine() {
String[] result = IniFileReader.splitTokens("\tdialog = engineChars,\t\"Base Engine Settings\"");
assertEquals(result.length, 3);
assertEquals("dialog", result[0]);
assertEquals("engineChars", result[1]);
assertEquals("Base Engine Settings", result[2]);
}
@Test
public void testTotalPagesSize() {
String string = " nPages = 3\n" +
" signature = \"unit test\"\n" +
" pageReadCommand = \"X\", \"X\", \"X\"\n\n\n\n" +
" pageSize = 288, 64, 288\n";
RawIniFile content = IniFileReader.read(new ByteArrayInputStream(string.getBytes()));
IniFileMetaInfo meta = new IniFileMetaInfo(content);
assertEquals(3, meta.getnPages());
assertEquals(IniFileMetaInfo.DEFAULT_BLOCKING_FACTOR, meta.getBlockingFactor());
assertEquals(640, meta.getTotalSize());
assertEquals("unit test", meta.getSignature());
assertEquals(64, meta.getPageSize(1));
assertEquals("X", meta.getPageReadCommand(1));
}
}

View File

@ -1,220 +1,220 @@
<roms>
<!-- Generated by ConfigDefinition utility on Fri Mar 03 20:05:55 EST 2017 -->
<rom>
<romid>
<xmlid>RUSEFI</xmlid>
<internalidaddress>0</internalidaddress>
<internalidstring>OPEN_SR5_0.1</internalidstring>
<ecuid>RUSEFI</ecuid>
<make>rusEfi</make>
<model>rusEfi</model>
<filesize>16376</filesize>
</romid>
<table type="3D" name="Ignition Advance"
category="Ignition"
storageaddress="3178"
sizex="16" sizey="16" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="35b8" storagetype="float" endian="big"
logparam="rpm">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3578" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Ignition Advance IAT correction"
category="Ignition"
storageaddress="23f8"
sizex="16" sizey="16" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="2838" storagetype="float" endian="big"
logparam="rpm">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="27f8" storagetype="float"
endian="big" logparam="engine_load">
<scaling units="temperature, C" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Volumetric Efficiency"
category="Fuel"
storageaddress="35f8"
sizex="16" sizey="16" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3a38" storagetype="float" endian="big"
logparam="rpm">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="39f8" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Fuel Table"
category="Fuel"
storageaddress="2cf8" sizex="16"
sizey="16" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3138" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="30f8" storagetype="float" endian="big"
logparam="rpm">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="FSIO Table #1"
category="FSIO"
storageaddress="3d38" sizex="8"
sizey="8" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3e58" storagetype="float" endian="big"
logparam="">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3e38" storagetype="float" endian="big"
logparam="rpm">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="FSIO Table #2"
category="FSIO"
storageaddress="3e78" sizex="8"
sizey="8" storagetype="uint8" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3ed8" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3eb8" storagetype="float" endian="big"
logparam="rpm">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="FSIO Table #3"
category="FSIO"
storageaddress="3ef8" sizex="8"
sizey="8" storagetype="uint8" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3f58" storagetype="float" endian="big"
logparam="">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3f38" storagetype="float" endian="big"
logparam="rpm">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="FSIO Table #4"
category="FSIO"
storageaddress="3f78" sizex="8"
sizey="8" storagetype="uint8" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3fd8" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3fb8" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Target AFR"
category="Fuel"
storageaddress="3a78" sizex="16"
sizey="16" storagetype="uint8" endian="big">
<scaling units="Engine Load" expression="x/10" to_byte="x*10" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3bb8" storagetype="float" endian="big">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3b78" storagetype="float" endian="big">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Baro Correction"
category="Fuel"
storageaddress="68c" sizex="4"
sizey="4" storagetype="float" endian="big">
<scaling units="Pressure" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
<table type="X Axis" storageaddress="66c" storagetype="float" endian="big">
<scaling units="kPa" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="67c" storagetype="float" endian="big">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="2D" name="Coolant-based Warnup Enrichment"
category="Fuel"
storageaddress="1a38" sizex="16"
storagetype="float" endian="big">
<scaling units="Compensation (%)" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="19f8" storagetype="float" endian="big">
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="2D" name="Coolant temperature-based extra idle air" storageaddress="1bb8"
sizex="16" storagetype="float" endian="big">
<scaling units="Compensation (%)" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="1b78" storagetype="float" endian="big">
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="2D" name="Engine Noise" storageaddress="79c"
sizex="8" storagetype="float" endian="big">
<scaling units="Volts" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="7bc" storagetype="float" endian="big">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="2D" name="Injector Lag" storageaddress="30"
sizex="8" storagetype="float" endian="big">
<scaling units="ms" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="10" storagetype="float" endian="big">
<scaling units="Volts" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
</rom>
</roms>
<roms>
<!-- Generated by ConfigDefinition utility on Fri Mar 03 20:05:55 EST 2017 -->
<rom>
<romid>
<xmlid>RUSEFI</xmlid>
<internalidaddress>0</internalidaddress>
<internalidstring>OPEN_SR5_0.1</internalidstring>
<ecuid>RUSEFI</ecuid>
<make>rusEfi</make>
<model>rusEfi</model>
<filesize>16376</filesize>
</romid>
<table type="3D" name="Ignition Advance"
category="Ignition"
storageaddress="3178"
sizex="16" sizey="16" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="35b8" storagetype="float" endian="big"
logparam="rpm">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3578" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Ignition Advance IAT correction"
category="Ignition"
storageaddress="23f8"
sizex="16" sizey="16" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="2838" storagetype="float" endian="big"
logparam="rpm">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="27f8" storagetype="float"
endian="big" logparam="engine_load">
<scaling units="temperature, C" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Volumetric Efficiency"
category="Fuel"
storageaddress="35f8"
sizex="16" sizey="16" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3a38" storagetype="float" endian="big"
logparam="rpm">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="39f8" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="degree" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Fuel Table"
category="Fuel"
storageaddress="2cf8" sizex="16"
sizey="16" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3138" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="30f8" storagetype="float" endian="big"
logparam="rpm">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="FSIO Table #1"
category="FSIO"
storageaddress="3d38" sizex="8"
sizey="8" storagetype="float" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3e58" storagetype="float" endian="big"
logparam="">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3e38" storagetype="float" endian="big"
logparam="rpm">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="FSIO Table #2"
category="FSIO"
storageaddress="3e78" sizex="8"
sizey="8" storagetype="uint8" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3ed8" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3eb8" storagetype="float" endian="big"
logparam="rpm">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="FSIO Table #3"
category="FSIO"
storageaddress="3ef8" sizex="8"
sizey="8" storagetype="uint8" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3f58" storagetype="float" endian="big"
logparam="">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3f38" storagetype="float" endian="big"
logparam="rpm">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="FSIO Table #4"
category="FSIO"
storageaddress="3f78" sizex="8"
sizey="8" storagetype="uint8" endian="big">
<scaling units="Engine Load" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3fd8" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3fb8" storagetype="float" endian="big"
logparam="engine_load">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Target AFR"
category="Fuel"
storageaddress="3a78" sizex="16"
sizey="16" storagetype="uint8" endian="big">
<scaling units="Engine Load" expression="x/10" to_byte="x*10" format="0.00" fineincrement=".1"
coarseincrement="1"/>
<table type="X Axis" storageaddress="3bb8" storagetype="float" endian="big">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1"
coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="3b78" storagetype="float" endian="big">
<scaling units="engine_load" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="3D" name="Baro Correction"
category="Fuel"
storageaddress="68c" sizex="4"
sizey="4" storagetype="float" endian="big">
<scaling units="Pressure" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
<table type="X Axis" storageaddress="66c" storagetype="float" endian="big">
<scaling units="kPa" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
<table type="Y Axis" storageaddress="67c" storagetype="float" endian="big">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="2D" name="Coolant-based Warnup Enrichment"
category="Fuel"
storageaddress="1a38" sizex="16"
storagetype="float" endian="big">
<scaling units="Compensation (%)" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="19f8" storagetype="float" endian="big">
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="2D" name="Coolant temperature-based extra idle air" storageaddress="1bb8"
sizex="16" storagetype="float" endian="big">
<scaling units="Compensation (%)" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="1b78" storagetype="float" endian="big">
<scaling units="uni" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="2D" name="Engine Noise" storageaddress="79c"
sizex="8" storagetype="float" endian="big">
<scaling units="Volts" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="7bc" storagetype="float" endian="big">
<scaling units="RPM" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
<table type="2D" name="Injector Lag" storageaddress="30"
sizex="8" storagetype="float" endian="big">
<scaling units="ms" expression="x" to_byte="x" format="0.00"
fineincrement=".01" coarseincrement="0.1"/>
<table type="X Axis" storageaddress="10" storagetype="float" endian="big">
<scaling units="Volts" expression="x" to_byte="x" format="0.00" fineincrement=".1" coarseincrement="1"/>
</table>
</table>
</rom>
</roms>

View File

@ -1,28 +1,28 @@
package com.rusefi.ui.widgets.test;
import com.rusefi.ui.widgets.AnyCommand;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* (c) Andrey Belomutskiy
* 3/9/2017.
*/
public class AnyCommandTest {
@Test
public void testUnquote() {
assertEquals("1 2 3", AnyCommand.unquote(" \"1 2 3\" "));
}
@Test
public void testPrepareEvalCommand() {
assertEquals("rpn_eval \"2 3 +\"", AnyCommand.prepareCommand("eval \"2 + 3\" "));
}
@Test
public void testSetFSIOexpression() {
// todo: parameter order needs to be in postfix form
assertEquals("set_rpn_expression 1 \"rpm fsio_setting 0 >\"", AnyCommand.prepareCommand("set_fsio_expression 1 \"rpm > fsio_setting 0\""));
}
}
package com.rusefi.ui.widgets.test;
import com.rusefi.ui.widgets.AnyCommand;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
/**
* (c) Andrey Belomutskiy
* 3/9/2017.
*/
public class AnyCommandTest {
@Test
public void testUnquote() {
assertEquals("1 2 3", AnyCommand.unquote(" \"1 2 3\" "));
}
@Test
public void testPrepareEvalCommand() {
assertEquals("rpn_eval \"2 3 +\"", AnyCommand.prepareCommand("eval \"2 + 3\" "));
}
@Test
public void testSetFSIOexpression() {
// todo: parameter order needs to be in postfix form
assertEquals("set_rpn_expression 1 \"rpm fsio_setting 0 >\"", AnyCommand.prepareCommand("set_fsio_expression 1 \"rpm > fsio_setting 0\""));
}
}