OSDN Git Service

OPC機のAFロック状態を表示できるようにした。
authorMRSa <mrsa@myad.jp>
Fri, 8 Oct 2021 15:13:40 +0000 (00:13 +0900)
committerMRSa <mrsa@myad.jp>
Fri, 8 Oct 2021 15:13:40 +0000 (00:13 +0900)
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/OmdsCameraControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/operation/IOpcFocusLockResult.kt [new file with mode: 0644]
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/operation/OmdsAutoFocusControl.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/OmdsCameraStatusWatcher.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/OmdsCommandListParser.kt [deleted file]
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/wrapper/OmdsFocusControl.kt

index 0a2424a..e3dc7b7 100644 (file)
@@ -156,6 +156,7 @@ class OmdsCameraControl(private val context: AppCompatActivity, private val vibr
         Log.v(TAG, "injectDisplay()")
         focusControl = OmdsFocusControl(frameDisplayer, indicator)
         captureControl = OmdsCaptureControl(frameDisplayer, indicator, statusChecker)
+        statusChecker.setIOpcFocusLockResult(focusControl.getFocusLockResult())
     }
 
     override fun setNeighborCameraControl(camera0: ICameraControl?, camera1: ICameraControl?, camera2: ICameraControl?, camera3: ICameraControl?) { }
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/operation/IOpcFocusLockResult.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/operation/IOpcFocusLockResult.kt
new file mode 100644 (file)
index 0000000..fd7258e
--- /dev/null
@@ -0,0 +1,7 @@
+package jp.osdn.gokigen.gokigenassets.camera.vendor.omds.operation
+
+interface IOpcFocusLockResult
+{
+    fun focusResult(isFocusLocked : Boolean)
+
+}
\ No newline at end of file
index 61e0970..c53f593 100644 (file)
@@ -11,10 +11,11 @@ import java.lang.Exception
 import java.util.*
 import kotlin.math.floor
 
