OSDN Git Service

SONY系ステータスの設定変更も搭載。(残りは Exposure compensation)
authorMRSa <mrsa@myad.jp>
Sun, 15 Aug 2021 14:00:56 +0000 (23:00 +0900)
committerMRSa <mrsa@myad.jp>
Sun, 15 Aug 2021 14:00:56 +0000 (23:00 +0900)
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyCameraEventObserver.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatus.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatusCandidates.kt

index 6f0e621..0272848 100644 (file)
@@ -16,7 +16,7 @@ class SonyCameraEventObserver(context: Context, private val remoteApi: ISonyCame
     private val replyParser = ReplyJsonParser(Handler(context.mainLooper))
     private var isEventMonitoring = false
     private var isActive = false
-    private var eventVersion = "1.1" // 初期値を "1.0" から "1.1" に更新
+    private var eventVersion = "1.3" // 初期値を "1.3" に更新
 
     override fun start(): Boolean
     {
@@ -50,13 +50,29 @@ class SonyCameraEventObserver(context: Context, private val remoteApi: ISonyCame
                         when (errorCode)
                         {
                             0 -> { }
-                            1, 12 -> {
-                                if (eventVersion == "1.1")
+                            1, 12, 14, 15 -> {
+                                if (eventVersion == "1.3")
+                                {
+                                    // "1.3" でエラーが発生した時には "1.2" にダウングレードして再実行
+                                    eventVersion = "1.2"
+                                    Log.v(TAG, " === NOT SUPPORT EVENT v1.3, TRY v1.2")
+                                    continue@MONITORLOOP
+                                }
+                                else if (eventVersion == "1.2")
+                                {
+                                    // "1.2" でエラーが発生した時には "1.1" にダウングレードして再実行
+                                    eventVersion = "1.1"
+                                    Log.v(TAG, " === NOT SUPPORT EVENT v1.2, TRY v1.1")
+                                    continue@MONITORLOOP
+                                }
+                                else if (eventVersion == "1.1")
                                 {
                                     // "1.1" でエラーが発生した時には "1.0" にダウングレードして再実行
                                     eventVersion = "1.0"
+                                    Log.v(TAG, " === NOT SUPPORT EVENT v1.1, TRY v1.0")
                                     continue@MONITORLOOP
                                 }
+                                Log.v(TAG, " === NOT SUPPORT EVENT v1.0... ABORTED.")
                                 replyParser.catchResponseError()
                                 break@MONITORLOOP  // "1.0" でもエラーが発生した場合は、モニタ終了
                             }
index 0fe6504..6539df3 100644 (file)
@@ -21,6 +21,10 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
     private var currentShutterSpeed = ""
     private var currentWhiteBalanceMode = ""
     private var currentCameraStatus = ""
+    private var currentPictureEffect = ""
+    private var currentMeteringMode = ""
+    private var currentRemainBattery = ""
+    private var currentRemainBatteryPercent = 0.0
 
     fun setCameraApi(sonyCameraApi: ISonyCameraApi)
     {
@@ -98,7 +102,23 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
 
     private fun getRemainBatteryColor() : Int
     {
-        return (Color.WHITE)
+        var color = Color.WHITE
+        try
+        {
+            if (currentRemainBatteryPercent < 30)
+            {
+                color = Color.RED
+            }
+            else if (currentRemainBatteryPercent < 50)
+            {
+                color = Color.YELLOW
+            }
+        }
+        catch (e : Exception)
+        {
+            e.printStackTrace()
+        }
+        return (color)
     }
 
     private fun getTakeMode() : String
@@ -113,6 +133,10 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
 
     private fun getAperture() : String
     {
+        if (currentFNumber.length > 1)
+        {
+            return ("F$currentFNumber")
+        }
         return (currentFNumber)
     }
 
@@ -128,8 +152,13 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
 
     private fun getIsoSensitivity() : String
     {
+        if (currentIsoSpeedRate.length > 1)
+        {
+            return ("ISO:$currentIsoSpeedRate")
+        }
         return (currentIsoSpeedRate)
     }
+
     private fun getWhiteBalance() : String
     {
         return (currentWhiteBalanceMode)
@@ -137,17 +166,17 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
 
     private fun getMeteringMode() : String
     {
-        return ""
+        return (currentMeteringMode)
     }
 
     private fun getPictureEffect() : String
     {
-        return ""
+        return (currentPictureEffect)
     }
 
     private fun getRemainBattery() : String
     {
-        return ""
+        return (currentRemainBattery)
     }
 
     private fun getTorchMode() : String
@@ -155,35 +184,43 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
         return (currentCameraStatus)
     }
 
-    override fun onApiListModified(apis: List<String?>?) {
+    override fun onApiListModified(apis: List<String?>?)
+    {
         //TODO("Not yet implemented")
     }
 
-    override fun onCameraStatusChanged(status: String?) {
+    override fun onCameraStatusChanged(status: String?)
+    {
         //TODO("Not yet implemented")
     }
 
-    override fun onLiveviewStatusChanged(status: Boolean) {
+    override fun onLiveviewStatusChanged(status: Boolean)
+    {
         //TODO("Not yet implemented")
     }
 
-    override fun onShootModeChanged(shootMode: String?) {
+    override fun onShootModeChanged(shootMode: String?)
+    {
         //TODO("Not yet implemented")
     }
 
-    override fun onZoomPositionChanged(zoomPosition: Int) {
+    override fun onZoomPositionChanged(zoomPosition: Int)
+    {
         //TODO("Not yet implemented")
     }
 
-    override fun onStorageIdChanged(storageId: String?) {
+    override fun onStorageIdChanged(storageId: String?)
+    {
         //TODO("Not yet implemented")
     }
 
-    override fun onFocusStatusChanged(focusStatus: String?) {
+    override fun onFocusStatusChanged(focusStatus: String?)
+    {
         //TODO("Not yet implemented")
     }
 
-    override fun onResponseError() {
+    override fun onResponseError()
+    {
         //TODO("Not yet implemented")
     }
 
@@ -203,6 +240,50 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
         currentIsoSpeedRate = parseEventStatus(currentIsoSpeedRate, jsonObject, "isoSpeedRate", "currentIsoSpeedRate", 29)
         currentShutterSpeed = parseEventStatus(currentShutterSpeed, jsonObject, "shutterSpeed", "currentShutterSpeed", 32)
         currentWhiteBalanceMode = parseEventStatus(currentWhiteBalanceMode, jsonObject, "whiteBalance", "currentWhiteBalanceMode", 33)
+        currentRemainBattery = parseBatteryInfo(currentRemainBattery, jsonObject)
+    }
+
+    private fun parseBatteryInfo(currentStatus: String, replyJson: JSONObject) : String
+    {
+        val indexOfCameraStatus = 56
+        var eventStatus = currentStatus
+        try
+        {
+            val resultsObj = replyJson.getJSONArray("result")
+            if ((resultsObj.length() > indexOfCameraStatus)&&(!resultsObj.isNull(indexOfCameraStatus)))
+            {
+                val cameraStatusObj = resultsObj.getJSONObject(indexOfCameraStatus)
+                val batteryInfoObj = cameraStatusObj.getJSONArray("batteryInfo").getJSONObject(0)
+                val type = cameraStatusObj.getString("type")
+                if ("batteryInfo" == type)
+                {
+                    Log.v(TAG, "  =====> $batteryInfoObj")
+                    //eventStatus = cameraStatusObj.getString(key)
+
+                    val numerator = batteryInfoObj.getInt("levelNumer")
+                    val denominator =  batteryInfoObj.getInt("levelDenom")
+                    if ((numerator <= 0)||(denominator <= 0))
+                    {
+                        eventStatus = "Batt.: ???%"
+                        currentRemainBatteryPercent = 0.0
+                    }
+                    else
+                    {
+                        currentRemainBatteryPercent = denominator.toDouble() / numerator.toDouble()  * 100.0
+                        eventStatus = "Batt.: " + String.format("%2.0f", currentRemainBatteryPercent) + "%"
+                    }
+                }
+                else
+                {
+                    Log.w(TAG, "Event reply: Illegal Index ($indexOfCameraStatus:) $type : $cameraStatusObj")
+                }
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+        return (eventStatus)
     }
 
     private fun parseEventStatus(currentStatus: String, replyJson: JSONObject, item: String, key: String, indexOfCameraStatus: Int): String
@@ -211,7 +292,7 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener
         try
         {
             val resultsObj = replyJson.getJSONArray("result")
-            if (!resultsObj.isNull(indexOfCameraStatus))
+            if ((resultsObj.length() > indexOfCameraStatus)&&(!resultsObj.isNull(indexOfCameraStatus)))
             {
                 val cameraStatusObj = resultsObj.getJSONObject(indexOfCameraStatus)
                 val type = cameraStatusObj.getString("type")
index 431a5c8..36ad961 100644 (file)
@@ -1,5 +1,6 @@
 package jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.eventlistener
 
+import android.util.Log
 import jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.ISonyCameraApi
 import org.json.JSONArray
 
@@ -180,7 +181,6 @@ class SonyStatusCandidates()
     fun getAvailableWhiteBalance(): List<String?>
     {
         val whiteBalanceList : ArrayList<String> = ArrayList()
-/*
         try
         {
             if (::cameraApi.isInitialized)
@@ -192,7 +192,7 @@ class SonyStatusCandidates()
                     val availableItemArray = resultsObj.getJSONArray(1)
                     for (index in 0 until availableItemArray.length())
                     {
-                        val itemString = availableItemArray.getString(index)
+                        val itemString = availableItemArray.getJSONObject(index).getString("whiteBalanceMode")
                         whiteBalanceList.add(itemString)
                     }
                 }
@@ -202,7 +202,6 @@ class SonyStatusCandidates()
         {
             e.printStackTrace()
         }
-*/
         return (whiteBalanceList)
     }
 
@@ -226,17 +225,167 @@ class SonyStatusCandidates()
         return (ArrayList())
     }
 
-    fun setTakeMode(value: String) { }
-    fun setShutterSpeed(value: String) { }
-    fun setAperture(value: String) { }
-    fun setExpRev(value: String) { }
-    fun setCaptureMode(value: String) { }
-    fun setIsoSensitivity(value: String) { }
-    fun setWhiteBalance(value: String) { }
-    fun setMeteringMode(value: String) { }
-    fun setPictureEffect(value: String) { }
-    fun setRemainBattery(value: String) { }
-    fun setTorchMode(value: String) { }
+    fun setTakeMode(value: String)
+    {
+        try
+        {
+            val replyJson = cameraApi.callGenericSonyApiMethod("camera", "setExposureMode", JSONArray().put(value), "1.0")
+            if (cameraApi.isErrorReply(replyJson))
+            {
+                Log.v(TAG, " REPLY ERROR(exposureMode) : $replyJson")
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setShutterSpeed(value: String)
+    {
+        try
+        {
+            val replyJson = cameraApi.callGenericSonyApiMethod("camera", "setShutterSpeed", JSONArray().put(value), "1.0")
+            if (cameraApi.isErrorReply(replyJson))
+            {
+                Log.v(TAG, " REPLY ERROR(shutterSpeed) : $replyJson")
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setAperture(value: String)
+    {
+        try
+        {
+            val replyJson = cameraApi.callGenericSonyApiMethod("camera", "setFNumber", JSONArray().put(value), "1.0")
+            if (cameraApi.isErrorReply(replyJson))
+            {
+                Log.v(TAG, " REPLY ERROR(aperture) : $replyJson")
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setExpRev(value: String)
+    {
+        try
+        {
+/*
+            val replyJson = cameraApi.callGenericSonyApiMethod("camera", "setxxx", JSONArray().put(value), "1.0")
+            if (cameraApi.isErrorReply(replyJson))
+            {
+                Log.v(TAG, " REPLY ERROR(aperture) : $replyJson")
+            }
+*/
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setCaptureMode(value: String)
+    {
+        try
+        {
+            val replyJson = cameraApi.callGenericSonyApiMethod("camera", "setShootMode", JSONArray().put(value), "1.0")
+            if (cameraApi.isErrorReply(replyJson))
+            {
+                Log.v(TAG, " REPLY ERROR(shootMode) : $replyJson")
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setIsoSensitivity(value: String)
+    {
+        try
+        {
+            val replyJson = cameraApi.callGenericSonyApiMethod("camera", "setIsoSpeedRate", JSONArray().put(value), "1.0")
+            if (cameraApi.isErrorReply(replyJson))
+            {
+                Log.v(TAG, " REPLY ERROR(ISO Sensitivity) : $replyJson")
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setWhiteBalance(value: String)
+    {
+        try
+        {
+            val replyJson = cameraApi.callGenericSonyApiMethod("camera", "setWhiteBalance", JSONArray().put(value).put(false).put(2500), "1.0")
+            if (cameraApi.isErrorReply(replyJson))
+            {
+                Log.v(TAG, " REPLY ERROR(White Balance) : $replyJson")
+            }
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setMeteringMode(value: String)
+    {
+        try
+        {
+            Log.v(TAG, "setMeteringMode($value)")
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setPictureEffect(value: String)
+    {
+        try
+        {
+            Log.v(TAG, "setPictureEffect($value)")
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setRemainBattery(value: String)
+    {
+        try
+        {
+            Log.v(TAG, "setTorchMode($value)")
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
+
+    fun setTorchMode(value: String)
+    {
+        try
+        {
+            Log.v(TAG, "setTorchMode($value)")
+        }
+        catch (e: Exception)
+        {
+            e.printStackTrace()
+        }
+    }
 
     companion object
     {