Browse Source

ringbuffer wip

Martin Kunz 5 years ago
parent
commit
6bd4d96358

+ 14 - 8
src/main/java/at/acdp/urweb/sclient/Log.java

@@ -7,22 +7,28 @@ import java.util.Arrays;
 
 public class Log {
     private final static int LENGTH=100;
-    public ILogentry[] list=new ILogentry[LENGTH];
-    private int pos=0;
+    private static ILogentry[] list=new ILogentry[LENGTH];
+    private static int pos=0;
 
 
 
-    public void add(ILogentry le) {
+    public static void add(ILogentry le) {
         synchronized (list) {
-            list[pos]=le;
+            list[pos++%LENGTH]=le;
         }
     }
 
-    public void get(int from) {
+    public static void get(int from) {
         synchronized (list){
-            int idx=pos-from;
-            // ILogentry[] ret=new ILogentry[];
-            // System.arraycopy(list,from,ret,);
+            int length=LENGTH-from+pos;
+            ILogentry[] ret=new ILogentry[length];
+            int upperPos=from+length;
+            if(upperPos>LENGTH){
+                int lowerLength=upperPos-LENGTH;
+                upperPos=LENGTH;
+                System.arraycopy(list,0,ret,0,lowerLength);
+            }
+            System.arraycopy(list,from,ret,0,upperPos-from);
         }
 
     }

+ 16 - 17
src/main/java/at/acdp/urweb/sclient/SecondaryClient.java

@@ -28,12 +28,6 @@ public class SecondaryClient {
         this.rt = new Socket(ip, port);
         this.os = rt.getOutputStream();
         this.in = new CountDataInputStream(rt.getInputStream());
-//        byte[] data=new byte[4096];
-//        this.in.readFully(data);
-//        FileOutputStream fos = new FileOutputStream("data2.txt");
-//        fos.write(data);
-//        fos.close();
-
         VersionMessage vm = new VersionMessage();
         vm.read(in, -1);
         return vm;
@@ -70,38 +64,47 @@ public class SecondaryClient {
         switch (pType) {
             case PackageType.ROBOT_MODE_DATA:
                 var md=readRobotModeData(di, size);
+                Log.add(md);
                 log.info(md.toString());
                 break;
             case PackageType.JOINT_DATA:
                 var jd=readJointData(di, size);
+                Log.add(jd);
                 log.info(jd.toString());
                 break;
             case PackageType.TOOL_DATA:
                 var td=readToolData(di, size);
+                Log.add(td);
                 log.info(td.toString());
                 break;
             case PackageType.MASTERBOARD_DATA:
                 var mb=readMasterBoardData(di, size);
+                Log.add(mb);
                 log.info(mb.toString());
                 break;
             case PackageType.CARTESIAN_INFO:
                 var c=readCartesianInfo(di, size);
+                Log.add(c);
                 log.info(c.toString());
                 break;
             case PackageType.KINEMATICS_INFO:
                 var ki=readKinemsticsInfo(di, size);
+                Log.add(ki);
                 log.info(ki.toString());
                 break;
             case PackageType.CONFIGURATION_DATA:
                 var cd=readConfigurationData(di, size);
+                Log.add(cd);
                 log.info(cd.toString());
                 break;
             case PackageType.FORCE_MODE_DATA:
                 var fmd=readForceModeData(di, size);
+                Log.add(fmd);
                 log.info(fmd.toString());
                 break;
             case PackageType.ADDITIONAL_INFO:
                 var ai=readAdditionalInfo(di, size);
+                Log.add(ai);
                 log.info(ai.toString());
                 break;
             case PackageType.NEEDED_FOR_CALIB_DATA:
@@ -112,6 +115,7 @@ public class SecondaryClient {
                 break;
             case PackageType.TOOL_COMM_INFO:
                 var tci=readToolCommInfo(di, size);
+                Log.add(tci);
                 log.info(tci.toString());
                 break;
             default:
@@ -139,6 +143,12 @@ public class SecondaryClient {
         return td;
     }
 
+    private JointDataList readJointData(CountDataInputStream di, int size) throws IOException {
+        JointDataList td=new JointDataList();
+        td.read(di, size);
+        return td;
+    }
+
     private ToolCommInfo readToolCommInfo(CountDataInputStream di, int size) throws IOException {
         ToolCommInfo tci=new ToolCommInfo();
         tci.read(di, size);
@@ -220,17 +230,6 @@ public class SecondaryClient {
         return md;
     }
 
-    JointData[] readJointData(CountDataInputStream di, int size) throws IOException {
-        int joints = size / 41;
-        JointData[] jds = new JointData[size];
-        for (int i = 0; i < joints; i++) {
-            JointData jd = new JointData();
-            jd.read(di, size);
-            jds[i] = jd;
-        }
-        return jds;
-    }
-
 
     public void writeCmd(String cmd) {
         try {

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/CartesianInfo.java

@@ -5,7 +5,7 @@ import at.acdp.urweb.CountDataInputStream;
 import java.io.DataInputStream;
 import java.io.IOException;
 
-public class CartesianInfo implements IRead {
+public class CartesianInfo implements IRead, ILogentry {
     public double x,y,z;
     public double rx,ry,rz;
     public double tcpOffsetX,tcpOffsetY, tcpOffsetZ;

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/ConfigurationData.java

@@ -6,7 +6,7 @@ import java.io.DataInputStream;
 import java.io.IOException;
 import java.util.Arrays;
 
-public class ConfigurationData implements IRead {
+public class ConfigurationData implements IRead, ILogentry {
 
     double[] jointMinLimit=new double[6];
     double[] jointMaxLimit=new double[6];

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/ForceModeData.java

@@ -5,7 +5,7 @@ import at.acdp.urweb.CountDataInputStream;
 import java.io.DataInputStream;
 import java.io.IOException;
 
-public class ForceModeData implements IRead{
+public class ForceModeData implements IRead, ILogentry {
     public double x,y,z;
     public double rx, ry, rz;
     public double robotDexterity;

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/JointData.java

@@ -6,7 +6,7 @@ import java.io.DataInputStream;
 import java.io.IOException;
 
 //49 byte
-public class JointData implements IRead{
+public class JointData implements IRead, ILogentry{
     double qActual;
     double qTarget;
     double qdActual;

+ 23 - 0
src/main/java/at/acdp/urweb/sclient/data/JointDataList.java

@@ -0,0 +1,23 @@
+package at.acdp.urweb.sclient.data;
+
+import at.acdp.urweb.CountDataInputStream;
+
+import java.io.IOException;
+
+//49 byte
+public class JointDataList implements IRead, ILogentry{
+    JointData[] jds;
+
+    //TODO: float/double propably wrong
+    //total length 41 bytes
+    public void read(CountDataInputStream di, int size) throws IOException {
+        int joints = size / 41;
+        JointData[] jds = new JointData[size];
+        for (int i = 0; i < joints; i++) {
+            JointData jd = new JointData();
+            jd.read(di, size);
+            jds[i] = jd;
+        }
+        this.jds=jds;
+    }
+}

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/KinematicsInfo.java

@@ -6,7 +6,7 @@ import java.io.DataInputStream;
 import java.io.IOException;
 import java.util.Arrays;
 
-public class KinematicsInfo implements IRead{
+public class KinematicsInfo implements IRead, ILogentry {
 
     public byte[] internalData;
     public void read(CountDataInputStream di, int size) throws IOException {

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/MasterBoardData.java

@@ -4,7 +4,7 @@ import at.acdp.urweb.CountDataInputStream;
 
 import java.io.IOException;
 
-public class MasterBoardData implements IRead {
+public class MasterBoardData implements IRead, ILogentry {
     int digitalInputBits;
     int digitalOutputBits;
     int analogInputRange0;

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/ModeData.java

@@ -4,7 +4,7 @@ import at.acdp.urweb.CountDataInputStream;
 
 import java.io.IOException;
 
-public class ModeData implements IRead{
+public class ModeData implements IRead, ILogentry {
     public boolean realRobotConnected;
     public boolean realRobotEnabled;
     public boolean robotPoweredOn;

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/ToolCommInfo.java

@@ -5,7 +5,7 @@ import at.acdp.urweb.CountDataInputStream;
 import java.io.DataInputStream;
 import java.io.IOException;
 
-public class ToolCommInfo implements IRead {
+public class ToolCommInfo implements IRead, ILogentry {
     public boolean toolCommunicationEnabled;
     public int baudrate;
     public int parity;

+ 1 - 1
src/main/java/at/acdp/urweb/sclient/data/ToolData.java

@@ -4,7 +4,7 @@ import at.acdp.urweb.CountDataInputStream;
 
 import java.io.IOException;
 
-public class ToolData implements IRead{
+public class ToolData implements IRead, ILogentry {
 
     int		analogInputRange0;
     int		analogInputRange1;

+ 3 - 4
webroot/index.html

@@ -15,7 +15,7 @@
     <button v-on:click="send">send</button>
 </div>
 
-<script>
+<script type="text/ecmascript">
     new Vue({
         el: '#app',
         data: {
@@ -40,13 +40,12 @@
             },
             update: function (event) {
                 fetch('/log', {method: "GET"})
-                    .then(function (value) {
-                        this.data.log=value;
+                    .then((value) => {
+                        this.$data.log=value;
                     })
             }
         }
     })
 </script>
-
 </body>
 </html>