import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraInformation;
import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatus;
import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatusWatcher;
+import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.IConnectionKeyReceiver;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.IPixproCommandPublisher;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.IPixproCommunication;
IPixproCommandPublisher getCommandPublisher();
IPixproCommunication getCommandCommunication();
+ IConnectionKeyReceiver getConnectionKeyReceiver();
+
IInformationReceiver getInformationReceiver();
String getStringFromResource(int resId);
}
--- /dev/null
+package net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper;
+
+public interface IConnectionKeyProvider
+{
+ String getUserString();
+ String getPasswordString();
+}
--- /dev/null
+package net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper;
+
+import androidx.annotation.NonNull;
+
+public interface IConnectionKeyReceiver
+{
+ void receivedPassword(@NonNull String password);
+ void receivedKeyString(@NonNull byte[] keyString);
+}
import android.app.Activity;
import android.content.SharedPreferences;
+import android.util.Base64;
import android.util.Log;
import androidx.annotation.NonNull;
import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatus;
import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatusReceiver;
import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatusWatcher;
+import net.osdn.gokigen.pkremote.camera.utils.SimpleLogDumper;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.IPixproInterfaceProvider;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.IPixproCommandPublisher;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.IPixproCommunication;
*
*
*/
-public class PixproInterfaceProvider implements IPixproInterfaceProvider, IDisplayInjector
+public class PixproInterfaceProvider implements IPixproInterfaceProvider, IDisplayInjector, IConnectionKeyReceiver, IConnectionKeyProvider
{
private final String TAG = toString();
private final Activity activity;
private final PixproRunMode runMode;
private final ICameraInformation cameraInformation;
+ private String password = null;
+ private byte[] keyphrase = null;
+
/**
*
*
this.pixproConnection = new PixproConnection(activity, provider, this, statusChecker);
this.hardwarestatus = new PixproCameraHardwareStatus();
this.runMode = new PixproRunMode();
- this.playbackControl = new PixproPlaybackControl();
+ this.playbackControl = new PixproPlaybackControl(this);
}
private int parseInt(@NonNull String key, int defaultValue)
}
@Override
+ public IConnectionKeyReceiver getConnectionKeyReceiver()
+ {
+ return (this);
+ }
+
+ @Override
public IInformationReceiver getInformationReceiver()
{
return (informationReceiver);
{
return (activity.getString(resId));
}
+
+ @Override
+ public void receivedPassword(@NonNull String password)
+ {
+ Log.v(TAG, " receivedPassword [" + password.length() + "] : " + password);
+ this.password = password;
+ }
+
+ @Override
+ public void receivedKeyString(@NonNull byte[] keyString)
+ {
+ Log.v(TAG, " receivedKeyString");
+ SimpleLogDumper.dump_bytes(" Key[" + keyString.length + "]", keyString);
+ this.keyphrase = keyString;
+ }
+
+ @Override
+ public String getUserString()
+ {
+ return ("usr=dscuser");
+ }
+
+ @Override
+ public String getPasswordString()
+ {
+ String passwordString = "pwd=";
+ try
+ {
+ if (password != null)
+ {
+ passwordString = passwordString + password + "&";
+ }
+ if (keyphrase != null)
+ {
+ // Base64 変換 22文字で切って埋める。
+ String encodeString = Base64.encodeToString(keyphrase, Base64.DEFAULT);
+ passwordString = passwordString + encodeString.substring(0, 22) + "==";
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ passwordString = "pwd=12345678";
+ }
+ return (passwordString);
+ }
}
import net.osdn.gokigen.pkremote.camera.interfaces.control.ICameraConnection;
import net.osdn.gokigen.pkremote.camera.interfaces.status.ICameraStatusReceiver;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.IPixproInterfaceProvider;
+import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.IConnectionKeyReceiver;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.IPixproCommandCallback;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.IPixproCommandPublisher;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.messages.IPixproMessages;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.messages.connection.PixproConnectSequence10;
import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.command.messages.connection.PixproConnectSequence11;
+import java.util.Arrays;
+
public class PixproCameraConnectSequence implements Runnable, IPixproCommandCallback, IPixproMessages
{
private final String TAG = this.toString();
break;
case SEQ_CONNECT_04:
interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.pixpro_connect_connecting4), false, false, 0);
- // ここで、パスワードの Base64情報を切り出す(FC 03 の応答、 0x0058 ~ 64バイトの文字列を切り出して、Base64エンコードする)
+ // ここで、キー文字列の Base64情報を切り出す(FC 03 の応答、 0x0058 ~ 64バイトの文字列を切り出して、Base64エンコードする)
+ getKeyString(rx_body);
commandIssuer.enqueueCommand(new PixproConnectSequence05(this));
break;
case SEQ_CONNECT_05:
interfaceProvider.getInformationReceiver().updateMessage(context.getString(R.string.pixpro_connect_connecting5), false, false, 0);
// ここで、パスワードの情報を切り出す (FE 03 の応答、 0x0078 ~ 文字列を切り出す。)
+ getPassword(rx_body);
commandIssuer.enqueueCommand(new PixproConnectSequence06(this));
break;
case SEQ_CONNECT_06:
commandIssuer.enqueueCommand(new PixproConnectSequence01(this));
}
+
+ private void getPassword(byte[] rx_body)
+ {
+ try
+ {
+ int startPosition = 0x78;
+ int index = 0x00;
+ while (((startPosition + index) < rx_body.length)&&(rx_body[startPosition + index] != (byte) 0x00))
+ {
+ index++;
+ }
+ if ((startPosition + index) <= rx_body.length)
+ {
+ String password = new String(rx_body, startPosition, index);
+ IConnectionKeyReceiver receiver = interfaceProvider.getConnectionKeyReceiver();
+ if (receiver != null)
+ {
+ receiver.receivedPassword(password);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ private void getKeyString(byte[] rx_body)
+ {
+ try
+ {
+ int startPosition = 0x58;
+ int index = 0x00;
+ while (((startPosition + index) < rx_body.length)&&(rx_body[startPosition + index] != (byte) 0x00))
+ {
+ index++;
+ }
+ if ((startPosition + index) <= rx_body.length)
+ {
+ byte[] keyString = Arrays.copyOfRange(rx_body, startPosition, (startPosition + index));
+ IConnectionKeyReceiver receiver = interfaceProvider.getConnectionKeyReceiver();
+ if (receiver != null)
+ {
+ receiver.receivedKeyString(keyString);
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
private void connectFinished()
{
try
package net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.playback;
+import android.util.Log;
+
+import androidx.annotation.NonNull;
+
import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraContentListCallback;
import net.osdn.gokigen.pkremote.camera.interfaces.playback.ICameraFileInfo;
import net.osdn.gokigen.pkremote.camera.interfaces.playback.IContentInfoCallback;
import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadContentListCallback;
import net.osdn.gokigen.pkremote.camera.interfaces.playback.IDownloadThumbnailImageCallback;
import net.osdn.gokigen.pkremote.camera.interfaces.playback.IPlaybackControl;
+import net.osdn.gokigen.pkremote.camera.vendor.pixpro.wrapper.IConnectionKeyProvider;
public class PixproPlaybackControl implements IPlaybackControl
{
- public PixproPlaybackControl()
+ private final String TAG = toString();
+
+ private final IConnectionKeyProvider keyProvider;
+
+ public PixproPlaybackControl(@NonNull IConnectionKeyProvider keyProvider)
{
+ this.keyProvider = keyProvider;
}
@Override
- public String getRawFileSuffix() {
- return null;
+ public String getRawFileSuffix()
+ {
+ return (null);
}
@Override
- public void downloadContentList(IDownloadContentListCallback callback) {
+ public void downloadContentList(IDownloadContentListCallback callback)
+ {
}
@Override
- public void getContentInfo(String path, String name, IContentInfoCallback callback) {
+ public void getContentInfo(String path, String name, IContentInfoCallback callback)
+ {
}
@Override
- public void updateCameraFileInfo(ICameraFileInfo info) {
+ public void updateCameraFileInfo(ICameraFileInfo info)
+ {
}
@Override
- public void downloadContentScreennail(String path, IDownloadThumbnailImageCallback callback) {
+ public void downloadContentScreennail(String path, IDownloadThumbnailImageCallback callback)
+ {
}
@Override
- public void downloadContentThumbnail(String path, IDownloadThumbnailImageCallback callback) {
+ public void downloadContentThumbnail(String path, IDownloadThumbnailImageCallback callback)
+ {
}
@Override
- public void downloadContent(String path, boolean isSmallSize, IDownloadContentCallback callback) {
+ public void downloadContent(String path, boolean isSmallSize, IDownloadContentCallback callback)
+ {
}
@Override
- public void getCameraContentList(ICameraContentListCallback callback) {
+ public void getCameraContentList(ICameraContentListCallback callback)
+ {
}
@Override
- public void showPictureStarted() {
+ public void showPictureStarted()
+ {
}
@Override
- public void showPictureFinished() {
+ public void showPictureFinished()
+ {
}
+
+ private String getConnectionString()
+ {
+ String connectionString = keyProvider.getUserString() + "&" + keyProvider.getPasswordString();
+ Log.v(TAG, " connectionString : " + connectionString);
+ return (connectionString);
+ }
+
}