OSDN Git Service

とりあえず、1回だけ切り替えられるようになった。
authorMRSa <mrsa@myad.jp>
Wed, 29 Apr 2020 13:54:09 +0000 (22:54 +0900)
committerMRSa <mrsa@myad.jp>
Wed, 29 Apr 2020 13:54:09 +0000 (22:54 +0900)
28 files changed:
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXInterfaceProvider.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/FujiXRunMode.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/IFujiXRunModeHolder.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/FujiXCommandPublisher.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/IFujiXCommand.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/IFujiXCommandPublisher.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/IFujiXMessages.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/FujiXCommandBase.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveView1st.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveView2nd.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveView3rd.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveView4th.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveView5th.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveView6th.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveViewZero.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback1st.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback2nd.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback3rd.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback4th.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback5th.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback6th.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback7th.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlaybackZero.java [new file with mode: 0644]
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/connection/FujiXCameraModeChangeToLiveView.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/connection/FujiXCameraModeChangeToPlayback.java
app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/playback/FujiXPlaybackControl.java
app/src/main/java/net/osdn/gokigen/gr2control/playback/detail/ImagePagerViewFragment.java
app/src/main/java/net/osdn/gokigen/gr2control/scene/CameraSceneUpdater.java

index 78bff2c..22d43f3 100644 (file)
@@ -74,7 +74,7 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay
     public FujiXInterfaceProvider(@NonNull Activity context, @NonNull ICameraStatusReceiver provider)
     {
         SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
-        int communicationTimeoutMs = 5000;  // デフォルトは 5000ms とする
+        int communicationTimeoutMs;
         try
         {
             communicationTimeoutMs = Integer.parseInt(preferences.getString(IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT, IPreferencePropertyAccessor.RICOH_GET_PICS_LIST_TIMEOUT_DEFAULT_VALUE)) * 1000;
@@ -98,7 +98,7 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay
         statusChecker = new FujiXStatusChecker(context, commandPublisher);
         playbackControl = new FujiXPlaybackControl(context, this);
         hardwareStatus = new FujiXHardwareStatus();
-        runMode = new FujiXRunMode(this);
+        runMode = new FujiXRunMode(this, statusChecker);
     }
 
     public void prepare()
index 4c9e57f..ccab4a7 100644 (file)
@@ -18,14 +18,16 @@ public class FujiXRunMode implements ICameraRunMode, IFujiXRunModeHolder, IFujiX
     private final IFujiXInterfaceProvider interfaceProvider;
     private final FujiXCameraModeChangeToLiveView toLiveViewCommand;
     private final FujiXCameraModeChangeToPlayback toPlaybackCommand;
+    private final FujiXStatusChecker statusChecker;
     private boolean isChanging = false;
-    private boolean isRecordingMode = false;
+    private boolean isRecordingMode = true;
     private boolean modeChangeIsPending = false;
     private ICameraRunModeCallback runModeCallback = null;
 
-    FujiXRunMode(@NonNull IFujiXInterfaceProvider interfaceProvider)
+    FujiXRunMode(@NonNull IFujiXInterfaceProvider interfaceProvider, @NonNull FujiXStatusChecker statusChecker)
     {
         this.interfaceProvider = interfaceProvider;
+        this.statusChecker = statusChecker;
         toLiveViewCommand = new FujiXCameraModeChangeToLiveView(interfaceProvider.getCommandPublisher(), this);
         toPlaybackCommand = new FujiXCameraModeChangeToPlayback(interfaceProvider.getCommandPublisher(), this);
     }
@@ -89,9 +91,16 @@ public class FujiXRunMode implements ICameraRunMode, IFujiXRunModeHolder, IFujiX
     }
 
     @Override
+    public int getStartLiveViewSequenceNumber()
+    {
+        return (toLiveViewCommand.getChangedSequenceNumber());
+    }
+
+    @Override
     public void receivedMessage(int id, byte[] rx_body)
     {
-        Log.v(TAG, " receivedMessage() " + id);
+        Log.v(TAG, " FujiXRunMode::receivedMessage() " + id);
+        statusChecker.receivedMessage(id, rx_body);
     }
 
     @Override
index c30da15..05832a6 100644 (file)
@@ -4,4 +4,6 @@ public interface IFujiXRunModeHolder
 {
     void transitToRecordingMode(boolean isFinished);
     void transitToPlaybackMode(boolean isFinished);
+
+    int getStartLiveViewSequenceNumber();
 }
index e8be52d..381a99a 100644 (file)
@@ -26,11 +26,14 @@ public class FujiXCommandPublisher implements IFujiXCommandPublisher, IFujiXComm
     private final int portNumber;
 
     private boolean isStart = false;
+    private boolean isHold = false;
+    private int holdId = 0;
     private Socket socket = null;
     private DataOutputStream dos = null;
     private BufferedReader bufferedReader = null;
     private int sequenceNumber = SEQUENCE_START_NUMBER;
     private Queue<IFujiXCommand> commandQueue;
