From 6d18c5d04276a46022c26393e1e3477f5f19169b Mon Sep 17 00:00:00 2001 From: MRSa Date: Tue, 4 Jun 2019 00:12:07 +0900 Subject: [PATCH] =?utf8?q?FUJI=20X=E5=AF=BE=E5=BF=9C=E6=BA=96=E5=82=99?= =?utf8?q?=E3=81=9D=E3=81=AE=EF=BC=95=E3=80=82=E3=82=AB=E3=83=A1=E3=83=A9?= =?utf8?q?=E3=81=A8=E3=81=AE=E6=8E=A5=E7=B6=9A=E3=82=B7=E3=83=BC=E3=82=B1?= =?utf8?q?=E3=83=B3=E3=82=B9=E3=81=BE=E3=81=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../camera/fujix/operation/FujiXZoomControl.java | 61 +++++++++++++++++++++ .../fujix/wrapper/FujiXInterfaceProvider.java | 5 +- .../command/messages/QueryCameraCapabilities.java | 43 +++++++++++++++ .../wrapper/command/messages/StartMessage5th.java | 64 ++++++++++++++++++++++ .../command/messages/StatusRequestMessage.java | 47 ++++++++++++++++ .../command/messages/StatusRequestReceive.java | 34 ++++++++++++ .../connection/FujiXCameraConnectSequence.java | 42 +++++++++++++- app/src/main/res/values-ja/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 9 files changed, 296 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/operation/FujiXZoomControl.java create mode 100644 app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/QueryCameraCapabilities.java create mode 100644 app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StartMessage5th.java create mode 100644 app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StatusRequestMessage.java create mode 100644 app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StatusRequestReceive.java diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/operation/FujiXZoomControl.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/operation/FujiXZoomControl.java new file mode 100644 index 0000000..589a3b8 --- /dev/null +++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/operation/FujiXZoomControl.java @@ -0,0 +1,61 @@ +package net.osdn.gokigen.a01d.camera.fujix.operation; + +import net.osdn.gokigen.a01d.camera.IZoomLensControl; + +public class FujiXZoomControl implements IZoomLensControl +{ + + @Override + public boolean canZoom() + { + return (false); + } + + @Override + public void updateStatus() + { + + } + + @Override + public float getMaximumFocalLength() + { + return (0); + } + + @Override + public float getMinimumFocalLength() + { + return (0); + } + + @Override + public float getCurrentFocalLength() + { + return (0); + } + + @Override + public void driveZoomLens(float targetLength) + { + + } + + @Override + public void driveZoomLens(boolean isZoomIn) + { + + } + + @Override + public void moveInitialZoomPosition() + { + + } + + @Override + public boolean isDrivingZoomLens() + { + return (false); + } +} diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/FujiXInterfaceProvider.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/FujiXInterfaceProvider.java index 244fa4c..a0553a6 100644 --- a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/FujiXInterfaceProvider.java +++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/FujiXInterfaceProvider.java @@ -14,6 +14,7 @@ import net.osdn.gokigen.a01d.camera.IFocusingModeNotify; import net.osdn.gokigen.a01d.camera.ILiveViewControl; import net.osdn.gokigen.a01d.camera.IZoomLensControl; import net.osdn.gokigen.a01d.camera.fujix.IFujiXInterfaceProvider; +import net.osdn.gokigen.a01d.camera.fujix.operation.FujiXZoomControl; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.FujiXAsyncResponseReceiver; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.FujiXCommandIssuer; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.IFujiXCommandCallback; @@ -39,6 +40,7 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay private FujiXCommandIssuer commandIssuer; private FujiXLiveViewControl liveViewControl; private FujiXAsyncResponseReceiver asyncReceiver; + private FujiXZoomControl zoomControl; public FujiXInterfaceProvider(@NonNull Activity context, @NonNull ICameraStatusReceiver provider) @@ -48,6 +50,7 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay liveViewControl = new FujiXLiveViewControl(context, CAMERA_IP, STREAM_PORT); asyncReceiver = new FujiXAsyncResponseReceiver(CAMERA_IP, ASYNC_RESPONSE_PORT); fujiXConnection = new FujiXConnection(context, provider, this); + zoomControl = new FujiXZoomControl(); } @Override @@ -89,7 +92,7 @@ public class FujiXInterfaceProvider implements IFujiXInterfaceProvider, IDisplay @Override public IZoomLensControl getZoomLensControl() { - return null; + return (zoomControl); } @Override diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/QueryCameraCapabilities.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/QueryCameraCapabilities.java new file mode 100644 index 0000000..2e5d071 --- /dev/null +++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/QueryCameraCapabilities.java @@ -0,0 +1,43 @@ +package net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages; + +import androidx.annotation.NonNull; + +import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.IFujiXCommandCallback; +import net.osdn.gokigen.a01d.camera.fujix.wrapper.connection.FujiXCameraConnectSequence; + +public class QueryCameraCapabilities extends FujiXCommandBase +{ + private final IFujiXCommandCallback callback; + + public QueryCameraCapabilities(@NonNull IFujiXCommandCallback callback) + { + this.callback = callback; + } + + @Override + public IFujiXCommandCallback responseCallback() + { + return (callback); + } + + @Override + public int getId() + { + return (FujiXCameraConnectSequence.SEQ_QUERY_CAMERA_CAPABILITIES); + } + + @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 : camera_capabilities (0x902b) + (byte)0x2b, (byte)0x90, + + // sequence number + (byte)0x07, (byte)0x00, (byte)0x00, (byte)0x00, + }); + } +} diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StartMessage5th.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StartMessage5th.java new file mode 100644 index 0000000..b44fe03 --- /dev/null +++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StartMessage5th.java @@ -0,0 +1,64 @@ +package net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages; + +import androidx.annotation.NonNull; + +import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.IFujiXCommandCallback; +import net.osdn.gokigen.a01d.camera.fujix.wrapper.connection.FujiXCameraConnectSequence; + +public class StartMessage5th extends FujiXCommandBase +{ + private final IFujiXCommandCallback callback; + + public StartMessage5th(@NonNull IFujiXCommandCallback callback) + { + this.callback = callback; + } + + @Override + public IFujiXCommandCallback responseCallback() + { + return (callback); + } + + @Override + public int getId() + { + return (FujiXCameraConnectSequence.SEQ_START_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) : 0xdf24 + (byte)0x16, (byte)0x10, + + // sequence number + (byte)0x05, (byte)0x00, (byte)0x00, (byte)0x00, + + // data ... + (byte)0x24, (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) : 0x00020007 + (byte)0x16, (byte)0x10, + + // sequence number + (byte)0x05, (byte)0x00, (byte)0x00, (byte)0x00, + + // data ... + (byte)0x07, (byte)0x00, (byte)0x02, (byte)0x00, + }); + } +} diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StatusRequestMessage.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StatusRequestMessage.java new file mode 100644 index 0000000..3fdafc7 --- /dev/null +++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StatusRequestMessage.java @@ -0,0 +1,47 @@ +package net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages; + +import androidx.annotation.NonNull; + +import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.IFujiXCommandCallback; +import net.osdn.gokigen.a01d.camera.fujix.wrapper.connection.FujiXCameraConnectSequence; + +public class StatusRequestMessage extends FujiXCommandBase +{ + private final IFujiXCommandCallback callback; + + public StatusRequestMessage(@NonNull IFujiXCommandCallback callback) + { + this.callback = callback; + } + + @Override + public IFujiXCommandCallback responseCallback() + { + return (callback); + } + + @Override + public int getId() + { + return (FujiXCameraConnectSequence.SEQ_STATUS_REQUEST); + } + + @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)0x12, (byte)0xd2, (byte)0x00, (byte)0x00, + }); + } +} diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StatusRequestReceive.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StatusRequestReceive.java new file mode 100644 index 0000000..c4354b9 --- /dev/null +++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/command/messages/StatusRequestReceive.java @@ -0,0 +1,34 @@ +package net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages; + +import androidx.annotation.NonNull; + +import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.IFujiXCommandCallback; +import net.osdn.gokigen.a01d.camera.fujix.wrapper.connection.FujiXCameraConnectSequence; + +public class StatusRequestReceive extends FujiXCommandBase +{ + private final IFujiXCommandCallback callback; + + public StatusRequestReceive(@NonNull IFujiXCommandCallback callback) + { + this.callback = callback; + } + + @Override + public IFujiXCommandCallback responseCallback() + { + return (callback); + } + + @Override + public int getId() + { + return (FujiXCameraConnectSequence.SEQ_STATUS_REQUEST_RECEIVE); + } + + @Override + public byte[] commandBody() + { + return (null); + } +} diff --git a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/connection/FujiXCameraConnectSequence.java b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/connection/FujiXCameraConnectSequence.java index 05b003e..00b3f36 100644 --- a/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/connection/FujiXCameraConnectSequence.java +++ b/app/src/main/java/net/osdn/gokigen/a01d/camera/fujix/wrapper/connection/FujiXCameraConnectSequence.java @@ -14,12 +14,16 @@ import net.osdn.gokigen.a01d.camera.fujix.IFujiXInterfaceProvider; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.IFujiXCommandCallback; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.IFujiXCommandIssuer; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.CameraRemoteMessage; +import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.QueryCameraCapabilities; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.RegistrationMessage; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.StartMessage; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.StartMessage2nd; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.StartMessage3rd; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.StartMessage4th; +import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.StartMessage5th; import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.StartReceiveOnly; +import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.StatusRequestMessage; +import net.osdn.gokigen.a01d.camera.fujix.wrapper.command.messages.StatusRequestReceive; import net.osdn.gokigen.a01d.preference.IPreferencePropertyAccessor; public class FujiXCameraConnectSequence implements Runnable, IFujiXCommandCallback @@ -34,6 +38,10 @@ public class FujiXCameraConnectSequence implements Runnable, IFujiXCommandCallba public static final int SEQ_START_3RD = 5; public static final int SEQ_START_4TH = 6; public static final int SEQ_CAMERA_REMOTE = 7; + public static final int SEQ_START_5TH = 8; + public static final int SEQ_STATUS_REQUEST = 9; + public static final int SEQ_STATUS_REQUEST_RECEIVE = 10; + public static final int SEQ_QUERY_CAMERA_CAPABILITIES = 11; private final Activity context; @@ -102,7 +110,7 @@ public class FujiXCameraConnectSequence implements Runnable, IFujiXCommandCallba @Override public void receivedMessage(int id, byte[] rx_body) { - Log.v(TAG, "receivedMessage : " + id + "[" + rx_body.length + " bytes]"); + //Log.v(TAG, "receivedMessage : " + id + "[" + rx_body.length + " bytes]"); switch (id) { case SEQ_REGISTRATION: @@ -117,6 +125,7 @@ public class FujiXCameraConnectSequence implements Runnable, IFujiXCommandCallba break; case SEQ_START_2ND: + cameraStatusReceiver.onStatusNotify(context.getString(R.string.connect_connecting)); if (rx_body.length == (int)rx_body[0]) { // なぜかもうちょっとデータが飛んでくるので待つ @@ -139,6 +148,37 @@ public class FujiXCameraConnectSequence implements Runnable, IFujiXCommandCallba break; case SEQ_START_4TH: + if (isBothLiveView) + { + // カメラのLCDと遠隔のライブビューを同時に表示する場合... + commandIssuer.enqueueCommand(new CameraRemoteMessage(this)); + } + else + { + commandIssuer.enqueueCommand(new StartMessage5th(this)); + } + break; + case SEQ_START_5TH: + commandIssuer.enqueueCommand(new StatusRequestMessage(this)); + break; + + case SEQ_STATUS_REQUEST: + if ((rx_body[4] == (byte) 0x02)&&((int) rx_body[0] == rx_body.length)) + { + //// 受信データが分割されている場合、、もう一度受信する + commandIssuer.enqueueCommand(new StatusRequestReceive(this)); + } + else + { + commandIssuer.enqueueCommand(new QueryCameraCapabilities(this)); + } + break; + + case SEQ_STATUS_REQUEST_RECEIVE: + commandIssuer.enqueueCommand(new QueryCameraCapabilities(this)); + break; + + case SEQ_QUERY_CAMERA_CAPABILITIES: commandIssuer.enqueueCommand(new CameraRemoteMessage(this)); break; diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 130b689..2232b9a 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -100,6 +100,7 @@ Wifi(OS)待ち 動作モード変更 接続開始 + 接続中 接続済 カメラ設定を展開 接続開始 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index e5852ee..9993c2f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -102,6 +102,7 @@ start check WIFI connecting + connecting… connected changeRunMode restoreCameraSettings -- 2.11.0