OSDN Git Service

とりあえず、軽くシャッターを切るところまで。
[gokigen/FujiCam.git] / app / src / main / java / net / osdn / gokigen / cameratest / fuji / Connection.java
1 package net.osdn.gokigen.cameratest.fuji;
2
3 import android.util.Log;
4
5 public class Connection
6 {
7     private final String TAG = toString();
8     private final MessageSequence sequence;
9     private final Communication comm;
10
11     public Connection()
12     {
13         this.comm = new Communication();
14         this.sequence = new MessageSequence();
15     }
16
17     public boolean start_connect()
18     {
19         boolean ret = false;
20
21         if (connect_to_camera())
22         {
23             ret = get_current_settings();
24         }
25         return (ret);
26     }
27
28
29     private boolean connect_to_camera()
30     {
31
32         try
33         {
34             int indexNumber = 0;
35             comm.connect_socket();
36
37             comm.send_to_camera(sequence.registration_message());
38
39             ReceivedData rx_bytes = comm.receive_from_camera();
40             dump_bytes(indexNumber, rx_bytes);
41             indexNumber++;
42 /*
43             応答エラーの場合は この値が返ってくるはず  = {0x05, 0x00, 0x00, 0x00, 0x19, 0x20, 0x00, 0x00};
44 */
45
46             // start_messageを送信
47             comm.send_to_camera(sequence.start_message());
48
49             rx_bytes = comm.receive_from_camera();
50             dump_bytes(indexNumber, rx_bytes);
51             indexNumber++;
52
53 /**/
54             //  なんだろう?? (必要なようだが)
55             comm.send_to_camera(sequence.start_message2());
56
57             rx_bytes = comm.receive_from_camera();
58             dump_bytes(indexNumber, rx_bytes);
59             indexNumber++;
60 /**/
61
62             // two_part messageを発行 (その1)
63             comm.send_to_camera(sequence.start_message3_1());
64
65             rx_bytes = comm.receive_from_camera();
66             dump_bytes(indexNumber, rx_bytes);
67             indexNumber++;
68
69             // two_part messageを発行 (その2)
70             comm.send_to_camera(sequence.start_message3_2());
71
72             rx_bytes = comm.receive_from_camera();
73             dump_bytes(indexNumber, rx_bytes);
74             indexNumber++;
75
76             // remote mode
77             comm.send_to_camera(sequence.start_message4());
78
79             rx_bytes = comm.receive_from_camera();
80             dump_bytes(indexNumber, rx_bytes);
81             indexNumber++;
82
83
84             // two_part messageを発行 (その1)
85             comm.send_to_camera(sequence.start_message5_1());
86
87             rx_bytes = comm.receive_from_camera();
88             dump_bytes(indexNumber, rx_bytes);
89             indexNumber++;
90
91             // two_part messageを発行 (その2)
92             comm.send_to_camera(sequence.start_message5_2());
93
94             rx_bytes = comm.receive_from_camera();
95             dump_bytes(indexNumber, rx_bytes);
96             indexNumber++;
97
98
99             // ????
100             comm.send_to_camera(sequence.start_message6());
101
102             rx_bytes = comm.receive_from_camera();
103             dump_bytes(indexNumber, rx_bytes);
104             indexNumber++;
105
106
107             // ????
108             comm.send_to_camera(sequence.start_message7());
109
110             rx_bytes = comm.receive_from_camera();
111             dump_bytes(indexNumber, rx_bytes);
112             indexNumber++;
113
114             // ????
115             comm.send_to_camera(sequence.start_message8());
116
117             rx_bytes = comm.receive_from_camera();
118             dump_bytes(indexNumber, rx_bytes);
119             indexNumber++;
120
121             // ????
122             comm.send_to_camera(sequence.start_message9());
123
124             rx_bytes = comm.receive_from_camera();
125             dump_bytes(indexNumber, rx_bytes);
126             indexNumber++;
127
128
129 /*
130             comm.send_to_camera(sequence.start_message2());
131
132             //byte[] rx_bytes = comm.receive_from_camera();
133             rx_bytes = comm.receive_from_camera();
134             dump_bytes(indexNumber, rx_bytes);
135             indexNumber++;
136 */
137 /*
138             応答OKの場合は、8バイト ({0x03, 0x00, 0x01, 0x20} + {0x10, 0x02, 0x00, 0x00} )が応答されるはず
139
140 */
141
142
143 /*
144             auto const msg4_1 =
145                 make_static_message(message_type::two_part, 0x01, 0xdf, 0x00, 0x00);
146             auto const msg4_2 = make_static_message_followup(msg4_1, 0x05, 0x00);
147             fuji_twopart_message(sockfd, msg4_1, msg4_2);
148 */
149
150             // 別のポートもオープンしておく
151             comm.start_stream();
152             comm.start_response();
153
154             Log.v(TAG, "connect_to_camera DONE.");
155
156             return (true);
157         }
158         catch (Exception e)
159         {
160             e.printStackTrace();
161         }
162         return (false);
163     }
164
165     private boolean get_current_settings()
166     {
167         try
168         {
169             comm.send_to_camera(sequence.status_request_message());
170
171             ReceivedData rx_bytes = comm.receive_from_camera();
172             dump_bytes(12, rx_bytes);
173
174             // なんで2回... でもやってみる
175             rx_bytes = comm.receive_from_camera();
176             dump_bytes(13, rx_bytes);
177
178         }
179         catch (Exception e)
180         {
181             e.printStackTrace();
182         }
183         return (false);
184     }
185
186
187
188     private void dump_bytes(int indexNumber,ReceivedData data)
189     {
190         int index = 0;
191         StringBuffer message;
192         message = new StringBuffer();
193         for (byte item : data.getData())
194         {
195             index++;
196             message.append(String.format("%02x ", item));
197             if (index >= 8)
198             {
199                 Log.v(TAG, " RX [" + indexNumber + "] " + message);
200                 index = 0;
201                 message = new StringBuffer();
202             }
203         }
204         if (index != 0)
205         {
206             Log.v(TAG, " RX [" + indexNumber + "] "  + message);
207         }
208         System.gc();
209     }
210
211     public boolean execute_shutter()
212     {
213         try
214         {
215             comm.send_to_camera(sequence.execute_shutter_message());
216
217             ReceivedData rx_bytes = comm.receive_from_camera();
218             dump_bytes(14, rx_bytes);
219
220             // なんで2回... でもやってみる
221             rx_bytes = comm.receive_from_camera();
222             dump_bytes(15, rx_bytes);
223
224         }
225         catch (Exception e)
226         {
227             e.printStackTrace();
228         }
229         return (false);
230     }
231 }