mirror of
https://github.com/RfidResearchGroup/RFIDtools.git
synced 2026-05-12 11:19:59 -07:00
pm3 flasher communication recovery.
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package cn.rrg.rdv.activities.main;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.MenuItem;
|
||||
|
||||
@@ -43,6 +44,8 @@ public class AppMain extends BaseActivity {
|
||||
initActions();
|
||||
|
||||
gotoFragment(appMainDevicesFragment);
|
||||
|
||||
startActivity(new Intent(this, PM3FlasherMainActivity.class));
|
||||
}
|
||||
|
||||
private void initViews() {
|
||||
|
||||
@@ -43,10 +43,7 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback<
|
||||
control.register(this);
|
||||
|
||||
// start communication forward!
|
||||
LocalComBridgeAdapter.getInstance()
|
||||
.setInputStream(control.getInput())
|
||||
.setOutputStream(control.getOutput())
|
||||
.startServer();
|
||||
LocalComBridgeAdapter.getInstance().startServer();
|
||||
|
||||
initViews();
|
||||
initActions();
|
||||
@@ -70,6 +67,9 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback<
|
||||
public void onClick(View v) {
|
||||
mode = MODE.BOOT;
|
||||
if (control.connect(null)) {
|
||||
LocalComBridgeAdapter.getInstance()
|
||||
.setInputStream(control.getInput())
|
||||
.setOutputStream(control.getOutput());
|
||||
flashDefaultFW();
|
||||
} else {
|
||||
ToastUtil.show(context, getString(R.string.tips_device_no_found), false);
|
||||
@@ -86,6 +86,8 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback<
|
||||
public void run() {
|
||||
if (!flasher.isStart(Target.CLIENT)) {
|
||||
if (!flasher.start(Target.CLIENT)) {
|
||||
ToastUtil.show(context, "Client open failed!", false);
|
||||
dismissWorkingDialog();
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -117,12 +119,24 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback<
|
||||
} else {
|
||||
if (!flasher.start(Target.BOOT)) {
|
||||
ToastUtil.show(context, getString(R.string.tips_pm3_enter_failed), false);
|
||||
dismissWorkingDialog();
|
||||
}
|
||||
// 记得关闭客户端
|
||||
flasher.close(Target.CLIENT);
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
private void dismissWorkingDialog() {
|
||||
runOnUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
mDialogWorkingState.dismiss();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
private void finishFlash() {
|
||||
flasher.close(Target.BOOT);
|
||||
flasher.close(Target.CLIENT);
|
||||
@@ -150,12 +164,20 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback<
|
||||
@Override
|
||||
public void onAttach(String dev) {
|
||||
// 自动连接设备!
|
||||
control.connect(dev);
|
||||
flashDefaultFW();
|
||||
if (control.connect(dev)) {
|
||||
// 更新流引用!
|
||||
LocalComBridgeAdapter.getInstance()
|
||||
.setInputStream(control.getInput())
|
||||
.setOutputStream(control.getOutput());
|
||||
flashDefaultFW();
|
||||
} else {
|
||||
ToastUtil.show(context, "Device connect failed!", false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDetach(String dev) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -9,8 +9,7 @@ import cn.dxl.common.util.AppUtil;
|
||||
import cn.rrg.com.DevCallback;
|
||||
import cn.dxl.com.DeviceChecker;
|
||||
import cn.rrg.com.DriverInterface;
|
||||
import cn.rrg.com.UniversalBulkTransfer;
|
||||
import cn.rrg.com.UsbBulkTransferRaw;
|
||||
import cn.rrg.com.UsbBulkTransfer;
|
||||
import cn.rrg.devices.PN53X;
|
||||
import cn.rrg.rdv.callback.ConnectCallback;
|
||||
import cn.rrg.rdv.javabean.DevBean;
|
||||
@@ -27,7 +26,7 @@ public class UniversalBulkPN53XRawModel extends AbstractDeviceModel<String, UsbM
|
||||
|
||||
@Override
|
||||
public DriverInterface<String, UsbManager> getDriverInterface() {
|
||||
return UniversalBulkTransfer.getTransfer();
|
||||
return UsbBulkTransfer.getTransfer();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -68,7 +67,7 @@ public class UniversalBulkPN53XRawModel extends AbstractDeviceModel<String, UsbM
|
||||
AppUtil.getInstance()
|
||||
.getApp()
|
||||
.sendBroadcast(
|
||||
new Intent(UniversalBulkTransfer.getTransfer().getDeviceDiscoveryAction())
|
||||
new Intent(UsbBulkTransfer.getTransfer().getDeviceDiscoveryAction())
|
||||
);
|
||||
} else Log.d(TAG, "startDiscovery: 找不到任何一个USB设备!");
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<application>
|
||||
<!-- 全局Context提供者 -->
|
||||
<provider
|
||||
android:name="cn.dxl.utils.ContextContentProvider"
|
||||
android:name="cn.rrg.utils.ContextContentProvider"
|
||||
android:authorities="${applicationId}.contextprovider"
|
||||
android:exported="false" />
|
||||
</application>
|
||||
|
||||
@@ -25,7 +25,7 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
* */
|
||||
|
||||
// The namespace of the LocalServerSocket
|
||||
public static final String NAMESPACE = "LocalComBridgeAdapter";
|
||||
public static final String NAMESPACE = "DXL.COM.ASL";
|
||||
// The tag of the log.
|
||||
private final String LOG_TAG = "LocalComBridgeAdapter";
|
||||
// 本地套接字服务!
|
||||
@@ -33,13 +33,13 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
// 单例!
|
||||
private static LocalComBridgeAdapter instance;
|
||||
// 设备输入流!
|
||||
private InputStream mInputStreamFromDevice;
|
||||
private volatile InputStream mInputStreamFromDevice;
|
||||
// 设备输出流!
|
||||
private OutputStream mOutputStreamFromDevice;
|
||||
private volatile OutputStream mOutputStreamFromDevice;
|
||||
// 客户端输入流
|
||||
private InputStream mInputStreamFromSocket;
|
||||
private volatile InputStream mInputStreamFromSocket;
|
||||
// 客户端输出流
|
||||
private OutputStream mOutputStreamFromSocket;
|
||||
private volatile OutputStream mOutputStreamFromSocket;
|
||||
// 是否已经连接!
|
||||
private volatile boolean isHasClient = false;
|
||||
// 是否关闭监听!
|
||||
@@ -69,6 +69,7 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
while (listenAccept) {
|
||||
try {
|
||||
if (serverSocket != null) {
|
||||
Log.d(LOG_TAG, "服务套接字堵塞等待连接中!");
|
||||
socket = serverSocket.accept();
|
||||
if (isHasClient) {
|
||||
isHasClient = false;
|
||||
@@ -157,8 +158,8 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
mOutputStreamFromSocket.write(Arrays.copyOf(buffer, len));
|
||||
mOutputStreamFromSocket.flush();
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} catch (Exception ignored) {
|
||||
// Empty
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -173,6 +174,13 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
}
|
||||
|
||||
public static LocalComBridgeAdapter getInstance() {
|
||||
synchronized (LocalComBridgeAdapter.class) {
|
||||
/*
|
||||
* It is a single instance tools
|
||||
* you can't instantiation than for once.
|
||||
* */
|
||||
if (instance == null) instance = new LocalComBridgeAdapter();
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@@ -208,7 +216,7 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
e.printStackTrace();
|
||||
Log.e(LOG_TAG, "If you see an error message like \"Address already in use\", check that you call the stopServer function");
|
||||
}
|
||||
Log.d(LOG_TAG, "ComBridgeAdapter start!");
|
||||
Log.w(LOG_TAG, "LocalComBridgeAdapter start!");
|
||||
}
|
||||
}
|
||||
return this;
|
||||
@@ -225,7 +233,7 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
}
|
||||
serverSocket = null;
|
||||
}
|
||||
Log.d(LOG_TAG, "ComBridgeAdapter server stop!");
|
||||
Log.w(LOG_TAG, "LocalComBridgeAdapter server stop!");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -233,7 +241,6 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
synchronized (LOCK) {
|
||||
isHasClient = false;
|
||||
try {
|
||||
|
||||
if (socket != null) {
|
||||
socket.shutdownInput();
|
||||
socket.shutdownOutput();
|
||||
@@ -243,15 +250,7 @@ public final class LocalComBridgeAdapter implements Serializable {
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Log.d(LOG_TAG, "ComBridgeAdapter client stop!");
|
||||
Log.d(LOG_TAG, "LocalComBridgeAdapter client stop!");
|
||||
}
|
||||
}
|
||||
|
||||
static {
|
||||
/*
|
||||
* It is a single instance tools
|
||||
* you can't instantiation than for once.
|
||||
* */
|
||||
instance = new LocalComBridgeAdapter();
|
||||
}
|
||||
}
|
||||
@@ -8,16 +8,13 @@ import android.content.BroadcastReceiver;
|
||||
import android.content.Intent;
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.net.LocalSocket;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.UUID;
|
||||
|
||||
import cn.dxl.utils.ContextContentProvider;
|
||||
import cn.rrg.utils.ContextContentProvider;
|
||||
|
||||
/**
|
||||
* Created by DXL on 2019/8/1.
|
||||
|
||||
+4
-4
@@ -19,16 +19,16 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
import cn.dxl.utils.ContextContentProvider;
|
||||
import cn.rrg.utils.ContextContentProvider;
|
||||
import cn.dxl.bulkio.BulkInputStream;
|
||||
import cn.dxl.bulkio.BulkOutputStream;
|
||||
|
||||
public abstract class UsbBulkTransferRaw implements DriverInterface<String, UsbManager> {
|
||||
public abstract class AbsUsbBulkTransfer implements DriverInterface<String, UsbManager> {
|
||||
|
||||
// Application context, is global. cant cache activity context!
|
||||
private Context mContext = ContextContentProvider.mContext;
|
||||
//日志特征
|
||||
private static final String LOG_TAG = UsbBulkTransferRaw.class.getSimpleName();
|
||||
private static final String LOG_TAG = AbsUsbBulkTransfer.class.getSimpleName();
|
||||
private DevCallback<String> mCallback = null;
|
||||
//广播接收器,在设备插入和移除时使用
|
||||
private BroadcastReceiver mReceiver;
|
||||
@@ -50,7 +50,7 @@ public abstract class UsbBulkTransferRaw implements DriverInterface<String, UsbM
|
||||
private UsbEndpoint mEpOut = null;
|
||||
|
||||
//私有构造方法,避免被直接调用
|
||||
protected UsbBulkTransferRaw() {
|
||||
protected AbsUsbBulkTransfer() {
|
||||
final String act = getDeviceDiscoveryAction();
|
||||
final String name = getDeviceNameOnFound();
|
||||
//建立意图过滤数组
|
||||
@@ -1,6 +1,6 @@
|
||||
package cn.rrg.com;
|
||||
|
||||
public class UsbAcr122Raw extends UsbBulkTransferRaw {
|
||||
public class UsbAcr122Raw extends AbsUsbBulkTransfer {
|
||||
//日志特征
|
||||
private static final String LOG_TAG = UsbAcr122Raw.class.getSimpleName();
|
||||
// single instance!
|
||||
|
||||
+3
-3
@@ -6,11 +6,11 @@ package cn.rrg.com;
|
||||
* @author dxl
|
||||
* @version 1.0
|
||||
*/
|
||||
public class UniversalBulkTransfer extends UsbBulkTransferRaw {
|
||||
public class UsbBulkTransfer extends AbsUsbBulkTransfer {
|
||||
|
||||
private static UniversalBulkTransfer transfer = new UniversalBulkTransfer();
|
||||
private static UsbBulkTransfer transfer = new UsbBulkTransfer();
|
||||
|
||||
public static UniversalBulkTransfer getTransfer() {
|
||||
public static UsbBulkTransfer getTransfer() {
|
||||
return transfer;
|
||||
}
|
||||
|
||||
@@ -11,8 +11,6 @@ import android.hardware.usb.UsbDeviceConnection;
|
||||
import android.hardware.usb.UsbManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.felhr.usbserial.SerialInputStream;
|
||||
import com.felhr.usbserial.SerialOutputStream;
|
||||
import com.felhr.usbserial.UsbSerialDevice;
|
||||
|
||||
import java.io.IOException;
|
||||
@@ -21,7 +19,7 @@ import java.io.OutputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import cn.dxl.utils.ContextContentProvider;
|
||||
import cn.rrg.utils.ContextContentProvider;
|
||||
|
||||
/*
|
||||
* Usb 2 uart Serial implements
|
||||
@@ -174,9 +172,7 @@ public class UsbSerialControl implements DriverInterface<String, UsbManager> {
|
||||
@Override
|
||||
public InputStream getInput() {
|
||||
if (mPort != null) {
|
||||
SerialInputStream is = mPort.getInputStream();
|
||||
// is.setTimeout(2048);
|
||||
return is;
|
||||
return mPort.getInputStream();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
package cn.dxl.utils;
|
||||
package cn.rrg.utils;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.content.ContentProvider;
|
||||
@@ -674,10 +674,8 @@ jboolean open_proxmark3(JNIEnv *env, jobject thiz) {
|
||||
if (conn.run) {
|
||||
LOGD("设备已经是打开状态,将会跳过打开!");
|
||||
return true;
|
||||
} else {
|
||||
LOGD("开启完成.");
|
||||
}
|
||||
return (jboolean) OpenProxmark("dxl", false, 233, true, FLASHMODE_SPEED);
|
||||
return (jboolean) OpenProxmark("socket:DXL.COM.ASL", false, 1000, true, FLASHMODE_SPEED);
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) {
|
||||
|
||||
@@ -48,6 +48,7 @@
|
||||
#include <fcntl.h>
|
||||
#include <netinet/tcp.h>
|
||||
#include <netdb.h>
|
||||
#include <client/tools.h>
|
||||
#include "sys/socket.h"
|
||||
#include "sys/un.h"
|
||||
|
||||
@@ -195,6 +196,7 @@ serial_port uart_open(const char *pcPortName, uint32_t speed) {
|
||||
|
||||
if (connect(localsocket, (struct sockaddr *) &remote, len) == -1) {
|
||||
free(sp);
|
||||
LOGD("连接套接字失败,请检查连接服务是否已经被停止!");
|
||||
return INVALID_SERIAL_PORT;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@ import android.util.Log;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
|
||||
import cn.dxl.com.LocalComBridgeAdapter;
|
||||
|
||||
/**
|
||||
* 0. Open the device and create a connection!
|
||||
* 1. Enter bootloader mode, the device will restart and the USB device will regenerate!
|
||||
@@ -80,6 +82,7 @@ public class Proxmark3Flasher {
|
||||
switch (target) {
|
||||
case CLIENT:
|
||||
closeProxmark3();
|
||||
LocalComBridgeAdapter.getInstance().stopClient();
|
||||
break;
|
||||
case BOOT:
|
||||
flashModeClose();
|
||||
|
||||
Reference in New Issue
Block a user