diff --git a/.classpath b/.classpath
new file mode 100644
index 0000000..0eb4515
--- /dev/null
+++ b/.classpath
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
diff --git a/.project b/.project
new file mode 100644
index 0000000..ed216f2
--- /dev/null
+++ b/.project
@@ -0,0 +1,17 @@
+
+
+ org.hwo.pulscounter
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..8000cd6
--- /dev/null
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,11 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/src/org/hwo/pulscounter/CounterChannel.java b/src/org/hwo/pulscounter/CounterChannel.java
new file mode 100644
index 0000000..2f96864
--- /dev/null
+++ b/src/org/hwo/pulscounter/CounterChannel.java
@@ -0,0 +1,29 @@
+package org.hwo.pulscounter;
+
+import org.hwo.models.TableMapper.TableColumn;
+
+public class CounterChannel {
+
+ @TableColumn(label="Kanal",firstColumn=true)
+ private Integer channel;
+ @TableColumn(label="Zhlerstand",after="Kanal")
+ public Integer value;
+ @TableColumn(label="Korrekturwert",after="Zhlerstand")
+ public Integer correct;
+
+ @TableColumn(label="Ergebnis",after="Korrekturwert")
+ private Integer correctedValue()
+ {
+ return value + correct;
+ }
+
+ public CounterChannel(int ch)
+ {
+ channel = ch;
+ value = 0;
+ correct = 0;
+ }
+
+
+
+}
diff --git a/src/org/hwo/pulscounter/PulsCounter.java b/src/org/hwo/pulscounter/PulsCounter.java
new file mode 100644
index 0000000..e40c1eb
--- /dev/null
+++ b/src/org/hwo/pulscounter/PulsCounter.java
@@ -0,0 +1,20 @@
+package org.hwo.pulscounter;
+
+public class PulsCounter {
+
+
+ public static void main(String args[])
+ {
+
+ PulsCounterWindow window = new PulsCounterWindow();
+ window.setVisible(true);
+
+
+
+ }
+
+
+
+
+
+}
diff --git a/src/org/hwo/pulscounter/PulsCounterInterface.java b/src/org/hwo/pulscounter/PulsCounterInterface.java
new file mode 100644
index 0000000..d4ff928
--- /dev/null
+++ b/src/org/hwo/pulscounter/PulsCounterInterface.java
@@ -0,0 +1,37 @@
+package org.hwo.pulscounter;
+
+import java.io.RandomAccessFile;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.hwo.io.SerialPort;
+
+public class PulsCounterInterface {
+
+ SerialPort port;
+
+ public PulsCounterInterface(String portName)
+ {
+ port = new SerialPort(portName);
+ }
+
+ public List readCounter()
+ {
+ ArrayList counter = new ArrayList();
+
+ /*
+ if (port.open())
+ {
+ port.close();
+ }
+ */
+ for (int i=0;i<32;i++)
+ counter.add( i * i);
+
+ return counter;
+ }
+
+
+
+
+}
diff --git a/src/org/hwo/pulscounter/PulsCounterWindow.java b/src/org/hwo/pulscounter/PulsCounterWindow.java
new file mode 100644
index 0000000..fb91d50
--- /dev/null
+++ b/src/org/hwo/pulscounter/PulsCounterWindow.java
@@ -0,0 +1,229 @@
+package org.hwo.pulscounter;
+
+import java.awt.EventQueue;
+
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import java.awt.BorderLayout;
+
+import javax.swing.JButton;
+
+import java.awt.GridBagLayout;
+import java.awt.GridBagConstraints;
+
+import javax.swing.JLabel;
+import javax.swing.JComboBox;
+
+import org.hwo.csv.CSV;
+import org.hwo.io.SerialPort;
+import org.hwo.models.TableMapper.TableMapper;
+
+import java.awt.Insets;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.prefs.Preferences;
+
+import javax.swing.JTable;
+import javax.swing.JScrollPane;
+
+import java.awt.event.ActionListener;
+import java.awt.event.ActionEvent;
+
+public class PulsCounterWindow extends JFrame{
+ private JComboBox cbInterfaces;
+ private JTable tCounter;
+
+ private TableMapper tmCounter;
+ private Preferences prefs;
+ private List counterChannels;
+
+ List timeBarriers;
+
+
+ public PulsCounterWindow() {
+ setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
+ setBounds(100, 100, 732, 350);
+ setTitle("PulsCounter");
+ GridBagLayout gridBagLayout = new GridBagLayout();
+ gridBagLayout.columnWidths = new int[]{0, 0};
+ gridBagLayout.rowHeights = new int[]{0, 0, 0};
+ gridBagLayout.columnWeights = new double[]{1.0, Double.MIN_VALUE};
+ gridBagLayout.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
+ getContentPane().setLayout(gridBagLayout);
+
+ JPanel panel = new JPanel();
+ GridBagConstraints gbc_panel = new GridBagConstraints();
+ gbc_panel.insets = new Insets(0, 0, 5, 0);
+ gbc_panel.fill = GridBagConstraints.BOTH;
+ gbc_panel.gridx = 0;
+ gbc_panel.gridy = 0;
+ getContentPane().add(panel, gbc_panel);
+ GridBagLayout gbl_panel = new GridBagLayout();
+ gbl_panel.columnWidths = new int[]{0, 0, 0, 0, 0, 0};
+ gbl_panel.rowHeights = new int[]{0, 0, 0};
+ gbl_panel.columnWeights = new double[]{0.0, 1.0, 0.0, 0.0, 0.0, Double.MIN_VALUE};
+ gbl_panel.rowWeights = new double[]{0.0, 1.0, Double.MIN_VALUE};
+ panel.setLayout(gbl_panel);
+
+ JLabel lblNewLabel = new JLabel("Schnittstelle:");
+ GridBagConstraints gbc_lblNewLabel = new GridBagConstraints();
+ gbc_lblNewLabel.insets = new Insets(0, 0, 5, 5);
+ gbc_lblNewLabel.anchor = GridBagConstraints.WEST;
+ gbc_lblNewLabel.gridx = 0;
+ gbc_lblNewLabel.gridy = 0;
+ panel.add(lblNewLabel, gbc_lblNewLabel);
+
+ cbInterfaces = new JComboBox();
+ cbInterfaces.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent arg0) {
+
+ System.err.println("Save Pref PORT");
+
+ prefs.put("io.port", cbInterfaces.getSelectedItem().toString());
+ try
+ {
+ prefs.sync();
+ } catch (Exception e)
+ {
+ System.err.println("Exception: " + e);
+ e.printStackTrace();
+ }
+ }
+ });
+ GridBagConstraints gbc_cbInterfaces = new GridBagConstraints();
+ gbc_cbInterfaces.insets = new Insets(0, 0, 5, 5);
+ gbc_cbInterfaces.fill = GridBagConstraints.HORIZONTAL;
+ gbc_cbInterfaces.gridx = 1;
+ gbc_cbInterfaces.gridy = 0;
+ panel.add(cbInterfaces, gbc_cbInterfaces);
+
+ JButton btnNewButton = new JButton("Jetzt aktualisieren...");
+ btnNewButton.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent arg0) {
+ updateCounter();
+ }
+ });
+ GridBagConstraints gbc_btnNewButton = new GridBagConstraints();
+ gbc_btnNewButton.insets = new Insets(0, 0, 5, 5);
+ gbc_btnNewButton.gridx = 2;
+ gbc_btnNewButton.gridy = 0;
+ panel.add(btnNewButton, gbc_btnNewButton);
+
+ JButton btnTagesdateiSchreiben = new JButton("Tagesdatei schreiben...");
+ btnTagesdateiSchreiben.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent arg0) {
+ writeDayFile();
+ }
+ });
+ GridBagConstraints gbc_btnTagesdateiSchreiben = new GridBagConstraints();
+ gbc_btnTagesdateiSchreiben.insets = new Insets(0, 0, 5, 5);
+ gbc_btnTagesdateiSchreiben.gridx = 3;
+ gbc_btnTagesdateiSchreiben.gridy = 0;
+ panel.add(btnTagesdateiSchreiben, gbc_btnTagesdateiSchreiben);
+
+ JButton btnNewButton_1 = new JButton("New button");
+ GridBagConstraints gbc_btnNewButton_1 = new GridBagConstraints();
+ gbc_btnNewButton_1.insets = new Insets(0, 0, 5, 0);
+ gbc_btnNewButton_1.gridx = 4;
+ gbc_btnNewButton_1.gridy = 0;
+ panel.add(btnNewButton_1, gbc_btnNewButton_1);
+
+ JScrollPane scrollPane = new JScrollPane();
+ GridBagConstraints gbc_scrollPane = new GridBagConstraints();
+ gbc_scrollPane.fill = GridBagConstraints.BOTH;
+ gbc_scrollPane.gridx = 0;
+ gbc_scrollPane.gridy = 1;
+ getContentPane().add(scrollPane, gbc_scrollPane);
+
+ tCounter = new JTable();
+ scrollPane.setViewportView(tCounter);
+
+
+ initialize();
+ }
+
+ private void initialize() {
+
+ prefs = Preferences.userRoot();
+
+ String defaultPort = prefs.get("io.port", "COM1");
+
+ for (String portName:SerialPort.getPortNames())
+ cbInterfaces.addItem(portName);
+
+ System.err.println("Default Port: " + defaultPort);
+
+ for (int i=0;i < cbInterfaces.getItemCount();i++)
+ {
+ if (cbInterfaces.getItemAt(i).equals(defaultPort))
+ cbInterfaces.setSelectedIndex(i);
+ }
+
+ counterChannels = new ArrayList();
+ for (int i=0;i<32;i++)
+ counterChannels.add(new CounterChannel( i + 1) );
+
+ tmCounter = new TableMapper(CounterChannel.class, tCounter);
+ tmCounter.setRows(counterChannels);
+ tmCounter.getColumnInfo().get(0).setReadOnly(true);
+ tmCounter.getColumnInfo().get(1).setReadOnly(true);
+ tmCounter.getColumnInfo().get(3).setReadOnly(true);
+
+ timeBarriers = new ArrayList();
+
+ timeBarriers.add(new TimeBarrier(01,00));
+ timeBarriers.add(new TimeBarrier(03,00));
+ timeBarriers.add(new TimeBarrier(06,00));
+
+ }
+
+ private void updateCounter()
+ {
+ PulsCounterInterface intf = new PulsCounterInterface(cbInterfaces.getSelectedItem().toString());
+
+ List values = intf.readCounter();
+ for (int i=0;i values;
+
+ public TimeBarrier(Integer timeOfDay)
+ {
+ this.timeOfDay = timeOfDay;
+ values = new ArrayList();
+ load();
+ }
+
+ public TimeBarrier(Integer HourOfDay,Integer MinuteOfDay)
+ {
+ this.timeOfDay = (HourOfDay * 60) + MinuteOfDay;
+ values = new ArrayList();
+ load();
+ }
+
+
+
+ public void update(List values)
+ {
+ Date date = new Date();
+ int now = (date.getHours() * 60) + date.getMinutes();
+
+ if (now < timeOfDay)
+ {
+ this.values.clear();
+ for (Integer v: values)
+ this.values.add(v);
+ }
+ }
+
+ public void save()
+ {
+ CSV csv = new CSV();
+ for (Integer i:values)
+ csv.getCells().add(new String[]{i.toString()});
+
+
+ csv.saveToFile(String.format("day-%d.csv", timeOfDay));
+ }
+
+ public void load()
+ {
+ CSV csv = new CSV();
+ csv.readFromFile(String.format("day-%d.csv", timeOfDay));
+
+ for (String[] row: csv.getCells())
+ this.values.add(Integer.parseInt(row[0]));
+
+ }
+
+
+}