-class OmdsAutoFocusControl(private val frameDisplayer: IAutoFocusFrameDisplay, private val indicator: IIndicatorControl, userAgent: String = "OlympusCameraKit", private val executeUrl : String = "http://192.168.0.10") : IOmdsProtocolNotify
+class OmdsAutoFocusControl(private val frameDisplayer: IAutoFocusFrameDisplay, private val indicator: IIndicatorControl, userAgent: String = "OlympusCameraKit", private val executeUrl : String = "http://192.168.0.10") : IOmdsProtocolNotify, IOpcFocusLockResult
 {
     private val headerMap: MutableMap<String, String> = HashMap()
     private val http = SimpleHttpClient()
+    private lateinit var preFocusFrameRect : RectF
     private var useOpcProtocol = false
 
     fun lockAutoFocus(point: PointF)
@@ -41,7 +42,7 @@ class OmdsAutoFocusControl(private val frameDisplayer: IAutoFocusFrameDisplay, p
                     e.printStackTrace()
                     try
                     {
-                        val preFocusFrameRect = getPreFocusFrameRect(point)
+                        preFocusFrameRect = getPreFocusFrameRect(point)
                         showFocusFrame(preFocusFrameRect, IAutoFocusFrameDisplay.FocusFrameStatus.Errored, 1.0)
                     }
                     catch (ee: Exception)
@@ -60,7 +61,7 @@ class OmdsAutoFocusControl(private val frameDisplayer: IAutoFocusFrameDisplay, p
 
     private fun lockCommandOmds(point: PointF)
     {
-        val preFocusFrameRect = getPreFocusFrameRect(point)
+        preFocusFrameRect = getPreFocusFrameRect(point)
         try
         {
             // AF駆動前にAF UNLOCK
@@ -99,7 +100,7 @@ class OmdsAutoFocusControl(private val frameDisplayer: IAutoFocusFrameDisplay, p
 
     private fun lockCommandOpc(point: PointF)
     {
-        val preFocusFrameRect = getPreFocusFrameRect(point)
+        preFocusFrameRect = getPreFocusFrameRect(point)
         try
         {
             val releaseUrl = executeUrl + AF_UNLOCK_COMMAND_OPC
@@ -252,6 +253,29 @@ class OmdsAutoFocusControl(private val frameDisplayer: IAutoFocusFrameDisplay, p
         useOpcProtocol = opcProtocol
     }
 
+    override fun focusResult(isFocusLocked: Boolean)
+    {
+        try
+        {
+            if (isFocusLocked)
+            {
+                // AF FOCUSED
+                Log.v(TAG, "focusResult() : FOCUSED")
+                showFocusFrame(preFocusFrameRect, IAutoFocusFrameDisplay.FocusFrameStatus.Focused, 0.0)
+            }
+            else
+            {
+                // AF FOCUS FAILURE
+                Log.v(TAG, "focusResult() : ERROR")
+                showFocusFrame(preFocusFrameRect, IAutoFocusFrameDisplay.FocusFrameStatus.Failed, 1.0)
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
     init
     {
         headerMap["User-Agent"] = userAgent // "OlympusCameraKit" // "OI.Share"
index 127a5ea..e33e7e6 100644 (file)
@@ -6,16 +6,13 @@ import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatus
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusUpdateNotify
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusWatcher
 import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.IOmdsProtocolNotify
+import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.operation.IOpcFocusLockResult
 import jp.osdn.gokigen.gokigenassets.liveview.message.IMessageDrawer
 import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
 import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleLogDumper
 import java.io.ByteArrayOutputStream
-import java.io.InputStream
 import java.lang.Exception
-import java.net.HttpURLConnection
-import java.net.ServerSocket
 import java.net.Socket
-import java.net.URL
 import java.util.*
 import kotlin.collections.ArrayList
 
@@ -24,6 +21,7 @@ class OmdsCameraStatusWatcher(userAgent: String = "OlympusCameraKit", private va
     private val headerMap: MutableMap<String, String> = HashMap()
     private val http = SimpleHttpClient()
 
+    private var focusLockResult : IOpcFocusLockResult? = null
     private var useOpcProtocol = false
 
     private var buffer: ByteArray? = null
@@ -31,7 +29,6 @@ class OmdsCameraStatusWatcher(userAgent: String = "OlympusCameraKit", private va
     private var isWatchingEvent = false
     private var whileEventReceive = false
     private var statusReceived = false
-    private var omdsCommandList : String = ""
     private var latestEventResponse : String = ""
 
     private var currentTakeMode = ""
@@ -61,11 +58,6 @@ class OmdsCameraStatusWatcher(userAgent: String = "OlympusCameraKit", private va
 
     override fun setOmdsCommandList(commandList: String)
     {
-        omdsCommandList = commandList
-
-        val commandListParser = OmdsCommandListParser()
-        commandListParser.startParse(omdsCommandList)
-
         startStatusWatch(null, null)
     }
 
@@ -96,6 +88,10 @@ class OmdsCameraStatusWatcher(userAgent: String = "OlympusCameraKit", private va
         }
     }
 
+    fun setIOpcFocusLockResult(lockResult: IOpcFocusLockResult?)
+    {
+        focusLockResult = lockResult
+    }
 
     private fun startEventWatch(portNumber: Int = 65000)
     {
@@ -176,10 +172,33 @@ class OmdsCameraStatusWatcher(userAgent: String = "OlympusCameraKit", private va
                             readIndex += readBytes
                             byteStream.write(byteArray, 0, readBytes)
                         }
-                        if (isDumpLog)
+                        val dataString = byteStream.toString()
+                        if (dataString.indexOf("<root><result>") >= 0)
+                        {
+                            if ((dataString.indexOf("ok") >= 0)&&(dataString.indexOf("<location>") >= 0))
+                            {
+                                // Focus Locked
+                                focusLockResult?.focusResult(true)
+                                Log.v(TAG, " FOCUS OK! ")
+                            }
+                            else if ((dataString.indexOf("ng") >= 0)||(dataString.indexOf("none") >= 0))
+                            {
+                                Log.v(TAG, " FOCUS NG... ")
+                                focusLockResult?.focusResult(false)
+                            }
+                            else
+                            {
+                                Log.v(TAG, " --- RECEIVE OPC EVENT $dataString ---")
+                            }
+                        }
+                        else
                         {
-                            SimpleLogDumper.dumpBytes("[RX EVT(OPC):$dataBytes]", byteStream.toByteArray())
+                            Log.v(TAG, " RECEIVE OPC EVENT $dataString")
                         }
+                        //if (isDumpLog)
+                        //{
+                        //    SimpleLogDumper.dumpBytes("[RX EVT(OPC):$dataBytes]", byteStream.toByteArray())
+                        //}
                     }
                     else
                     {
@@ -1088,8 +1107,8 @@ class OmdsCameraStatusWatcher(userAgent: String = "OlympusCameraKit", private va
         private val TAG = OmdsCameraStatusWatcher::class.java.simpleName
 
         // TIMEOUT VALUES
-        private const val SLEEP_TIME_MS = 250
-        private const val SLEEP_EVENT_TIME_MS = 350
+        private const val SLEEP_TIME_MS = 300
+        private const val SLEEP_EVENT_TIME_MS = 500
         private const val TIMEOUT_MS = 2500
 
         private const val RECEIVE_BUFFER_SIZE = 16384
diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/OmdsCommandListParser.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/omds/status/OmdsCommandListParser.kt
deleted file mode 100644 (file)
index df8f99c..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-package jp.osdn.gokigen.gokigenassets.camera.vendor.omds.status
-
-import android.util.Log
-
-class OmdsCommandListParser
-{
-    fun startParse(targetData: String)
-    {
-        try
-        {
-/*
-
-            var parsedData = targetData
-            val parser: XmlPullParser = Xml.newPullParser()
-            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false)
-            parser.setInput(StringReader(targetData))
-            var eventType = parser.eventType
-            while (eventType != XmlPullParser.END_DOCUMENT)
-            {
-                when (eventType) {
-                    XmlPullParser.START_DOCUMENT -> { }
-                    XmlPullParser.START_TAG -> {
-                        //parsedData += "   [${parser.name}(${parser.attributeCount}) "
-                        parsedData += "["
-                        if (parser.attributeCount > 0)
-                        {
-                            parsedData += "${parser.getAttributeValue(0)} "
-                        }
-                    }
-                    XmlPullParser.END_TAG -> { parsedData += "] " }
-                    else -> { }
-                }
-                eventType = parser.next()
-            }
-*/
-            if (isDumpLog)
-            {
-                val parsedData = targetData
-                Log.v(TAG, "     ------------------------------------------ ")
-                Log.v(TAG, " <<< COMMAND LIST >>>")
-                for (pos in 0..parsedData.length step 768)
-                {
-                    val lastIndex = if ((pos + 768) > parsedData.length)
-                    {
-                        parsedData.length
-                    }
-                    else
-                    {
-                        pos + 768
-                    }
-                    Log.v(TAG, " ${parsedData.substring(pos, lastIndex)}")
-                }
-                Log.v(TAG, "     ------------------------------------------ ")
-            }
-        }
-        catch (e: Exception)
-        {
-            e.printStackTrace()
-        }
-
-    }
-
-    companion object
-    {
-        private val TAG = OmdsCommandListParser::class.java.simpleName
-        private const val isDumpLog = false
-    }
-
-}
\ No newline at end of file
index 985fe27..6780cec 100644 (file)
@@ -5,6 +5,7 @@ import android.util.Log
 import android.view.MotionEvent
 import jp.osdn.gokigen.gokigenassets.camera.interfaces.IFocusingControl
 import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.IOmdsProtocolNotify
+import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.operation.IOpcFocusLockResult
 import jp.osdn.gokigen.gokigenassets.camera.vendor.omds.operation.OmdsAutoFocusControl
 import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl
 import jp.osdn.gokigen.gokigenassets.liveview.focusframe.IAutoFocusFrameDisplay
@@ -74,6 +75,11 @@ class OmdsFocusControl(private val frameDisplay: IAutoFocusFrameDisplay, indicat
         afControl.detectedOpcProtocol(opcProtocol)
     }
 
+    fun getFocusLockResult() : IOpcFocusLockResult
+    {
+        return (afControl)
+    }
+
     companion object
     {
         private val TAG = OmdsFocusControl::class.java.simpleName