forked from LupusNobilis/java-org.hwo
w-i-p
parent
976e8491d8
commit
192477c458
|
@ -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);
|
||||||
|
int start = 0,
|
||||||
|
len = 1;
|
||||||
|
|
||||||
if (fieldNode.getAttribute("len") != null)
|
if (!fieldNode.getAttribute("len").equals(""))
|
||||||
len = Integer.decode(fieldNode.getAttribute("len"));
|
len = Integer.decode(fieldNode.getAttribute("len"));
|
||||||
if (fieldNode.getAttribute("start") != null)
|
if (!fieldNode.getAttribute("start").equals(""))
|
||||||
start = Integer.decode(fieldNode.getAttribute("start"));
|
start = Integer.decode(fieldNode.getAttribute("start"));
|
||||||
|
|
||||||
this.fields.add(new Field(this,start,len,fieldNode.getTextContent()));
|
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)
|
/* public synchronized void setValue(int value,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)
|
|
||||||
{
|
{
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
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;
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
Loading…
Reference in New Issue