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;
public class BitField {
private Integer value;
private List<Field> fields;
public BitField()
@ -22,19 +20,22 @@ public class BitField {
{
this.fields = new ArrayList<Field>();
NodeList fields = fieldsNode.getElementsByTagName("Field");
for (int i=0;i<fields.getLength();i++)
if (fieldsNode != null)
{
Element fieldNode = (Element)fields.item(i);
int start = 0,
len = 1;
if (fieldNode.getAttribute("len") != null)
len = Integer.decode(fieldNode.getAttribute("len"));
if (fieldNode.getAttribute("start") != null)
start = Integer.decode(fieldNode.getAttribute("start"));
this.fields.add(new Field(this,start,len,fieldNode.getTextContent()));
NodeList fields = fieldsNode.getElementsByTagName("Field");
for (int i=0;i<fields.getLength();i++)
{
Element fieldNode = (Element)fields.item(i);
int start = 0,
len = 1;
if (!fieldNode.getAttribute("len").equals(""))
len = Integer.decode(fieldNode.getAttribute("len"));
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));
}
public synchronized String toText(int value)
{
this.value = value;
return toText();
}
public synchronized String toText()
public synchronized String toText(Integer value)
{
StringBuilder sb = new StringBuilder();
@ -57,7 +53,7 @@ public class BitField {
{
for (Field field:this.fields)
{
String st = field.toText();
String st = field.toText(value);
if (st != null)
{
if (sb.length() > 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;
}
*/
}

View File

@ -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));
}
}

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;
}
@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;

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

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

View File

@ -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();
}

View File

@ -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<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
public void setServiceRegister(ServiceRegister serviceRegister) {