OSDN Git Service

いったんコミットする。
authorMRSa <mrsa@myad.jp>
Tue, 30 Apr 2019 14:26:38 +0000 (23:26 +0900)
committerMRSa <mrsa@myad.jp>
Tue, 30 Apr 2019 14:26:38 +0000 (23:26 +0900)
.idea/encodings.xml [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/cameratest/fuji/Communication.java
app/src/main/java/net/osdn/gokigen/cameratest/fuji/Connection.java
app/src/main/java/net/osdn/gokigen/cameratest/fuji/FujiStreamReceiver.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/cameratest/fuji/MessageSequence.java
app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedData.java [new file with mode: 0644]
build.gradle

diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644 (file)
index 0000000..15a15b2
--- /dev/null
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>
\ No newline at end of file
index 1ef6ed1..5567e03 100644 (file)
@@ -16,16 +16,18 @@ class Communication
     private final String TAG = toString();
     private static final int BUFFER_SIZE = 131072 + 4;
 
-    private String camera_ip = "192.168.0.1";
-    private int camera_port = 55740;
+    private static final int CONTROL_PORT = 55740;
+    private static final int ASYNC_RESPONSE_PORT = 55741;
+    private static final int STREAM_PORT = 55742;
 
-//private final int control_server_port = 55740;
-//private final int async_response_server_port = 55741;
-//private final int jpg_stream_server_port = 55742;
+    private String camera_ip = "192.168.0.1";
+    private int camera_port = CONTROL_PORT;
 
     private Socket socket = null;
     private DataOutputStream dos = null;
-    private DataInputStream dis = null;
+    //private DataInputStream dis = null;
+    BufferedReader bufferedReader = null;
+
 
     Communication()
     {
@@ -59,6 +61,17 @@ class Communication
         dos = null;
         try
         {
+            bufferedReader.close();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        bufferedReader = null;
+
+/*
+        try
+        {
             dis.close();
 
         }
@@ -67,6 +80,7 @@ class Communication
             e.printStackTrace();
         }
         dis = null;
+*/
         try
         {
             socket.close();
@@ -86,14 +100,23 @@ class Communication
         try
         {
             dos = new DataOutputStream(socket.getOutputStream());
+            //bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+            //dis = new DataInputStream(socket.getInputStream());
 
             // 最初に4バイトのレングス長をつけて送る
             byte[] sendData = new byte[byte_array.length + 4];
 
+/*
             sendData[0] = 0x00;
             sendData[1] = 0x00;
             sendData[2] = 0x00;
             sendData[3] = (byte) (byte_array.length + 4);
+*/
+            sendData[0] = (byte) (byte_array.length + 4);
+            sendData[1] = 0x00;
+            sendData[2] = 0x00;
+            sendData[3] = 0x00;
+
             System.arraycopy(byte_array,0,sendData,4, byte_array.length);
 
             Log.v(TAG, "send_to_camera() : WRITE " + sendData.length + " bytes.");
@@ -109,31 +132,99 @@ class Communication
         }
     }
 
-    byte[] receive_from_camera()
+    ReceivedData receive_from_camera()
     {
         int receive_bytes = 0;
+        InputStreamReader isr = null;
         byte[] byte_array = new byte[BUFFER_SIZE];
         try
         {
-            InputStream is = socket.getInputStream();
-            if (is == null)
-            {
-                Log.v(TAG, "input stream is null.");
-                return (new byte[0]);
-            }
+            Log.v(TAG, "receive_from_camera() : start.");
+             isr  = new InputStreamReader(socket.getInputStream());
+
+            int data = isr.read();
+            Log.v(TAG, "receive_from_camera() : #1 ");
 
-            BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
-            int data = 0x00;
             int read_bytes = 0;
-            while ((data = reader.read()) != -1 )
+            //while (data != -1)
+            while ((data >= 0)&&(data <= 255))
             {
+                Log.v(TAG, "receive_from_camera() : #2 (" + read_bytes + ") " + data);
+
                 byte_array[read_bytes] = (byte) data;
                 read_bytes++;
+                data = isr.read();
             }
             receive_bytes = read_bytes;
 
+            //isr.close();
 
+            /*
+            dis = new DataInputStream(socket.getInputStream());
+            //BufferedInputStream stream = new BufferedInputStream(is);
+            while (receive_bytes < BUFFER_SIZE)
+            {
+                int data = dis.read();
+                if (data < 0)
+                {
+                    break;
+                }
+                //byte data = dis.readByte();
+                byte_array[receive_bytes] = (byte )data;
+                receive_bytes++;
+            }
+*/
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
 /*
+        if (receive_bytes > 0)
+        {
+            dump_bytes("RECEIVE ", byte_array);
+        }
+*/
+        Log.v(TAG, "receive_from_camera() : received " + receive_bytes + " bytes.");
+        if (receive_bytes < 0)
+        {
+            return (new ReceivedData(new byte[0], 0));
+        }
+        return (new ReceivedData(byte_array, receive_bytes));
+    }
+
+
+    byte[] receive_from_camera_keep()
+    {
+        int receive_bytes = 0;
+        byte[] byte_array = new byte[BUFFER_SIZE];
+        try
+        {
+            Log.v(TAG, "receive_from_camera() : start.");
+            if (bufferedReader == null)
+            {
+                bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+                //Log.v(TAG, " bufferedReader is null...");
+                //return (new byte[0]);
+            }
+            Log.v(TAG, "receive_from_camera() : #1 ");
+
+            //bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+            //BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
+            int data = bufferedReader.read();
+
+            int read_bytes = 0;
+            while (data != -1)
+            {
+                Log.v(TAG, "receive_from_camera() : #3 (" + read_bytes + ") " + data);
+
+                byte_array[read_bytes] = (byte) data;
+                read_bytes++;
+                data = bufferedReader.read();
+            }
+            receive_bytes = read_bytes;
+
+            /*
             dis = new DataInputStream(socket.getInputStream());
             //BufferedInputStream stream = new BufferedInputStream(is);
             while (receive_bytes < BUFFER_SIZE)
@@ -153,11 +244,13 @@ class Communication
         {
             e.printStackTrace();
         }
+/*
         if (receive_bytes > 0)
         {
             dump_bytes("RECEIVE ", byte_array);
         }
-        Log.v(TAG, " received : " + receive_bytes + " bytes.");
+*/
+        Log.v(TAG, "receive_from_camera() : received " + receive_bytes + " bytes.");
         if (receive_bytes < 4)
         {
             return (new byte[0]);
index df16469..c603367 100644 (file)
@@ -34,16 +34,24 @@ public class Connection
 
             comm.send_to_camera(sequence.registration_message());
 
-            byte[] rx_bytes = comm.receive_from_camera();
+            ReceivedData rx_bytes = comm.receive_from_camera();
             dump_bytes(indexNumber, rx_bytes);
             indexNumber++;
 /*
             応答エラーの場合は この値が返ってくるはず  = {0x05, 0x00, 0x00, 0x00, 0x19, 0x20, 0x00, 0x00};
 */
             comm.send_to_camera(sequence.start_message());
+
             rx_bytes = comm.receive_from_camera();
             dump_bytes(indexNumber, rx_bytes);
-            //indexNumber++;
+            indexNumber++;
+
+            comm.send_to_camera(sequence.start_message2());
+
+            //byte[] rx_bytes = comm.receive_from_camera();
+            rx_bytes = comm.receive_from_camera();
+            dump_bytes(indexNumber, rx_bytes);
+            indexNumber++;
 /*
             応答OKの場合は、8バイト ({0x03, 0x00, 0x01, 0x20} + {0x10, 0x02, 0x00, 0x00} )が応答されるはず
 
@@ -68,12 +76,12 @@ public class Connection
     }
 
 
-    private void dump_bytes(int indexNumber, byte[] data)
+    private void dump_bytes(int indexNumber,ReceivedData data)
     {
         int index = 0;
         StringBuffer message;
         message = new StringBuffer();
-        for (byte item : data)
+        for (byte item : data.getData())
         {
             index++;
             message.append(String.format("%02x ", item));
diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/FujiStreamReceiver.java b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/FujiStreamReceiver.java
new file mode 100644 (file)
index 0000000..e6f3785
--- /dev/null
@@ -0,0 +1,79 @@
+package net.osdn.gokigen.cameratest.fuji;
+
+import java.io.InputStream;
+import java.net.InetSocketAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+public class FujiStreamReceiver
+{
+    private final int portNumber;
+    private static final int WAIT_MS = 750;
+    private boolean isStart = false;
+
+    FujiStreamReceiver(int portNumber)
+    {
+        this.portNumber = portNumber;
+
+
+    }
+
+    void start()
+    {
+        isStart = true;
+        Thread thread = new Thread(new Runnable()
+        {
+            @Override
+            public void run()
+            {
+                try
+                {
+                    ServerSocket listener = new ServerSocket();
+                    listener.setReuseAddress(true);
+                    listener.bind(new InetSocketAddress(portNumber));
+                    watchMain(listener);
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                }
+            }
+        });
+        try
+        {
+            thread.start();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+    }
+
+
+    void stop()
+    {
+        isStart = false;
+    }
+
+    private void watchMain(ServerSocket listener)
+    {
+        while (isStart)
+        {
+            try
+            {
+                Socket socket = listener.accept();
+                InputStream from = socket.getInputStream();
+
+                Thread.sleep(WAIT_MS);
+            }
+            catch (Exception e)
+            {
+                e.printStackTrace();
+            }
+        }
+    }
+
+
+
+
+}
index 1d62374..e8c5536 100644 (file)
@@ -36,7 +36,25 @@ class MessageSequence
                 // header
                 (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0xf2, (byte)0xe4, (byte)0x53, (byte)0x8f,
                 (byte)0xad, (byte)0xa5, (byte)0x48, (byte)0x5d, (byte)0x87, (byte)0xb2, (byte)0x7f, (byte)0x0b,
-                (byte)0xd3, (byte)0xd5, (byte)0xde, (byte)0xd0, (byte)0x02, (byte)0x78, (byte)0xa8, (byte)0xc0,
+                (byte)0xd3, (byte)0xd5, (byte)0xde, (byte)0xd0, // (byte)0x02, (byte)0x78, (byte)0xa8, (byte)0xc0,
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+                // device_name 'ASUS_Z01BDA-2348'
+                (byte)0x41, (byte)0x00, (byte)0x53, (byte)0x00, (byte)0x55, (byte)0x00, (byte)0x53, (byte)0x00,
+                (byte)0x5f, (byte)0x00, (byte)0x5a, (byte)0x00, (byte)0x30, (byte)0x00, (byte)0x31, (byte)0x00,
+                (byte)0x42, (byte)0x00, (byte)0x44, (byte)0x00, (byte)0x41, (byte)0x00, (byte)0x2d, (byte)0x00,
+                (byte)0x32, (byte)0x00, (byte)0x33, (byte)0x00, (byte)0x34, (byte)0x00, (byte)0x38, (byte)0x00,
+
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+
+/*
+                (byte)0xb0, (byte)0x00, (byte)0xf5, (byte)0x00, (byte)0x5d, (byte)0x00, (byte)0xa1, (byte)0x00,
+                (byte)0x7f, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+*/
+/**/
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+/**/
+/*
                 // device_name 'GOKIGEN device 0'
                 (byte)0x47, (byte)0x00, (byte)0x4f, (byte)0x00, (byte)0x4b, (byte)0x00, (byte)0x49, (byte)0x00,
                 (byte)0x47, (byte)0x00, (byte)0x45, (byte)0x00, (byte)0x4e, (byte)0x00, (byte)0x00, (byte)0x00,
@@ -45,6 +63,7 @@ class MessageSequence
                 (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                 (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
                 (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+*/
         });
     }
 
@@ -59,6 +78,11 @@ class MessageSequence
     byte[] start_message()
     {
         return (new byte[] {
+/*
+                //  現物...
+                (byte) 0x01, (byte) 0x00, (byte) 0x02, (byte) 0x10, (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+                (byte) 0x01, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+*/
                 // START (0x1002)
                 (byte)0x10, (byte)0x02,
                 // index
@@ -68,6 +92,26 @@ class MessageSequence
         });
     }
 
+
+    byte[] start_message2()
+    {
+        return (new byte[] {
+                //
+                (byte) 0x01, (byte) 0x00, (byte) 0x15, (byte) 0x10, (byte) 0x02, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+                (byte) 0x12, (byte) 0xd2, (byte) 0x00, (byte) 0x00,
+/*
+                // START (0x1002)
+                (byte)0x10, (byte)0x02,
+                // index
+                (byte)0x00, (byte)0x01,
+                // data
+                (byte)0x01, (byte)0x00, (byte)0x00, (byte)0x00,
+*/
+        });
+    }
+
+
+
     byte[] two_part_message_One()
     {
         return (new byte[] {
diff --git a/app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedData.java b/app/src/main/java/net/osdn/gokigen/cameratest/fuji/ReceivedData.java
new file mode 100644 (file)
index 0000000..48eeaa4
--- /dev/null
@@ -0,0 +1,19 @@
+package net.osdn.gokigen.cameratest.fuji;
+
+import java.util.Arrays;
+
+class ReceivedData
+{
+    private final byte[] data;
+
+    ReceivedData(byte[] data, int length)
+    {
+        //this.data = new byte[length];
+        this.data = Arrays.copyOfRange(data, 0, length);
+    }
+
+    byte[] getData()
+    {
+        return (data);
+    }
+}
index e11a5b3..fafc1b9 100644 (file)
@@ -7,7 +7,7 @@ buildscript {
         
     }
     dependencies {
-        classpath 'com.android.tools.build:gradle:3.3.2'
+        classpath 'com.android.tools.build:gradle:3.4.0'
         
         // NOTE: Do not place your application dependencies here; they belong
         // in the individual module build.gradle files