diff --git a/src/native/libhwoio.so b/src/native/libhwoio.so index 5a9e35a..11b03f7 100755 Binary files a/src/native/libhwoio.so and b/src/native/libhwoio.so differ diff --git a/src/org/hwo/io/NativeSerialPort.java b/src/org/hwo/io/NativeSerialPort.java index 36d1a10..0a9aedf 100644 --- a/src/org/hwo/io/NativeSerialPort.java +++ b/src/org/hwo/io/NativeSerialPort.java @@ -18,7 +18,7 @@ public class NativeSerialPort extends SerialPort { @Override public int read() throws IOException { if (!isOpen()) - throw new IOException("Port nicht gešffnet!"); + throw new IOException("Port nicht ge�ffnet!"); int ch = native_getch(nativeHandle,getTimeout()); //System.err.println(String.format("RX: 0x%08x", ch)); @@ -34,7 +34,7 @@ public class NativeSerialPort extends SerialPort { @Override public void write(int arg0) throws IOException { if (!isOpen()) - throw new IOException("Port nicht gešffnet!"); + throw new IOException("Port nicht ge�ffnet!"); //System.err.println(String.format("TX: 0x%08x", arg0)); native_putch(nativeHandle, getTimeout(), arg0); } diff --git a/src/org/hwo/io/servicelink/ServiceRegisterCache.java b/src/org/hwo/io/servicelink/ServiceRegisterCache.java index 8f3bb5f..df1ed44 100644 --- a/src/org/hwo/io/servicelink/ServiceRegisterCache.java +++ b/src/org/hwo/io/servicelink/ServiceRegisterCache.java @@ -36,7 +36,7 @@ public class ServiceRegisterCache { public IntegerCacheItem(int ax,int node,int register) { super(ax,node,register); - intValue = 0; + intValue = null; } Integer intValue; diff --git a/src/org/hwo/io/servicelink/register/IndexedListRegisterEditor.java b/src/org/hwo/io/servicelink/register/IndexedListRegisterEditor.java new file mode 100644 index 0000000..f459ec9 --- /dev/null +++ b/src/org/hwo/io/servicelink/register/IndexedListRegisterEditor.java @@ -0,0 +1,127 @@ +package org.hwo.io.servicelink.register; + +import java.awt.Component; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.math.BigInteger; +import java.util.Hashtable; + +import javax.swing.JComboBox; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JTextField; + +import org.hwo.io.servicelink.ServiceLink; +import org.hwo.ui.JComboBoxEx; + +import java.awt.GridBagLayout; +import java.awt.GridBagConstraints; + +public class IndexedListRegisterEditor extends JPanel implements ServiceRegisterControl { + + public static class IndexedItem { + private Integer index; + private String label; + + public IndexedItem(Integer index,String label) { + this.index = index; + this.label = label; + } + + @Override + public String toString() { + return String.format("%d: %s", this.index, this.label); + } + + public Integer getIndex() { + return index; + } + + public void setIndex(Integer index) { + this.index = index; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } + + }; + + private ServiceRegister serviceRegister; + private JComboBoxEx cbValue; + + private IndexedItem[] items; + + + public IndexedListRegisterEditor() + { + super(); + GridBagLayout gridBagLayout = new GridBagLayout(); + gridBagLayout.columnWidths = new int[]{0, 0}; + gridBagLayout.rowHeights = new int[]{0, 0}; + gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE}; + gridBagLayout.rowWeights = new double[]{0.0, Double.MIN_VALUE}; + setLayout(gridBagLayout); + + cbValue = new JComboBoxEx(); + GridBagConstraints gbc_tfValue = new GridBagConstraints(); + gbc_tfValue.fill = GridBagConstraints.HORIZONTAL; + gbc_tfValue.gridx = 0; + gbc_tfValue.gridy = 0; + add(cbValue, gbc_tfValue); + } + + @Override + public Component getComponent() { + return this; + } + + @Override + public void setServiceRegister(ServiceRegister serviceRegister) { + this.serviceRegister = serviceRegister; + } + + @Override + public void writeValue() { + this.serviceRegister.writeIntegerValue(((IndexedItem)cbValue.getSelectedItem()).getIndex()); + } + + @Override + public void readValue() { + Integer i = this.serviceRegister.readIntegerValue(); + if ( i == null ) + i = 0; + + for (IndexedItem item : items) { + if (item.getIndex().equals(i)) { + cbValue.setSelectedItem(item); + return; + } + } + + IndexedItem item = new IndexedItem(i, "Unkown Index"); + cbValue.setSelectedItem(item); + } + + @Override + public boolean requestFocusInWindow() { + return cbValue.requestFocusInWindow(); + } + + public IndexedItem[] getItems() { + return items; + } + + public void setItems(IndexedItem[] items) { + this.items = items; + + cbValue.removeAllItems(); + for (IndexedItem item: items){ + cbValue.addItem(item); + } + } +} diff --git a/src/org/hwo/io/servicelink/register/IndexedListServiceRegister.java b/src/org/hwo/io/servicelink/register/IndexedListServiceRegister.java new file mode 100644 index 0000000..2f6f532 --- /dev/null +++ b/src/org/hwo/io/servicelink/register/IndexedListServiceRegister.java @@ -0,0 +1,76 @@ +package org.hwo.io.servicelink.register; + +import java.util.HashSet; +import java.util.Hashtable; +import java.util.LinkedList; + +import javax.swing.JComponent; + +import org.hwo.bitfields.BitField; +import org.hwo.io.servicelink.ServiceLink; +import org.hwo.io.servicelink.register.IndexedListRegisterEditor.IndexedItem; +import org.hwo.xml.NodeListIterator; +import org.w3c.dom.Element; + +public class IndexedListServiceRegister extends ServiceRegister { + + IndexedListRegisterEditor editor; + Hashtable items; + + public IndexedListServiceRegister(ServiceLink serviceLink) + { + super(serviceLink); + editor = new IndexedListRegisterEditor(); + editor.setServiceRegister(this); + + items = new Hashtable(); + } + + @Override + public void setRegisterNode(Element registerNode) { + super.setRegisterNode(registerNode); + + Element listNode = (Element)registerNode.getElementsByTagName("List").item(0); + + LinkedList items = new LinkedList(); + + for (Element listItem: new NodeListIterator(listNode.getElementsByTagName("Item"))){ + IndexedItem item = new IndexedItem(Integer.parseInt(listItem.getAttribute("index")), listItem.getTextContent()); + items.add(item); + this.items.put(item.getIndex(), item); + } + editor.setItems(items.toArray(new IndexedItem[0])); + } + + private IndexedItem getIndexedItem(Integer index) { + if (this.items.containsKey(index)) { + return this.items.get(index); + } + IndexedItem unknown = new IndexedItem(index, "Unkown"); + return unknown; + } + + @Override + public String getTextRepresentation() { + Integer i = readIntegerValue(); + if (i == null) + return ""; + return getIndexedItem(i).toString(); + } + + @Override + public JComponent getEditorComponent() { + 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 2d5f747..ff344b3 100644 --- a/src/org/hwo/io/servicelink/register/ServiceRegister.java +++ b/src/org/hwo/io/servicelink/register/ServiceRegister.java @@ -155,7 +155,7 @@ public abstract class ServiceRegister { { try { - this.serviceLink.writeFloat(ax.byteValue(), node.byteValue(), register.shortValue(),value); + this.serviceLink.writeFloat(ax.byteValue(), node.byteValue(), register,value); } catch (Exception e) { e.printStackTrace(); @@ -183,6 +183,7 @@ public abstract class ServiceRegister { serviceRegisterTypes.put("Integer", IntegerServiceRegister.class); serviceRegisterTypes.put("Float", FloatServiceRegister.class); serviceRegisterTypes.put("BitField", BitFieldServiceRegister.class); + serviceRegisterTypes.put("IndexedList", IndexedListServiceRegister.class); } }