OSDN Git Service

インタフェースのtypoを修正する。
[gokigen/Gr2Control.git] / app / src / main / java / net / osdn / gokigen / gr2control / camera / ricohgr2 / wrapper / RicohGr2StatusChecker.java
1 package net.osdn.gokigen.gr2control.camera.ricohgr2.wrapper;
2
3 import android.app.Activity;
4 import android.support.annotation.NonNull;
5 import android.util.Log;
6
7 import net.osdn.gokigen.gr2control.camera.ICameraStatus;
8 import net.osdn.gokigen.gr2control.camera.ICameraStatusWatcher;
9 import net.osdn.gokigen.gr2control.camera.utils.SimpleHttpClient;
10 import net.osdn.gokigen.gr2control.liveview.ICameraStatusUpdateNotify;
11
12 import java.util.ArrayList;
13 import java.util.List;
14
15 /**
16  *
17  *
18  */
19 public class RicohGr2StatusChecker implements ICameraStatusWatcher, ICameraStatus
20 {
21     private final String TAG = toString();
22     private final String statusCheckUrl = "http://192.168.0.1/v1/props";
23     private final String statusSetUrl = "http://192.168.0.1/v1/params/camera";
24     private final String grCommandUrl = "http://192.168.0.1/_gr";
25     private final int sleepMs;
26
27     private final boolean useGrCommand;
28
29     private int timeoutMs = 5000;
30     private boolean whileFetching = false;
31     private RicohGr2StatusHolder statusHolder;
32
33     /**
34      *
35      *
36      */
37     RicohGr2StatusChecker(int sleepMs, boolean useGrCommand)
38     {
39         this.useGrCommand = useGrCommand;
40         this.sleepMs = sleepMs;
41     }
42
43     /**
44      *
45      *
46      */
47     @Override
48     public void startStatusWatch(@NonNull ICameraStatusUpdateNotify notifier)
49     {
50         Log.v(TAG, "startStatusWatch()");
51         try
52         {
53             this.statusHolder = new RicohGr2StatusHolder(notifier);
54             Thread thread = new Thread(new Runnable()
55             {
56                 @Override
57                 public void run()
58                 {
59                     try
60                     {
61                         start(statusCheckUrl);
62                     }
63                     catch (Exception e)
64                     {
65                         e.printStackTrace();
66                     }
67                 }
68             });
69             thread.start();
70         }
71         catch (Exception e)
72         {
73             e.printStackTrace();
74         }
75     }
76
77     /**
78      *
79      *
80      */
81     @Override
82     public void stopStatusWatch()
83     {
84         Log.v(TAG, "stoptStatusWatch()");
85         whileFetching = false;
86     }
87
88     /**
89      *
90      *
91      */
92     private void start(@NonNull final String watchUrl)
93     {
94         if (whileFetching)
95         {
96             Log.v(TAG, "start() already starting.");
97             return;
98         }
99
100         try
101         {
102             whileFetching = true;
103             Thread thread = new Thread(new Runnable()
104             {
105                 @Override
106                 public void run()
107                 {
108                     Log.d(TAG, "Start status watch.");
109                     while (whileFetching)
110                     {
111                         try
112                         {
113                             statusHolder.updateStatus(SimpleHttpClient.httpGet(watchUrl, timeoutMs));
114                             Thread.sleep(sleepMs);
115                         }
116                         catch (Exception e)
117                         {
118                             e.printStackTrace();
119                         }
120                     }
121                     Log.v(TAG, "STATUS WATCH STOPPED.");
122                 }
123             });
124             thread.start();
125         }
126         catch (Exception e)
127         {
128             e.printStackTrace();
129         }
130     }
131
132     @Override
133     public @NonNull List<String> getStatusList(@NonNull final String key)
134     {
135         try
136         {
137             if (statusHolder == null)
138             {
139                 return (new ArrayList<>());
140             }
141             String listKey = key + "List";
142             return (statusHolder.getAvailableItemList(listKey));
143         }
144         catch (Exception e)
145         {
146             e.printStackTrace();
147         }
148         return (new ArrayList<>());
149     }
150
151     @Override
152     public String getStatus(@NonNull String key)
153     {
154         try
155         {
156             if (statusHolder == null)
157             {
158                 return ("");
159             }
160             return (statusHolder.getItemStatus(key));
161         }
162         catch (Exception e)
163         {
164             e.printStackTrace();
165         }
166         return ("");
167     }
168
169     @Override
170     public void setStatus(@NonNull final String key, @NonNull final String value)
171     {
172         Thread thread = new Thread(new Runnable() {
173             @Override
174             public void run() {
175                 try
176                 {
177                     String response;
178                     String postData = key + "=" + value;
179                     if ((useGrCommand)&&(key.equals("exposureMode")))
180                     {
181                         //  撮影モードを変更するときは、GR専用コマンドを送ることにする。
182                         postData = "cmd=" + decideButtonCode(value);
183                         response = SimpleHttpClient.httpPost(grCommandUrl, postData, timeoutMs);
184                         Log.v(TAG, "CHANGE MODE : " + postData + " resp. (" + response.length() + "bytes.)");
185                     } else {
186                         // 通常の変更コマンド
187                         response = SimpleHttpClient.httpPut(statusSetUrl, postData, timeoutMs);
188                         Log.v(TAG, "SET PROPERTY : " + postData + " resp. (" + response.length() + "bytes.)");
189                     }
190                     if (useGrCommand)
191                     {
192                         //  GR専用コマンドで、画面表示をリフレッシュ
193                         response = SimpleHttpClient.httpPost(grCommandUrl, "cmd=mode refresh", timeoutMs);
194                         Log.v(TAG, "refresh resp. (" + response.length() + "bytes.)");
195                     }
196                 }
197                 catch (Exception e)
198                 {
199                     e.printStackTrace();
200                 }
201             }
202         });
203         try
204         {
205             thread.start();
206         }
207         catch (Exception e)
208         {
209             e.printStackTrace();
210         }
211     }
212
213     /**
214      *   撮影モードをGRのダイアルコマンドに変更する
215      *
216      */
217     private String decideButtonCode(String exposureMode)
218     {
219         String buttonCode = "bdial AUTO";
220         if (exposureMode == null)
221         {
222             return (buttonCode);
223         }
224         switch (exposureMode)
225         {
226             case "movie":
227                 buttonCode = "bdial MOVIE";
228                 break;
229             case "M":
230                 buttonCode = "bdial M";
231                 break;
232             case "TAV":
233                 buttonCode = "bdial TAV";
234                 break;
235             case "AV":
236                 buttonCode = "bdial AV";
237                 break;
238             case "TV":
239                 buttonCode = "bdial TV";
240                 break;
241             case "P":
242                 buttonCode = "bdial P";
243                 break;
244             case "auto":
245                 buttonCode = "bdial AUTO";
246                 break;
247         }
248         return (buttonCode);
249     }
250 }