+    private Queue<IFujiXCommand> holdCommandQueue;
 
 
     public FujiXCommandPublisher(@NonNull String ip, int portNumber)
@@ -38,7 +41,9 @@ public class FujiXCommandPublisher implements IFujiXCommandPublisher, IFujiXComm
         this.ipAddress = ip;
         this.portNumber = portNumber;
         this.commandQueue = new ArrayDeque<>();
+        this.holdCommandQueue = new ArrayDeque<>();
         commandQueue.clear();
+        holdCommandQueue.clear();
     }
 
     @Override
@@ -157,6 +162,7 @@ public class FujiXCommandPublisher implements IFujiXCommandPublisher, IFujiXComm
         commandQueue.clear();
     }
 
+/*
     @Override
     public boolean enqueueCommand(@NonNull IFujiXCommand command)
     {
@@ -171,6 +177,62 @@ public class FujiXCommandPublisher implements IFujiXCommandPublisher, IFujiXComm
         }
         return (false);
     }
+*/
+    @Override
+    public boolean enqueueCommand(@NonNull IFujiXCommand command)
+    {
+        try
+        {
+            if (isHold) {
+                if (holdId == command.getHoldId()) {
+                    if (command.isRelease()) {
+                        // コマンドをキューに積んだ後、リリースする
+                        boolean ret = commandQueue.offer(command);
+                        isHold = false;
+
+                        //  溜まっているキューを積みなおす
+                        while (holdCommandQueue.size() != 0) {
+                            IFujiXCommand queuedCommand = holdCommandQueue.poll();
+                            commandQueue.offer(queuedCommand);
+                            if ((queuedCommand != null)&&(queuedCommand.isHold()))
+                            {
+                                // 特定シーケンスに入った場合は、そこで積みなおすのをやめる
+                                isHold = true;
+                                holdId = queuedCommand.getHoldId();
+                                break;
+                            }
+                        }
+                        return (ret);
+                    }
+                    return (commandQueue.offer(command));
+                } else {
+                    // 特定シーケンスではなかったので HOLD
+                    return (holdCommandQueue.offer(command));
+                }
+            }
+            if (command.isHold())
+            {
+                isHold = true;
+                holdId = command.getHoldId();
+            }
+            //Log.v(TAG, "Enqueue : "  + command.getId());
+            return (commandQueue.offer(command));
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (false);
+    }
+
+    @Override
+    public boolean flushHoldQueue()
+    {
+        Log.v(TAG, "  flushHoldQueue()");
+        holdCommandQueue.clear();
+        System.gc();
+        return (true);
+    }
 
     private void issueCommand(@NonNull IFujiXCommand command)
     {
index a326ad6..c3659f9 100644 (file)
@@ -26,6 +26,16 @@ public interface IFujiXCommand
     // コマンド送信結果(応答)の通知先
     IFujiXCommandCallback responseCallback();
 
+    //  特定シーケンスを特定するID
+    int getHoldId();
+
+    // 特定シーケンスに入るか?
+    boolean isHold();
+
+    // 特定シーケンスから出るか?
+    boolean isRelease();
+
     // デバッグ用: ログ(logcat)に通信結果を残すかどうか
     boolean dumpLog();
+
 }
index 80d0730..12c59bf 100644 (file)
@@ -7,6 +7,8 @@ public interface IFujiXCommandPublisher
     boolean isConnected();
     boolean enqueueCommand(@NonNull IFujiXCommand command);
 
+    boolean flushHoldQueue();
+
     void start();
     void stop();
 }
index d8ee47f..856ca0f 100644 (file)
@@ -15,23 +15,29 @@ public interface IFujiXMessages
     int SEQ_STATUS_REQUEST = 9;
     int SEQ_QUERY_CAMERA_CAPABILITIES = 11;
 
-    int SEQ_CHANGE_TO_PLAYBACK_1ST = 12;
-    int SEQ_CHANGE_TO_PLAYBACK_2ND = 13;
-    int SEQ_CHANGE_TO_PLAYBACK_3RD = 14;
-    int SEQ_CHANGE_TO_PLAYBACK_4TH = 15;
+    int SEQ_CHANGE_TO_LIVEVIEW_ZERO = 20;
+    int SEQ_CHANGE_TO_LIVEVIEW_1ST = 21;
+    int SEQ_CHANGE_TO_LIVEVIEW_2ND = 22;
+    int SEQ_CHANGE_TO_LIVEVIEW_3RD = 23;
+    int SEQ_CHANGE_TO_LIVEVIEW_4TH = 24;
+    int SEQ_CHANGE_TO_LIVEVIEW_5TH = 25;
+    int SEQ_CHANGE_TO_LIVEVIEW_6TH = 26;
 
