1 package net.osdn.gokigen.pkremote.camera.vendor.ptpip.wrapper.command;
3 import android.util.Log;
5 import androidx.annotation.NonNull;
7 import java.io.InputStream;
8 import java.net.Socket;
10 public class PtpIpAsyncResponseReceiver implements IPtpIpCommunication
12 private final String TAG = toString();
13 private static final int ASYNC_RESPONSE_PORT = 15741; // ??
14 private static final int BUFFER_SIZE = 1280 + 8;
15 private static final int WAIT_MS = 250; // 250ms
16 private static final int ERROR_LIMIT = 30;
17 private IPtpIpCommandCallback receiver = null;
18 private boolean isStart = false;
20 public PtpIpAsyncResponseReceiver()
25 public void setEventSubscriber(@NonNull IPtpIpCommandCallback receiver)
27 this.receiver = receiver;
31 public boolean connect(@NonNull String ipAddress, int portNumber)
33 start(ipAddress, portNumber);
38 public void disconnect()
43 public void start(@NonNull String ipAddress, int portNumber)
51 Thread thread = new Thread(() -> {
54 Socket socket = new Socket(ipAddress, portNumber);
59 Log.v(TAG, " IP : " + ipAddress + " port : " + portNumber);
78 private void startReceive(Socket socket)
85 isr = socket.getInputStream();
86 byte_array = new byte[BUFFER_SIZE];
92 Log.v(TAG, "===== startReceive() aborted.");
95 Log.v(TAG, "startReceive() start.");
100 int read_bytes = isr.read(byte_array, 0, BUFFER_SIZE);
101 Log.v(TAG, "RECEIVE ASYNC : " + read_bytes + " bytes.");
102 if (receiver != null)
106 receiver.receivedMessage(0, byte_array);
110 ee.printStackTrace();
113 Thread.sleep(WAIT_MS);
121 if (errorCount > ERROR_LIMIT)
123 // エラーが連続でたくさん出たらループをストップさせる
136 Log.v(TAG, "startReceive() end.");