OSDN Git Service

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