From af74dd703e0bce17036104dd359992af42ae709b Mon Sep 17 00:00:00 2001 From: dxl <64101226@qq.com> Date: Fri, 13 Mar 2020 15:07:41 +0800 Subject: [PATCH] Flasher implemented(100%), and stability issues fixed. --- .../Proxmark3Rdv4RRGConnectActivity.java | 20 +++++++++------- .../cn/rrg/rdv/activities/main/AppMain.java | 3 --- .../main/PM3FlasherMainActivity.java | 17 ++++++++++--- .../activities/tools/BaseConsoleActivity.java | 2 -- .../tools/DeviceConnectActivity.java | 10 +------- .../connect/DeviceConnectFragment.java | 24 +++++++++---------- .../cn/rrg/rdv/models/AbsUsb2UartModel.java | 13 +--------- .../rrg/rdv/models/AbstractDeviceModel.java | 9 +++++++ .../main/java/cn/rrg/rdv/util/InitUtil.java | 15 ++++++++---- app_main/src/main/res/values-en/strings.xml | 8 +++---- app_main/src/main/res/values-zh/strings.xml | 8 +++---- app_main/src/main/res/values/strings.xml | 8 +++---- pm3flasher/src/main/cpp/client/comms.c | 1 - pm3rdv4rrg/src/main/cpp/client/comms.c | 4 +++- pm3rdv4rrg/src/main/cpp/client/proxmark3.c | 3 ++- .../java/cn/rrg/devices/Proxmark3RRGRdv4.java | 8 +++++-- 16 files changed, 79 insertions(+), 74 deletions(-) diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java b/app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java index f7005de5..dc5c01f4 100644 --- a/app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java +++ b/app_main/src/main/java/cn/rrg/rdv/activities/connect/Proxmark3Rdv4RRGConnectActivity.java @@ -2,6 +2,8 @@ package cn.rrg.rdv.activities.connect; import android.Manifest; import android.app.Activity; +import android.content.DialogInterface; +import android.content.Intent; import android.os.Bundle; import androidx.annotation.Nullable; @@ -12,6 +14,7 @@ import android.widget.TextView; import cn.dxl.common.util.DisplayUtil; import cn.rrg.rdv.R; +import cn.rrg.rdv.activities.main.PM3FlasherMainActivity; import cn.rrg.rdv.activities.main.Proxmark3Rdv4RRGMain; import cn.rrg.rdv.activities.tools.DeviceConnectActivity; import cn.rrg.rdv.callback.ConnectFailedCtxCallback; @@ -43,9 +46,7 @@ public class Proxmark3Rdv4RRGConnectActivity @Override public AbstractDeviceModel[] getModels() { return new AbstractDeviceModel[]{ - //RDV4支持SPP数据源,因此提供SPP的通信! new Proxmark3Rdv4SppModel(), - //RDV4还支持USB的数据源,同样提供USB的通信! new Proxmark3Rdv4UsbModel() }; } @@ -76,14 +77,17 @@ public class Proxmark3Rdv4RRGConnectActivity activity.runOnUiThread(new Runnable() { @Override public void run() { - int paddingValue = DisplayUtil.dip2px(activity, 16); - TextView msg = new TextView(activity); - msg.setTextIsSelectable(true); - msg.setPadding(paddingValue, paddingValue, paddingValue, paddingValue); - msg.setText(Html.fromHtml(activity.getString(R.string.connect_errr_msg_1))); new AlertDialog.Builder(activity) .setTitle(R.string.connect_faild) - .setView(msg).show(); + .setMessage(R.string.connect_errr_msg_1) + .setPositiveButton(getString(R.string.flash) + "(OTG)", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + startActivity(new Intent(context, PM3FlasherMainActivity.class)); + } + }) + .setNegativeButton(R.string.cancel, null) + .show(); } }); } diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/main/AppMain.java b/app_main/src/main/java/cn/rrg/rdv/activities/main/AppMain.java index 9e4ba2b0..b6bd92c3 100644 --- a/app_main/src/main/java/cn/rrg/rdv/activities/main/AppMain.java +++ b/app_main/src/main/java/cn/rrg/rdv/activities/main/AppMain.java @@ -42,9 +42,6 @@ public class AppMain extends BaseActivity { initActions(); gotoFragment(appMainDevicesFragment); - - startActivity(new Intent(context, PM3FlasherMainActivity.class)); - finish(); } private void initViews() { diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/main/PM3FlasherMainActivity.java b/app_main/src/main/java/cn/rrg/rdv/activities/main/PM3FlasherMainActivity.java index 6375f41a..df352929 100644 --- a/app_main/src/main/java/cn/rrg/rdv/activities/main/PM3FlasherMainActivity.java +++ b/app_main/src/main/java/cn/rrg/rdv/activities/main/PM3FlasherMainActivity.java @@ -78,6 +78,8 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback< } private void flashDefaultFW() { + if (!mDialogWorkingState.isShowing()) + mDialogWorkingState.show(); new Thread(new Runnable() { @Override public void run() { @@ -108,7 +110,7 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback< } finishFlash(); ToastUtil.show(context, getString(R.string.finish), false); - mode = MODE.BOOT; + finish(); break; } } else { @@ -125,11 +127,21 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback< flasher.close(Target.CLIENT); } + private void closeClient() { + new Thread(new Runnable() { + @Override + public void run() { + flasher.close(Target.CLIENT); + } + }).start(); + } + @Override protected void onDestroy() { super.onDestroy(); + mDialogWorkingState.dismiss(); control.unregister(this); - flasher.close(Target.CLIENT); + closeClient(); } @Override @@ -141,7 +153,6 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback< @Override public void onDetach(String dev) { - flasher.close(Target.CLIENT); } @Override diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/tools/BaseConsoleActivity.java b/app_main/src/main/java/cn/rrg/rdv/activities/tools/BaseConsoleActivity.java index 9892e871..0be26482 100644 --- a/app_main/src/main/java/cn/rrg/rdv/activities/tools/BaseConsoleActivity.java +++ b/app_main/src/main/java/cn/rrg/rdv/activities/tools/BaseConsoleActivity.java @@ -454,7 +454,6 @@ public abstract class BaseConsoleActivity extends BaseActivity { // 我们需要单独处理其中的每个/r,进行视觉更新! for (String s : newLineReturnArr) { arr[arr.length - 1] = s; - Log.d(LOG_TAG, "当前被newLineReturnArr拼接的行: " + arr[arr.length - 1]); // 拼接回去! StringBuilder sb = new StringBuilder(); for (int j = 0; j < arr.length; ++j) { @@ -466,7 +465,6 @@ public abstract class BaseConsoleActivity extends BaseActivity { } } else { arr[arr.length - 1] = line; - Log.d(LOG_TAG, "当前被arr拼接的行: " + arr[arr.length - 1]); // 拼接回去! StringBuilder sb = new StringBuilder(); for (int i = 0; i < arr.length; ++i) { diff --git a/app_main/src/main/java/cn/rrg/rdv/activities/tools/DeviceConnectActivity.java b/app_main/src/main/java/cn/rrg/rdv/activities/tools/DeviceConnectActivity.java index 503040ec..ecc98388 100644 --- a/app_main/src/main/java/cn/rrg/rdv/activities/tools/DeviceConnectActivity.java +++ b/app_main/src/main/java/cn/rrg/rdv/activities/tools/DeviceConnectActivity.java @@ -46,7 +46,7 @@ public abstract class DeviceConnectActivity public abstract ConnectFailedCtxCallback getCallback(); //数据源承载数组! - AbstractDeviceModel[] models; + public AbstractDeviceModel[] models; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { @@ -62,16 +62,8 @@ public abstract class DeviceConnectActivity model.register(this); } - Bundle data = new Bundle(); - data.putSerializable("models", models); - data.putSerializable("target", getTarget()); - data.putSerializable("callback", getCallback()); - data.putString("msg", getConnectingMsg()); - Fragment newDevFragment = new DeviceConnectNewFragment(); Fragment allDevFragment = new DeviceConnectAllFragment(); - newDevFragment.setArguments(data); - allDevFragment.setArguments(data); //初始化分页适配器! FragmentPagerAdapter mAdapter = diff --git a/app_main/src/main/java/cn/rrg/rdv/fragment/connect/DeviceConnectFragment.java b/app_main/src/main/java/cn/rrg/rdv/fragment/connect/DeviceConnectFragment.java index a9d8ace1..b2947fff 100644 --- a/app_main/src/main/java/cn/rrg/rdv/fragment/connect/DeviceConnectFragment.java +++ b/app_main/src/main/java/cn/rrg/rdv/fragment/connect/DeviceConnectFragment.java @@ -15,6 +15,7 @@ import android.widget.TextView; import java.util.ArrayList; import cn.rrg.rdv.R; +import cn.rrg.rdv.activities.tools.DeviceConnectActivity; import cn.rrg.rdv.callback.ConnectFailedCtxCallback; import cn.rrg.rdv.fragment.base.AppMainDevicesFragment; import cn.rrg.rdv.models.AbstractDeviceModel; @@ -33,12 +34,13 @@ public abstract class DeviceConnectFragment @Override protected void initResource() { - Bundle data = getArguments(); - if (data != null) { - this.models = (AbstractDeviceModel[]) data.getSerializable("models"); - this.target = (Class) data.getSerializable("target"); - this.connectCallback = (ConnectFailedCtxCallback) data.getSerializable("callback"); + Activity activity = getActivity(); + if (activity == null) return; + if (activity instanceof DeviceConnectActivity) { + this.models = ((DeviceConnectActivity) activity).models; if (models != null) { + this.target = ((DeviceConnectActivity) activity).getTarget(); + this.connectCallback = ((DeviceConnectActivity) activity).getCallback(); for (AbstractDeviceModel m : models) { //初始化中介者并且绑定视图! DevicePresenter presenter = new DevicePresenter<>(m); @@ -46,15 +48,13 @@ public abstract class DeviceConnectFragment presenter.attachView(this); presenters.add(presenter); } + String msg = ((DeviceConnectActivity) activity).getConnectingMsg(); + if (msg != null) { + ((TextView) (msgView.findViewById(R.id.text1))).setText(msg); + } } else { - throw new RuntimeException("Models container null exception!"); + throw new RuntimeException("Models not init exception!"); } - String msg = data.getString("msg"); - if (msg != null) { - ((TextView) (msgView.findViewById(R.id.text1))).setText(msg); - } - } else { - throw new RuntimeException("Models not init exception!"); } } diff --git a/app_main/src/main/java/cn/rrg/rdv/models/AbsUsb2UartModel.java b/app_main/src/main/java/cn/rrg/rdv/models/AbsUsb2UartModel.java index 449a4a64..8071a109 100644 --- a/app_main/src/main/java/cn/rrg/rdv/models/AbsUsb2UartModel.java +++ b/app_main/src/main/java/cn/rrg/rdv/models/AbsUsb2UartModel.java @@ -19,18 +19,7 @@ public abstract class AbsUsb2UartModel extends AbstractDeviceModel getDriverInterface() { - DriverInterface di = DriverSource.driverMap.get(0x04); - if (di != null) { - ContextHandle contextHandle = (ContextHandle) di; - contextHandle.setContextCallback(new ContextCallback() { - @Override - public Context getContext() { - return AppUtil.getInstance().getApp(); - } - }); - return di; - } - return null; + return DriverSource.driverMap.get(0x04); } @Override diff --git a/app_main/src/main/java/cn/rrg/rdv/models/AbstractDeviceModel.java b/app_main/src/main/java/cn/rrg/rdv/models/AbstractDeviceModel.java index ec40801b..5f44e2a0 100644 --- a/app_main/src/main/java/cn/rrg/rdv/models/AbstractDeviceModel.java +++ b/app_main/src/main/java/cn/rrg/rdv/models/AbstractDeviceModel.java @@ -3,10 +3,12 @@ package cn.rrg.rdv.models; import android.content.Context; import android.util.Log; +import java.io.IOException; import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import cn.dxl.common.util.LogUtils; import cn.rrg.com.DevCallback; import cn.rrg.com.DriverInterface; @@ -172,6 +174,13 @@ public abstract class AbstractDeviceModel if (Com.initCom(mDI, mDevice)) { callback.onInitSuccess(); } else { + try { + LogUtils.d("初始化失败,将会调用设备封装类关闭设备!"); + // close device! + mDevice.close(); + } catch (IOException e) { + e.printStackTrace(); + } callback.onInitFail(); } } diff --git a/app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java b/app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java index 9c785917..93c9295b 100644 --- a/app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java +++ b/app_main/src/main/java/cn/rrg/rdv/util/InitUtil.java @@ -100,11 +100,16 @@ public class InitUtil { } private static void initProxmark3RDV4ImageFile(AssetsUtil au) { - //初始化标准输入的文件! - File boot = new File(Paths.PM3_IMAGE_BOOT_FILE); - File os = new File(Paths.PM3_IMAGE_OS_FILE); - au.moveFile(Paths.PM3_BOOT_FILE_NAME, boot.getAbsolutePath()); - au.moveFile(Paths.PM3_OS_FILE_NAME, os.getAbsolutePath()); + new Thread(new Runnable() { + @Override + public void run() { + //初始化标准输入的文件! + File boot = new File(Paths.PM3_IMAGE_BOOT_FILE); + File os = new File(Paths.PM3_IMAGE_OS_FILE); + au.moveFile(Paths.PM3_BOOT_FILE_NAME, boot.getAbsolutePath()); + au.moveFile(Paths.PM3_OS_FILE_NAME, os.getAbsolutePath()); + } + }).start(); } private static void initMfInfoMapsFile(AssetsUtil au) { diff --git a/app_main/src/main/res/values-en/strings.xml b/app_main/src/main/res/values-en/strings.xml index 89e8da76..0ef9e4da 100644 --- a/app_main/src/main/res/values-en/strings.xml +++ b/app_main/src/main/res/values-en/strings.xml @@ -170,11 +170,9 @@ <p style="color:black;"><big>Powered</big></p><p>By: ProxGrind</p><p><small>Click go to web site</small></p> <p style="color:black;"><big>Distributed</big></p><p>By: RFID Research Group (RRG)</p><p><small>Click go to web site</small></p> NFC not turned on - <p>1、To ensure that firmware versions are consistent, please login at</p> -<p style="color:green">http://proxgrind.com/free-sdk/</p> -<p>download the corresponding version.</p> -<p>2.Make sure the battery has sufficient voltage.</p> -<p>3.Restart the device and APP, reconnect.</p> + 1. Confirm that the firmware version is the same as the app client. You can log in "http://proxgrind.com/free-sdk/" to download the corresponding version, or directly click the button below to flash\n +2. Make sure the battery has enough voltage\n +3. Restart the external device and app and try to connect again Connection failed Your NFC is not open and cannot use this function. Please open your NFC first. open diff --git a/app_main/src/main/res/values-zh/strings.xml b/app_main/src/main/res/values-zh/strings.xml index 1cbfe4e5..7ac1f98b 100644 --- a/app_main/src/main/res/values-zh/strings.xml +++ b/app_main/src/main/res/values-zh/strings.xml @@ -166,11 +166,9 @@ <p style="color:black;"><big>技术</big></p><p>By: ProxGrind</p><p><small>点击前往主页</small></p> <p style="color:black;"><big>发布</big></p><p>By: RFID Research Group (RRG)</p><p><small>点击前往主页</small></p> NFC 未开启 - <p>1、为确保固件版本一致,请登录</p> -<p style="color:green">http://proxgrind.com/free-sdk/</p> -<p>下载相应的版本。</p> -<p>2.确保电池有足够的电压.</p> -<p>3.重启外置设备和APP, 重新连接</p> + 1、确认固件版本与APP客户端一致,可以登录 http://proxgrind.com/free-sdk/ 下载相应的版本,或直接点击下方按钮刷写 +2、确保电池有足够的电压电量 +3、重启外置设备和APP并且重新尝试连接 连接失败 您的NFC未打开,无法使用该功能,请先打开您的NFC 打开 diff --git a/app_main/src/main/res/values/strings.xml b/app_main/src/main/res/values/strings.xml index b5cb59dd..b73cd991 100644 --- a/app_main/src/main/res/values/strings.xml +++ b/app_main/src/main/res/values/strings.xml @@ -169,11 +169,9 @@ <p style="color:black;"><big>Powered</big></p><p>By: ProxGrind</p><p><small>Click go to web site</small></p> <p style="color:black;"><big>Distributed</big></p><p>By: RFID Research Group (RRG)</p><p><small>Click go to web site</small></p> NFC not turned on - <p>1.To ensure that firmware versions are consistent, please login at</p> -<p style="color:green">http://proxgrind.com/free-sdk/</p> -<p>download the corresponding version.</p> -<p>2.Make sure the battery has sufficient voltage.</p> -<p>3.Restart the device and APP, reconnect.</p> + 1. Confirm that the firmware version is the same as the app client. You can log in "http://proxgrind.com/free-sdk/" to download the corresponding version, or directly click the button below to flash\n +2. Make sure the battery has enough voltage\n +3. Restart the external device and app and try to connect again Connection failed Your NFC is not open and cannot use this function. Please open your NFC first. open diff --git a/pm3flasher/src/main/cpp/client/comms.c b/pm3flasher/src/main/cpp/client/comms.c index 2a939715..de1e9ab2 100644 --- a/pm3flasher/src/main/cpp/client/comms.c +++ b/pm3flasher/src/main/cpp/client/comms.c @@ -751,7 +751,6 @@ bool WaitForResponseTimeoutW(uint32_t cmd, PacketResponseNG *response, size_t ms // Wait until the command is received while (true) { - while (getReply(response)) { if (cmd == CMD_UNKNOWN || response->cmd == cmd) { return true; diff --git a/pm3rdv4rrg/src/main/cpp/client/comms.c b/pm3rdv4rrg/src/main/cpp/client/comms.c index 0f521aca..767346f4 100644 --- a/pm3rdv4rrg/src/main/cpp/client/comms.c +++ b/pm3rdv4rrg/src/main/cpp/client/comms.c @@ -708,7 +708,9 @@ void CloseProxmark(void) { // Clean up our state sp = NULL; - memset(&communication_thread, 0, sizeof(pthread_t)); + if (communication_thread != 0) { + memset(&communication_thread, 0, sizeof(pthread_t)); + } session.pm3_present = false; } diff --git a/pm3rdv4rrg/src/main/cpp/client/proxmark3.c b/pm3rdv4rrg/src/main/cpp/client/proxmark3.c index 88427258..160f4d22 100644 --- a/pm3rdv4rrg/src/main/cpp/client/proxmark3.c +++ b/pm3rdv4rrg/src/main/cpp/client/proxmark3.c @@ -998,7 +998,8 @@ JNIEXPORT jint JNI_OnLoad(JavaVM *vm, void *reserved) { {"isExecuting", "()Z", (void *) isExecuting} }; JNINativeMethod methods1[] = { - {"testPm3", "()Z", (void *) testPm3} + {"testPm3", "()Z", (void *) testPm3}, + {"closePm3", "()V", stopPm3} }; //构建和初始化函数结构体,分别是java层的函数名称,签名,对应的函数指针 JNINativeMethod methods2[] = { diff --git a/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java b/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java index be593765..649bab88 100644 --- a/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java +++ b/pm3rdv4rrg/src/main/java/cn/rrg/devices/Proxmark3RRGRdv4.java @@ -5,6 +5,7 @@ import java.io.IOException; import cn.rrg.com.Device; public class Proxmark3RRGRdv4 implements Device { + static { System.loadLibrary("pm3rrg_rdv4"); } @@ -16,8 +17,11 @@ public class Proxmark3RRGRdv4 implements Device { @Override public boolean close() throws IOException { - return false; + closePm3(); + return true; } - public native boolean testPm3() throws IOException; + private native boolean testPm3() throws IOException; + + private native void closePm3(); }