OSDN Git Service

OMDS機で連写モードだったときに連写をストップできるようにする。
authorMRSa <mrsa@myad.jp>
Mon, 11 Apr 2022 14:44:35 +0000 (23:44 +0900)
committerMRSa <mrsa@myad.jp>
Mon, 11 Apr 2022 14:44:35 +0000 (23:44 +0900)
.idea/deploymentTargetDropDown.xml
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/operation/OmdsContinuousShotControl.kt [new file with mode: 0644]
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/wrapper/OmdsCaptureControl.kt

index 81c4bfa..9d850a8 100644 (file)
@@ -7,11 +7,11 @@
         <deviceKey>
           <Key>
             <type value="SERIAL_NUMBER" />
-            <value value="AHG771417877" />
+            <value value="3e50111c1220" />
           </Key>
         </deviceKey>
       </Target>
     </runningDeviceTargetSelectedWithDropDown>
-    <timeTargetWasSelectedWithDropDown value="2022-04-10T13:56:04.072213700Z" />
+    <timeTargetWasSelectedWithDropDown value="2022-04-11T14:21:39.509765200Z" />
   </component>
 </project>
\ No newline at end of file
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/operation/OmdsContinuousShotControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/operation/OmdsContinuousShotControl.kt
new file mode 100644 (file)
index 0000000..62f0441
--- /dev/null
@@ -0,0 +1,69 @@
+package jp.osdn.gokigen.gokigenassets.camera.vendor.omds.operation
+
+import android.util.Log
+import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.IOmdsProtocolNotify
+import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl
+import jp.osdn.gokigen.gokigenassets.liveview.focusframe.IAutoFocusFrameDisplay
+import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
+import java.lang.Exception
+import java.util.HashMap
+
+
+class OmdsContinuousShotControl(private val frameDisplayer: IAutoFocusFrameDisplay, indicator: IIndicatorControl, userAgent: String = "OlympusCameraKit", private val executeUrl : String = "http://192.168.0.10") : IOmdsProtocolNotify
+{
+    private val headerMap: MutableMap<String, String> = HashMap()
+    private val http = SimpleHttpClient()
+    private var useOpcProtocol = false
+
+    fun continuousShot(isStop: Boolean)
+    {
+        Log.v(TAG, "continuousShot()")
+        try
+        {
+            val thread = Thread {
+                try
+                {
+                    val sendUrl = if (isStop) { if (useOpcProtocol) { executeUrl + CAPTURE_STOP_COMMAND_OPC } else { executeUrl + CAPTURE_STOP_COMMAND } } else { if (useOpcProtocol) { executeUrl + CAPTURE_COMMAND_OPC } else { executeUrl + CAPTURE_COMMAND } }
+                    val reply: String = http.httpGetWithHeader(sendUrl, headerMap, null, TIMEOUT_MS)?.lowercase() ?: ""
+                    if (!reply.contains("ok"))
+                    {
+                        Log.v(TAG, "Capture Failure... : $reply")
+                    }
+                }
+                catch (e: Exception)
+                {
+                    e.printStackTrace()
+                }
+                frameDisplayer.hideFocusFrame()
+            }
+            thread.start()
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    override fun detectedOpcProtocol(opcProtocol: Boolean)
+    {
+        Log.v(TAG, " --- detectedOpcProtocol($opcProtocol)")
+        useOpcProtocol = opcProtocol
+    }
+
+    companion object
+    {
+        private val TAG: String = OmdsSingleShotControl::class.java.simpleName
+        private const val TIMEOUT_MS = 3000
+        private const val CAPTURE_COMMAND = "/exec_takemotion.cgi?com=starttake"
+        private const val CAPTURE_COMMAND_OPC = "/exec_takemotion.cgi?com=newstarttake"
+        private const val CAPTURE_STOP_COMMAND = "/exec_takemotion.cgi?com=stoptake"
+        private const val CAPTURE_STOP_COMMAND_OPC = "/exec_takemotion.cgi?com=newstoptake"
+
+    }
+
+    init
+    {
+        headerMap["User-Agent"] = userAgent // "OlympusCameraKit" // "OI.Share"
+        headerMap["X-Protocol"] = userAgent // "OlympusCameraKit" // "OI.Share"
+    }
+}
index 8d1ac6d..20ee72b 100644 (file)
@@ -4,21 +4,37 @@ import android.util.Log
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatus
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICaptureControl
 import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.IOmdsProtocolNotify
+import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.operation.OmdsContinuousShotControl
 import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.operation.OmdsSingleShotControl
 import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl
 import jp.osdn.gokigen.gokigenassets.liveview.focusframe.IAutoFocusFrameDisplay
 import java.lang.Exception
+import java.util.*
 
-class OmdsCaptureControl(frameDisplay: IAutoFocusFrameDisplay, indicator: IIndicatorControl, statusChecker : ICameraStatus): ICaptureControl, IOmdsProtocolNotify
+class OmdsCaptureControl(frameDisplay: IAutoFocusFrameDisplay, indicator: IIndicatorControl, val statusChecker : ICameraStatus): ICaptureControl, IOmdsProtocolNotify
 {
+    private var isStarted = false
     private val singleShotControl = OmdsSingleShotControl(frameDisplay, indicator)
+    private val continuousShotControl = OmdsContinuousShotControl(frameDisplay, indicator)
 
     override fun doCapture(kind: Int)
     {
         Log.v(TAG, "doCapture() : $kind")
         try
         {
+            val status = statusChecker.getStatus(ICameraStatus.CAPTURE_MODE).lowercase(Locale.getDefault())
+            //Log.v(TAG, "OMDS Capture Mode : $status")
+            if (!status.contains("normal"))
+            {
+                // 連写の場合...
+                continuousShotControl.continuousShot(isStarted)
+                isStarted = !isStarted
+                return
+            }
+
+            // 単写の場合...
             singleShotControl.singleShot()
+            return
         }
         catch (e: Exception)
         {
@@ -29,6 +45,7 @@ class OmdsCaptureControl(frameDisplay: IAutoFocusFrameDisplay, indicator: IIndic
     override fun detectedOpcProtocol(opcProtocol: Boolean)
     {
         singleShotControl.detectedOpcProtocol(opcProtocol)
+        continuousShotControl.detectedOpcProtocol(opcProtocol)
     }
 
     companion object