1 package net.osdn.gokigen.cameratest.fuji;
3 import android.graphics.PointF;
4 import android.util.Log;
6 import androidx.annotation.NonNull;
8 public class Connection
10 private final String TAG = toString();
11 private final MessageSequence sequence;
12 private final Communication comm;
14 public Connection(@NonNull ILiveViewImage imageViewer)
16 this.comm = new Communication(imageViewer);
17 this.sequence = new MessageSequence();
20 public boolean start_connect()
24 if (connect_to_camera())
26 ret = get_current_settings();
31 private boolean connect_to_camera()
35 ReceivedDataHolder rx_bytes;
36 comm.connect_socket();
38 comm.send_to_camera(sequence.registration_message(), false);
39 rx_bytes = comm.receive_from_camera();
40 dump_bytes(0, rx_bytes);
43 // 応答エラーの場合は この値が返ってくるはず = {0x05, 0x00, 0x00, 0x00, 0x19, 0x20, 0x00, 0x00};
46 comm.send_to_camera(sequence.start_message(), false);
47 rx_bytes = comm.receive_from_camera();
48 dump_bytes(1, rx_bytes);
51 // なんだろう?? (送信が必要なようだが)
52 comm.send_to_camera(sequence.start_message2(), false);
53 rx_bytes = comm.receive_from_camera();
54 dump_bytes(2, rx_bytes);
57 // two_part messageを発行 (その1)
58 comm.send_to_camera(sequence.start_message3_1(), false);
59 rx_bytes = comm.receive_from_camera();
60 dump_bytes(3, rx_bytes);
63 // two_part messageを発行 (その2)
64 comm.send_to_camera(sequence.start_message3_2(), false);
65 rx_bytes = comm.receive_from_camera();
66 dump_bytes(4, rx_bytes);
70 comm.send_to_camera(sequence.start_message4(), false);
71 rx_bytes = comm.receive_from_camera();
72 dump_bytes(5, rx_bytes);
75 // two_part messageを発行 (その1)
76 comm.send_to_camera(sequence.start_message5_1(), false);
77 rx_bytes = comm.receive_from_camera();
78 dump_bytes(6, rx_bytes);
81 // two_part messageを発行 (その2)
82 comm.send_to_camera(sequence.start_message5_2(), false);
83 rx_bytes = comm.receive_from_camera();
84 dump_bytes(7, rx_bytes);
88 comm.send_to_camera(sequence.start_message6(), false);
89 rx_bytes = comm.receive_from_camera();
90 dump_bytes(8, rx_bytes);
94 comm.send_to_camera(sequence.start_message7(), false);
95 rx_bytes = comm.receive_from_camera();
96 dump_bytes(9, rx_bytes);
100 comm.send_to_camera(sequence.start_message8(), false);
101 rx_bytes = comm.receive_from_camera();
102 dump_bytes(10, rx_bytes);
106 comm.send_to_camera(sequence.start_message9(), false);
108 // 応答OKの場合は、8バイト ({0x03, 0x00, 0x01, 0x20} + {0x10, 0x02, 0x00, 0x00} )が応答されるはず
109 rx_bytes = comm.receive_from_camera();
110 dump_bytes(11, rx_bytes);
114 // 別のポートもオープンして動作を行う。 (1500ms程度待つといけるみたいだ...)
117 comm.start_response();
119 Log.v(TAG, "connect_to_camera DONE.");
129 public void reset_to_camera()
133 comm.send_to_camera(sequence.reset_message(), true);
134 ReceivedDataHolder rx_bytes = comm.receive_from_camera();
135 dump_bytes(0, rx_bytes);
144 public void disconnect()
149 comm.stop_response();
150 comm.disconnect_socket();
158 private boolean get_current_settings()
162 comm.send_to_camera(sequence.status_request_message(), true);
164 ReceivedDataHolder rx_bytes = comm.receive_from_camera();
165 dump_bytes(12, rx_bytes);
168 rx_bytes = comm.receive_from_camera();
169 dump_bytes(13, rx_bytes);
179 private void dump_bytes(int indexNumber, ReceivedDataHolder data)
182 StringBuffer message;
183 message = new StringBuffer();
184 for (byte item : data.getData())
187 message.append(String.format("%02x ", item));
190 Log.v(TAG, " RX [" + indexNumber + "] " + message);
192 message = new StringBuffer();
197 Log.v(TAG, " RX [" + indexNumber + "] " + message);
202 public boolean execute_focus_point(PointF point)
206 byte x = (byte) (0x000000ff & Math.round(point.x));
207 byte y = (byte) (0x000000ff & Math.round(point.y));
208 Log.v(TAG, "DRIVE AF (" + x + "," + y + ")");
210 comm.send_to_camera(sequence.execute_focus_lock(x, y), true);
212 ReceivedDataHolder rx_bytes = comm.receive_from_camera();
213 dump_bytes(16, rx_bytes);
222 public boolean execute_unlock_focus()
226 comm.send_to_camera(sequence.execute_focus_unlock(), true);
228 ReceivedDataHolder rx_bytes = comm.receive_from_camera();
229 dump_bytes(17, rx_bytes);
238 public boolean execute_shutter()
242 comm.send_to_camera(sequence.execute_shutter_message(), true);
244 ReceivedDataHolder rx_bytes = comm.receive_from_camera();
245 dump_bytes(14, rx_bytes);
247 // なんで2回受信... でもやってみる
248 rx_bytes = comm.receive_from_camera();
249 dump_bytes(15, rx_bytes);