thobaben_serialize
Harald Wolff 2014-07-25 10:02:06 +02:00
parent 976e8491d8
commit 192477c458
11 changed files with 112 additions and 103 deletions

View File

@ -7,8 +7,6 @@ import org.w3c.dom.Element;
import org.w3c.dom.NodeList; import org.w3c.dom.NodeList;
public class BitField { public class BitField {
private Integer value;
private List<Field> fields; private List<Field> fields;
public BitField() public BitField()
@ -22,19 +20,22 @@ public class BitField {
{ {
this.fields = new ArrayList<Field>(); this.fields = new ArrayList<Field>();
NodeList fields = fieldsNode.getElementsByTagName("Field"); if (fieldsNode != null)
for (int i=0;i<fields.getLength();i++)
{ {
Element fieldNode = (Element)fields.item(i); NodeList fields = fieldsNode.getElementsByTagName("Field");
int start = 0, for (int i=0;i<fields.getLength();i++)
len = 1; {
Element fieldNode = (Element)fields.item(i);
if (fieldNode.getAttribute("len") != null) int start = 0,
len = Integer.decode(fieldNode.getAttribute("len")); len = 1;
if (fieldNode.getAttribute("start") != null)
start = Integer.decode(fieldNode.getAttribute("start")); if (!fieldNode.getAttribute("len").equals(""))
len = Integer.decode(fieldNode.getAttribute("len"));
this.fields.add(new Field(this,start,len,fieldNode.getTextContent())); if (!fieldNode.getAttribute("start").equals(""))
start = Integer.decode(fieldNode.getAttribute("start"));
this.fields.add(new Field(this,start,len,fieldNode.getTextContent()));
}
} }
} }
@ -44,12 +45,7 @@ public class BitField {
this.fields.add(new Field(this, i, 1)); this.fields.add(new Field(this, i, 1));
} }
public synchronized String toText(int value) public synchronized String toText(Integer value)
{
this.value = value;
return toText();
}
public synchronized String toText()
{ {
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
@ -57,7 +53,7 @@ public class BitField {
{ {
for (Field field:this.fields) for (Field field:this.fields)
{ {
String st = field.toText(); String st = field.toText(value);
if (st != null) if (st != null)
{ {
if (sb.length() > 0) if (sb.length() > 0)
@ -69,24 +65,9 @@ public class BitField {
return sb.toString(); return sb.toString();
} }
public synchronized Integer getValue()
{
return this.value;
}
public synchronized void setValue(Integer value)
{
this.value = value;
}
public synchronized int getValue(int start,int len)
{
if (value == null)
return 0;
return (value >> start) & (-1 >> (Integer.SIZE - len));
}
public synchronized void setValue(int value,int start,int len) /* public synchronized void setValue(int value,int start,int len)
{ {
if (this.value == null) if (this.value == null)
this.value = 0; this.value = 0;
@ -94,6 +75,6 @@ public class BitField {
this.value &= ~((-1 >> (Integer.SIZE - len)) << start); this.value &= ~((-1 >> (Integer.SIZE - len)) << start);
this.value |= (value & (-1 >> (Integer.SIZE - len))) << start; this.value |= (value & (-1 >> (Integer.SIZE - len))) << start;
} }
*/
} }

View File

@ -33,13 +33,14 @@ public class Field {
this.label = String.format("B%d:%d",start,start+len-1); this.label = String.format("B%d:%d",start,start+len-1);
} }
} }
public int getValue()
public synchronized int getValue(int srcValue)
{ {
return this.bitField.getValue(start, len); return (srcValue >> start) & (-1 >> (Integer.SIZE - len));
} }
public void setValue(int value) public void setValue(int value)
{ {
this.bitField.setValue(value, start, len);
} }
public int getStart() public int getStart()
@ -60,16 +61,16 @@ public class Field {
return bitField; return bitField;
} }
public String toText() public String toText(int srcValue)
{ {
if (len == 1) if (len == 1)
if (getValue() != 0) if (getValue(srcValue)!= 0)
return this.label; return this.label;
else else
return null; return null;
else else
{ {
return String.format("%s:%d", label, getValue()); return String.format("%s:%d", label, getValue(srcValue));
} }
} }

View File

@ -0,0 +1,50 @@
package org.hwo.io.servicelink.register;
import javax.swing.JComponent;
import org.hwo.bitfields.BitField;
import org.hwo.io.servicelink.ServiceLink;
import org.w3c.dom.Element;
public class BitFieldServiceRegister extends ServiceRegister {
BitField bitField;
public BitFieldServiceRegister(ServiceLink serviceLink) {
super(serviceLink);
}
@Override
public void setRegisterNode(Element registerNode) {
super.setRegisterNode(registerNode);
Element fieldsNode = (Element)registerNode.getElementsByTagName("Fields").item(0);
bitField = new BitField(fieldsNode);
}
@Override
public String getTextRepresentation() {
if (bitField == null)
return "-";
return bitField.toText(readIntegerValue());
}
@Override
public JComponent getEditorComponent() {
// TODO Auto-generated method stub
return null;
}
@Override
public void acceptEditorValue() {
}
@Override
public void updateEditorValue() {
}
}

View File

@ -50,19 +50,6 @@ public class FloatRegisterEditor extends JPanel implements ServiceRegisterContro
return this; return this;
} }
@Override
public String getTextRepresentation() {
if (serviceRegister != null)
{
Float v = serviceRegister.readFloatValue();
if (v == null)
return "-";
return String.format("0x%08x %f", Float.floatToIntBits(v), v);
} else {
return "NC";
}
}
@Override @Override
public void setServiceRegister(ServiceRegister serviceRegister) { public void setServiceRegister(ServiceRegister serviceRegister) {
this.serviceRegister = serviceRegister; this.serviceRegister = serviceRegister;

View File

@ -6,9 +6,13 @@ import org.hwo.io.servicelink.ServiceLink;
public class FloatServiceRegister extends ServiceRegister { public class FloatServiceRegister extends ServiceRegister {
FloatRegisterEditor editor;
public FloatServiceRegister(ServiceLink serviceLink) public FloatServiceRegister(ServiceLink serviceLink)
{ {
super(serviceLink); super(serviceLink);
editor = new FloatRegisterEditor();
editor.setServiceRegister(this);
} }
@Override @Override
@ -16,13 +20,22 @@ public class FloatServiceRegister extends ServiceRegister {
Float f = readFloatValue(); Float f = readFloatValue();
if (f == null) if (f == null)
return ""; return "";
return String.format("0x%08X %f",f,f); return String.format("0x%08X %f",Float.floatToIntBits(f),f);
} }
@Override @Override
public JComponent getEditorComponent() { public JComponent getEditorComponent() {
// TODO Auto-generated method stub return editor;
return null; }
@Override
public void acceptEditorValue() {
editor.writeValue();
}
@Override
public void updateEditorValue() {
editor.readValue();
} }
} }

View File

@ -43,18 +43,6 @@ public class IntegerRegisterEditor extends JPanel implements ServiceRegisterCont
return this; return this;
} }
@Override
public String getTextRepresentation() {
if (serviceRegister != null)
{
Integer v = serviceRegister.readIntegerValue();
if (v == null)
return "-";
return String.format("0x%08x %d", v, v);
} else
return "NC";
}
@Override @Override
public void setServiceRegister(ServiceRegister serviceRegister) { public void setServiceRegister(ServiceRegister serviceRegister) {
this.serviceRegister = serviceRegister; this.serviceRegister = serviceRegister;

View File

@ -6,9 +6,13 @@ import org.hwo.io.servicelink.ServiceLink;
public class IntegerServiceRegister extends ServiceRegister { public class IntegerServiceRegister extends ServiceRegister {
IntegerRegisterEditor editor;
public IntegerServiceRegister(ServiceLink serviceLink) public IntegerServiceRegister(ServiceLink serviceLink)
{ {
super(serviceLink); super(serviceLink);
editor = new IntegerRegisterEditor();
editor.setServiceRegister(this);
} }
@Override @Override
@ -21,7 +25,17 @@ public class IntegerServiceRegister extends ServiceRegister {
@Override @Override
public JComponent getEditorComponent() { public JComponent getEditorComponent() {
return null; return editor;
}
@Override
public void acceptEditorValue() {
editor.writeValue();
}
@Override
public void updateEditorValue() {
editor.readValue();
} }
} }

View File

@ -101,6 +101,8 @@ public abstract class ServiceRegister {
abstract public String getTextRepresentation(); abstract public String getTextRepresentation();
abstract public JComponent getEditorComponent(); abstract public JComponent getEditorComponent();
abstract public void acceptEditorValue();
abstract public void updateEditorValue();
public Element getRegisterNode() public Element getRegisterNode()
{ {
@ -180,6 +182,7 @@ public abstract class ServiceRegister {
serviceRegisterTypes.put("Integer", IntegerServiceRegister.class); serviceRegisterTypes.put("Integer", IntegerServiceRegister.class);
serviceRegisterTypes.put("Float", FloatServiceRegister.class); serviceRegisterTypes.put("Float", FloatServiceRegister.class);
serviceRegisterTypes.put("BitField", BitFieldServiceRegister.class);
} }
} }

View File

@ -15,7 +15,6 @@ public interface ServiceRegisterControl {
public Component getComponent(); public Component getComponent();
public void setServiceRegister(ServiceRegister serviceRegister); public void setServiceRegister(ServiceRegister serviceRegister);
String getTextRepresentation();
public void writeValue(); public void writeValue();
public void readValue(); public void readValue();

View File

@ -216,6 +216,7 @@ public class ServiceRegisterEditorDialog extends JDialog implements IInteractive
private void accept() private void accept()
{ {
serviceRegister.acceptEditorValue();
setVisible(false); setVisible(false);
} }
@ -234,6 +235,7 @@ public class ServiceRegisterEditorDialog extends JDialog implements IInteractive
tfRegister.setText(serviceRegister.getRegister().toString()); tfRegister.setText(serviceRegister.getRegister().toString());
tfRegname.setText(serviceRegister.getRegisterName()); tfRegname.setText(serviceRegister.getRegisterName());
panelEditorControl.add( serviceRegister.getEditorComponent()); panelEditorControl.add( serviceRegister.getEditorComponent());
serviceRegister.updateEditorValue();
} }
doLayout(); doLayout();
} }

View File

@ -159,35 +159,6 @@ public class BitFieldEditor extends JPanel implements ServiceRegisterControl {
return this; return this;
} }
@Override
public String getTextRepresentation() {
if (this.serviceRegister != null)
{
StringBuilder sb = new StringBuilder();
setIntValue(
this.serviceRegister.readIntegerValue()
);
Iterator<Field> iter = fields.iterator();
while (iter.hasNext())
{
String te = iter.next().getTextRepresentation();
if (te.length()>0)
{
sb.append(
te
);
if (!iter.hasNext())
break;
sb.append(", ");
};
}
return sb.toString();
}
return "NC";
}
@Override @Override
public void setServiceRegister(ServiceRegister serviceRegister) { public void setServiceRegister(ServiceRegister serviceRegister) {