mirror of
https://github.com/RfidResearchGroup/RFIDtools.git
synced 2026-05-12 11:19:59 -07:00
Communication rebuild.
This commit is contained in:
@@ -92,7 +92,6 @@
|
||||
<activity android:name=".activities.connect.PN532UartConnectActivity" />
|
||||
<activity android:name=".activities.connect.ChameleonUsb2UartConnectActivity" />
|
||||
<activity android:name=".activities.chameleon.ChameleonGUIActivity" />
|
||||
<activity android:name=".activities.main.Proxmark3Rdv4RRGReaderMain" />
|
||||
|
||||
<activity
|
||||
android:name=".activities.main.AppMain"
|
||||
|
||||
@@ -516,7 +516,7 @@ public class ChameleonGUIActivity
|
||||
@Override
|
||||
public void run() {
|
||||
//文件处理完成,进行接下来的下载!
|
||||
XModem128 modem = new XModem128(com);
|
||||
XModem128 modem = new XModem128(com.getInput(), com.getOutput());
|
||||
try {
|
||||
ByteArrayOutputStream bos = new ByteArrayOutputStream(1024 * 64);
|
||||
boolean b = modem.recv(bos);
|
||||
@@ -549,7 +549,7 @@ public class ChameleonGUIActivity
|
||||
public void run() {
|
||||
//文件处理完成,进行接下来的下载!
|
||||
Communication com = ExecutorImpl.getInstance().getCom();
|
||||
XModem128 modem = new XModem128(com);
|
||||
XModem128 modem = new XModem128(com.getInput(), com.getOutput());
|
||||
new FilesSelectorDialog.Builder(context)
|
||||
.setTitle(R.string.tips_data_select)
|
||||
.setCancelable(false)
|
||||
@@ -625,7 +625,7 @@ public class ChameleonGUIActivity
|
||||
|
||||
private void cancelXmodem(XModem128 modem) {
|
||||
try {
|
||||
modem.cancel(1000);
|
||||
modem.cancel();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
@@ -42,7 +42,9 @@ public class PM3FlasherMainActivity extends BaseActivity implements DevCallback<
|
||||
|
||||
// init and try to connect.
|
||||
control.register(this);
|
||||
ComBridgeAdapter.initCom(control);
|
||||
ComBridgeAdapter.getInstance()
|
||||
.setInputStream(control.getInput())
|
||||
.setOutputStream(control.getOutput());
|
||||
|
||||
initViews();
|
||||
initActions();
|
||||
|
||||
@@ -18,7 +18,6 @@ public class Proxmark3Rdv4RRGMain
|
||||
extends BaseActivity {
|
||||
|
||||
private Button btnGo2Proxmark3Rdv4RRGRedTeam;
|
||||
private Button btnGo2Proxmark3Rdv4RRGReader;
|
||||
|
||||
@Override
|
||||
protected void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
@@ -31,7 +30,6 @@ public class Proxmark3Rdv4RRGMain
|
||||
|
||||
private void initViews() {
|
||||
btnGo2Proxmark3Rdv4RRGRedTeam = findViewById(R.id.btnGo2Proxmark3Rdv4RRGRedTeam);
|
||||
btnGo2Proxmark3Rdv4RRGReader = findViewById(R.id.btnGo2Proxmark3Rdv4RRGReader);
|
||||
}
|
||||
|
||||
private void initActions() {
|
||||
@@ -41,11 +39,5 @@ public class Proxmark3Rdv4RRGMain
|
||||
startActivity(new Intent(context, Proxmark3Rdv4RRGRedTeamConsoleActivity.class));
|
||||
}
|
||||
});
|
||||
btnGo2Proxmark3Rdv4RRGReader.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
startActivity(new Intent(context, Proxmark3Rdv4RRGReaderMain.class));
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
package cn.rrg.rdv.activities.main;
|
||||
|
||||
import androidx.fragment.app.Fragment;
|
||||
|
||||
import cn.rrg.rdv.activities.standard.AbsStandardM1Activity;
|
||||
import cn.rrg.rdv.fragment.tools.Proxmark3Rdv4RRGMFRWOperateFragment;
|
||||
import cn.rrg.rdv.fragment.tools.Proxmark3Rdv4RRGShowInformationFragment;
|
||||
|
||||
public class Proxmark3Rdv4RRGReaderMain extends AbsStandardM1Activity {
|
||||
@Override
|
||||
protected Fragment getInformatinFragment() {
|
||||
return new Proxmark3Rdv4RRGShowInformationFragment();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Fragment getTagOperateFragment() {
|
||||
return new Proxmark3Rdv4RRGMFRWOperateFragment();
|
||||
}
|
||||
}
|
||||
@@ -9,6 +9,8 @@ import android.nfc.NfcAdapter;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.OutputStream;
|
||||
|
||||
import cn.dxl.common.util.AppUtil;
|
||||
import cn.dxl.mifare.StdMifareIntent;
|
||||
@@ -95,11 +97,6 @@ public class StandardDriver implements DriverInterface<String, NfcAdapter> {
|
||||
callback.onDetach(getDevice());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getUniqueId() {
|
||||
return UNIQUE_ID;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unregister() {
|
||||
//解注册广播监听事件!
|
||||
@@ -108,22 +105,12 @@ public class StandardDriver implements DriverInterface<String, NfcAdapter> {
|
||||
}
|
||||
|
||||
@Override
|
||||
public int write(byte[] sendMsg, int offset, int length, int timeout) throws IOException {
|
||||
throw new IOException("can't invoke");
|
||||
public OutputStream getOutput() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int read(byte[] recvMsg, int offset, int length, int timeout) throws IOException {
|
||||
throw new IOException("can't invoke");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void flush() throws IOException {
|
||||
throw new IOException("can't invoke");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
throw new IOException("can't invoke");
|
||||
public InputStream getInput() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
-32
@@ -1,32 +0,0 @@
|
||||
package cn.rrg.rdv.fragment.tools;
|
||||
|
||||
import cn.rrg.rdv.presenter.AbsTagKeysCheckPresenter;
|
||||
import cn.rrg.rdv.presenter.AbsTagReadPresenter;
|
||||
import cn.rrg.rdv.presenter.AbsTagStatePresenter;
|
||||
import cn.rrg.rdv.presenter.AbsTagWritePresenter;
|
||||
import cn.rrg.rdv.presenter.Proxmark3Rdv4RRGTagKeysCheckPresenter;
|
||||
import cn.rrg.rdv.presenter.Proxmark3Rdv4RRGTagReadPresenter;
|
||||
import cn.rrg.rdv.presenter.Proxmark3Rdv4RRGTagStatePresenter;
|
||||
import cn.rrg.rdv.presenter.Proxmark3Rdv4RRGTagWritePresenter;
|
||||
|
||||
public class Proxmark3Rdv4RRGMFRWOperateFragment extends AbsMfOperatesFragment {
|
||||
@Override
|
||||
protected AbsTagStatePresenter getTagStatePresenter() {
|
||||
return new Proxmark3Rdv4RRGTagStatePresenter();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AbsTagKeysCheckPresenter getKeysCheckPresenter() {
|
||||
return new Proxmark3Rdv4RRGTagKeysCheckPresenter();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AbsTagReadPresenter getTagReadPresenter() {
|
||||
return new Proxmark3Rdv4RRGTagReadPresenter();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected AbsTagWritePresenter getTagWritePresenter() {
|
||||
return new Proxmark3Rdv4RRGTagWritePresenter();
|
||||
}
|
||||
}
|
||||
-11
@@ -1,11 +0,0 @@
|
||||
package cn.rrg.rdv.fragment.tools;
|
||||
|
||||
import cn.rrg.rdv.presenter.AbsTagInformationsPresenter;
|
||||
import cn.rrg.rdv.presenter.Proxmark3Rdv4RRGTagInformationsPresenter;
|
||||
|
||||
public class Proxmark3Rdv4RRGShowInformationFragment extends AbsShowInformationFragment {
|
||||
@Override
|
||||
protected AbsTagInformationsPresenter getPresenter() {
|
||||
return new Proxmark3Rdv4RRGTagInformationsPresenter();
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ public abstract class AbsUsb2UartModel extends AbstractDeviceModel<String, UsbMa
|
||||
|
||||
@Override
|
||||
public DriverInterface<String, UsbManager> getDriverInterface() {
|
||||
return DriverSource.driverMap.get(0x04);
|
||||
return UsbSerialControl.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -13,7 +13,6 @@ import cn.dxl.common.util.LogUtils;
|
||||
import cn.rrg.com.DevCallback;
|
||||
import cn.rrg.com.DriverInterface;
|
||||
|
||||
import cn.dxl.com.ComBridgeAdapter;
|
||||
import cn.dxl.com.DeviceChecker;
|
||||
import cn.rrg.rdv.javabean.DevBean;
|
||||
import cn.rrg.rdv.callback.ConnectCallback;
|
||||
@@ -173,10 +172,9 @@ public abstract class AbstractDeviceModel<D, A>
|
||||
public void run() {
|
||||
//直接连接,有需要时可重写!
|
||||
try {
|
||||
if (mDeviceChecker.working()) {
|
||||
if (mDeviceChecker.check()) {
|
||||
callback.onInitSuccess();
|
||||
} else {
|
||||
|
||||
LogUtils.d("初始化失败,将会调用设备封装类关闭设备!");
|
||||
// close device!
|
||||
mDeviceChecker.close();
|
||||
|
||||
@@ -18,7 +18,7 @@ import cn.rrg.rdv.util.Commons;
|
||||
public class Acr122uUsbRawModel extends AbstractDeviceModel<String, UsbManager> {
|
||||
@Override
|
||||
public DriverInterface<String, UsbManager> getDriverInterface() {
|
||||
return DriverSource.driverMap.get(0x03);
|
||||
return UsbAcr122Raw.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,52 +0,0 @@
|
||||
package cn.rrg.rdv.models;
|
||||
|
||||
import android.util.SparseArray;
|
||||
|
||||
import cn.rrg.com.DriverInterface;
|
||||
import cn.rrg.com.SppHasBlock;
|
||||
import cn.rrg.com.SppNonBlock;
|
||||
import cn.rrg.rdv.driver.StandardDriver;
|
||||
import cn.rrg.com.UniversalBulkTransfer;
|
||||
import cn.rrg.com.UsbAcr122Raw;
|
||||
import cn.rrg.com.UsbSerialControl;
|
||||
|
||||
/*
|
||||
* 驱动池,所有的驱动最终加载成功后都将被打进当前的实例进行缓存!!!
|
||||
* Datasource, all driver from here.
|
||||
* */
|
||||
public class DriverSource {
|
||||
//一个驱动实体的映射表,当匹配到对应的驱动时将会把驱动打进或者取出!
|
||||
public static SparseArray<DriverInterface> driverMap = new SparseArray<>();
|
||||
|
||||
static {
|
||||
/*
|
||||
* 放入SPP非堵塞不缓存实现驱动! code 0x01
|
||||
* 适用于不需要堵塞读取,不需要缓存发送帧的设备
|
||||
* 已知适用设备:
|
||||
* 1. PM3 RDV4 蓝牙模组
|
||||
* */
|
||||
driverMap.put(SppNonBlock.get().getUniqueId(), SppNonBlock.get());
|
||||
/*
|
||||
* 放入SPP堵塞缓存实现驱动! code 0x02
|
||||
* 适用于需要堵塞读取,在数据异常时需要发送缓存包重新请求的设备
|
||||
* 已知适用设备:
|
||||
* 1. PN532 + 蓝牙SPP
|
||||
* */
|
||||
driverMap.put(SppHasBlock.get().getUniqueId(), SppHasBlock.get());
|
||||
// 放入USB 122u原生字节实现, code 0x03
|
||||
driverMap.put(UsbAcr122Raw.get().getUniqueId(), UsbAcr122Raw.get());
|
||||
/*
|
||||
* 放入USB 转串口实现! code 0x04
|
||||
* 适用于市场上大部分USB转串口实现,该实现为ControlTransfer函数实现,速度较慢
|
||||
* 已知适用设备:
|
||||
* 1. PM3 RDV4 CDC
|
||||
* 2. PN532 Usb 2 Serial
|
||||
* 3. Chameleon CDC
|
||||
* */
|
||||
driverMap.put(UsbSerialControl.get().getUniqueId(), UsbSerialControl.get());
|
||||
// 放入标准NFC设备到驱动映射表,只适用标准NFC! code 0x05
|
||||
driverMap.put(StandardDriver.get().getUniqueId(), StandardDriver.get());
|
||||
// 通用USB RAW驱动!
|
||||
driverMap.put(UniversalBulkTransfer.getTransfer().getUniqueId(), UniversalBulkTransfer.getTransfer());
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import android.bluetooth.BluetoothDevice;
|
||||
|
||||
import cn.rrg.com.DriverInterface;
|
||||
import cn.dxl.com.DeviceChecker;
|
||||
import cn.rrg.com.SppHasBlock;
|
||||
import cn.rrg.devices.PN53X;
|
||||
|
||||
/*
|
||||
@@ -13,7 +14,7 @@ import cn.rrg.devices.PN53X;
|
||||
public class PN532SppUartModel extends AbstractSppDeviceModel {
|
||||
@Override
|
||||
public DriverInterface<BluetoothDevice, BluetoothAdapter> getDriverInterface() {
|
||||
return DriverSource.driverMap.get(0x02);
|
||||
return SppHasBlock.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,72 +0,0 @@
|
||||
package cn.rrg.rdv.models;
|
||||
|
||||
import android.nfc.tech.MifareClassic;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import cn.dxl.common.application.App;
|
||||
import cn.dxl.common.util.AppUtil;
|
||||
import cn.dxl.common.util.FileUtils;
|
||||
import cn.dxl.common.util.HexUtil;
|
||||
import cn.rrg.natives.PM3Rdv4RRGMifare;
|
||||
import cn.rrg.rdv.R;
|
||||
import cn.rrg.rdv.callback.TagInformationsCallback;
|
||||
import cn.rrg.rdv.util.Paths;
|
||||
|
||||
public class Proxmark3Rdv4RRGTagInformationsModel {
|
||||
private String LOG_TAG = "Proxmark3Rdv4RRGTagInformationsModel";
|
||||
private PM3Rdv4RRGMifare spclMf = PM3Rdv4RRGMifare.get();
|
||||
private App application = AppUtil.getInstance().getApp();
|
||||
|
||||
public void collect(TagInformationsCallback<CharSequence> callback) {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (spclMf.scanning() && spclMf.connect()) {
|
||||
byte[] uidBytes = spclMf.getUid();
|
||||
String uid = "unknown";
|
||||
if (uidBytes != null)
|
||||
uid = HexUtil.toHexString(uidBytes);
|
||||
String size = "" + spclMf.getSize();
|
||||
String atqa = HexUtil.toHexString(spclMf.getAtqa());
|
||||
String sak = HexUtil.toHexString(spclMf.getSak());
|
||||
String sectorCount = "" + spclMf.getSectorCount();
|
||||
String blockCount = "" + spclMf.getBlockCount();
|
||||
String ats = "-";
|
||||
String tagType = application.getString(R.string.tag_unknown_mf_classic);
|
||||
|
||||
File template_mifare_info = new File(Paths.COMMON_DIRECTORY + "/" + "template_mifare_info_en.html");
|
||||
|
||||
try {
|
||||
//读取本地的HTML模板文件!
|
||||
byte[] templateBytes = FileUtils.readBytes(template_mifare_info);
|
||||
String htmlSr = new String(templateBytes);
|
||||
//替换信息!
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{UID\\}", uid);
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{Tech\\}", "ISO/IEC 14443, Type A");
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{ATQA\\}", atqa);
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{SAK\\}", sak);
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{ATS\\}", ats);
|
||||
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{TM\\}", tagType);
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{MS\\}", size + " byte");
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{BS\\}", MifareClassic.BLOCK_SIZE + " byte");
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{SC\\}", sectorCount);
|
||||
htmlSr = htmlSr.replaceAll("\\$\\{BC\\}", blockCount);
|
||||
|
||||
callback.onInformationsShow(htmlSr);
|
||||
spclMf.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
callback.onInformationsShow("Template file no exists!");
|
||||
}
|
||||
} else {
|
||||
Log.d(LOG_TAG, "collect调用,卡片不存在!");
|
||||
callback.onInformationsShow(application.getString(R.string.tag_not_found));
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
package cn.rrg.rdv.models;
|
||||
|
||||
import cn.dxl.mifare.MifareAdapter;
|
||||
import cn.rrg.natives.PM3Rdv4RRGMifare;
|
||||
|
||||
public class Proxmark3Rdv4RRGTagReadModel extends AbsTagReadModel {
|
||||
@Override
|
||||
protected MifareAdapter getTag() {
|
||||
return PM3Rdv4RRGMifare.get();
|
||||
}
|
||||
}
|
||||
@@ -1,40 +0,0 @@
|
||||
package cn.rrg.rdv.models;
|
||||
|
||||
import cn.rrg.natives.PM3Rdv4RRGMifare;
|
||||
|
||||
public class Proxmark3Rdv4RRGTagStateModel extends AbsTagStateModel {
|
||||
private PM3Rdv4RRGMifare mifare = PM3Rdv4RRGMifare.get();
|
||||
|
||||
@Override
|
||||
protected boolean checkTagState() {
|
||||
if (mifare.scanning()) {
|
||||
if (mifare.connect()) {
|
||||
mifare.close();
|
||||
return true;
|
||||
} else {
|
||||
mifare.close();
|
||||
return false;
|
||||
}
|
||||
} else {
|
||||
mifare.close();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean checkTagMagic() {
|
||||
if (!mifare.scanning()) {
|
||||
mifare.close();
|
||||
return false;
|
||||
}
|
||||
if (mifare.connect()) {
|
||||
mifare.close();
|
||||
if (mifare.unlock()) {
|
||||
mifare.close();
|
||||
return true;
|
||||
}
|
||||
}
|
||||
mifare.close();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@@ -1,11 +0,0 @@
|
||||
package cn.rrg.rdv.models;
|
||||
|
||||
import cn.dxl.mifare.MifareAdapter;
|
||||
import cn.rrg.natives.PM3Rdv4RRGMifare;
|
||||
|
||||
public class Proxmark3Rdv4RRGTagWriteModel extends AbsTagWriteModel {
|
||||
@Override
|
||||
protected MifareAdapter getTag() {
|
||||
return PM3Rdv4RRGMifare.get();
|
||||
}
|
||||
}
|
||||
@@ -5,6 +5,7 @@ import android.bluetooth.BluetoothDevice;
|
||||
|
||||
import cn.rrg.com.DriverInterface;
|
||||
import cn.dxl.com.DeviceChecker;
|
||||
import cn.rrg.com.SppNonBlock;
|
||||
import cn.rrg.devices.Proxmark3RRGRdv4;
|
||||
|
||||
/*
|
||||
@@ -14,7 +15,7 @@ public class Proxmark3Rdv4SppModel extends AbstractSppDeviceModel {
|
||||
|
||||
@Override
|
||||
public DriverInterface<BluetoothDevice, BluetoothAdapter> getDriverInterface() {
|
||||
return DriverSource.driverMap.get(0x01);
|
||||
return SppNonBlock.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -10,6 +10,7 @@ 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.devices.PN53X;
|
||||
import cn.rrg.rdv.callback.ConnectCallback;
|
||||
import cn.rrg.rdv.javabean.DevBean;
|
||||
@@ -26,7 +27,7 @@ public class UniversalBulkPN53XRawModel extends AbstractDeviceModel<String, UsbM
|
||||
|
||||
@Override
|
||||
public DriverInterface<String, UsbManager> getDriverInterface() {
|
||||
return DriverSource.driverMap.get(0x06);
|
||||
return UniversalBulkTransfer.getTransfer();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
package cn.rrg.rdv.presenter;
|
||||
|
||||
import cn.rrg.rdv.callback.TagInformationsCallback;
|
||||
import cn.rrg.rdv.models.Proxmark3Rdv4RRGTagInformationsModel;
|
||||
|
||||
public class Proxmark3Rdv4RRGTagInformationsPresenter extends AbsTagInformationsPresenter {
|
||||
@Override
|
||||
public void show() {
|
||||
if (isViewAttach()) {
|
||||
new Proxmark3Rdv4RRGTagInformationsModel().collect(new TagInformationsCallback<CharSequence>() {
|
||||
@Override
|
||||
public void onInformationsShow(CharSequence charSequence) {
|
||||
view.onInformationsShow(charSequence);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user