From 3f31b76109e82f28af347633135bd942d5836f44 Mon Sep 17 00:00:00 2001 From: MRSa Date: Fri, 4 Feb 2022 23:47:23 +0900 Subject: [PATCH] =?utf8?q?Sony=E3=81=AE=E3=83=9E=E3=83=AB=E3=83=81?= =?utf8?q?=E3=83=87=E3=83=90=E3=82=A4=E3=82=B9=E5=88=B6=E5=BE=A1=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../panasonic/connection/PanasonicSsdpClient.kt | 2 +- .../panasonic/wrapper/PanasonicCameraControl.kt | 28 +------- .../camera/vendor/sony/SonyCameraControl.kt | 84 +++++++--------------- .../connection/SonyCameraConnectSequence.kt | 7 +- .../wrapper/connection/SonyCameraConnection.kt | 7 +- .../connection/SonyCameraDisconnectSequence.kt | 12 +++- .../sony/wrapper/connection/SonySsdpClient.kt | 16 +++-- .../jp/osdn/gokigen/mangle/scene/CameraProvider.kt | 2 +- 8 files changed, 57 insertions(+), 101 deletions(-) diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/connection/PanasonicSsdpClient.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/connection/PanasonicSsdpClient.kt index 87c2648..77532a6 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/connection/PanasonicSsdpClient.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/connection/PanasonicSsdpClient.kt @@ -218,7 +218,7 @@ class PanasonicSsdpClient(private val context: Context, private val callback: IS * * */ - fun searchPanasonicCameraDevice(ddUrl: String): IPanasonicCamera? + private fun searchPanasonicCameraDevice(ddUrl: String): IPanasonicCamera? { var device: PanasonicCameraDeviceProvider? = null val ddXml: String diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/wrapper/PanasonicCameraControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/wrapper/PanasonicCameraControl.kt index 286c5db..7d5bcee 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/wrapper/PanasonicCameraControl.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/wrapper/PanasonicCameraControl.kt @@ -142,32 +142,6 @@ class PanasonicCameraControl(private val context: AppCompatActivity, private val panasonicCamera = camera } -/* - fun getPanasonicCameraConnection(): ICameraConnection - { - return (cameraConnection) - } - - fun getFocusingControl(): IFocusingControl? - { - return focusControl - } - - fun getCameraInformation(): ICameraInformation? - { - return null - } - - fun getZoomLensControl(): IZoomLensControl? - { - return zoomControl - } - - fun getCaptureControl(): ICaptureControl? - { - return captureControl - } -*/ override fun getConnectionMethod(): String { return ("PANASONIC") @@ -359,7 +333,6 @@ class PanasonicCameraControl(private val context: AppCompatActivity, private val } } - override fun doShutter() { try @@ -442,6 +415,7 @@ class PanasonicCameraControl(private val context: AppCompatActivity, private val } override fun setNeighborCameraControl(camera0: ICameraControl?, camera1: ICameraControl?, camera2: ICameraControl?, camera3: ICameraControl?) { } + override fun getCameraStatus(): ICameraStatus? { if (!::statusChecker.isInitialized) diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/SonyCameraControl.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/SonyCameraControl.kt index 0d58d9b..29bff89 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/SonyCameraControl.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/SonyCameraControl.kt @@ -6,6 +6,7 @@ import android.view.View import androidx.appcompat.app.AppCompatActivity import jp.osdn.gokigen.gokigenassets.camera.preference.ICameraPreferenceProvider import jp.osdn.gokigen.gokigenassets.camera.interfaces.* +import jp.osdn.gokigen.gokigenassets.camera.vendor.ICameraControlCoordinator import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert import jp.osdn.gokigen.gokigenassets.liveview.ICachePositionProvider import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl @@ -33,12 +34,12 @@ import org.json.JSONObject import kotlin.collections.ArrayList -class SonyCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, private val informationNotify : IInformationReceiver, private val preference: ICameraPreferenceProvider, provider: ICameraStatusReceiver, private val number : Int = 0) : ISonyCameraHolder, +class SonyCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, private val informationNotify : IInformationReceiver, private val preference: ICameraPreferenceProvider, provider: ICameraStatusReceiver, private val cameraCoordinator: ICameraControlCoordinator, private val number : Int = 0) : ISonyCameraHolder, IDisplayInjector, ICameraControl, View.OnClickListener, View.OnLongClickListener, ICameraShutter, IKeyDown { private val sonyCameraStatus = SonyStatus(JSONObject()) private val liveViewListener = CameraLiveViewListenerImpl(context, informationNotify) - private val cameraConnection = SonyCameraConnection(context, provider, this) + private val cameraConnection = SonyCameraConnection(context, provider, this, cameraCoordinator, number) private val storeImage = StoreImage(context, liveViewListener) private lateinit var cachePositionProvider : ICachePositionProvider @@ -50,12 +51,13 @@ class SonyCameraControl(private val context: AppCompatActivity, private val vibr private lateinit var captureControl: SonyCameraCaptureControl private val zoomControl = SonyCameraZoomLensControl() - private var isStatusWatch = false + //private var isStatusWatch = false private var cameraPositionId = 0 companion object { private val TAG = SonyCameraControl::class.java.simpleName + private const val CONNECT_DELAY_MS : Long = 350 } override fun prepare() @@ -177,6 +179,18 @@ class SonyCameraControl(private val context: AppCompatActivity, private val vibr Log.v(TAG, " connectToCamera() : SONY ") try { + while (cameraCoordinator.isOtherCameraConnecting(number)) + { + try + { + Thread.sleep(CONNECT_DELAY_MS) + } + catch (e: Exception) + { + e.printStackTrace() + } + } + cameraCoordinator.startConnectToCamera(number) cameraConnection.connect() } catch (e : Exception) @@ -208,17 +222,13 @@ class SonyCameraControl(private val context: AppCompatActivity, private val vibr { try { - if (isStatusWatch) + if (::eventObserver.isInitialized) { - if (::eventObserver.isInitialized) - { - eventObserver.stop() - } - isStatusWatch = false - if (::liveViewControl.isInitialized) - { - liveViewControl.stopLiveView() - } + eventObserver.stop() + } + if (::liveViewControl.isInitialized) + { + liveViewControl.stopLiveView() } cameraConnection.disconnect(false) cameraConnection.stopWatchWifiStatus(context) @@ -232,7 +242,6 @@ class SonyCameraControl(private val context: AppCompatActivity, private val vibr override fun changeCaptureMode(mode: String) { Log.v(TAG, " --- changeCaptureMode(mode: $mode)") - // TODO("Not yet implemented") } override fun needRotateImage(): Boolean @@ -289,52 +298,6 @@ class SonyCameraControl(private val context: AppCompatActivity, private val vibr focusControl = SonyCameraFocusControl(frameDisplayer, indicator) captureControl = SonyCameraCaptureControl(frameDisplayer, indicator) } -/* - override fun startLiveView(isCameraScreen: Boolean) - { - Log.v(TAG, " startLiveView($isCameraScreen) ") - try - { - if (!isStatusWatch) - { - if (::eventObserver.isInitialized) - { - eventObserver.activate() - eventObserver.start() - val holder = eventObserver.getCameraStatusHolder() - holder?.getLiveviewStatus() - isStatusWatch = true - } - } - liveViewControl.startLiveView() - } - catch (e : Exception) - { - e.printStackTrace() - } - } - - override fun stopLiveView() - { - Log.v(TAG, " stopLiveView() ") - try - { - liveViewControl.stopLiveView() - if (isStatusWatch) - { - if (::eventObserver.isInitialized) - { - eventObserver.stop() - isStatusWatch = false - } - } - } - catch (e : Exception) - { - e.printStackTrace() - } - } -*/ override fun onClick(v: View?) { @@ -452,6 +415,7 @@ class SonyCameraControl(private val context: AppCompatActivity, private val vibr } override fun setNeighborCameraControl(camera0: ICameraControl?, camera1: ICameraControl?, camera2: ICameraControl?, camera3: ICameraControl?) { } + override fun getCameraStatus(): ICameraStatus { return (sonyCameraStatus) diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraConnectSequence.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraConnectSequence.kt index 9f38c78..629f850 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraConnectSequence.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraConnectSequence.kt @@ -6,6 +6,7 @@ import jp.osdn.gokigen.gokigenassets.camera.vendor.sony.wrapper.ISonyCamera import jp.osdn.gokigen.gokigenassets.camera.vendor.sony.wrapper.ISonyCameraHolder import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraConnection import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusReceiver +import jp.osdn.gokigen.gokigenassets.camera.vendor.ICameraControlCoordinator import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_CAMERA_FOUND import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_CONNECTED import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert.Companion.ID_STRING_CONNECT_START @@ -14,9 +15,11 @@ import java.lang.Exception class SonyCameraConnectSequence(private val context: AppCompatActivity, private val cameraStatusReceiver: ICameraStatusReceiver, private val cameraConnection: ICameraConnection?, - private val cameraHolder: ISonyCameraHolder) : Runnable, SonySsdpClient.ISearchResultCallback + private val cameraHolder: ISonyCameraHolder, + cameraCoordinator: ICameraControlCoordinator, + number : Int) : Runnable, SonySsdpClient.ISearchResultCallback { - private var client = SonySsdpClient(context, this, cameraStatusReceiver, 1) + private var client = SonySsdpClient(context, this, cameraStatusReceiver,cameraCoordinator, number, 1) companion object { diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraConnection.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraConnection.kt index 0b09dc5..51d4499 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraConnection.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraConnection.kt @@ -11,12 +11,13 @@ import android.util.Log import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatActivity import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraConnection +import jp.osdn.gokigen.gokigenassets.camera.vendor.ICameraControlCoordinator import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert import java.lang.Exception import java.util.concurrent.Executor import java.util.concurrent.Executors -class SonyCameraConnection(private val context: AppCompatActivity, private val statusReceiver: ICameraStatusReceiver, private val cameraHolder: ISonyCameraHolder) : ICameraConnection +class SonyCameraConnection(private val context: AppCompatActivity, private val statusReceiver: ICameraStatusReceiver, private val cameraHolder: ISonyCameraHolder, private val cameraCoordinator: ICameraControlCoordinator, private val number : Int) : ICameraConnection { companion object { @@ -190,7 +191,7 @@ class SonyCameraConnection(private val context: AppCompatActivity, private val s Log.v(TAG, "disconnectFromCamera()") try { - cameraExecutor.execute(SonyCameraDisconnectSequence(context, powerOff)) + cameraExecutor.execute(SonyCameraDisconnectSequence(context, powerOff, cameraCoordinator, number)) } catch (e: Exception) { @@ -207,7 +208,7 @@ class SonyCameraConnection(private val context: AppCompatActivity, private val s connectionStatus = CameraConnectionStatus.CONNECTING try { - cameraExecutor.execute(SonyCameraConnectSequence(context, statusReceiver, this, cameraHolder)) + cameraExecutor.execute(SonyCameraConnectSequence(context, statusReceiver, this, cameraHolder, cameraCoordinator, number)) } catch (e: Exception) { diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraDisconnectSequence.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraDisconnectSequence.kt index b0d92d3..10f891b 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraDisconnectSequence.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonyCameraDisconnectSequence.kt @@ -2,12 +2,22 @@ package jp.osdn.gokigen.gokigenassets.camera.vendor.sony.wrapper.connection import android.util.Log import androidx.appcompat.app.AppCompatActivity +import jp.osdn.gokigen.gokigenassets.camera.vendor.ICameraControlCoordinator -class SonyCameraDisconnectSequence(private val context: AppCompatActivity, private val powerOff: Boolean) : Runnable +class SonyCameraDisconnectSequence(private val context: AppCompatActivity, private val powerOff: Boolean, private val cameraCoordinator: ICameraControlCoordinator, private val number : Int) : Runnable { override fun run() { // カメラをPowerOffして接続を切る Log.v(SonyCameraDisconnectSequence::class.java.simpleName, " Disconnect from SONY.") + try + { + // カメラとの接続を切る + cameraCoordinator.releaseCameraControl(number) + } + catch (e: Exception) + { + e.printStackTrace() + } } } diff --git a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonySsdpClient.kt b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonySsdpClient.kt index 51fce3a..33ee9df 100644 --- a/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonySsdpClient.kt +++ b/app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/sony/wrapper/connection/SonySsdpClient.kt @@ -3,6 +3,7 @@ package jp.osdn.gokigen.gokigenassets.camera.vendor.sony.wrapper.connection import android.content.Context import android.util.Log import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusReceiver +import jp.osdn.gokigen.gokigenassets.camera.vendor.ICameraControlCoordinator import jp.osdn.gokigen.gokigenassets.camera.vendor.sony.wrapper.ISonyCamera import jp.osdn.gokigen.gokigenassets.camera.vendor.sony.wrapper.SonyCameraDeviceProvider import jp.osdn.gokigen.gokigenassets.constants.ICameraConstantConvert @@ -13,7 +14,7 @@ import java.net.DatagramSocket import java.net.InetSocketAddress import java.nio.charset.Charset -class SonySsdpClient(private val context: Context, private val callback: ISearchResultCallback, private val cameraStatusReceiver: ICameraStatusReceiver, private var sendRepeatCount: Int = 0) +class SonySsdpClient(private val context: Context, private val callback: ISearchResultCallback, private val cameraStatusReceiver: ICameraStatusReceiver, private val cameraCoordinator: ICameraControlCoordinator, private val number : Int, private var sendRepeatCount: Int = 0) { companion object { @@ -92,26 +93,29 @@ class SonySsdpClient(private val context: Context, private val callback: ISearch socket.soTimeout = SSDP_RECEIVE_TIMEOUT socket.receive(receivePacket) val ssdpReplyMessage = String(receivePacket.getData(), 0, receivePacket.length, Charset.forName("UTF-8")) - var ddUsn: String? + var ddUsn: String if (ssdpReplyMessage.contains("HTTP/1.1 200")) { ddUsn = findParameterValue(ssdpReplyMessage, "USN") + Log.v(TAG, "- - - - - - - USN : $ddUsn") cameraStatusReceiver.onStatusNotify(context.getString(ICameraConstantConvert.ID_STRING_CONNECT_CAMERA_RECEIVED_REPLY)) - if (!foundDevices.contains(ddUsn)) + if ((ddUsn.isNotEmpty())&&(!foundDevices.contains(ddUsn))&&(!cameraCoordinator.isAssignedCameraControl(ddUsn))) { val ddLocation = findParameterValue(ssdpReplyMessage, "LOCATION") foundDevices.add(ddUsn) //// Fetch Device Description XML and parse it. - if (ddLocation != null) + if (ddLocation.isNotEmpty()) { cameraStatusReceiver.onStatusNotify("LOCATION : $ddLocation") val device: ISonyCamera? = searchSonyCameraDevice(ddLocation) if ((device != null)&&(device.hasApiService("camera"))) { cameraStatusReceiver.onStatusNotify(context.getString(ICameraConstantConvert.ID_STRING_CONNECT_CAMERA_FOUND) + " " + device.getFriendlyName()) + cameraCoordinator.assignCameraControl(number, ddUsn) callback.onDeviceFound(device) // カメラが見つかった場合は breakする + Log.v(TAG, " assignCameraControl execution Result: " + cameraCoordinator.isAssignedCameraControl(ddUsn)) break } else @@ -166,7 +170,7 @@ class SonySsdpClient(private val context: Context, private val callback: ISearch callback.onFinished() } - private fun findParameterValue(ssdpMessage: String, paramName: String): String? + private fun findParameterValue(ssdpMessage: String, paramName: String): String { var name = paramName if (!name.endsWith(":")) @@ -187,7 +191,7 @@ class SonySsdpClient(private val context: Context, private val callback: ISearch e.printStackTrace() } } - return null + return ("") } private fun searchSonyCameraDevice(ddUrl: String): ISonyCamera? diff --git a/app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt b/app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt index 684d6ec..88c89fc 100644 --- a/app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt +++ b/app/src/main/java/jp/osdn/gokigen/mangle/scene/CameraProvider.kt @@ -235,7 +235,7 @@ class CameraProvider(private val activity: AppCompatActivity, private val inform private fun prepareSonyCameraControl(cameraPreference : ICameraPreferenceProvider, number : Int) : ICameraControl { - return (SonyCameraControl(activity, vibrator, informationNotify, cameraPreference, statusReceiver, number)) + return (SonyCameraControl(activity, vibrator, informationNotify, cameraPreference, statusReceiver, cameraCoordinator, number)) } private fun preparePixproCameraControl(cameraPreference : ICameraPreferenceProvider, number : Int) : ICameraControl -- 2.11.0