Communication rebuild.

This commit is contained in:
dxl
2020-04-14 18:42:35 +08:00
parent 00886d3ba8
commit b81852de62
1090 changed files with 171 additions and 1747786 deletions
-1
View File
@@ -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;
}
}
@@ -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();
}
}
@@ -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
@@ -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