--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+ <component name="Encoding" addBOMForNewFiles="with NO BOM" />
+</project>
\ No newline at end of file
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()
{
dos = null;
try
{
+ bufferedReader.close();
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ bufferedReader = null;
+
+/*
+ try
+ {
dis.close();
}
e.printStackTrace();
}
dis = null;
+*/
try
{
socket.close();
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.");
}
}
- 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)
{
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]);
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} )が応答されるはず
}
- 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));
--- /dev/null
+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();
+ }
+ }
+ }
+
+
+
+
+}
// 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,
(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,
+*/
});
}
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
});
}
+
+ 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[] {
--- /dev/null
+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);
+ }
+}
}
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