OSDN Git Service

ステータス受信準備。
authorMRSa <mrsa@myad.jp>
Thu, 9 May 2019 15:41:50 +0000 (00:41 +0900)
committerMRSa <mrsa@myad.jp>
Thu, 9 May 2019 15:41:50 +0000 (00:41 +0900)
app/src/main/java/net/osdn/gokigen/cameratest/camtest/CamTest.java
app/src/main/java/net/osdn/gokigen/cameratest/fuji/Connection.java
app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/FujiStatusChecker.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/IFujiStatusReceive.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/IFujiStatusRequest.java [new file with mode: 0644]

index 50b1fbf..9a466a0 100644 (file)
@@ -463,7 +463,7 @@ public class CamTest implements View.OnClickListener, View.OnTouchListener, ILiv
         try
         {
             ImageView imageView = activity.findViewById(R.id.imageView);
-            return (new PointF(((event.getX() / (float) imageView.getWidth()) * 100.0f), ((event.getY() / (float) imageView.getHeight()) * 100.0f)));
+            return (new PointF(((event.getX() / (float) imageView.getWidth()) * 255.0f), ((event.getY() / (float) imageView.getHeight()) * 255.0f)));
         }
         catch (Exception e)
         {
index 267e162..f78cb8c 100644 (file)
@@ -5,16 +5,21 @@ import android.util.Log;
 
 import androidx.annotation.NonNull;
 
-public class Connection
+import net.osdn.gokigen.cameratest.fuji.statuses.FujiStatusChecker;
+import net.osdn.gokigen.cameratest.fuji.statuses.IFujiStatusRequest;
+
+public class Connection implements IFujiStatusRequest
 {
     private final String TAG = toString();
     private final MessageSequence sequence;
     private final Communication comm;
+    private final FujiStatusChecker statusChecker;
 
     public Connection(@NonNull ILiveViewImage imageViewer)
     {
         this.comm = new Communication(imageViewer);
         this.sequence = new MessageSequence();
+        this.statusChecker = new FujiStatusChecker(this);
     }
 
     public boolean start_connect()
@@ -23,7 +28,12 @@ public class Connection
 
         if (connect_to_camera())
         {
-            ret = get_current_settings();
+            ret = requestStatus();
+            if (ret)
+            {
+                // 定期監視の開始
+                statusChecker.start();
+            }
         }
         return (ret);
     }
@@ -133,6 +143,7 @@ public class Connection
             comm.send_to_camera(sequence.reset_message(), true);
             ReceivedDataHolder rx_bytes = comm.receive_from_camera();
             dump_bytes(0, rx_bytes);
+            statusChecker.stop();
             Thread.sleep(150);
         }
         catch (Exception e)
@@ -155,19 +166,24 @@ public class Connection
         }
     }
 
-    private boolean get_current_settings()
+    @Override
+    public boolean requestStatus()
     {
         try
         {
             comm.send_to_camera(sequence.status_request_message(), true);
-
+            //Thread.sleep(30);// ちょっと待つ
             ReceivedDataHolder rx_bytes = comm.receive_from_camera();
+            if (rx_bytes.getData().length > 0) {
+                statusChecker.statusReceived(rx_bytes);
+            }
             dump_bytes(12, rx_bytes);
 
             // なんで2回... でもやってみる
             rx_bytes = comm.receive_from_camera();
             dump_bytes(13, rx_bytes);
 
+            return (true);
         }
         catch (Exception e)
         {
diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/FujiStatusChecker.java b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/FujiStatusChecker.java
new file mode 100644 (file)
index 0000000..912a1b0
--- /dev/null
@@ -0,0 +1,88 @@
+package net.osdn.gokigen.cameratest.fuji.statuses;
+
+import android.util.Log;
+
+import net.osdn.gokigen.cameratest.fuji.ReceivedDataHolder;
+
+public class FujiStatusChecker implements IFujiStatusReceive
+{
+    private final String TAG = toString();
+    private final IFujiStatusRequest comm;
+    private boolean threadIsRunning = false;
+    private final int WAIT_MS = 400;
+
+    public FujiStatusChecker(IFujiStatusRequest comm)
+    {
+        this.comm = comm;
+    }
+
+    @Override
+    public void statusReceived(ReceivedDataHolder data)
+    {
+        statusReceivedImpl(data.getData());
+    }
+
+    @Override
+    public void statusReceived2nd(ReceivedDataHolder data)
+    {
+        statusReceivedImpl(data.getData());
+    }
+
+    @Override
+    public void start()
+    {
+        Thread thread = new Thread(new Runnable() {
+            @Override
+            public void run()
+            {
+                try
+                {
+                    threadIsRunning = true;
+                    while (threadIsRunning)
+                    {
+                        comm.requestStatus();
+                        Thread.sleep(WAIT_MS);
+                    }
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                }
+                threadIsRunning = false;
+                Log.v(TAG, "--- FINISH STATUS WATCH ---");
+
+            }
+        });
+        try
+        {
+            if (!threadIsRunning)
+            {
+                Log.v(TAG, "--- START STATUS WATCH ---");
+                thread.start();
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+    @Override
+    public void stop()
+    {
+        threadIsRunning = false;
+    }
+
+    private void statusReceivedImpl(byte[] data)
+    {
+        try
+        {
+            Log.v(TAG, "status Received. " + data.length + " bytes.");
+
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/IFujiStatusReceive.java b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/IFujiStatusReceive.java
new file mode 100644 (file)
index 0000000..b3ded14
--- /dev/null
@@ -0,0 +1,11 @@
+package net.osdn.gokigen.cameratest.fuji.statuses;
+
+import net.osdn.gokigen.cameratest.fuji.ReceivedDataHolder;
+
+public interface IFujiStatusReceive
+{
+    void start();
+    void stop();
+    void statusReceived(ReceivedDataHolder data);
+    void statusReceived2nd(ReceivedDataHolder data);
+}
diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/IFujiStatusRequest.java b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/statuses/IFujiStatusRequest.java
new file mode 100644 (file)
index 0000000..90dffad
--- /dev/null
@@ -0,0 +1,6 @@
+package net.osdn.gokigen.cameratest.fuji.statuses;
+
+public interface IFujiStatusRequest
+{
+     boolean requestStatus();
+}