1 package net.osdn.gokigen.cameratest.fuji;
3 import android.util.Log;
5 import androidx.annotation.NonNull;
7 public class Connection
9 private final String TAG = toString();
10 private final MessageSequence sequence;
11 private final Communication comm;
13 public Connection(@NonNull ILiveViewImage imageViewer)
15 this.comm = new Communication(imageViewer);
16 this.sequence = new MessageSequence();
19 public boolean start_connect()
23 if (connect_to_camera())
25 ret = get_current_settings();
30 private boolean connect_to_camera()
34 ReceivedDataHolder rx_bytes;
35 comm.connect_socket();
37 comm.send_to_camera(sequence.registration_message(), false);
38 rx_bytes = comm.receive_from_camera();
39 dump_bytes(0, rx_bytes);
42 // 応答エラーの場合は この値が返ってくるはず = {0x05, 0x00, 0x00, 0x00, 0x19, 0x20, 0x00, 0x00};
45 comm.send_to_camera(sequence.start_message(), false);
46 rx_bytes = comm.receive_from_camera();
47 dump_bytes(1, rx_bytes);
50 // なんだろう?? (送信が必要なようだが)
51 comm.send_to_camera(sequence.start_message2(), false);
52 rx_bytes = comm.receive_from_camera();
53 dump_bytes(2, rx_bytes);
56 // two_part messageを発行 (その1)
57 comm.send_to_camera(sequence.start_message3_1(), false);
58 rx_bytes = comm.receive_from_camera();
59 dump_bytes(3, rx_bytes);
62 // two_part messageを発行 (その2)
63 comm.send_to_camera(sequence.start_message3_2(), false);
64 rx_bytes = comm.receive_from_camera();
65 dump_bytes(4, rx_bytes);
69 comm.send_to_camera(sequence.start_message4(), false);
70 rx_bytes = comm.receive_from_camera();
71 dump_bytes(5, rx_bytes);
74 // two_part messageを発行 (その1)
75 comm.send_to_camera(sequence.start_message5_1(), false);
76 rx_bytes = comm.receive_from_camera();
77 dump_bytes(6, rx_bytes);
80 // two_part messageを発行 (その2)
81 comm.send_to_camera(sequence.start_message5_2(), false);
82 rx_bytes = comm.receive_from_camera();
83 dump_bytes(7, rx_bytes);
87 comm.send_to_camera(sequence.start_message6(), false);
88 rx_bytes = comm.receive_from_camera();
89 dump_bytes(8, rx_bytes);
93 comm.send_to_camera(sequence.start_message7(), false);
94 rx_bytes = comm.receive_from_camera();
95 dump_bytes(9, rx_bytes);
99 comm.send_to_camera(sequence.start_message8(), false);
100 rx_bytes = comm.receive_from_camera();
101 dump_bytes(10, rx_bytes);
105 comm.send_to_camera(sequence.start_message9(), false);
107 // 応答OKの場合は、8バイト ({0x03, 0x00, 0x01, 0x20} + {0x10, 0x02, 0x00, 0x00} )が応答されるはず
108 rx_bytes = comm.receive_from_camera();
109 dump_bytes(11, rx_bytes);
113 // 別のポートもオープンして動作を行う。 (1500ms程度待つといけるみたいだ...)
116 comm.start_response();
118 Log.v(TAG, "connect_to_camera DONE.");
128 public void reset_to_camera()
132 comm.send_to_camera(sequence.reset_message(), true);
133 ReceivedDataHolder rx_bytes = comm.receive_from_camera();
134 dump_bytes(0, rx_bytes);
143 public void disconnect()
148 comm.stop_response();
149 comm.disconnect_socket();
157 private boolean get_current_settings()
161 comm.send_to_camera(sequence.status_request_message(), true);
163 ReceivedDataHolder rx_bytes = comm.receive_from_camera();
164 dump_bytes(12, rx_bytes);
167 rx_bytes = comm.receive_from_camera();
168 dump_bytes(13, rx_bytes);
178 private void dump_bytes(int indexNumber, ReceivedDataHolder data)
181 StringBuffer message;
182 message = new StringBuffer();
183 for (byte item : data.getData())
186 message.append(String.format("%02x ", item));
189 Log.v(TAG, " RX [" + indexNumber + "] " + message);
191 message = new StringBuffer();
196 Log.v(TAG, " RX [" + indexNumber + "] " + message);
201 public boolean execute_shutter()
205 comm.send_to_camera(sequence.execute_shutter_message(), true);
207 ReceivedDataHolder rx_bytes = comm.receive_from_camera();
208 dump_bytes(14, rx_bytes);
210 // なんで2回受信... でもやってみる
211 rx_bytes = comm.receive_from_camera();
212 dump_bytes(15, rx_bytes);