OSDN Git Service

7c37561cd2a4b993eb520ec051b63342651cf416
[gokigen/PKRemote.git] / app / src / main / java / net / osdn / gokigen / pkremote / camera / vendor / panasonic / wrapper / PanasonicCameraWrapper.java
1 package net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper;
2
3 import android.app.Activity;
4 import android.util.Log;
5
6 import androidx.annotation.NonNull;
7 import androidx.annotation.Nullable;
8
9 import net.osdn.gokigen.pkremote.camera.interfaces.control.ICameraButtonControl;
10 import net.osdn.gokigen.pkremote.camera.interfaces.control.ICameraConnection;
11 import net.osdn.gokigen.pkremote.camera.interfaces.control.ICameraRunMode;
12 import net.osdn.gokigen.pkremote.camera.interfaces.control.ICaptureControl;
13 import net.osdn.gokigen.pkremote.camera.interfaces.control.IFocusingControl;
14 import net.osdn.gokigen.pkremote.camera.interfaces.control.IFocusingModeNotify;
15 import net.osdn.gokigen.pkremote.camera.interfaces.control.IZoomLensControl;
16 import net.osdn.gokigen.pkremote.camera.interfaces.liveview.IAutoFocusFrameDisplay;
17 import net.osdn.gokigen.pkremote.camera.interfaces.liveview.ICameraStatusUpdateNotify;
18 import net.osdn.gokigen.pkremote.camera.interfaces.liveview.IDisplayInjector;
19 import net.osdn.gokigen.pkremote.camera.interfaces.liveview.IIndicatorControl;
20 import net.osdn.gokigen.pkremote.camera.interfaces.liveview.ILiveViewControl;
21 import net.osdn.gokigen.pkremote.camera.interfaces.liveview.ILiveViewListener;
22 import net.osdn.gokigen.pkremote.camera.interfaces.playback.IPlaybackControl;
23 import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraChangeListener;
24 import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraHardwareStatus;
25 import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraInformation;
26 import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatus;
27 import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatusReceiver;
28 import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatusWatcher;
29 import net.osdn.gokigen.pkremote.camera.utils.SimpleHttpClient;
30 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.IPanasonicInterfaceProvider;
31 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.operation.PanasonicCameraCaptureControl;
32 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.operation.PanasonicCameraFocusControl;
33 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.operation.PanasonicCameraZoomLensControl;
34 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper.connection.PanasonicCameraConnection;
35 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper.eventlistener.CameraEventObserver;
36 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper.eventlistener.ICameraEventObserver;
37 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper.eventlistener.ICameraStatusHolder;
38 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper.eventlistener.PanasonicStatus;
39 import net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper.playback.PanasonicPlaybackControl;
40
41 public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasonicInterfaceProvider, IDisplayInjector
42 {
43     private final String TAG = toString();
44     private final Activity context;
45     private static final int TIMEOUT_MS = 5000;
46     private final ICameraStatusReceiver provider;
47     private final ICameraChangeListener listener;
48     private IPanasonicCamera panasonicCamera = null;
49     //private IPanasonicCameraApi panasonicCameraApi = null;
50     private ICameraEventObserver eventObserver = null;
51     private PanasonicLiveViewControl liveViewControl = null;
52     private PanasonicCameraFocusControl focusControl = null;
53     private PanasonicCameraCaptureControl captureControl = null;
54     private PanasonicCameraZoomLensControl zoomControl = null;
55     private PanasonicCameraConnection cameraConnection = null;
56     private PanasonicButtonControl buttonControl;
57     private PanasonicRunMode runMode;
58     private PanasonicHardwareStatus hardwareStatus;
59     private PanasonicStatus statusHolder;
60     private PanasonicPlaybackControl playbackControl;
61
62     public PanasonicCameraWrapper(final Activity context, final ICameraStatusReceiver statusReceiver , final @NonNull ICameraChangeListener listener)
63     {
64         this.context = context;
65         this.provider = statusReceiver;
66         this.listener = listener;
67         this.buttonControl = new PanasonicButtonControl();
68         this.hardwareStatus = new PanasonicHardwareStatus();
69         this.statusHolder = new PanasonicStatus();
70         this.playbackControl = new PanasonicPlaybackControl();
71         this.runMode = new PanasonicRunMode();
72
73     }
74
75     @Override
76     public void prepare()
77     {
78         Log.v(TAG, "PanasonicCameraWrapper::prepare() : " + panasonicCamera.getFriendlyName() + " " + panasonicCamera.getModelName());
79         try
80         {
81             runMode.setCamera(panasonicCamera, playbackControl, TIMEOUT_MS);
82             playbackControl.setCamera(panasonicCamera, TIMEOUT_MS);
83             focusControl.setCamera(panasonicCamera);
84             captureControl.setCamera(panasonicCamera);
85             zoomControl.setCamera(panasonicCamera);
86
87             //this.panasonicCameraApi = PanasonicCameraApi.newInstance(panasonicCamera);
88             if (eventObserver == null)
89             {
90                 eventObserver = CameraEventObserver.newInstance(context, panasonicCamera);
91             }
92             if (liveViewControl == null)
93             {
94                 liveViewControl = new PanasonicLiveViewControl(panasonicCamera);
95             }
96         }
97         catch (Exception e)
98         {
99             e.printStackTrace();
100         }
101     }
102
103     @Override
104     public void startRecMode()
105     {
106         try
107         {
108             // 撮影モード(RecMode)に切り替え
109             String reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=recmode", TIMEOUT_MS);
110             if (!reply.contains("ok"))
111             {
112                 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE RECMODE.");
113             }
114
115             //  フォーカスに関しては、1点に切り替える(仮)
116             reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=setsetting&type=afmode&value=1area", TIMEOUT_MS);
117             if (!reply.contains("ok"))
118             {
119                 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE AF MODE 1area.");
120             }
121         }
122         catch (Exception e)
123         {
124             e.printStackTrace();
125         }
126     }
127
128     @Override
129     public void startPlayMode()
130     {
131         try
132         {
133             // 参照モード(PlayMode)に切り替え
134             String reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=playmode", TIMEOUT_MS);
135             if (!reply.contains("ok"))
136             {
137                 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE PLAYMODE.");
138                 return;
139             }
140
141             // 一覧取得の準備を行う
142             playbackControl.preprocessPlaymode();
143         }
144         catch (Exception e)
145         {
146             e.printStackTrace();
147         }
148     }
149
150
151
152     @Override
153     public void startEventWatch(@Nullable ICameraChangeListener listener)
154     {
155         try
156         {
157             if (eventObserver != null)
158             {
159                 if (listener != null)
160                 {
161                     eventObserver.setEventListener(listener);
162                 }
163                 eventObserver.activate();
164                 eventObserver.start();
165                 ICameraStatusHolder holder = eventObserver.getCameraStatusHolder();
166                 if (holder != null)
167                 {
168                     holder.getLiveviewStatus();
169                 }
170             }
171         }
172         catch (Exception e)
173         {
174             e.printStackTrace();
175         }
176     }
177
178     @Override
179     public void detectedCamera(@NonNull IPanasonicCamera camera)
180     {
181         Log.v(TAG, "detectedCamera() : " + camera.getModelName() + " " + camera.getFriendlyName());
182         panasonicCamera = camera;
183     }
184
185     @Override
186     public ICameraConnection getPanasonicCameraConnection()
187     {
188         // PanasonicCameraConnectionは複数生成しない。
189         if (cameraConnection == null)
190         {
191             cameraConnection = new PanasonicCameraConnection(context, provider, this, listener);
192         }
193         return (cameraConnection);
194     }
195
196     @Override
197     public ILiveViewControl getPanasonicLiveViewControl()
198     {
199         return (liveViewControl);
200     }
201
202     @Override
203     public ILiveViewListener getLiveViewListener()
204     {
205         return (liveViewControl.getLiveViewListener());
206     }
207
208     @Override
209     public ICameraButtonControl getButtonControl()
210     {
211         return (buttonControl);
212     }
213
214     @Override
215     public IPlaybackControl getPlaybackControl()
216     {
217         return (playbackControl);
218     }
219
220     @Override
221     public ICameraHardwareStatus getHardwareStatus()
222     {
223         return (hardwareStatus);
224     }
225
226     @Override
227     public ICameraRunMode getCameraRunMode()
228     {
229         return (runMode);
230     }
231
232     @Override
233     public IFocusingControl getFocusingControl()
234     {
235         return (focusControl);
236     }
237
238     @Override
239     public ICameraInformation getCameraInformation()
240     {
241         return null;
242     }
243
244     @Override
245     public IZoomLensControl getZoomLensControl()
246     {
247         return (zoomControl);
248     }
249
250     @Override
251     public ICaptureControl getCaptureControl()
252     {
253         return (captureControl);
254     }
255
256     @Override
257     public IDisplayInjector getDisplayInjector()
258     {
259         return (this);
260     }
261
262     @Override
263     public ICameraStatusUpdateNotify getStatusListener()
264     {
265         return (statusHolder);
266     }
267
268     @Override
269     public ICameraStatusWatcher getCameraStatusWatcher()
270     {
271         return (statusHolder);
272     }
273
274     @Override
275     public ICameraStatus getCameraStatusListHolder()
276     {
277         return (statusHolder);
278     }
279
280     @Override
281     public IPanasonicCamera getPanasonicCamera()
282     {
283         return (panasonicCamera);
284     }
285
286     @Override
287     public void injectDisplay(@NonNull IAutoFocusFrameDisplay frameDisplayer, @NonNull IIndicatorControl indicator, @NonNull IFocusingModeNotify focusingModeNotify)
288     {
289         Log.v(TAG, "injectDisplay()");
290
291         focusControl = new PanasonicCameraFocusControl(frameDisplayer, indicator);
292         captureControl = new PanasonicCameraCaptureControl(frameDisplayer, indicator);
293         zoomControl = new PanasonicCameraZoomLensControl();
294     }
295 }