w-i-p
parent
976e8491d8
commit
192477c458
|
@ -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;
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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() {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -15,7 +15,6 @@ public interface ServiceRegisterControl {
|
|||
public Component getComponent();
|
||||
|
||||
public void setServiceRegister(ServiceRegister serviceRegister);
|
||||
String getTextRepresentation();
|
||||
|
||||
public void writeValue();
|
||||
public void readValue();
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue