1 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper;
3 import android.util.Log;
5 import androidx.annotation.NonNull;
7 import net.osdn.gokigen.gr2control.camera.ICameraConnection;
8 import net.osdn.gokigen.gr2control.camera.ICameraRunMode;
9 import net.osdn.gokigen.gr2control.camera.ICameraRunModeCallback;
10 import net.osdn.gokigen.gr2control.camera.fuji_x.IFujiXInterfaceProvider;
11 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
12 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXCameraModeChangeToLiveView;
13 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.connection.FujiXCameraModeChangeToPlayback;
15 public class FujiXRunMode implements ICameraRunMode, IFujiXRunModeHolder, IFujiXCommandCallback
17 private final String TAG = toString();
18 private final IFujiXInterfaceProvider interfaceProvider;
19 private final FujiXCameraModeChangeToLiveView toLiveViewCommand;
20 private final FujiXCameraModeChangeToPlayback toPlaybackCommand;
21 private final FujiXStatusChecker statusChecker;
22 private boolean isChanging = false;
23 private boolean isRecordingMode = true;
24 private boolean modeChangeIsPending = false;
25 private ICameraRunModeCallback runModeCallback = null;
27 FujiXRunMode(@NonNull IFujiXInterfaceProvider interfaceProvider, @NonNull FujiXStatusChecker statusChecker)
29 this.interfaceProvider = interfaceProvider;
30 this.statusChecker = statusChecker;
31 toLiveViewCommand = new FujiXCameraModeChangeToLiveView(interfaceProvider.getCommandPublisher(), this);
32 toPlaybackCommand = new FujiXCameraModeChangeToPlayback(interfaceProvider.getCommandPublisher(), this);
36 public void changeRunMode(boolean isRecording, @NonNull ICameraRunModeCallback callback)
39 Log.v(TAG, " changeRunMode() : " + isRecording);
41 if (interfaceProvider.getCameraConnection().getConnectionStatus() != ICameraConnection.CameraConnectionStatus.CONNECTED)
43 Log.v(TAG, " ===== DOES NOT CONNECT TO CAMERA, SO CHANGE MODE IS PENDING...");
47 this.runModeCallback = callback;
50 toLiveViewCommand.startModeChange(this);
54 toPlaybackCommand.startModeChange(this);
59 public boolean isRecordingMode()
61 Log.v(TAG, "isRecordingMode() : " + isRecordingMode + " (" + isChanging + ")");
65 // モード変更中の場合は、かならず false を応答する
68 return (isRecordingMode);
72 public void transitToRecordingMode(boolean isFinished)
74 isChanging = !isFinished;
75 isRecordingMode = true;
78 runModeCallback.onCompleted(isRecordingMode);
83 public void transitToPlaybackMode(boolean isFinished)
85 isChanging = !isFinished;
86 isRecordingMode = false;
89 runModeCallback.onCompleted(isRecordingMode);
94 public int getStartLiveViewSequenceNumber()
96 return (toLiveViewCommand.getChangedSequenceNumber());
100 public void receivedMessage(int id, byte[] rx_body)
102 Log.v(TAG, " FujiXRunMode::receivedMessage() " + id);
103 statusChecker.receivedMessage(id, rx_body);
107 public void onReceiveProgress(int currentBytes, int totalBytes, byte[] rx_body)
109 Log.v(TAG, " onReceiveProgress() ");
113 public boolean isReceiveMulti()