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.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;
42 public class PanasonicCameraWrapper implements IPanasonicCameraHolder, IPanasonicInterfaceProvider, IDisplayInjector
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;
63 public PanasonicCameraWrapper(final Activity context, final ICameraStatusReceiver statusReceiver , final @NonNull ICameraChangeListener listener, @NonNull IInformationReceiver informationReceiver)
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();
79 Log.v(TAG, "PanasonicCameraWrapper::prepare() : " + panasonicCamera.getFriendlyName() + " " + panasonicCamera.getModelName());
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);
88 //this.panasonicCameraApi = PanasonicCameraApi.newInstance(panasonicCamera);
89 if (eventObserver == null)
91 eventObserver = CameraEventObserver.newInstance(context, panasonicCamera);
93 if (liveViewControl == null)
95 liveViewControl = new PanasonicLiveViewControl(panasonicCamera);
105 public void startRecMode()
109 // 撮影モード(RecMode)に切り替え
110 String reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=recmode", TIMEOUT_MS);
111 if (!reply.contains("ok"))
113 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE RECMODE.");
116 // フォーカスに関しては、1点に切り替える(仮)
117 reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=setsetting&type=afmode&value=1area", TIMEOUT_MS);
118 if (!reply.contains("ok"))
120 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE AF MODE 1area.");
130 public void startPlayMode()
134 // 参照モード(PlayMode)に切り替え
135 String reply = SimpleHttpClient.httpGet(this.panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=playmode", TIMEOUT_MS);
136 if (!reply.contains("ok"))
138 Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE PLAYMODE.");
143 playbackControl.preprocessPlaymode();
154 public void startEventWatch(@Nullable ICameraChangeListener listener)
158 if (eventObserver != null)
160 if (listener != null)
162 eventObserver.setEventListener(listener);
164 eventObserver.activate();
165 eventObserver.start();
166 ICameraStatusHolder holder = eventObserver.getCameraStatusHolder();
169 holder.getLiveviewStatus();
180 public void detectedCamera(@NonNull IPanasonicCamera camera)
182 Log.v(TAG, "detectedCamera() : " + camera.getModelName() + " " + camera.getFriendlyName());
183 panasonicCamera = camera;
187 public ICameraConnection getPanasonicCameraConnection()
189 // PanasonicCameraConnectionは複数生成しない。
190 if (cameraConnection == null)
192 cameraConnection = new PanasonicCameraConnection(context, provider, this, listener);
194 return (cameraConnection);
198 public ILiveViewControl getPanasonicLiveViewControl()
200 return (liveViewControl);
204 public ILiveViewListener getLiveViewListener()
206 return (liveViewControl.getLiveViewListener());
210 public ICameraButtonControl getButtonControl()
212 return (buttonControl);
216 public IPlaybackControl getPlaybackControl()
218 return (playbackControl);
222 public ICameraHardwareStatus getHardwareStatus()
224 return (hardwareStatus);
228 public ICameraRunMode getCameraRunMode()
234 public IFocusingControl getFocusingControl()
236 return (focusControl);
240 public ICameraInformation getCameraInformation()
246 public IZoomLensControl getZoomLensControl()
248 return (zoomControl);
252 public ICaptureControl getCaptureControl()
254 return (captureControl);
258 public IDisplayInjector getDisplayInjector()
264 public ICameraStatusUpdateNotify getStatusListener()
266 return (statusHolder);
270 public ICameraStatusWatcher getCameraStatusWatcher()
272 return (statusHolder);
276 public ICameraStatus getCameraStatusListHolder()
278 return (statusHolder);
282 public IPanasonicCamera getPanasonicCamera()
284 return (panasonicCamera);
288 public void injectDisplay(@NonNull IAutoFocusFrameDisplay frameDisplayer, @NonNull IIndicatorControl indicator, @NonNull IFocusingModeNotify focusingModeNotify)
290 Log.v(TAG, "injectDisplay()");
292 focusControl = new PanasonicCameraFocusControl(frameDisplayer, indicator);
293 captureControl = new PanasonicCameraCaptureControl(frameDisplayer, indicator);
294 zoomControl = new PanasonicCameraZoomLensControl();