Updated parser, indexing and schema. 95% complete.

git-svn-id: http://svn.3splooges.com/romraider-arch/trunk@387 d2e2e1cd-ba16-0410-be16-b7c4453c7c2d
This commit is contained in:
Jared Gould 2006-12-12 03:41:40 +00:00
parent 1a4ca6d041
commit 94e7fe9e16
8 changed files with 218 additions and 21391 deletions

106
ecu_defs.dtd Normal file
View File

@ -0,0 +1,106 @@
<?xml version='1.0' encoding='utf-8'?>
<!ELEMENT rom ( scales?, tables? ) >
<!ATTLIST rom name ID #REQUIRED >
<!ATTLIST rom abstract CDATA "false" >
<!ATTLIST rom idaddress CDATA #IMPLIED >
<!ATTLIST rom idstring CDATA #IMPLIED >
<!ATTLIST rom base CDATA #IMPLIED >
<!ATTLIST rom description CDATA #IMPLIED >
<!ATTLIST rom memmodel IDREF #IMPLIED >
<!ATTLIST rom flashmethod IDREF #IMPLIED >
<!ATTLIST rom caseid IDREF #IMPLIED >
<!ATTLIST rom obsolete CDATA "false" >
<!ELEMENT tables ( category+ ) >
<!ELEMENT table3d ( xaxis?, yaxis?, description? ) >
<!ATTLIST table3d name ID #REQUIRED >
<!ATTLIST table3d userlevel (1|2|3|4|5) "0" >
<!ATTLIST table3d scale IDREF #IMPLIED >
<!ATTLIST table3d address CDATA #IMPLIED >
<!ATTLIST table3d xaddress CDATA #IMPLIED >
<!ATTLIST table3d yaddress CDATA #IMPLIED >
<!ATTLIST table3d sizex CDATA #IMPLIED >
<!ATTLIST table3d sizey CDATA #IMPLIED >
<!ELEMENT table2d ( axis?, description? ) >
<!ATTLIST table2d name ID #REQUIRED >
<!ATTLIST table2d userlevel (1|2|3|4|5) "0" >
<!ATTLIST table2d scale IDREF #IMPLIED >
<!ATTLIST table2d address CDATA #IMPLIED >
<!ATTLIST table2d size CDATA #IMPLIED >
<!ATTLIST table2d axisaddress CDATA #IMPLIED >
<!ELEMENT parameter ( description? ) >
<!ATTLIST parameter name ID #REQUIRED >
<!ATTLIST parameter userlevel (1|2|3|4|5) "0" >
<!ATTLIST parameter scale IDREF #IMPLIED >
<!ATTLIST parameter address CDATA #IMPLIED >
<!ELEMENT switch ( description?, on?, off? ) >
<!ATTLIST switch name ID #REQUIRED >
<!ATTLIST switch userlevel (1|2|3|4|5) "0" >
<!ATTLIST switch address CDATA #IMPLIED >
<!ATTLIST switch size CDATA "1" >
<!ATTLIST switch hidden (true|false) "false" >
<!ATTLIST switch default (on|off|none) "none" >
<!ELEMENT switchgroup ( switch* ) >
<!ATTLIST switchgroup name ID #REQUIRED >
<!ATTLIST switchgroup default (on|off|none) "none" >
<!ATTLIST switchgroup userlevel (1|2|3|4|5) "0" >
<!ATTLIST switchgroup hidden (true|false) "false" >
<!ATTLIST switchgroup description CDATA #IMPLIED >
<!ELEMENT description ( #PCDATA ) >
<!ELEMENT axis ( data? ) >
<!ATTLIST axis name ID #REQUIRED >
<!ATTLIST axis scale IDREF #IMPLIED >
<!ATTLIST axis address CDATA #IMPLIED >
<!ATTLIST axis size CDATA "1" >
<!ATTLIST axis static (true|false) "false" >
<!ELEMENT xaxis ( data? ) >
<!ATTLIST xaxis name ID #REQUIRED >
<!ATTLIST xaxis scale IDREF #IMPLIED >
<!ATTLIST xaxis address CDATA #IMPLIED >
<!ATTLIST xaxis size CDATA "1" >
<!ELEMENT yaxis ( data? ) >
<!ATTLIST yaxis name ID #REQUIRED >
<!ATTLIST yaxis scale IDREF #IMPLIED >
<!ATTLIST yaxis address CDATA #IMPLIED >
<!ATTLIST yaxis size CDATA "1" >
<!ELEMENT data ( #PCDATA ) >
<!ELEMENT on EMPTY >
<!ATTLIST on name ID #REQUIRED >
<!ATTLIST on data CDATA #REQUIRED >
<!ELEMENT off EMPTY >
<!ATTLIST off name ID #REQUIRED >
<!ATTLIST off data CDATA #REQUIRED >
<!ELEMENT category ( table3d*, table2d*, parameter*, switch*, string* ) >
<!ATTLIST category name ID #REQUIRED >
<!ATTLIST category description CDATA #IMPLIED >
<!ELEMENT scales ( scale+ ) >
<!ELEMENT scale ( unit+ ) >
<!ATTLIST scale name ID #REQUIRED >
<!ATTLIST scale storagetype (uint8|int8|uint16|int16|float|hex|char) "uint8" >
<!ATTLIST scale endian (big|little) "big" >
<!ATTLIST scale logparam IDREF #IMPLIED >
<!ELEMENT unit EMPTY >
<!ATTLIST unit name ID #REQUIRED >
<!ATTLIST unit system (stantard|metric|universal) "universal" >
<!ATTLIST unit to_real CDATA #REQUIRED >
<!ATTLIST unit to_byte CDATA #REQUIRED >
<!ATTLIST unit format CDATA "0.00" >
<!ATTLIST unit coarseincrement CDATA "1" >
<!ATTLIST unit fineincrement CDATA "0.1" >

File diff suppressed because it is too large Load Diff

View File

@ -2,6 +2,7 @@ package enginuity.newmaps.definition;
import enginuity.newmaps.ecudata.Scale; import enginuity.newmaps.ecudata.Scale;
import enginuity.newmaps.ecudata.Unit; import enginuity.newmaps.ecudata.Unit;
import java.util.Iterator;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import java.util.Vector; import java.util.Vector;
@ -30,7 +31,8 @@ public final class AttributeParser {
} }
} }
public static String[] parseValueString(String s, String delim) {
public static String[] stringToStringArray(String s, String delim) {
StringTokenizer t = new StringTokenizer(s, delim); StringTokenizer t = new StringTokenizer(s, delim);
Vector<String> values = new Vector<String>(); Vector<String> values = new Vector<String>();
while (t.hasMoreTokens()) { while (t.hasMoreTokens()) {
@ -39,6 +41,25 @@ public final class AttributeParser {
return (String[])values.toArray(); return (String[])values.toArray();
} }
public static byte[] stringToByteArray(String s, String delim) {
StringTokenizer t = new StringTokenizer(s, delim);
Vector<Byte> values = new Vector<Byte>();
while (t.hasMoreTokens()) {
values.add(Byte.parseByte(t.nextToken()));
}
byte[] bytes = new byte[values.size()];
for (int i = 0; i < values.size(); i++) {
bytes[i] = values.get(i);
}
return bytes;
}
public static int parseUnitSystem(String s) { public static int parseUnitSystem(String s) {
if (s.equalsIgnoreCase("metric")) return Unit.SYSTEM_METRIC; if (s.equalsIgnoreCase("metric")) return Unit.SYSTEM_METRIC;
else if (s.equalsIgnoreCase("standard")) return Unit.SYSTEM_STANDARD; else if (s.equalsIgnoreCase("standard")) return Unit.SYSTEM_STANDARD;

View File

@ -40,6 +40,8 @@ public class RomDefinitionHandler extends DefaultHandler {
private static final String VAL_TRUE = "true"; private static final String VAL_TRUE = "true";
private static final String VAL_FALSE = "false"; private static final String VAL_FALSE = "false";
private static final String VAL_ON = "on";
private static final String VAL_OFF = "off";
private static final String ATTR_NAME = "name"; private static final String ATTR_NAME = "name";
private static final String ATTR_ABSTRACT = "abstract"; private static final String ATTR_ABSTRACT = "abstract";
@ -65,6 +67,8 @@ public class RomDefinitionHandler extends DefaultHandler {
private static final String ATTR_TO_REAL = "to_real"; private static final String ATTR_TO_REAL = "to_real";
private static final String ATTR_TO_BYTE = "to_byte"; private static final String ATTR_TO_BYTE = "to_byte";
private static final String ATTR_SYSTEM = "system"; private static final String ATTR_SYSTEM = "system";
private static final String ATTR_DEFAULT = "default";
private static final String ATTR_HIDDEN = "hidden";
private static final String ATTR_FORMAT = "format"; private static final String ATTR_FORMAT = "format";
private static final String ATTR_COARSE_INCREMENT = "coarseincrement"; private static final String ATTR_COARSE_INCREMENT = "coarseincrement";
private static final String ATTR_FINE_INCREMENT = "fineincrement"; private static final String ATTR_FINE_INCREMENT = "fineincrement";
@ -379,11 +383,6 @@ public class RomDefinitionHandler extends DefaultHandler {
} }
} else if (TAG_DATA.equalsIgnoreCase(qName)) {
// TODO: Deal with data
} else if (TAG_UNIT.equalsIgnoreCase(qName)) { } else if (TAG_UNIT.equalsIgnoreCase(qName)) {
unit = new Unit(attr.getValue(ATTR_NAME)); unit = new Unit(attr.getValue(ATTR_NAME));
@ -404,8 +403,14 @@ public class RomDefinitionHandler extends DefaultHandler {
} else if (TAG_STATE.equalsIgnoreCase(qName)) { } else if (TAG_STATE.equalsIgnoreCase(qName)) {
// TODO: Deal with states // Determine state and values and apply to table
if (attr.getValue(ATTR_NAME).equalsIgnoreCase(VAL_ON)) {
((Switch)table).setStateOn(attr.getValue("values"));
} else if (attr.getValue(ATTR_NAME).equalsIgnoreCase(VAL_OFF)) {
((Switch)table).setStateOff(attr.getValue("values"));
}
} }
@ -485,6 +490,7 @@ public class RomDefinitionHandler extends DefaultHandler {
} }
} }
} }
public void characters(char[] ch, int start, int length) { public void characters(char[] ch, int start, int length) {

View File

@ -28,6 +28,7 @@ public abstract class IndexUtil {
Iterator it = index.iterator(); Iterator it = index.iterator();
while (it.hasNext()) { while (it.hasNext()) {
IndexItem item = (IndexItem)it.next(); IndexItem item = (IndexItem)it.next();
try { try {
if (!item.getChecksum().equalsIgnoreCase(getMD5Checksum(item.getFile().getAbsolutePath()))) { if (!item.getChecksum().equalsIgnoreCase(getMD5Checksum(item.getFile().getAbsolutePath()))) {
@ -62,7 +63,7 @@ public abstract class IndexUtil {
long time = 0; long time = 0;
while (it.hasNext()) { while (it.hasNext()) {
IndexItem item = (IndexItem)it.next(); IndexItem item = (IndexItem)it.next();
//System.out.println("Adding " + item.getFile() + " (#" + ++i + ")"); System.out.println("Adding " + item.getFile() + " (#" + ++i + ")");
InputStream inputStream1 = new BufferedInputStream(new FileInputStream(item.getFile())); InputStream inputStream1 = new BufferedInputStream(new FileInputStream(item.getFile()));
long start = System.currentTimeMillis(); long start = System.currentTimeMillis();
SaxParserFactory.getSaxParser().parse(inputStream1, handler); SaxParserFactory.getSaxParser().parse(inputStream1, handler);
@ -70,18 +71,6 @@ public abstract class IndexUtil {
} }
/*long start = System.currentTimeMillis();
IndexItem item = (IndexItem)index.get(10);
//System.out.println("Adding " + item.getFile() + " (#" + ++i + ")");
InputStream inputStream1 = new BufferedInputStream(new FileInputStream(item.getFile()));
SaxParserFactory.getSaxParser().parse(inputStream1, handler);
System.out.println(System.currentTimeMillis() - start);*/
/*JFrame frame = new JFrame();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);*/
} catch (Exception ex) { } catch (Exception ex) {
ex.printStackTrace(); ex.printStackTrace();
} }

View File

@ -1,6 +1,6 @@
package enginuity.newmaps.ecudata; package enginuity.newmaps.ecudata;
import static enginuity.newmaps.definition.AttributeParser.parseValueString; import static enginuity.newmaps.definition.AttributeParser.stringToStringArray;
import java.io.Serializable; import java.io.Serializable;
public class SourceDefAxis extends Axis implements Serializable { public class SourceDefAxis extends Axis implements Serializable {
@ -16,7 +16,7 @@ public class SourceDefAxis extends Axis implements Serializable {
} }
public void setValues(String s, String delim) { public void setValues(String s, String delim) {
values = parseValueString(s, delim); values = stringToStringArray(s, delim);
} }
} }

View File

@ -1,6 +1,7 @@
package enginuity.newmaps.ecudata; package enginuity.newmaps.ecudata;
import java.io.Serializable; import java.io.Serializable;
import static enginuity.newmaps.definition.AttributeParser.stringToByteArray;
public class Switch extends ECUData implements Serializable { public class Switch extends ECUData implements Serializable {
@ -8,6 +9,9 @@ public class Switch extends ECUData implements Serializable {
protected byte[] stateOff = new byte[1]; protected byte[] stateOff = new byte[1];
protected int size; protected int size;
private int defaultValue = SwitchGroup.DEFAULT_NONE;
boolean hidden = false;
public Switch(String name) { public Switch(String name) {
super(name); super(name);
} }
@ -24,16 +28,38 @@ public class Switch extends ECUData implements Serializable {
return stateOn; return stateOn;
} }
public void setStateOn(byte[] stateOn) { public void setStateOn(String values) {
this.stateOn = stateOn; this.stateOn = stringToByteArray(values, " ");
} }
public byte[] getStateOff() { public byte[] getStateOff() {
return stateOff; return stateOff;
} }
public void setStateOff(byte[] stateOff) { public void setStateOff(String values) {
this.stateOff = stateOff; this.stateOff = stringToByteArray(values, " ");
}
public void setDefaultValue(int defaultVal) {
this.defaultValue = defaultValue;
}
public int getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String value) {
if (value.equalsIgnoreCase("on")) defaultValue = SwitchGroup.DEFAULT_ON;
else if (value.equalsIgnoreCase("off")) defaultValue = SwitchGroup.DEFAULT_OFF;
else defaultValue = SwitchGroup.DEFAULT_NONE;
}
public boolean isHidden() {
return hidden;
}
public void setHidden(boolean hidden) {
this.hidden = hidden;
} }
public String toString() { public String toString() {

View File

@ -0,0 +1,42 @@
package enginuity.newmaps.ecudata;
import enginuity.util.NamedSet;
public class SwitchGroup extends ECUData {
public static final int DEFAULT_ON = 0;
public static final int DEFAULT_OFF = 1;
public static final int DEFAULT_NONE = 2;
private int defaultValue = DEFAULT_NONE;
private boolean hidden = false;
NamedSet<Switch> switches = new NamedSet<Switch>();
public SwitchGroup(String name) {
super(name);
}
public void setDefaultValue(int defaultVal) {
this.defaultValue = defaultValue;
}
public int getDefaultValue() {
return defaultValue;
}
public void setDefaultValue(String value) {
if (value.equalsIgnoreCase("on")) defaultValue = DEFAULT_ON;
else if (value.equalsIgnoreCase("off")) defaultValue = DEFAULT_OFF;
else defaultValue = DEFAULT_NONE;
}
public boolean isHidden() {
return hidden;
}
public void setHidden(boolean hidden) {
this.hidden = hidden;
}
}