OSDN Git Service

Panasonic機の同時接続シーケンスを改善。
authorMRSa <mrsa@myad.jp>
Thu, 3 Feb 2022 14:00:25 +0000 (23:00 +0900)
committerMRSa <mrsa@myad.jp>
Thu, 3 Feb 2022 14:00:25 +0000 (23:00 +0900)
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/CameraControlCoordinator.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/ICameraControlCoordinator.kt
app/src/main/java/jp/osdn/gokigen/gokigenassets/camera/vendor/panasonic/wrapper/PanasonicCameraControl.kt

index 3340b1a..d74113a 100644 (file)
@@ -7,6 +7,17 @@ class CameraControlCoordinator(private val informationReceiver: IInformationRece
 {
     private val panasonicCameraDeviceMap = mutableMapOf<Int, String>()
     private val cameraControlInfo = mutableMapOf<Int, String>()
+    private var connectingCameraNumber = -1
+
+    override fun startConnectToCamera(number: Int)
+    {
+        connectingCameraNumber = number
+    }
+
+    override fun isOtherCameraConnecting(number: Int): Boolean
+    {
+        return (connectingCameraNumber != number)
+    }
 
     override fun isAlreadyAssignedCameraControl(number: Int): Boolean
     {
@@ -25,6 +36,7 @@ class CameraControlCoordinator(private val informationReceiver: IInformationRece
     {
         try
         {
+            connectingCameraNumber = -1
             panasonicCameraDeviceMap.remove(number)
             cameraControlInfo.remove(number)
             updateInformation()
@@ -40,6 +52,7 @@ class CameraControlCoordinator(private val informationReceiver: IInformationRece
         try
         {
             Log.v(TAG, "assignPanasonicCamera($number, $deviceId)")
+            connectingCameraNumber = -1
             panasonicCameraDeviceMap[number] = deviceId
             cameraControlInfo[number] = "$number "
             updateInformation()
@@ -74,7 +87,6 @@ class CameraControlCoordinator(private val informationReceiver: IInformationRece
 
     }
 
-
     companion object
     {
         private val TAG = CameraControlCoordinator::class.java.simpleName
index 1ac7aec..244409d 100644 (file)
@@ -2,6 +2,9 @@ package jp.osdn.gokigen.gokigenassets.camera.vendor
 
 interface ICameraControlCoordinator
 {
+    fun startConnectToCamera(number: Int)
+    fun isOtherCameraConnecting(number: Int) : Boolean
+
     fun isAlreadyAssignedCameraControl(number: Int) : Boolean
     fun releaseCameraControl(number: Int)
 
index 3d87ff0..286c5db 100644 (file)
@@ -29,7 +29,7 @@ import jp.osdn.gokigen.gokigenassets.scene.IInformationReceiver
 import jp.osdn.gokigen.gokigenassets.scene.IVibrator
 import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
 
-class PanasonicCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, informationNotify: IInformationReceiver, private val preference: ICameraPreferenceProvider, provider: ICameraStatusReceiver, cameraCoordinator: ICameraControlCoordinator, private val number: Int) : IPanasonicCameraHolder, IDisplayInjector,ILiveViewController, ICameraControl, View.OnClickListener, View.OnLongClickListener, ICameraShutter, IKeyDown
+class PanasonicCameraControl(private val context: AppCompatActivity, private val vibrator : IVibrator, informationNotify: IInformationReceiver, private val preference: ICameraPreferenceProvider, provider: ICameraStatusReceiver, private val cameraCoordinator: ICameraControlCoordinator, private val number: Int) : IPanasonicCameraHolder, IDisplayInjector,ILiveViewController, ICameraControl, View.OnClickListener, View.OnLongClickListener, ICameraShutter, IKeyDown
 {
     private val cardSlotSelector = PanasonicCardSlotSelector()
     private val liveViewListener = CameraLiveViewListenerImpl(context, informationNotify)
@@ -50,6 +50,7 @@ class PanasonicCameraControl(private val context: AppCompatActivity, private val
     {
         private val TAG = PanasonicCameraControl::class.java.simpleName
         private const val TIMEOUT_MS = 3000
+        private const val CONNECT_DELAY_MS : Long = 350
     }
 
     override fun prepare()
@@ -182,6 +183,18 @@ class PanasonicCameraControl(private val context: AppCompatActivity, private val
         Log.v(TAG, " connectToCamera() : PANASONIC ")
         try
         {
+            while (cameraCoordinator.isOtherCameraConnecting(number))
+            {
+                try
+                {
+                    Thread.sleep(CONNECT_DELAY_MS)
+                }
+                catch (e: Exception)
+                {
+                    e.printStackTrace()
+                }
+            }
+            cameraCoordinator.startConnectToCamera(number)
             cameraConnection.connect()
         }
         catch (e : Exception)