-    int SEQ_CHANGE_TO_LIVEVIEW_1ST = 16;
-    int SEQ_CHANGE_TO_LIVEVIEW_2ND = 17;
-    int SEQ_CHANGE_TO_LIVEVIEW_3RD = 18;
-    int SEQ_CHANGE_TO_LIVEVIEW_4TH = 19;
-    int SEQ_CHANGE_TO_LIVEVIEW_5TH = 20;
+    int SEQ_CHANGE_TO_PLAYBACK_ZERO = 30;
+    int SEQ_CHANGE_TO_PLAYBACK_1ST = 31;
+    int SEQ_CHANGE_TO_PLAYBACK_2ND = 32;
+    int SEQ_CHANGE_TO_PLAYBACK_3RD = 33;
+    int SEQ_CHANGE_TO_PLAYBACK_4TH = 34;
+    int SEQ_CHANGE_TO_PLAYBACK_5TH = 35;
+    int SEQ_CHANGE_TO_PLAYBACK_6TH = 36;
+    int SEQ_CHANGE_TO_PLAYBACK_7TH = 37;
 
-    int SEQ_SET_PROPERTY_VALUE = 21;
-    int SEQ_FOCUS_LOCK = 22;
-    int SEQ_FOCUS_UNLOCK = 23;
-    int SEQ_CAPTURE = 24;
+    int SEQ_SET_PROPERTY_VALUE = 100;
+    int SEQ_FOCUS_LOCK = 101;
+    int SEQ_FOCUS_UNLOCK = 102;
+    int SEQ_CAPTURE = 103;
 
-    int SEQ_IMAGE_INFO = 25;
-    int SEQ_THUMBNAIL = 26;
-    int SEQ_FULL_IMAGE = 27;
+    int SEQ_IMAGE_INFO = 104;
+    int SEQ_THUMBNAIL = 105;
+    int SEQ_FULL_IMAGE = 106;
 }
index 0aa17c2..d5c5c97 100644 (file)
@@ -55,6 +55,24 @@ public class FujiXCommandBase implements IFujiXCommand
     }
 
     @Override
+    public int getHoldId()
+    {
+        return (0);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (false);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
+
+    @Override
     public boolean dumpLog()
     {
         return (true);
index 4f2d76b..ced5eaf 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
@@ -9,10 +8,12 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXC
 
 public class ChangeToLiveView1st   extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToLiveView1st(@NonNull IFujiXCommandCallback callback)
+    public ChangeToLiveView1st(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -64,4 +65,22 @@ public class ChangeToLiveView1st   extends FujiXCommandBase
 
         });
     }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
index 9d69c35..173b300 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
@@ -9,10 +8,12 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXC
 
 public class ChangeToLiveView2nd    extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToLiveView2nd(@NonNull IFujiXCommandCallback callback)
+    public ChangeToLiveView2nd(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -65,4 +66,21 @@ public class ChangeToLiveView2nd    extends FujiXCommandBase
         });
     }
 
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
index e83b52f..8859b82 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
@@ -9,10 +8,12 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXC
 
 public class ChangeToLiveView3rd   extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToLiveView3rd(@NonNull IFujiXCommandCallback callback)
+    public ChangeToLiveView3rd(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -46,4 +47,22 @@ public class ChangeToLiveView3rd   extends FujiXCommandBase
                 (byte)0x24, (byte)0xdf, (byte)0x00, (byte)0x00,
         });
     }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
index 461d238..83cb56c 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
@@ -9,10 +8,12 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXC
 
 public class ChangeToLiveView4th   extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToLiveView4th(@NonNull IFujiXCommandCallback callback)
+    public ChangeToLiveView4th(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -60,7 +61,26 @@ public class ChangeToLiveView4th   extends FujiXCommandBase
                 (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
 
                 // data ...
-                (byte)0x07, (byte)0x00, (byte)0x02, (byte)0x00,
+                //(byte)0x07, (byte)0x00, (byte)0x02, (byte)0x00,
+                (byte)0x0a, (byte)0x00, (byte)0x02, (byte)0x00,
         });
     }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
index 1009d0f..521aa98 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
@@ -9,10 +8,12 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXC
 
 public class ChangeToLiveView5th   extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToLiveView5th(@NonNull IFujiXCommandCallback callback)
+    public ChangeToLiveView5th(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -46,4 +47,22 @@ public class ChangeToLiveView5th   extends FujiXCommandBase
                 (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
         });
     }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveView6th.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveView6th.java
