From a917e0459cfd09a14ab4e6671eddc2f3e0df3d2c Mon Sep 17 00:00:00 2001 From: MRSa Date: Sun, 15 Aug 2021 14:47:35 +0900 Subject: [PATCH] =?utf8?q?SONY=E7=B3=BB=E3=82=B9=E3=83=86=E3=83=BC?= =?utf8?q?=E3=82=BF=E3=82=B9=E8=A1=A8=E7=A4=BA=E5=AE=9F=E8=A3=85=EF=BC=88?= =?utf8?q?=E9=80=94=E4=B8=AD=EF=BC=89=E3=80=81=E8=A8=AD=E5=AE=9A=E3=81=AE?= =?utf8?q?=E5=A4=89=E6=9B=B4=E9=81=B8=E6=8A=9E=E8=82=A2=E3=82=92=E8=A1=A8?= =?utf8?q?=E7=A4=BA=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= =?utf8?q?=E3=81=99=E3=82=8B=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../gokigenassets/camera/sony/SonyCameraControl.kt | 1 + .../camera/sony/wrapper/ISonyCameraApi.kt | 4 +- .../camera/sony/wrapper/SonyCameraApi.kt | 11 +- .../sony/wrapper/eventlistener/ReplyJsonParser.kt | 1 - .../eventlistener/SonyCameraEventObserver.kt | 5 +- .../sony/wrapper/eventlistener/SonyStatus.kt | 65 ++++-- .../wrapper/eventlistener/SonyStatusCandidates.kt | 245 +++++++++++++++++++++ 7 files changed, 304 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatusCandidates.kt diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/SonyCameraControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/SonyCameraControl.kt index 2560daa..fda70a4 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/SonyCameraControl.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/SonyCameraControl.kt @@ -69,6 +69,7 @@ class SonyCameraControl(private val context: AppCompatActivity, private val vibr eventObserver = SonyCameraEventObserver.newInstance(context, sonyCameraApi, sonyCameraStatus) liveViewControl = SonyLiveViewControl(context, informationNotify, liveViewListener, sonyCameraApi) zoomControl.setCameraApi(sonyCameraApi) + sonyCameraStatus.setCameraApi(sonyCameraApi) if (::focusControl.isInitialized) { focusControl.setCameraApi(sonyCameraApi) diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/ISonyCameraApi.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/ISonyCameraApi.kt index 8dad6f8..79d42bb 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/ISonyCameraApi.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/ISonyCameraApi.kt @@ -3,7 +3,6 @@ package jp.osdn.gokigen.gokigenassets.camera.sony.wrapper import org.json.JSONArray import org.json.JSONObject - interface ISonyCameraApi { fun getAvailableApiList(): JSONObject? @@ -52,7 +51,8 @@ interface ISonyCameraApi service: String, method: String, params: JSONArray, - version: String + version: String, + timeoutMs: Int = -1 ): JSONObject? fun getDdUrl(): String? diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/SonyCameraApi.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/SonyCameraApi.kt index ed97125..a3e60b3 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/SonyCameraApi.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/SonyCameraApi.kt @@ -479,14 +479,9 @@ class SonyCameraApi(private val sonyCamera: ISonyCamera) : ISonyCameraApi return null } - override fun callGenericSonyApiMethod( - service: String, - method: String, - params: JSONArray, - version: String - ): JSONObject + override fun callGenericSonyApiMethod(service: String, method: String, params: JSONArray, version: String, timeoutMs: Int): JSONObject { - return communicateJSON(service, method, params, version, -1) + return communicateJSON(service, method, params, version, timeoutMs) } override fun getDdUrl(): String @@ -526,6 +521,6 @@ class SonyCameraApi(private val sonyCamera: ISonyCamera) : ISonyCameraApi companion object { private val TAG = SonyCameraApi::class.java.simpleName - private const val FULL_LOG = true + private const val FULL_LOG = false } } diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/ReplyJsonParser.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/ReplyJsonParser.kt index 3cd67b5..d7416bc 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/ReplyJsonParser.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/ReplyJsonParser.kt @@ -9,7 +9,6 @@ import java.lang.Exception import java.util.* import kotlin.collections.ArrayList - class ReplyJsonParser(private val uiHandler: Handler) : ICameraStatusHolder { private var cameraStatus = "" diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyCameraEventObserver.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyCameraEventObserver.kt index 51b2664..6f0e621 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyCameraEventObserver.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyCameraEventObserver.kt @@ -43,7 +43,10 @@ class SonyCameraEventObserver(context: Context, private val remoteApi: ISonyCame { val replyJson = remoteApi.getEvent(eventVersion, longPolling) ?: JSONObject() val errorCode = findErrorCode(replyJson) - Log.d(TAG, "getEvent errorCode: $errorCode") + if (errorCode != 0) + { + Log.d(TAG, "getEvent errorCode: $errorCode") + } when (errorCode) { 0 -> { } diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatus.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatus.kt index 90d5e02..0fe6504 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatus.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatus.kt @@ -3,11 +3,14 @@ package jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.eventlistener import android.graphics.Color import android.util.Log import jp.osdn.gokigen.gokigenassets.camera.interfaces.* +import jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.ISonyCameraApi import org.json.JSONObject import java.lang.Exception class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener, ISonyStatusReceiver { + private val statusCandidates = SonyStatusCandidates() + private var currentExposureMode = "" private var currentShootMode = "" private var currentExposureCompensation = "" @@ -19,6 +22,10 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener private var currentWhiteBalanceMode = "" private var currentCameraStatus = "" + fun setCameraApi(sonyCameraApi: ISonyCameraApi) + { + statusCandidates.setCameraApi(sonyCameraApi) + } private var jsonObject : JSONObject init @@ -28,12 +35,39 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener override fun setStatus(key: String, value: String) { - + when (key) { + ICameraStatus.TAKE_MODE -> statusCandidates.setTakeMode(value) + ICameraStatus.SHUTTER_SPEED -> statusCandidates.setShutterSpeed(value) + ICameraStatus.APERTURE -> statusCandidates.setAperture(value) + ICameraStatus.EXPREV -> statusCandidates.setExpRev(value) + ICameraStatus.CAPTURE_MODE -> statusCandidates.setCaptureMode(value) + ICameraStatus.ISO_SENSITIVITY -> statusCandidates.setIsoSensitivity(value) + ICameraStatus.WHITE_BALANCE -> statusCandidates.setWhiteBalance(value) + ICameraStatus.AE -> statusCandidates.setMeteringMode(value) + ICameraStatus.EFFECT -> statusCandidates.setPictureEffect(value) + ICameraStatus.BATTERY -> statusCandidates.setRemainBattery(value) + ICameraStatus.TORCH_MODE -> statusCandidates.setTorchMode(value) + else -> { return } + } } override fun getStatusList(key: String): List { - return (ArrayList()) + val statusList : List = (when (key) { + ICameraStatus.TAKE_MODE -> statusCandidates.getAvailableTakeMode() + ICameraStatus.SHUTTER_SPEED -> statusCandidates.getAvailableShutterSpeed() + ICameraStatus.APERTURE -> statusCandidates.getAvailableAperture() + ICameraStatus.EXPREV -> statusCandidates.getAvailableExpRev() + ICameraStatus.CAPTURE_MODE -> statusCandidates.getAvailableCaptureMode() + ICameraStatus.ISO_SENSITIVITY -> statusCandidates.getAvailableIsoSensitivity() + ICameraStatus.WHITE_BALANCE -> statusCandidates.getAvailableWhiteBalance() + ICameraStatus.AE -> statusCandidates.getAvailableMeteringMode() + ICameraStatus.EFFECT -> statusCandidates.getAvailablePictureEffect() + ICameraStatus.BATTERY -> statusCandidates.getAvailableRemainBattery() + ICameraStatus.TORCH_MODE -> statusCandidates.getAvailableTorchMode() + else -> { ArrayList() } + }) + return (statusList) } override fun getStatus(key: String): String @@ -157,24 +191,23 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener { this.jsonObject = jsonObject - currentCameraStatus = parseEventStatus(jsonObject, "cameraStatus", "cameraStatus", 1) - currentExposureMode = parseEventStatus(jsonObject, "exposureMode", "currentExposureMode", 18) - currentShootMode = parseEventStatus(jsonObject, "shootMode", "currentShootMode",21) - currentExposureCompensation = parseEventStatus(jsonObject, "exposureCompensation", "currentExposureCompensation",25) - - currentFlashMode = parseEventStatus(jsonObject, "flashMode", "currentFlashMode",26) - currentFNumber = parseEventStatus(jsonObject, "fNumber", "currentFNumber",27) - currentFocusMode = parseEventStatus(jsonObject, "focusMode", "currentFocusMode",28) + currentCameraStatus = parseEventStatus(currentCameraStatus, jsonObject, "cameraStatus", "cameraStatus", 1) + currentExposureMode = parseEventStatus(currentExposureMode, jsonObject, "exposureMode", "currentExposureMode", 18) + currentShootMode = parseEventStatus(currentShootMode, jsonObject, "shootMode", "currentShootMode",21) + currentExposureCompensation = parseEventStatus(currentExposureCompensation, jsonObject, "exposureCompensation", "currentExposureCompensation",25) - currentIsoSpeedRate = parseEventStatus(jsonObject, "isoSpeedRate", "currentIsoSpeedRate", 29) - currentShutterSpeed = parseEventStatus(jsonObject, "shutterSpeed", "currentShutterSpeed", 32) - currentWhiteBalanceMode = parseEventStatus(jsonObject, "whiteBalanceMode", "currentWhiteBalanceMode", 33) + currentFlashMode = parseEventStatus(currentFlashMode, jsonObject, "flashMode", "currentFlashMode",26) + currentFNumber = parseEventStatus(currentFNumber, jsonObject, "fNumber", "currentFNumber",27) + currentFocusMode = parseEventStatus(currentFocusMode, jsonObject, "focusMode", "currentFocusMode",28) + currentIsoSpeedRate = parseEventStatus(currentIsoSpeedRate, jsonObject, "isoSpeedRate", "currentIsoSpeedRate", 29) + currentShutterSpeed = parseEventStatus(currentShutterSpeed, jsonObject, "shutterSpeed", "currentShutterSpeed", 32) + currentWhiteBalanceMode = parseEventStatus(currentWhiteBalanceMode, jsonObject, "whiteBalance", "currentWhiteBalanceMode", 33) } - private fun parseEventStatus(replyJson: JSONObject, item: String, key: String, indexOfCameraStatus: Int): String + private fun parseEventStatus(currentStatus: String, replyJson: JSONObject, item: String, key: String, indexOfCameraStatus: Int): String { - var eventStatus = "" + var eventStatus = currentStatus try { val resultsObj = replyJson.getJSONArray("result") @@ -188,7 +221,7 @@ class SonyStatus(jsonObject : JSONObject) : ICameraStatus, ICameraChangeListener } else { - Log.w(TAG, "Event reply: Illegal Index ($indexOfCameraStatus: $key) $type") + Log.w(TAG, "Event reply: Illegal Index ($indexOfCameraStatus: $key) $type : $cameraStatusObj") } } } diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatusCandidates.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatusCandidates.kt new file mode 100644 index 0000000..431a5c8 --- /dev/null +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/sony/wrapper/eventlistener/SonyStatusCandidates.kt @@ -0,0 +1,245 @@ +package jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.eventlistener + +import jp.osdn.gokigen.gokigenassets.camera.sony.wrapper.ISonyCameraApi +import org.json.JSONArray + +class SonyStatusCandidates() +{ + private lateinit var cameraApi: ISonyCameraApi + fun setCameraApi(sonyCameraApi: ISonyCameraApi) + { + cameraApi = sonyCameraApi + } + + fun getAvailableTakeMode(): List + { + val takeModeList : ArrayList = ArrayList() + try + { + if (::cameraApi.isInitialized) + { + val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableExposureMode", JSONArray(), "1.0") + val resultsObj = replyJson?.getJSONArray("result") + if (resultsObj?.isNull(1) == false) + { + val takeModeArray = resultsObj.getJSONArray(1) + //Log.v(TAG, " getAvailableTakeMode() : $takeModeArray") + for (index in 0 until takeModeArray.length()) + { + val itemString = takeModeArray.getString(index) + takeModeList.add(itemString) + //Log.v(TAG, " --- $itemString ($index) ---") + } + } + } + } + catch (e: Exception) + { + e.printStackTrace() + } + return (takeModeList) + } + + fun getAvailableShutterSpeed(): List + { + val shutterSpeedList : ArrayList = ArrayList() + try + { + if (::cameraApi.isInitialized) + { + val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableShutterSpeed", JSONArray(), "1.0") + val resultsObj = replyJson?.getJSONArray("result") + if (resultsObj?.isNull(1) == false) + { + val availableItemArray = resultsObj.getJSONArray(1) + for (index in 0 until availableItemArray.length()) + { + val itemString = availableItemArray.getString(index) + shutterSpeedList.add(itemString) + } + } + } + } + catch (e: Exception) + { + e.printStackTrace() + } + return (shutterSpeedList) + } + + fun getAvailableAperture(): List + { + val apertureList : ArrayList = ArrayList() + try + { + if (::cameraApi.isInitialized) + { + val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableFNumber", JSONArray(), "1.0") + val resultsObj = replyJson?.getJSONArray("result") + if (resultsObj?.isNull(1) == false) + { + val availableItemArray = resultsObj.getJSONArray(1) + for (index in 0 until availableItemArray.length()) + { + val itemString = availableItemArray.getString(index) + apertureList.add(itemString) + } + } + } + } + catch (e: Exception) + { + e.printStackTrace() + } + return (apertureList) + } + + fun getAvailableExpRev(): List + { +/* + val apertureList : ArrayList = ArrayList() + try + { + if (::cameraApi.isInitialized) + { + val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableExposureCompensation", JSONArray(), "1.0") + val resultsObj = replyJson?.getJSONArray("result") + if (resultsObj?.isNull(1) == false) + { + val availableItemArray = resultsObj.getJSONArray(1) + for (index in 0 until availableItemArray.length()) + { + val itemString = availableItemArray.getString(index) + apertureList.add(itemString) + } + } + } + } + catch (e: Exception) + { + e.printStackTrace() + } +*/ + return (ArrayList()) + } + + fun getAvailableCaptureMode(): List + { + val shootModeList : ArrayList = ArrayList() + try + { + if (::cameraApi.isInitialized) + { + val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableShootMode", JSONArray(), "1.0") + val resultsObj = replyJson?.getJSONArray("result") + if (resultsObj?.isNull(1) == false) + { + val availableItemArray = resultsObj.getJSONArray(1) + for (index in 0 until availableItemArray.length()) + { + val itemString = availableItemArray.getString(index) + shootModeList.add(itemString) + } + } + } + } + catch (e: Exception) + { + e.printStackTrace() + } + return (shootModeList) + } + + fun getAvailableIsoSensitivity(): List + { + val isoList : ArrayList = ArrayList() + try + { + if (::cameraApi.isInitialized) + { + val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableIsoSpeedRate", JSONArray(), "1.0") + val resultsObj = replyJson?.getJSONArray("result") + if (resultsObj?.isNull(1) == false) + { + val availableItemArray = resultsObj.getJSONArray(1) + for (index in 0 until availableItemArray.length()) + { + val itemString = availableItemArray.getString(index) + isoList.add(itemString) + } + } + } + } + catch (e: Exception) + { + e.printStackTrace() + } + return (isoList) + } + + fun getAvailableWhiteBalance(): List + { + val whiteBalanceList : ArrayList = ArrayList() +/* + try + { + if (::cameraApi.isInitialized) + { + val replyJson = cameraApi.callGenericSonyApiMethod("camera", "getAvailableWhiteBalance", JSONArray(), "1.0") + val resultsObj = replyJson?.getJSONArray("result") + if (resultsObj?.isNull(1) == false) + { + val availableItemArray = resultsObj.getJSONArray(1) + for (index in 0 until availableItemArray.length()) + { + val itemString = availableItemArray.getString(index) + whiteBalanceList.add(itemString) + } + } + } + } + catch (e: Exception) + { + e.printStackTrace() + } +*/ + return (whiteBalanceList) + } + + fun getAvailableMeteringMode(): List + { + return (ArrayList()) + } + + fun getAvailablePictureEffect(): List + { + return (ArrayList()) + } + + fun getAvailableRemainBattery(): List + { + return (ArrayList()) + } + + fun getAvailableTorchMode(): List + { + 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) { } + + companion object + { + private val TAG = SonyStatusCandidates::class.java.simpleName + } +} -- 2.11.0