{
private val TAG = PanasonicSsdpClient::class.java.simpleName
private const val SEND_TIMES_DEFAULT = 3
- private const val SEND_WAIT_DURATION_MS = 100
+ private const val SEND_WAIT_DURATION_MS = 300
private const val SSDP_RECEIVE_TIMEOUT = 4 * 1000 // msec
- private const val PACKET_BUFFER_SIZE = 2048
+ private const val PACKET_BUFFER_SIZE = 4096
private const val SSDP_PORT = 1900
private const val SSDP_MX = 2
private const val SSDP_ADDR = "239.255.255.250"
init
{
- this.sendRepeatCount = if (sendRepeatCount >= 0) sendRepeatCount else SEND_TIMES_DEFAULT
+ this.sendRepeatCount = if (sendRepeatCount > 0) sendRepeatCount else SEND_TIMES_DEFAULT
ssdpRequest = """
M-SEARCH * HTTP/1.1
${java.lang.String.format(Locale.US, "HOST: %s:%d\r\n", SSDP_ADDR, SSDP_PORT)}MAN: "ssdp:discover"
socket.send(packet)
Thread.sleep(SEND_WAIT_DURATION_MS.toLong())
}
+ Log.v(TAG, " SSDP : SEND")
}
catch (e: Exception)
{
var currentTime = System.currentTimeMillis()
val foundDevices: MutableList<String?> = ArrayList()
val array = ByteArray(PACKET_BUFFER_SIZE)
- val http = SimpleHttpClient()
+
try
{
cameraStatusReceiver.onStatusNotify(context.getString(ID_STRING_CONNECT_WAIT_REPLY_CAMERA))
//// Fetch Device Description XML and parse it.
if (ddLocation != null)
{
+ val http = SimpleHttpClient()
cameraStatusReceiver.onStatusNotify("LOCATION : $ddLocation")
val device: IPanasonicCamera? = searchPanasonicCameraDevice(ddLocation)
if (device != null)
package jp.osdn.gokigen.gokigenassets.camera.panasonic.liveview
import android.util.Log
-import androidx.appcompat.app.AppCompatActivity
import jp.osdn.gokigen.gokigenassets.camera.panasonic.IPanasonicCamera
import jp.osdn.gokigen.gokigenassets.liveview.image.CameraLiveViewListenerImpl
import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
import java.util.*
-class PanasonicLiveViewControl(private val activity : AppCompatActivity, private val camera: IPanasonicCamera)
+class PanasonicLiveViewControl(private val liveViewListener : CameraLiveViewListenerImpl, private val camera: IPanasonicCamera)
{
- private val liveViewListener = CameraLiveViewListenerImpl(activity)
private var receiverSocket: DatagramSocket? = null
private var whileStreamReceive = false
private var errorOccur = 0
}
}
val offset = startPosition - startmarker.size
- liveViewListener.onUpdateLiveView(Arrays.copyOfRange(receivedData, offset, dataLength), null)
+ liveViewListener.onUpdateLiveView(receivedData.copyOfRange(offset, dataLength), null)
}
private fun receiverThread()
System.gc()
}
-/*
- fun getLiveViewListener(): ILiveViewListener
- {
- return liveViewListener
- }
-*/
-
private fun closeReceiveSocket()
{
Log.v(TAG, "closeReceiveSocket()")
import android.content.Context
import android.util.Log
+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.interfaces.ICardSlotSelector
import jp.osdn.gokigen.gokigenassets.camera.panasonic.ICameraChangeListener
import jp.osdn.gokigen.gokigenassets.camera.panasonic.IPanasonicCamera
+import jp.osdn.gokigen.gokigenassets.liveview.message.IMessageDrawer
import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
+import java.util.ArrayList
-
-class CameraEventObserver(context: Context, private val remote: IPanasonicCamera, cardSlotSelector: ICardSlotSelector): ICameraEventObserver
+class CameraEventObserver(context: Context, private val remote: IPanasonicCamera, cardSlotSelector: ICardSlotSelector) : ICameraStatusWatcher, ICameraStatus
{
private val statusHolder = CameraStatusHolder(context, remote, cardSlotSelector)
private var isEventMonitoring = false
private var isActive = false
- override fun start(): Boolean
+
+ override fun startStatusWatch(indicator : IMessageDrawer?, notifier: ICameraStatusUpdateNotify?)
+ {
+ try
+ {
+ isActive = true
+ start()
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun stopStatusWatch()
+ {
+ try
+ {
+ isEventMonitoring = false
+ isActive = false
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+
+ private fun start(): Boolean
{
if (!isActive)
{
Log.w(TAG, "start() observer is not active.")
return false
}
- if (isEventMonitoring) {
+ if (isEventMonitoring)
+ {
Log.w(TAG, "start() already starting.")
return false
}
isEventMonitoring = true
- try {
+ try
+ {
val http = SimpleHttpClient()
val thread: Thread = object : Thread() {
override fun run() {
return true
}
- override fun stop() {
- isEventMonitoring = false
- }
-
- override fun release() {
- isEventMonitoring = false
- isActive = false
- }
-
- override fun setEventListener(listener: ICameraChangeListener)
+ fun setEventListener(listener: ICameraChangeListener)
{
try
{
}
}
- override fun clearEventListener() {
- try {
+ private fun clearEventListener()
+ {
+ try
+ {
statusHolder.clearEventChangeListener()
- } catch (e: Exception) {
+ }
+ catch (e: Exception)
+ {
e.printStackTrace()
}
}
- override fun getCameraStatusHolder(): ICameraStatusHolder {
+ private fun getCameraStatusHolder(): ICameraStatusHolder
+ {
return statusHolder
}
- override fun activate()
+ private fun activate()
{
isActive = true
}
+ override fun getStatusList(key: String): List<String>
+ {
+ try
+ {
+ val listKey = key + "List"
+ return statusHolder.getAvailableItemList(listKey)
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+ return ArrayList()
+ }
+
+ override fun getStatus(key: String): String
+ {
+ try
+ {
+ return statusHolder.getItemStatus(key)
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+ return ""
+ }
+
+ override fun setStatus(key: String, value: String)
+ {
+ try
+ {
+ Log.v(TAG, " setStatus(key:$key, value:$value)")
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
companion object
{
private val TAG = CameraEventObserver::class.java.simpleName
private const val TIMEOUT_MS = 3000
}
-
-}
\ No newline at end of file
+}
import jp.osdn.gokigen.gokigenassets.camera.panasonic.ICameraChangeListener
import jp.osdn.gokigen.gokigenassets.camera.panasonic.IPanasonicCamera
import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
+import java.util.ArrayList
class CameraStatusHolder(private val context: Context, private val remote: IPanasonicCamera, private val cardSlotSelector: ICardSlotSelector) : ICardSlotSelectionReceiver, ICameraStatusHolder
private var isInitialized = false
private var isDualSlot = false
- fun parse(reply: String) {
- try {
+ fun parse(reply: String)
+ {
+ try
+ {
// Log.v(TAG, " getState : " + reply);
var isEnableDualSlot = false
if (reply.contains("<sd_memory>set</sd_memory>") && reply.contains("<sd2_memory>set</sd2_memory>")) {
isDualSlot = isEnableDualSlot
}
checkCurrentSlot(reply)
- } catch (e: Exception) {
+ }
+ catch (e: Exception)
+ {
e.printStackTrace()
}
}
- private fun checkCurrentSlot(reply: String) {
- try {
+ private fun checkCurrentSlot(reply: String)
+ {
+ try
+ {
val header = "<current_sd>"
val indexStart = reply.indexOf(header)
val indexEnd = reply.indexOf("</current_sd>")
- if (indexStart > 0 && indexEnd > 0 && indexStart < indexEnd) {
+ if (indexStart > 0 && indexEnd > 0 && indexStart < indexEnd)
+ {
val currentSlot = reply.substring(indexStart + header.length, indexEnd)
- if (current_sd != currentSlot) {
+ if (current_sd != currentSlot)
+ {
current_sd = currentSlot
cardSlotSelector.changedCardSlot(current_sd)
}
}
- } catch (e: Exception) {
+ }
+ catch (e: Exception)
+ {
e.printStackTrace()
}
}
- fun setEventChangeListener(listener: ICameraChangeListener) {
+ fun setEventChangeListener(listener: ICameraChangeListener)
+ {
this.listener = listener
}
- fun clearEventChangeListener() {
+ fun clearEventChangeListener()
+ {
listener = null
}
return false
}
- override fun getShootMode(): String? {
+ override fun getShootMode(): String?
+ {
return null
}
return current_sd
}
- override fun slotSelected(slotId: String) {
+ override fun slotSelected(slotId: String)
+ {
Log.v(TAG, " slotSelected : $slotId")
- if (current_sd != slotId) {
+ if (current_sd != slotId)
+ {
// スロットを変更したい!
requestToChangeSlot(slotId)
}
}
+ /**
+ *
+ *
+ */
+ fun getAvailableItemList(key: String): List<String>
+ {
+ val itemList: MutableList<String> = ArrayList()
+ try
+ {
+/*
+ val array = latestResultObject!!.getJSONArray(key) ?: return itemList
+ val nofItems = array.length()
+ for (index in 0 until nofItems) {
+ try {
+ itemList.add(array.getString(index))
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
+ }
+*/
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+ return itemList
+ }
- private fun requestToChangeSlot(slotId: String) {
- try {
+ fun getItemStatus(key: String): String
+ {
+/*
+ try
+ {
+ return latestResultObject!!.getString(key)
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+*/
+ return ""
+ }
+
+ private fun requestToChangeSlot(slotId: String)
+ {
+ try
+ {
val thread = Thread {
- try {
+ try
+ {
var loop = true
val http = SimpleHttpClient()
- while (loop) {
- val reply: String = http.httpGet(
- remote.getCmdUrl() + "cam.cgi?mode=setsetting&type=current_sd&value=" + slotId,
- TIMEOUT_MS
- )
- if (reply.indexOf("<result>ok</result>") > 0) {
+ while (loop)
+ {
+ val reply: String = http.httpGet(remote.getCmdUrl() + "cam.cgi?mode=setsetting&type=current_sd&value=" + slotId, TIMEOUT_MS)
+ if (reply.indexOf("<result>ok</result>") > 0)
+ {
loop = false
cardSlotSelector.selectSlot(slotId)
- } else {
+ }
+ else
+ {
Thread.sleep(1000) // 1秒待つ
}
}
- } catch (e: Exception) {
+ }
+ catch (e: Exception)
+ {
e.printStackTrace()
}
}
thread.start()
- } catch (e: Exception) {
+ }
+ catch (e: Exception)
+ {
e.printStackTrace()
}
}
--- /dev/null
+package jp.osdn.gokigen.gokigenassets.camera.panasonic.wrapper
+
+import android.util.Log
+import android.view.KeyEvent
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import jp.osdn.gokigen.gokigenassets.camera.ICameraPreferenceProvider
+import jp.osdn.gokigen.gokigenassets.camera.interfaces.*
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.ICameraChangeListener
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.IPanasonicCamera
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.IPanasonicCameraHolder
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.connection.PanasonicCameraConnection
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.liveview.PanasonicLiveViewControl
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraCaptureControl
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraFocusControl
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraZoomLensControl
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.status.CameraEventObserver
+import jp.osdn.gokigen.gokigenassets.camera.theta.status.ICaptureModeReceiver
+import jp.osdn.gokigen.gokigenassets.constants.IApplicationConstantConvert
+import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl
+import jp.osdn.gokigen.gokigenassets.liveview.ILiveView
+import jp.osdn.gokigen.gokigenassets.liveview.ILiveViewRefresher
+import jp.osdn.gokigen.gokigenassets.liveview.focusframe.IAutoFocusFrameDisplay
+import jp.osdn.gokigen.gokigenassets.liveview.image.CameraLiveViewListenerImpl
+import jp.osdn.gokigen.gokigenassets.liveview.storeimage.StoreImage
+import jp.osdn.gokigen.gokigenassets.preference.PreferenceAccessWrapper
+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, private val preference: ICameraPreferenceProvider, private val provider: ICameraStatusReceiver) : IPanasonicCameraHolder, IDisplayInjector,ILiveViewController, ICameraControl, View.OnClickListener, ICaptureModeReceiver, ICameraShutter, IKeyDown
+{
+ private val cardSlotSelector = PanasonicCardSlotSelector()
+ private val liveViewListener = CameraLiveViewListenerImpl(context)
+ private val cameraConnection: PanasonicCameraConnection = PanasonicCameraConnection(context, provider, this, this, cardSlotSelector)
+ private val storeImage = StoreImage(context, liveViewListener)
+
+ private lateinit var panasonicCamera: IPanasonicCamera
+ private var statusChecker: CameraEventObserver? = null
+ private var liveViewControl: PanasonicLiveViewControl? = null
+ private var focusControl: PanasonicCameraFocusControl? = null
+ private var captureControl: PanasonicCameraCaptureControl? = null
+ private val zoomControl = PanasonicCameraZoomLensControl()
+ private var isStatusWatch = false
+ private var cameraPositionId = 0
+
+ companion object
+ {
+ private val TAG = PanasonicCameraControl::class.java.simpleName
+ private const val TIMEOUT_MS = 3000
+ }
+
+ override fun prepare()
+ {
+ if (::panasonicCamera.isInitialized)
+ {
+ Log.v(TAG, " prepare : " + panasonicCamera.getFriendlyName() + " " + panasonicCamera.getModelName())
+ try
+ {
+ if (statusChecker == null)
+ {
+ statusChecker = CameraEventObserver(context, panasonicCamera, cardSlotSelector)
+ }
+ if (liveViewControl == null)
+ {
+ liveViewControl = PanasonicLiveViewControl(liveViewListener, panasonicCamera)
+ }
+ focusControl?.setCamera(panasonicCamera)
+ captureControl?.setCamera(panasonicCamera)
+ zoomControl.setCamera(panasonicCamera)
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+ else
+ {
+ Log.v(TAG, " panasonicCamera is not initialized...")
+ }
+ }
+
+ override fun startRecMode()
+ {
+ try
+ {
+ val http = SimpleHttpClient()
+
+ // 撮影モード(RecMode)に切り替え
+ var reply: String = http.httpGet(panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=recmode", TIMEOUT_MS)
+ if (!reply.contains("ok"))
+ {
+ Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE RECMODE.")
+ }
+
+ // フォーカスに関しては、1点に切り替える(仮)
+ reply = http.httpGet(panasonicCamera.getCmdUrl() + "cam.cgi?mode=setsetting&type=afmode&value=1area", TIMEOUT_MS)
+ if (!reply.contains("ok"))
+ {
+ Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE AF MODE 1area.")
+ }
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun startEventWatch(listener: ICameraChangeListener?)
+ {
+ try
+ {
+ if (statusChecker != null)
+ {
+ if (listener != null)
+ {
+ statusChecker?.setEventListener(listener)
+ }
+ statusChecker?.startStatusWatch(null, null)
+ }
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun detectedCamera(camera: IPanasonicCamera)
+ {
+ Log.v(TAG, "detectedCamera()")
+ 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")
+ }
+
+ override fun initialize()
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun connectToCamera()
+ {
+ Log.v(TAG, " connectToCamera() : PANASONIC ")
+ try
+ {
+ cameraConnection.connect()
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun startCamera(isPreviewView: Boolean, cameraSequence: Int)
+ {
+ try
+ {
+ if (cameraConnection.getConnectionStatus() != ICameraConnectionStatus.CameraConnectionStatus.CONNECTED)
+ {
+ cameraConnection.startWatchWifiStatus(context)
+ }
+ else
+ {
+ cameraConnection.connect()
+ }
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun finishCamera()
+ {
+ try
+ {
+ if (isStatusWatch)
+ {
+ statusChecker?.stopStatusWatch()
+ isStatusWatch = false
+ }
+ cameraConnection.disconnect(false)
+ cameraConnection.stopWatchWifiStatus(context)
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun changeCaptureMode(mode: String)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun changedCaptureMode(captureMode: String)
+ {
+ //TODO("Not yet implemented")
+ }
+
+ override fun needRotateImage(): Boolean
+ {
+ return (false)
+ }
+
+ override fun setRefresher(refresher: ILiveViewRefresher, imageView: ILiveView)
+ {
+ try
+ {
+ liveViewListener.setRefresher(refresher)
+ imageView.setImageProvider(liveViewListener)
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun captureButtonReceiver(id: Int): View.OnClickListener
+ {
+ cameraPositionId = id
+ return (this)
+ }
+
+ override fun keyDownReceiver(id: Int): IKeyDown
+ {
+ cameraPositionId = id
+ return (this)
+ }
+
+ override fun getFocusingControl(id: Int): IFocusingControl?
+ {
+ cameraPositionId = id
+ return (focusControl)
+ }
+
+ override fun getDisplayInjector(): IDisplayInjector
+ {
+ return (this)
+ }
+
+ override fun injectDisplay(frameDisplayer: IAutoFocusFrameDisplay, indicator: IIndicatorControl, focusingModeNotify: IFocusingModeNotify)
+ {
+ Log.v(TAG, "injectDisplay()")
+ focusControl = PanasonicCameraFocusControl(frameDisplayer, indicator)
+ captureControl = PanasonicCameraCaptureControl(frameDisplayer, indicator)
+ }
+
+ override fun startLiveView()
+ {
+ Log.v(TAG, " startLiveView() ")
+ try
+ {
+ if (!isStatusWatch)
+ {
+ statusChecker?.startStatusWatch(null, null)
+ isStatusWatch = true
+ }
+ liveViewControl?.startLiveView()
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun stopLiveView()
+ {
+ Log.v(TAG, " stopLiveView() ")
+ try
+ {
+ liveViewControl?.stopLiveView()
+ if (isStatusWatch)
+ {
+ statusChecker?.stopStatusWatch()
+ isStatusWatch = false
+ }
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun onClick(v: View?)
+ {
+ if (v == null)
+ {
+ return
+ }
+ when (v.id)
+ {
+ IApplicationConstantConvert.ID_BUTTON_SHUTTER -> { doShutter() }
+ else -> { }
+ }
+ }
+
+
+ override fun doShutter()
+ {
+ try
+ {
+ Log.v(TAG, " doShutter()")
+ val isNotDriveShutter = captureImageLiveView()
+ if (isNotDriveShutter)
+ {
+ // シャッターを駆動させない(けど、バイブレーションで通知する)
+ vibrator.vibrate(IVibrator.VibratePattern.SIMPLE_SHORT)
+ return
+ }
+ if (captureControl == null)
+ {
+ Log.v(TAG, " captureControl is NULL.")
+ }
+ captureControl?.doCapture(0)
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun doShutterOff()
+ {
+ try
+ {
+ Log.v(TAG, " doShutterOff()")
+ captureControl?.doCapture(0)
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+
+ override fun handleKeyDown(keyCode: Int, event: KeyEvent): Boolean
+ {
+ if ((event.action == KeyEvent.ACTION_DOWN)&&((keyCode == KeyEvent.KEYCODE_VOLUME_UP)||(keyCode == KeyEvent.KEYCODE_CAMERA)))
+ {
+ doShutter()
+ return (true)
+ }
+ return (false)
+ }
+
+ private fun captureImageLiveView() : Boolean
+ {
+ try
+ {
+ // preferenceから設定を取得する
+ val captureBothCamera = PreferenceAccessWrapper(context).getBoolean(IApplicationConstantConvert.ID_PREFERENCE_CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW, IApplicationConstantConvert.ID_PREFERENCE_CAPTURE_BOTH_CAMERA_AND_LIVE_VIEW_DEFAULT_VALUE)
+ val notUseShutter = PreferenceAccessWrapper(context).getBoolean(IApplicationConstantConvert.ID_PREFERENCE_CAPTURE_ONLY_LIVEVIEW_IMAGE, IApplicationConstantConvert.ID_PREFERENCE_CAPTURE_ONLY_LIVEVIEW_IMAGE_DEFAULT_VALUE)
+ if ((captureBothCamera)&&(liveViewListener.isImageReceived()))
+ {
+ // ライブビュー画像を保管する場合...
+ val thread = Thread { storeImage.doStore(cameraPositionId, false) }
+ try
+ {
+ thread.start()
+ }
+ catch (e: Exception)
+ {
+ e.printStackTrace()
+ }
+ }
+ return (notUseShutter)
+ }
+ catch (e : Exception)
+ {
+ e.printStackTrace()
+ }
+ return (false)
+ }
+
+}
+++ /dev/null
-package jp.osdn.gokigen.gokigenassets.camera.panasonic.wrapper
-
-import android.util.Log
-import android.view.KeyEvent
-import android.view.View
-import androidx.appcompat.app.AppCompatActivity
-import jp.osdn.gokigen.gokigenassets.camera.interfaces.*
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.ICameraChangeListener
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.IPanasonicCamera
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.IPanasonicCameraHolder
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.connection.PanasonicCameraConnection
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.liveview.PanasonicLiveViewControl
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraCaptureControl
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraFocusControl
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.operation.PanasonicCameraZoomLensControl
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.status.CameraEventObserver
-import jp.osdn.gokigen.gokigenassets.camera.panasonic.status.ICameraEventObserver
-import jp.osdn.gokigen.gokigenassets.camera.theta.status.ICaptureModeReceiver
-import jp.osdn.gokigen.gokigenassets.liveview.IIndicatorControl
-import jp.osdn.gokigen.gokigenassets.liveview.ILiveView
-import jp.osdn.gokigen.gokigenassets.liveview.ILiveViewRefresher
-import jp.osdn.gokigen.gokigenassets.liveview.focusframe.IAutoFocusFrameDisplay
-import jp.osdn.gokigen.gokigenassets.utils.communication.SimpleHttpClient
-
-class PanasonicCameraWrapper(private val context: AppCompatActivity, private val provider: ICameraStatusReceiver, private val listener: ICameraChangeListener, private val cardSlotSelector: ICardSlotSelector) : IPanasonicCameraHolder, IDisplayInjector,ILiveViewController, ICameraControl, View.OnClickListener, ICaptureModeReceiver, ICameraShutter, IKeyDown
-{
- private lateinit var panasonicCamera: IPanasonicCamera
-
- private var eventObserver: ICameraEventObserver? = null
- private var liveViewControl: PanasonicLiveViewControl? = null
- private var focusControl: PanasonicCameraFocusControl? = null
- private var captureControl: PanasonicCameraCaptureControl? = null
- private var zoomControl: PanasonicCameraZoomLensControl? = null
- private var cameraConnection: PanasonicCameraConnection? = null
-
- companion object
- {
- private val TAG = PanasonicCameraWrapper::class.java.simpleName
- private const val TIMEOUT_MS = 3000
- }
-
- override fun prepare()
- {
- Log.v(TAG, " prepare : " + panasonicCamera.getFriendlyName() + " " + panasonicCamera.getModelName())
- try {
- //this.panasonicCameraApi = PanasonicCameraApi.newInstance(panasonicCamera);
- if (eventObserver == null)
- {
- eventObserver = CameraEventObserver(context, panasonicCamera, cardSlotSelector)
- }
- if (liveViewControl == null)
- {
- liveViewControl = PanasonicLiveViewControl(context, panasonicCamera)
- }
- focusControl?.setCamera(panasonicCamera)
- captureControl?.setCamera(panasonicCamera)
- zoomControl?.setCamera(panasonicCamera)
- } catch (e: Exception) {
- e.printStackTrace()
- }
- }
-
- override fun startRecMode()
- {
- try
- {
- val http = SimpleHttpClient()
-
- // 撮影モード(RecMode)に切り替え
- var reply: String = http.httpGet(panasonicCamera.getCmdUrl() + "cam.cgi?mode=camcmd&value=recmode", TIMEOUT_MS)
- if (!reply.contains("ok"))
- {
- Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE RECMODE.")
- }
-
- // フォーカスに関しては、1点に切り替える(仮)
- reply = http.httpGet(panasonicCamera.getCmdUrl() + "cam.cgi?mode=setsetting&type=afmode&value=1area", TIMEOUT_MS)
- if (!reply.contains("ok"))
- {
- Log.v(TAG, "CAMERA REPLIED ERROR : CHANGE AF MODE 1area.")
- }
- }
- catch (e: Exception)
- {
- e.printStackTrace()
- }
- }
-
- override fun startEventWatch(listener: ICameraChangeListener?)
- {
- try
- {
- if (eventObserver != null)
- {
- if (listener != null)
- {
- eventObserver?.setEventListener(listener)
- }
- eventObserver?.activate()
- eventObserver?.start()
- val holder = eventObserver?.getCameraStatusHolder()
- holder?.getLiveviewStatus()
- }
- }
- catch (e: Exception)
- {
- e.printStackTrace()
- }
- }
-
- override fun detectedCamera(camera: IPanasonicCamera)
- {
- Log.v(TAG, "detectedCamera()")
- panasonicCamera = camera
- }
-
- fun getPanasonicCameraConnection(): ICameraConnection? {
- // PanasonicCameraConnectionは複数生成しない。
- if (cameraConnection == null) {
- cameraConnection = PanasonicCameraConnection(context, provider, this, this, listener)
- }
- return cameraConnection
- }
-/*
- fun getPanasonicCamera(): IPanasonicCamera
- {
- return panasonicCamera
- }
-
- fun getPanasonicLiveViewControl(): ILiveViewControl? {
- return liveViewControl
- }
-
-
- fun getLiveViewListener(): ILiveViewListener? {
- return liveViewControl?.getLiveViewListener()
- }
-*/
-
- fun getFocusingControl(): IFocusingControl? {
- return focusControl
- }
-
- fun getCameraInformation(): ICameraInformation? {
- return null
- }
-
- fun getZoomLensControl(): IZoomLensControl? {
- return zoomControl
- }
-
- fun getCaptureControl(): ICaptureControl? {
- return captureControl
- }
-
- override fun getConnectionMethod(): String {
- TODO("Not yet implemented")
- }
-
- override fun initialize() {
- TODO("Not yet implemented")
- }
-
- override fun connectToCamera() {
- TODO("Not yet implemented")
- }
-
- override fun startCamera(isPreviewView: Boolean, cameraSequence: Int) {
- TODO("Not yet implemented")
- }
-
- override fun finishCamera() {
- TODO("Not yet implemented")
- }
-
- override fun changeCaptureMode(mode: String) {
- TODO("Not yet implemented")
- }
-
- override fun needRotateImage(): Boolean {
- TODO("Not yet implemented")
- }
-
- override fun setRefresher(refresher: ILiveViewRefresher, imageView: ILiveView) {
- TODO("Not yet implemented")
- }
-
- override fun captureButtonReceiver(id: Int): View.OnClickListener {
- TODO("Not yet implemented")
- }
-
- override fun keyDownReceiver(id: Int): IKeyDown {
- TODO("Not yet implemented")
- }
-
- override fun getFocusingControl(id: Int): IFocusingControl? {
- TODO("Not yet implemented")
- }
-
- override fun getDisplayInjector(): IDisplayInjector
- {
- return this
- }
-
- override fun injectDisplay(frameDisplayer: IAutoFocusFrameDisplay, indicator: IIndicatorControl, focusingModeNotify: IFocusingModeNotify)
- {
- Log.v(TAG, "injectDisplay()")
- focusControl = PanasonicCameraFocusControl(frameDisplayer, indicator)
- captureControl = PanasonicCameraCaptureControl(frameDisplayer, indicator)
- zoomControl = PanasonicCameraZoomLensControl()
- }
-
- override fun startLiveView() {
- TODO("Not yet implemented")
- }
-
- override fun stopLiveView() {
- TODO("Not yet implemented")
- }
-
- override fun onClick(v: View?) {
- TODO("Not yet implemented")
- }
-
- override fun changedCaptureMode(captureMode: String) {
- TODO("Not yet implemented")
- }
-
- override fun doShutter() {
- TODO("Not yet implemented")
- }
-
- override fun doShutterOff() {
- TODO("Not yet implemented")
- }
-
- override fun handleKeyDown(keyCode: Int, event: KeyEvent): Boolean {
- TODO("Not yet implemented")
- }
-}
--- /dev/null
+package jp.osdn.gokigen.gokigenassets.camera.panasonic.wrapper
+
+import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICardSlotSelectionReceiver
+import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICardSlotSelector
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.ICameraChangeListener
+
+class PanasonicCardSlotSelector() : ICardSlotSelector, ICameraChangeListener
+{
+ override fun setupSlotSelector(isEnable: Boolean, slotSelectionReceiver: ICardSlotSelectionReceiver?)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun selectSlot(slotId: String)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun changedCardSlot(slotId: String)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun onApiListModified(apis: List<String?>?)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun onCameraStatusChanged(status: String?)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun onLiveviewStatusChanged(status: Boolean)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun onShootModeChanged(shootMode: String?)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun onZoomPositionChanged(zoomPosition: Int)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun onStorageIdChanged(storageId: String?)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun onFocusStatusChanged(focusStatus: String?)
+ {
+ // TODO("Not yet implemented")
+ }
+
+ override fun onResponseError()
+ {
+ // TODO("Not yet implemented")
+ }
+}
\ No newline at end of file
const val PREFERENCE_CAMERA_METHOD_CAMERAX = "camerax"
const val PREFERENCE_CAMERA_METHOD_THETA = "THETA"
const val PREFERENCE_CAMERA_METHOD_PENTAX = "RICOH"
+ const val PREFERENCE_CAMERA_METHOD_PANASONIC = "PANASONIC"
}
}
import jp.osdn.gokigen.gokigenassets.camera.DummyCameraControl
import jp.osdn.gokigen.gokigenassets.camera.ICameraPreferenceProvider
import jp.osdn.gokigen.gokigenassets.camera.camerax.operation.CameraControl
-import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraControl
-import jp.osdn.gokigen.gokigenassets.camera.interfaces.ICameraStatusReceiver
+import jp.osdn.gokigen.gokigenassets.camera.interfaces.*
+import jp.osdn.gokigen.gokigenassets.camera.panasonic.wrapper.PanasonicCameraControl
import jp.osdn.gokigen.gokigenassets.camera.ricohpentax.RicohPentaxCameraControl
import jp.osdn.gokigen.gokigenassets.camera.theta.ThetaCameraControl
import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_CAMERAX
import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_NONE
+import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PANASONIC
import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_PENTAX
import jp.osdn.gokigen.gokigenassets.constants.ICameraConnectionMethods.Companion.PREFERENCE_CAMERA_METHOD_THETA
import jp.osdn.gokigen.gokigenassets.preference.PreferenceAccessWrapper
PREFERENCE_CAMERA_METHOD_CAMERAX -> prepareCameraXControl(cameraPreference)
PREFERENCE_CAMERA_METHOD_THETA -> prepareThetaCameraControl(cameraPreference)
PREFERENCE_CAMERA_METHOD_PENTAX -> preparePentaxCameraControl(cameraPreference)
+ PREFERENCE_CAMERA_METHOD_PANASONIC -> preparePanasonicCameraControl(cameraPreference)
else -> DummyCameraControl()
})
}
return (RicohPentaxCameraControl(activity, vibrator, cameraPreference, statusReceiver))
}
+ private fun preparePanasonicCameraControl(cameraPreference : ICameraPreferenceProvider) : ICameraControl
+ {
+ return (PanasonicCameraControl(activity, vibrator, cameraPreference, statusReceiver))
+ }
+
private fun prepareCameraXControl(cameraPreference : ICameraPreferenceProvider): ICameraControl
{
if ((cameraXisCreated)&&(::cameraXControl.isInitialized))
<string name="connect_camera_received_reply">カメラ応答受信</string>
<string name="connect_camera_rejected">カメラ接続拒否</string>
- <string name="camera_not_found">Not Found…</string>
+ <string name="camera_not_found">カメラが見つかりませんでした…</string>
<string name="camera_connect_response_ng">カメラに接続できませんでした。</string>
<string name="dialog_title_connect_failed">接続失敗</string>
<item>Internal Camera</item>
<item>Ricoh GR / PENTAX</item>
<item>Ricoh Theta(OSC)</item>
+ <item>Panasonic (MFT)</item>
<item>OPC(Olympus Air)</item>
<item>Olympus(OM-D/PEN)</item>
<item>KODAK PIXPRO</item>
<item>Fuji X Series</item>
- <item>Panasonic</item>
<item>Sony</item>
<item>Canon</item>
<item>Nikon</item>
<item>camerax</item>
<item>RICOH</item>
<item>THETA</item>
+ <item>PANASONIC</item>
<item>OPC</item>
<item>OLYMPUS</item>
<item>PIXPRO</item>
<item>FUJI_X</item>
- <item>PANASONIC</item>
<item>SONY</item>
<item>CANON</item>
<item>NIKON</item>