new file mode 100644 (file)
index 0000000..d9df44d
--- /dev/null
@@ -0,0 +1,68 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXCommandBase;
+
+public class ChangeToLiveView6th extends FujiXCommandBase
+{
+    private final int holdId;
+    private final IFujiXCommandCallback callback;
+
+    public ChangeToLiveView6th(int holdId, @NonNull IFujiXCommandCallback callback)
+    {
+        this.holdId = holdId;
+        this.callback = callback;
+    }
+
+    @Override
+    public IFujiXCommandCallback responseCallback()
+    {
+        return (callback);
+    }
+
+    @Override
+    public int getId()
+    {
+        return (IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_6TH);
+    }
+
+    @Override
+    public byte[] commandBody()
+    {
+        return (new byte[] {
+                // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
+                (byte)0x01, (byte)0x00,
+
+                // message_header.type : 0x902b
+                (byte)0x2b, (byte)0x90,
+
+                // sequence number
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+
+                // data ...
+                //(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+                //(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+        });
+    }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (false);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (true);
+    }
+}
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveViewZero.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToLiveViewZero.java
new file mode 100644 (file)
index 0000000..a9c26a0
--- /dev/null
@@ -0,0 +1,68 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXCommandBase;
+
+public class ChangeToLiveViewZero   extends FujiXCommandBase
+{
+    private final int holdId;
+    private final IFujiXCommandCallback callback;
+
+    public ChangeToLiveViewZero(int holdId, @NonNull IFujiXCommandCallback callback)
+    {
+        this.holdId = holdId;
+        this.callback = callback;
+    }
+
+    @Override
+    public IFujiXCommandCallback responseCallback()
+    {
+        return (callback);
+    }
+
+    @Override
+    public int getId()
+    {
+        return (IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_ZERO);
+    }
+
+    @Override
+    public byte[] commandBody()
+    {
+        return (new byte[] {
+
+                // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
+                (byte)0x01, (byte)0x00,
+
+                // message_header.type : single_part (0x1015) : 0xd212 (status_request)
+                (byte)0x15, (byte)0x10,
+
+                // sequence number
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+
+                // data ...
+                (byte)0x24, (byte)0xdf, (byte)0x00, (byte)0x00,
+        });
+    }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
+}
index 139c78d..6dee4a3 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
@@ -9,10 +8,12 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXC
 
 public class ChangeToPlayback1st  extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToPlayback1st(@NonNull IFujiXCommandCallback callback)
+    public ChangeToPlayback1st(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -64,4 +65,22 @@ public class ChangeToPlayback1st  extends FujiXCommandBase
 
         });
     }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
index 5e19d77..047cdec 100644 (file)
@@ -1,6 +1,5 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
@@ -9,10 +8,12 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXC
 
 public class ChangeToPlayback2nd  extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToPlayback2nd(@NonNull IFujiXCommandCallback callback)
+    public ChangeToPlayback2nd(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -61,7 +62,26 @@ public class ChangeToPlayback2nd  extends FujiXCommandBase
 
                 // data ...
                 (byte)0x0b, (byte)0x00,
+                //(byte)0x05, (byte)0x00,
 
         });
     }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
index 6b09a6b..07768cf 100644 (file)
@@ -1,18 +1,19 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXCommandBase;
 
