1 package net.osdn.gokigen.pkremote.camera.vendor.panasonic.wrapper;
3 import android.app.Activity;
4 import android.util.Log;
6 import androidx.annotation.NonNull;
7 import androidx.annotation.Nullable;
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;
41 public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasonicInterfaceProvider, IDisplayInjector
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;
62 public PanasonicCameraWrapper(final Activity context, final ICameraStatusReceiver statusReceiver , final @NonNull ICameraChangeListener listener)
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();
78 Log.v(TAG, "PanasonicCameraWrapper::prepare() : " + panasonicCamera.getFriendlyName() + " " + panasonicCamera.getModelName());
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);
87 //this.panasonicCameraApi = PanasonicCameraApi.newInstance(panasonicCamera);
88 if (eventObserver == null)
90 eventObserver = CameraEventObserver.newInstance(context, panasonicCamera);
92 if (liveViewControl == null)
94 liveViewControl = new PanasonicLiveViewControl(panasonicCamera);
104 public void startRecMode()
108 // 撮影モード(RecMode)に切り替え
109 String reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=recmode", TIMEOUT_MS);
110 if (!reply.contains("ok"))
112 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE RECMODE.");
115 // フォーカスに関しては、1点に切り替える(仮)
116 reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=setsetting&type=afmode&value=1area", TIMEOUT_MS);
117 if (!reply.contains("ok"))
119 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE AF MODE 1area.");
129 public void startPlayMode()
133 // 参照モード(PlayMode)に切り替え
134 String reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=playmode", TIMEOUT_MS);
135 if (!reply.contains("ok"))
137 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE PLAYMODE.");
142 playbackControl.preprocessPlaymode();
153 public void startEventWatch(@Nullable ICameraChangeListener listener)
157 if (eventObserver != null)
159 if (listener != null)
161 eventObserver.setEventListener(listener);
163 eventObserver.activate();
164 eventObserver.start();
165 ICameraStatusHolder holder = eventObserver.getCameraStatusHolder();
168 holder.getLiveviewStatus();
179 public void detectedCamera(@NonNull IPanasonicCamera camera)
181 Log.v(TAG, "detectedCamera() : " + camera.getModelName() + " " + camera.getFriendlyName());
182 panasonicCamera = camera;
186 public ICameraConnection getPanasonicCameraConnection()
188 // PanasonicCameraConnectionは複数生成しない。
189 if (cameraConnection == null)
191 cameraConnection = new PanasonicCameraConnection(context, provider, this, listener);
193 return (cameraConnection);
197 public ILiveViewControl getPanasonicLiveViewControl()
199 return (liveViewControl);
203 public ILiveViewListener getLiveViewListener()
205 return (liveViewControl.getLiveViewListener());
209 public ICameraButtonControl getButtonControl()
211 return (buttonControl);
215 public IPlaybackControl getPlaybackControl()
217 return (playbackControl);
221 public ICameraHardwareStatus getHardwareStatus()
223 return (hardwareStatus);
227 public ICameraRunMode getCameraRunMode()
233 public IFocusingControl getFocusingControl()
235 return (focusControl);
239 public ICameraInformation getCameraInformation()
245 public IZoomLensControl getZoomLensControl()
247 return (zoomControl);
251 public ICaptureControl getCaptureControl()
253 return (captureControl);
257 public IDisplayInjector getDisplayInjector()
263 public ICameraStatusUpdateNotify getStatusListener()
265 return (statusHolder);
269 public ICameraStatusWatcher getCameraStatusWatcher()
271 return (statusHolder);
275 public ICameraStatus getCameraStatusListHolder()
277 return (statusHolder);
281 public IPanasonicCamera getPanasonicCamera()
283 return (panasonicCamera);
287 public void injectDisplay(@NonNull IAutoFocusFrameDisplay frameDisplayer, @NonNull IIndicatorControl indicator, @NonNull IFocusingModeNotify focusingModeNotify)
289 Log.v(TAG, "injectDisplay()");
291 focusControl = new PanasonicCameraFocusControl(frameDisplayer, indicator);
292 captureControl = new PanasonicCameraCaptureControl(frameDisplayer, indicator);
293 zoomControl = new PanasonicCameraZoomLensControl();