From 769f93c8eb8cf519ae6ffeed6ef59ae3e2502f52 Mon Sep 17 00:00:00 2001 From: Harald Wolff Date: Mon, 15 Dec 2014 14:15:48 +0100 Subject: [PATCH] Fix: Linux Native Serial IO --- src/native/libhwoio.so | Bin 9337 -> 9392 bytes src/org/hwo/io/NativeSerialPort.java | 4 +- .../io/servicelink/ServiceRegisterCache.java | 2 +- .../register/IndexedListRegisterEditor.java | 127 ++++++++++++++++++ .../register/IndexedListServiceRegister.java | 76 +++++++++++ .../servicelink/register/ServiceRegister.java | 3 +- 6 files changed, 208 insertions(+), 4 deletions(-) create mode 100644 src/org/hwo/io/servicelink/register/IndexedListRegisterEditor.java create mode 100644 src/org/hwo/io/servicelink/register/IndexedListServiceRegister.java diff --git a/src/native/libhwoio.so b/src/native/libhwoio.so index 5a9e35a8384ea05955da828b01461e788b17e804..11b03f75d754da854b4a2f29641d7f6ad1c9031b 100755 GIT binary patch delta 2272 zcmZ8jZ){Ul6o0o}*S__CNB_KT-D~+HjL5o9w=u(9$1FSuhGH^}BuJ+?+|alYI*fu0 zhp@UV>2^Xgl9@nA5Y!J_8ex)11{j7BA{b2IllXzS20nB+%)n_q=k<1CPjc_Mzu!Ig z-22YG_uThb8QYNbIJ!y%Rl+$XWPC#_>%>`W4$cmB1jVE#2S$cY9I>Ca`S$^LhAvW*28{*akLI=KWKY|)7a2&(&2x~n;;nQ z18jmz7%AW_Xzvh=!ZB0M+{;I;;e4uqpNE@TH&hoH4iv7qlaIL0M+_n+aba-?CSjCE zO(n64tGrR@GUgZ^w?E7MY~}WA`G8-!eLUwM&K2Df-)euaZP(ko+xDhD)9qmJpx7T` z80h=x!p4Wiy&V`@jbP?GDA@dJkAe4xp;?ci(;MvlJT&>9e(2V>z%{+eoU!M|(DvEk zy57wkseAf*c7Pud)m1Mau1DlhnOvpxJuoN(y12nFD4$O5(M^AZywdl*;c~7&Tl)!i zWtSbo+A4>!Mfe@+OyA9-Ec=i!MJIhj#k&d9=Nw2+szfIdbk5RaDt?o25#i%1-bz?U zIH}@S2-C-;dsV!VFs(b?rQ)@ODGceDieDfs5{|04hA>{5Rv{f$iIqgqKBlWxyqGZU zQ`)a$FJUub8)9X!Q9?o))RAgcD(95MJ*98X(&NNHt%J=aOT{~SGN}Do5Bo}FW{1&| zXSODg6XMI2zQ*5+vDJ#B_L!7`#!lp?8`1H!g4MPwx)>7dkIU^ORaW^BPK+TRZ2X}J zo%S^eabx-ov~0J^FCjmmOF+5tb#@+ljO*R;fynH6vcEt9OiWEsdpZHPj5W)9{?2Bn zA`@d68f7ptrX;4OQ%EU;tz$Uq0$Cz82?0}py$CI)PRCSao;I%UJ6c)RdWbRj%H%Ja zOGIYjC(|i*4tmU?l1G1Kvx&%j-~M?RH+xp379fl31|pgJz6lzA--QN3TtD$A0daZ_ z%$S>4IfN`rDsMl@W@9+f)%k3;AN6%y)@jr;sIQ_n{)5p$y$tqSp3`-qbq2n%ED5Ye zd-dWqTWp6lE#_jaz)X6BP>!}cu=wDyMP>nztTHQu2CH1^M33s#UKr62yR5a%VSbG< zm;6uY^GWDVlJM*x%miD zgE^lcJxdkAKw&NqW9TWzFJxxusCXZ3?^FbFrJ@|P7v|tPn33HOlUGZH??o5p9rBfe zakLnbZTJ$Qt^FeB7qT`me?6;!fZvUqMfC>Qg7r44eS0xkkr$rJg{3?Ir;uL^ZLCzh zq*_pPzxD6d)P+*30uhaCA>W6?>o;v!+p@i;s-~(o)xE^PVAvXl8>PqD4d`AJwCA@q zuO%2q_F-{uqP)f{v?wT6^RrbAmCkxG%25Km(NKN8MX>Rr;%t-a(3jTm!g^*YN7nBGREC2ui delta 2148 zcmZWqZ){Ul6u-A!*S@Z6-|O1GcEVm~i>yX@En3FNmJLSbErGb1fIw6>RB*&UNEiVV z!{%hHF3VaEAA}EP5F-L&Hb%^13@KuSsUP5j8WhZkF}8xqki`HZ_1yd38#r%s?>WD7 z&pGehb9?R?X}P6kg5J23@X@3blBvi(yhzyR(c!*qrz-SYbdbp&+$(8r9n4Uuqnqna z{BUN`jib4)ua8`sfBE+VmqJIZdzhXTrxz#1S&Fm&i_TQkmy0o(4`&cA(kG=F0onV; z5cF7NXtl)YPspkCE=X3H9_G?XOOOt8uErV!5$9U#&d^o-fJpqL-y6Qq4NXWVhOksWil8?yH1ka5-AVoK8O*98oBi05R+EAbk+89}_#cpcpU$x$w z?j3$iP#+9Aqk_a0l1>MF?o?t%}pLF+x&D}^>Le?FLInbn?MS`CCkzT=2K0<1{TP&VKsvylHt%J+%$85v5i^WOs zdm`0qQJ>e&Qn%P=X)Z6dOuOt3Lgt|E3pf+7&ZE#I?7~%r{T`(vhMsvbnikgW@Qo)4 z8L6YmC`Pk3(4G&Yba|CAfl<;kHE+}^mh@6_1I@ufQK23mT?Em{y|jJ?cQx_U3A z-5^C&!90IAv_xv5DH4X^NDb|WiAW>;0EB3x&}zKfJE1LFE1V1KM;wK0RKcXofs++0 z@j|Fi4w=W+HT2br4M>E9PlmWJV0Dlw9T)SC87k+I-gKKpO>G|DM9h<;cXP$_|QU<1uS zA+Q3yCS(=Q-GS>W$jY)X(^g#U&jLdE~7a<$OZX1fz5cGs(x)4TjeS)oX+wtk;t;i^YsBx|#ls^a^v_d$>HCP%$ WmD?=IMPq}NDGMwsje&RW&;J7G%j*aL 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); } }