-public class ChangeToPlayback3rd  extends FujiXCommandBase
+public class ChangeToPlayback3rd extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToPlayback3rd(@NonNull IFujiXCommandCallback callback)
+    public ChangeToPlayback3rd(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -32,18 +33,37 @@ public class ChangeToPlayback3rd  extends FujiXCommandBase
     public byte[] commandBody()
     {
         return (new byte[] {
-
                 // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
                 (byte)0x01, (byte)0x00,
 
-                // message_header.type : single_part (0x1015) : 0xd212 (status_request)
+                // message_header.type : 0x1015
                 (byte)0x15, (byte)0x10,
 
                 // sequence number
                 (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
 
                 // data ...
-                (byte)0x25, (byte)0xdf, (byte)0x00, (byte)0x00,
+                (byte)0x12, (byte)0xd2, (byte)0x00, (byte)0x00,
+                //(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
         });
     }
+
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
index eee080c..c1684ad 100644 (file)
@@ -1,18 +1,19 @@
 package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
 
-
 import androidx.annotation.NonNull;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXCommandBase;
 
-public class ChangeToPlayback4th  extends FujiXCommandBase
+public class ChangeToPlayback4th extends FujiXCommandBase
 {
+    private final int holdId;
     private final IFujiXCommandCallback callback;
 
-    public ChangeToPlayback4th(@NonNull IFujiXCommandCallback callback)
+    public ChangeToPlayback4th(int holdId, @NonNull IFujiXCommandCallback callback)
     {
+        this.holdId = holdId;
         this.callback = callback;
     }
 
@@ -32,11 +33,12 @@ public class ChangeToPlayback4th  extends FujiXCommandBase
     public byte[] commandBody()
     {
         return (new byte[] {
+
                 // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
                 (byte)0x01, (byte)0x00,
 
-                // message_header.type : two_part (0x1016) : SetDevicePropValue
-                (byte)0x16, (byte)0x10,
+                // message_header.type : single_part (0x1015) : 0xd212 (status_request)
+                (byte)0x15, (byte)0x10,
 
                 // sequence number
                 (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
@@ -47,22 +49,20 @@ public class ChangeToPlayback4th  extends FujiXCommandBase
     }
 
     @Override
-    public byte[] commandBody2()
+    public int getHoldId()
     {
-        return (new byte[] {
-                // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
-                (byte)0x02, (byte)0x00,
-
-                // message_header.type : two_part (0x1016) : SetDevicePropValue
-                (byte)0x16, (byte)0x10,
-
-                // sequence number
-                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
-
-                // data ...
-                (byte)0x02, (byte)0x00,
+        return (holdId);
+    }
 
-        });
+    @Override
+    public boolean isHold()
+    {
+        return (true);
     }
 
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
 }
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback5th.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback5th.java
new file mode 100644 (file)
index 0000000..af19105
--- /dev/null
@@ -0,0 +1,87 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXCommandBase;
+
+public class ChangeToPlayback5th extends FujiXCommandBase
+{
+    private final int holdId;
+    private final IFujiXCommandCallback callback;
+
+    public ChangeToPlayback5th(int holdId, @NonNull IFujiXCommandCallback callback)
+    {
+        this.holdId = holdId;
+        this.callback = callback;
+    }
+
+    @Override
+    public IFujiXCommandCallback responseCallback()
+    {
+        return (callback);
+    }
+
+    @Override
+    public int getId()
+    {
+        return (IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_5TH);
+    }
+
+    @Override
+    public byte[] commandBody()
+    {
+        return (new byte[] {
+                // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
+                (byte)0x01, (byte)0x00,
+
+                // message_header.type : two_part (0x1016) : SetDevicePropValue
+                (byte)0x16, (byte)0x10,
+
+                // sequence number
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+
+                // data ...
+                (byte)0x25, (byte)0xdf, (byte)0x00, (byte)0x00,
+        });
+    }
+
+    @Override
+    public byte[] commandBody2()
+    {
+        return (new byte[] {
+                // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
+                (byte)0x02, (byte)0x00,
+
+                // message_header.type : two_part (0x1016) : SetDevicePropValue
+                (byte)0x16, (byte)0x10,
+
+                // sequence number
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+
+                // data ...
+                //(byte)0x02, (byte)0x00,
+                (byte)0x04, (byte)0x00,
+
+        });
+    }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
+}
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback6th.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback6th.java
new file mode 100644 (file)
index 0000000..b140dee
--- /dev/null
@@ -0,0 +1,69 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXCommandBase;
+
+public class ChangeToPlayback6th extends FujiXCommandBase
+{
+    private final int holdId;
+    private final IFujiXCommandCallback callback;
+
+    public ChangeToPlayback6th(int holdId, @NonNull IFujiXCommandCallback callback)
+    {
+        this.holdId = holdId;
+        this.callback = callback;
+    }
+
+    @Override
+    public IFujiXCommandCallback responseCallback()
+    {
+        return (callback);
+    }
+
+    @Override
+    public int getId()
+    {
+        return (IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_6TH);
+    }
+
+    @Override
+    public byte[] commandBody()
+    {
+        return (new byte[] {
+                // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
+                (byte)0x01, (byte)0x00,
+
+                // message_header.type : 0x902b
+                (byte)0x2b, (byte)0x90,
+
+                // sequence number
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+
+                // data ...
+                //(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+                //(byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+        });
+    }
+
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (false);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (true);
+    }
+}
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback7th.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlayback7th.java
new file mode 100644 (file)
index 0000000..c02391b
--- /dev/null
@@ -0,0 +1,68 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXCommandBase;
+
+public class ChangeToPlayback7th extends FujiXCommandBase
+{
+    private final int holdId;
+    private final IFujiXCommandCallback callback;
+
+    public ChangeToPlayback7th(int holdId, @NonNull IFujiXCommandCallback callback)
+    {
+        this.holdId = holdId;
+        this.callback = callback;
+    }
+
+    @Override
+    public IFujiXCommandCallback responseCallback()
+    {
+        return (callback);
+    }
+
+    @Override
+    public int getId()
+    {
+        return (IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_7TH);
+    }
+
+    @Override
+    public byte[] commandBody()
+    {
+        return (new byte[] {
+
+                // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
+                (byte)0x01, (byte)0x00,
+
+                // message_header.type : single_part (0x1015) : 0xd212 (status_request)
+                (byte)0x15, (byte)0x10,
+
+                // sequence number
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+
+                // data ...
+                (byte)0x25, (byte)0xdf, (byte)0x00, (byte)0x00,
+        });
+    }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
+}
diff --git a/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlaybackZero.java b/app/src/main/java/net/osdn/gokigen/gr2control/camera/fuji_x/wrapper/command/messages/changemode/ChangeToPlaybackZero.java
new file mode 100644 (file)
index 0000000..09d2d7c
--- /dev/null
@@ -0,0 +1,78 @@
+package net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode;
+
+import androidx.annotation.NonNull;
+
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.FujiXCommandBase;
+
+public class ChangeToPlaybackZero extends FujiXCommandBase
+{
+    private final int holdId;
+    private final IFujiXCommandCallback callback;
+
+    private final byte data0;
+    private final byte data1;
+    private final byte data2;
+    private final byte data3;
+
+    public ChangeToPlaybackZero(int holdId, int value, @NonNull IFujiXCommandCallback callback)
+    {
+        this.holdId = holdId;
+        this.callback = callback;
+
+        data0 = ((byte) (0x000000ff & value));
+        data1 = ((byte)((0x0000ff00 & value) >> 8));
+        data2 = ((byte)((0x00ff0000 & value) >> 16));
+        data3 = ((byte)((0xff000000 & value) >> 24));
+    }
+
+    @Override
+    public IFujiXCommandCallback responseCallback()
+    {
+        return (callback);
+    }
+
+    @Override
+    public int getId()
+    {
+        return (IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_ZERO);
+    }
+
+    @Override
+    public byte[] commandBody()
+    {
+        return (new byte[] {
+
+                // message_header.index : uint16 (0: terminate, 2: two_part_message, 1: other)
+                (byte)0x01, (byte)0x00,
+
+                ////////
+                (byte)0x18, (byte)0x10,
+
+                // sequence number
+                (byte)0x00, (byte)0x00, (byte)0x00, (byte)0x00,
+
+                // data ...
+                data0, data1, data2, data3,
+        });
+    }
+
+    @Override
+    public int getHoldId()
+    {
+        return (holdId);
+    }
+
+    @Override
+    public boolean isHold()
+    {
+        return (true);
+    }
+
+    @Override
+    public boolean isRelease()
+    {
+        return (false);
+    }
+}
index e90edfb..0246534 100644 (file)
@@ -16,14 +16,18 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.change
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToLiveView3rd;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToLiveView4th;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToLiveView5th;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToLiveView6th;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToLiveViewZero;
 
 
 public class FujiXCameraModeChangeToLiveView implements View.OnClickListener, IFujiXCommandCallback
 {
     private final String TAG = toString();
+    private static final int COMMANDID_CHANGE_TO_LIVEVIEW = 100;
     private final IFujiXCommandPublisher publisher;
     private final IFujiXCommandCallback callback;
     private IFujiXRunModeHolder runModeHolder = null;
+    private int changedLiveviewSeqNumber = 8;
 
     public FujiXCameraModeChangeToLiveView(@NonNull IFujiXCommandPublisher publisher, @Nullable IFujiXCommandCallback callback)
     {
@@ -33,7 +37,7 @@ public class FujiXCameraModeChangeToLiveView implements View.OnClickListener, IF
 
     public void startModeChange(IFujiXRunModeHolder runModeHolder)
     {
-        Log.v(TAG, " startModeChange()");
+        Log.v(TAG, " startModeChange() : FujiXCameraModeChangeToLiveView");
         try
         {
             if (runModeHolder != null)
@@ -41,7 +45,7 @@ public class FujiXCameraModeChangeToLiveView implements View.OnClickListener, IF
                 this.runModeHolder = runModeHolder;
                 this.runModeHolder.transitToRecordingMode(false);
             }
-            publisher.enqueueCommand(new ChangeToLiveView1st(this));
+            publisher.enqueueCommand(new ChangeToLiveViewZero(COMMANDID_CHANGE_TO_LIVEVIEW,this));
         }
         catch (Exception e)
         {
@@ -77,25 +81,38 @@ public class FujiXCameraModeChangeToLiveView implements View.OnClickListener, IF
         {
             switch (id)
             {
+                case IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_ZERO:
+                    publisher.enqueueCommand(new ChangeToLiveView1st(COMMANDID_CHANGE_TO_LIVEVIEW,this));
+                    break;
+
                 case IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_1ST:
-                    publisher.enqueueCommand(new ChangeToLiveView2nd(this));
+                    publisher.enqueueCommand(new ChangeToLiveView2nd(COMMANDID_CHANGE_TO_LIVEVIEW,this));
                     break;
 
                 case IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_2ND:
-                    publisher.enqueueCommand(new ChangeToLiveView3rd(this));
+                    publisher.enqueueCommand(new ChangeToLiveView3rd(COMMANDID_CHANGE_TO_LIVEVIEW,this));
                     break;
 
                 case IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_3RD:
-                    publisher.enqueueCommand(new ChangeToLiveView4th(this));
+                    publisher.enqueueCommand(new ChangeToLiveView4th(COMMANDID_CHANGE_TO_LIVEVIEW,this));
                     break;
                 case IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_4TH:
-                    publisher.enqueueCommand(new ChangeToLiveView5th(this));
+                    publisher.enqueueCommand(new ChangeToLiveView6th(COMMANDID_CHANGE_TO_LIVEVIEW,this));
                     break;
 
                 case IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_5TH:
+                    //publisher.enqueueCommand(new ChangeToLiveView6th(COMMANDID_CHANGE_TO_LIVEVIEW,this));
+
+                    //  Liveview切り替え時のシーケンス番号を記憶する
+                    changedLiveviewSeqNumber = getSequenceNumber(rx_body);
                     publisher.enqueueCommand(new StatusRequestMessage(this));
                     break;
 
+                case IFujiXMessages.SEQ_CHANGE_TO_LIVEVIEW_6TH:
+                    publisher.enqueueCommand(new ChangeToLiveView5th(COMMANDID_CHANGE_TO_LIVEVIEW,this));
+                    //publisher.enqueueCommand(new StatusRequestMessage(this));
+                    break;
+
                 case IFujiXMessages.SEQ_STATUS_REQUEST:
                     if (callback != null)
                     {
@@ -105,7 +122,7 @@ public class FujiXCameraModeChangeToLiveView implements View.OnClickListener, IF
                     {
                         runModeHolder.transitToRecordingMode(true);
                     }
-                    Log.v(TAG, "  CHANGED LIVEVIEW MODE : DONE.");
+                    Log.v(TAG, " - - - - - CHANGED LIVEVIEW MODE : DONE.");
                     break;
 
                 default:
@@ -118,4 +135,27 @@ public class FujiXCameraModeChangeToLiveView implements View.OnClickListener, IF
             e.printStackTrace();
         }
     }
+
+    private int getSequenceNumber(byte[] byte_array)
+    {
+        int seqNumber = 8;  // 起動時の初期値...
+        try
+        {
+            if (byte_array.length > 11)
+            {
+                seqNumber = ((((int) byte_array[11]) & 0xff) << 24) + ((((int) byte_array[10]) & 0xff) << 16) + ((((int) byte_array[9]) & 0xff) << 8) + (((int) byte_array[8]) & 0xff);
+            }
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+        return (seqNumber);
+    }
+
+    public int getChangedSequenceNumber()
+    {
+        return (changedLiveviewSeqNumber);
+    }
+
 }
index 195243d..5439f90 100644 (file)
@@ -7,6 +7,7 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.IFujiXRunModeHolder;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommand;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandCallback;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXCommandPublisher;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.IFujiXMessages;
@@ -14,11 +15,16 @@ import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.Status
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToPlayback1st;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToPlayback2nd;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToPlayback3rd;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToPlayback6th;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToPlayback7th;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToPlaybackZero;
 import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToPlayback4th;
+import net.osdn.gokigen.gr2control.camera.fuji_x.wrapper.command.messages.changemode.ChangeToPlayback5th;
 
 public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IFujiXCommandCallback
 {
     private final String TAG = toString();
+    private static final int COMMANDID_CHANGE_TO_PLAYBACK = 200;
     private final IFujiXCommandPublisher publisher;
     private final IFujiXCommandCallback callback;
     private IFujiXRunModeHolder runModeHolder = null;
@@ -29,17 +35,19 @@ public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IF
         this.callback = callback;
     }
 
-    public void startModeChange(IFujiXRunModeHolder runModeHolder)
+    public void startModeChange(@Nullable IFujiXRunModeHolder runModeHolder)
     {
-        Log.v(TAG, "startModeChange()");
+        Log.v(TAG, " startModeChange() : FujiXCameraModeChangeToPlayback");
         try
         {
+            int seqNumber = 8;
             if (runModeHolder != null)
             {
                 this.runModeHolder = runModeHolder;
                 this.runModeHolder.transitToPlaybackMode(false);
+                seqNumber = runModeHolder.getStartLiveViewSequenceNumber();
             }
-            publisher.enqueueCommand(new ChangeToPlayback1st(this));
+            publisher.enqueueCommand(new ChangeToPlaybackZero(COMMANDID_CHANGE_TO_PLAYBACK, seqNumber, this));
         }
         catch (Exception e)
         {
@@ -69,27 +77,40 @@ public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IF
     @Override
     public void receivedMessage(int id, byte[] rx_body)
     {
-        //Log.v(TAG, "receivedMessage : " + id + "[" + rx_body.length + " bytes]");
-        //int bodyLength = 0;
         try
         {
             switch (id)
             {
+                case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_ZERO:
+                    enqueueCommand(id, rx_body, new ChangeToPlayback1st(COMMANDID_CHANGE_TO_PLAYBACK,this));
+                    break;
+
                 case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_1ST:
-                    publisher.enqueueCommand(new ChangeToPlayback2nd(this));
+                    enqueueCommand(id, rx_body, new ChangeToPlayback3rd(COMMANDID_CHANGE_TO_PLAYBACK,this));
                     break;
 
                 case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_2ND:
-                    publisher.enqueueCommand(new ChangeToPlayback3rd(this));
-                    //publisher.enqueueCommand(new StatusRequestMessage(this));
+                    enqueueCommand(id, rx_body, new ChangeToPlayback7th(COMMANDID_CHANGE_TO_PLAYBACK,this));
                     break;
 
                 case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_3RD:
-                    publisher.enqueueCommand(new ChangeToPlayback4th(this));
+                    enqueueCommand(id, rx_body, new ChangeToPlayback4th(COMMANDID_CHANGE_TO_PLAYBACK,this));
                     break;
 
                 case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_4TH:
-                    publisher.enqueueCommand(new StatusRequestMessage(this));
+                    enqueueCommand(id, rx_body, new ChangeToPlayback2nd(COMMANDID_CHANGE_TO_PLAYBACK,this));
+                    break;
+
+                case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_5TH:
+                    enqueueCommand(id, rx_body, new ChangeToPlayback6th(COMMANDID_CHANGE_TO_PLAYBACK,this));
+                    break;
+
+                case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_6TH:
+                    enqueueCommand(id, rx_body, new StatusRequestMessage(this));
+                    break;
+
+                case IFujiXMessages.SEQ_CHANGE_TO_PLAYBACK_7TH:
+                    enqueueCommand(id, rx_body, new ChangeToPlayback5th(COMMANDID_CHANGE_TO_PLAYBACK,this));
                     break;
 
                 case IFujiXMessages.SEQ_STATUS_REQUEST:
@@ -101,7 +122,7 @@ public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IF
                     {
                         runModeHolder.transitToPlaybackMode(true);
                     }
-                    Log.v(TAG, " CHANGED PLAYBACK MODE : DONE.");
+                    Log.v(TAG, " - - - - - CHANGED PLAYBACK MODE : DONE.");
                     break;
 
                 default:
@@ -114,4 +135,11 @@ public class FujiXCameraModeChangeToPlayback implements View.OnClickListener, IF
             e.printStackTrace();
         }
     }
+
+    private void enqueueCommand(int id, byte[] rx_body, IFujiXCommand command)
+    {
+        //Log.v(TAG, "  --- receivedMessage : " + id + "[" + rx_body.length + " bytes]");
+        publisher.enqueueCommand(command);
+    }
+
 }
index 677b2d0..fb73b87 100644 (file)
@@ -179,13 +179,35 @@ public class FujiXPlaybackControl implements IPlaybackControl, IFujiXCommandCall
     @Override
     public void showPictureStarted()
     {
+        try
+        {
+            Log.v(TAG, "   showPictureStarted() ");
 
+            IFujiXCommandPublisher publisher = provider.getCommandPublisher();
+            publisher.flushHoldQueue();
+            System.gc();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
     }
 
     @Override
     public void showPictureFinished()
     {
+        try
+        {
+            Log.v(TAG, "   showPictureFinished() ");
 
+            IFujiXCommandPublisher publisher = provider.getCommandPublisher();
+            publisher.flushHoldQueue();
+            System.gc();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
     }
 
     private void getCameraContents(ICameraContentListCallback callback)
index b2bf157..55ef2e3 100644 (file)
@@ -263,6 +263,17 @@ public class ImagePagerViewFragment extends Fragment implements ICameraRunModeCa
             runMode.changeRunMode(false, this);
             return;
         }
+
+        try
+        {
+            // 画像表示が開始することを通知する
+            playbackControl.showPictureStarted();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+
         viewPager.setCurrentItem(contentIndex);
     }
 
@@ -280,6 +291,16 @@ public class ImagePagerViewFragment extends Fragment implements ICameraRunModeCa
             }
         }
 
+        try
+        {
+            // 画像表示が終わったことを通知する
+            playbackControl.showPictureFinished();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+        }
+
         if (!runMode.isRecordingMode())
         {
             // Threadで呼んではダメみたいだ...
index 3076e21..c0a3ce6 100644 (file)
@@ -31,6 +31,7 @@ public class CameraSceneUpdater implements ICameraStatusReceiver, IChangeScene
 
     private PreferenceFragmentCompat preferenceFragment = null;
     private LogCatFragment logCatFragment = null;
+    private ImageGridViewFragment imageGridViewFragment = null;
 
     public static CameraSceneUpdater newInstance(@NonNull AppCompatActivity activity)
     {
@@ -311,9 +312,12 @@ public class CameraSceneUpdater implements ICameraStatusReceiver, IChangeScene
         Log.v(TAG, "changeScenceToImageList()");
         try
         {
-            ImageGridViewFragment fragment = ImageGridViewFragment.newInstance(interfaceProvider.getPlaybackControl(), interfaceProvider.getCameraRunMode());
+            if (imageGridViewFragment == null)
+            {
+                imageGridViewFragment = ImageGridViewFragment.newInstance(interfaceProvider.getPlaybackControl(), interfaceProvider.getCameraRunMode());
+            }
             FragmentTransaction transaction = activity.getSupportFragmentManager().beginTransaction();
-            transaction.replace(R.id.fragment1, fragment);
+            transaction.replace(R.id.fragment1, imageGridViewFragment);
             // backstackに追加
             transaction.addToBackStack(null);
             transaction.commit();