diff --git a/src/org/hwo/bitfields/BitField.java b/src/org/hwo/bitfields/BitField.java index 08d3b57..7630958 100644 --- a/src/org/hwo/bitfields/BitField.java +++ b/src/org/hwo/bitfields/BitField.java @@ -7,8 +7,6 @@ import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class BitField { - - private Integer value; private List fields; public BitField() @@ -22,19 +20,22 @@ public class BitField { { this.fields = new ArrayList(); - NodeList fields = fieldsNode.getElementsByTagName("Field"); - for (int i=0;i 0) @@ -69,24 +65,9 @@ public class BitField { 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) this.value = 0; @@ -94,6 +75,6 @@ public class BitField { this.value &= ~((-1 >> (Integer.SIZE - len)) << start); this.value |= (value & (-1 >> (Integer.SIZE - len))) << start; } - +*/ } diff --git a/src/org/hwo/bitfields/Field.java b/src/org/hwo/bitfields/Field.java index 19c9bdb..4995796 100644 --- a/src/org/hwo/bitfields/Field.java +++ b/src/org/hwo/bitfields/Field.java @@ -33,13 +33,14 @@ public class Field { 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) { - this.bitField.setValue(value, start, len); } public int getStart() @@ -60,16 +61,16 @@ public class Field { return bitField; } - public String toText() + public String toText(int srcValue) { if (len == 1) - if (getValue() != 0) + if (getValue(srcValue)!= 0) return this.label; else return null; else { - return String.format("%s:%d", label, getValue()); + return String.format("%s:%d", label, getValue(srcValue)); } } diff --git a/src/org/hwo/io/servicelink/register/BitFieldServiceRegister.java b/src/org/hwo/io/servicelink/register/BitFieldServiceRegister.java new file mode 100644 index 0000000..a50f078 --- /dev/null +++ b/src/org/hwo/io/servicelink/register/BitFieldServiceRegister.java @@ -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() { + + } + +} diff --git a/src/org/hwo/io/servicelink/register/FloatRegisterEditor.java b/src/org/hwo/io/servicelink/register/FloatRegisterEditor.java index e5dc9b5..0dc9028 100644 --- a/src/org/hwo/io/servicelink/register/FloatRegisterEditor.java +++ b/src/org/hwo/io/servicelink/register/FloatRegisterEditor.java @@ -50,19 +50,6 @@ public class FloatRegisterEditor extends JPanel implements ServiceRegisterContro 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 public void setServiceRegister(ServiceRegister serviceRegister) { this.serviceRegister = serviceRegister; diff --git a/src/org/hwo/io/servicelink/register/FloatServiceRegister.java b/src/org/hwo/io/servicelink/register/FloatServiceRegister.java index 682d479..3a0f0b1 100644 --- a/src/org/hwo/io/servicelink/register/FloatServiceRegister.java +++ b/src/org/hwo/io/servicelink/register/FloatServiceRegister.java @@ -6,9 +6,13 @@ import org.hwo.io.servicelink.ServiceLink; public class FloatServiceRegister extends ServiceRegister { + FloatRegisterEditor editor; + public FloatServiceRegister(ServiceLink serviceLink) { super(serviceLink); + editor = new FloatRegisterEditor(); + editor.setServiceRegister(this); } @Override @@ -16,13 +20,22 @@ public class FloatServiceRegister extends ServiceRegister { Float f = readFloatValue(); if (f == null) return ""; - return String.format("0x%08X %f",f,f); + return String.format("0x%08X %f",Float.floatToIntBits(f),f); } @Override public JComponent getEditorComponent() { - // TODO Auto-generated method stub - return null; + return editor; + } + + @Override + public void acceptEditorValue() { + editor.writeValue(); + } + + @Override + public void updateEditorValue() { + editor.readValue(); } } diff --git a/src/org/hwo/io/servicelink/register/IntegerRegisterEditor.java b/src/org/hwo/io/servicelink/register/IntegerRegisterEditor.java index fe25f72..4e789cc 100644 --- a/src/org/hwo/io/servicelink/register/IntegerRegisterEditor.java +++ b/src/org/hwo/io/servicelink/register/IntegerRegisterEditor.java @@ -43,18 +43,6 @@ public class IntegerRegisterEditor extends JPanel implements ServiceRegisterCont 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 public void setServiceRegister(ServiceRegister serviceRegister) { this.serviceRegister = serviceRegister; diff --git a/src/org/hwo/io/servicelink/register/IntegerServiceRegister.java b/src/org/hwo/io/servicelink/register/IntegerServiceRegister.java index f231300..05aa327 100644 --- a/src/org/hwo/io/servicelink/register/IntegerServiceRegister.java +++ b/src/org/hwo/io/servicelink/register/IntegerServiceRegister.java @@ -6,9 +6,13 @@ import org.hwo.io.servicelink.ServiceLink; public class IntegerServiceRegister extends ServiceRegister { + IntegerRegisterEditor editor; + public IntegerServiceRegister(ServiceLink serviceLink) { super(serviceLink); + editor = new IntegerRegisterEditor(); + editor.setServiceRegister(this); } @Override @@ -21,7 +25,17 @@ public class IntegerServiceRegister extends ServiceRegister { @Override public JComponent getEditorComponent() { - return null; + return editor; + } + + @Override + public void acceptEditorValue() { + editor.writeValue(); + } + + @Override + public void updateEditorValue() { + editor.readValue(); } } diff --git a/src/org/hwo/io/servicelink/register/ServiceRegister.java b/src/org/hwo/io/servicelink/register/ServiceRegister.java index cbde0bf..2d5f747 100644 --- a/src/org/hwo/io/servicelink/register/ServiceRegister.java +++ b/src/org/hwo/io/servicelink/register/ServiceRegister.java @@ -101,6 +101,8 @@ public abstract class ServiceRegister { abstract public String getTextRepresentation(); abstract public JComponent getEditorComponent(); + abstract public void acceptEditorValue(); + abstract public void updateEditorValue(); public Element getRegisterNode() { @@ -180,6 +182,7 @@ public abstract class ServiceRegister { serviceRegisterTypes.put("Integer", IntegerServiceRegister.class); serviceRegisterTypes.put("Float", FloatServiceRegister.class); + serviceRegisterTypes.put("BitField", BitFieldServiceRegister.class); } } diff --git a/src/org/hwo/io/servicelink/register/ServiceRegisterControl.java b/src/org/hwo/io/servicelink/register/ServiceRegisterControl.java index 7aaf256..5a1496b 100644 --- a/src/org/hwo/io/servicelink/register/ServiceRegisterControl.java +++ b/src/org/hwo/io/servicelink/register/ServiceRegisterControl.java @@ -15,7 +15,6 @@ public interface ServiceRegisterControl { public Component getComponent(); public void setServiceRegister(ServiceRegister serviceRegister); - String getTextRepresentation(); public void writeValue(); public void readValue(); diff --git a/src/org/hwo/io/servicelink/register/ServiceRegisterEditorDialog.java b/src/org/hwo/io/servicelink/register/ServiceRegisterEditorDialog.java index 1dec874..3bd5ad0 100644 --- a/src/org/hwo/io/servicelink/register/ServiceRegisterEditorDialog.java +++ b/src/org/hwo/io/servicelink/register/ServiceRegisterEditorDialog.java @@ -216,6 +216,7 @@ public class ServiceRegisterEditorDialog extends JDialog implements IInteractive private void accept() { + serviceRegister.acceptEditorValue(); setVisible(false); } @@ -234,6 +235,7 @@ public class ServiceRegisterEditorDialog extends JDialog implements IInteractive tfRegister.setText(serviceRegister.getRegister().toString()); tfRegname.setText(serviceRegister.getRegisterName()); panelEditorControl.add( serviceRegister.getEditorComponent()); + serviceRegister.updateEditorValue(); } doLayout(); } diff --git a/src/org/hwo/io/servicelink/register/bitfield/BitFieldEditor.java b/src/org/hwo/io/servicelink/register/bitfield/BitFieldEditor.java index a26414b..1f4b5cc 100644 --- a/src/org/hwo/io/servicelink/register/bitfield/BitFieldEditor.java +++ b/src/org/hwo/io/servicelink/register/bitfield/BitFieldEditor.java @@ -159,35 +159,6 @@ public class BitFieldEditor extends JPanel implements ServiceRegisterControl { return this; } - @Override - public String getTextRepresentation() { - if (this.serviceRegister != null) - { - StringBuilder sb = new StringBuilder(); - - setIntValue( - this.serviceRegister.readIntegerValue() - ); - - Iterator 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 public void setServiceRegister(ServiceRegister serviceRegister) {