mirror of
https://github.com/RfidResearchGroup/RFIDtools.git
synced 2026-05-12 11:19:59 -07:00
+2
-13
@@ -1,15 +1,6 @@
|
||||
apply plugin: 'com.android.application'
|
||||
|
||||
android {
|
||||
//签名文件配置
|
||||
signingConfigs {
|
||||
DXL {
|
||||
keyAlias 'DXL'
|
||||
keyPassword '15219233050'
|
||||
storeFile file('D:/DXL_AS_KEY/DXL.jks')
|
||||
storePassword '15219233050'
|
||||
}
|
||||
}
|
||||
//构建项目的sdk版本
|
||||
compileSdkVersion 29
|
||||
//构建器版本
|
||||
@@ -25,9 +16,9 @@ android {
|
||||
//单元测试的支持
|
||||
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
|
||||
//版本号,整形
|
||||
versionCode 4
|
||||
versionCode 5
|
||||
//版本名称,字符串!
|
||||
versionName "1.3.1"
|
||||
versionName "1.3.2"
|
||||
}
|
||||
//构建的类型,发布版和测试版
|
||||
buildTypes {
|
||||
@@ -35,11 +26,9 @@ android {
|
||||
minifyEnabled false
|
||||
shrinkResources false
|
||||
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
|
||||
signingConfig signingConfigs.DXL
|
||||
}
|
||||
debug {
|
||||
shrinkResources false
|
||||
signingConfig signingConfigs.DXL
|
||||
minifyEnabled false
|
||||
}
|
||||
}
|
||||
|
||||
@@ -31,6 +31,10 @@ import cn.rrg.rdv.activities.tools.AboutActicity;
|
||||
import cn.rrg.rdv.activities.tools.MainSettingsActivity;
|
||||
import cn.rrg.rdv.activities.tools.ToolsAccessActivity;
|
||||
import cn.rrg.rdv.application.RuntimeProperties;
|
||||
import cn.rrg.rdv.models.AbstractDeviceModel;
|
||||
import cn.rrg.rdv.models.Acr122uUsbRawModel;
|
||||
import cn.rrg.rdv.models.ChameleonUsb2UartModel;
|
||||
import cn.rrg.rdv.models.PN532Usb2UartModel;
|
||||
|
||||
/**
|
||||
* 界面重构在2019/7/29启动!
|
||||
@@ -52,6 +56,8 @@ public class AppMainDevices extends BaseActivity {
|
||||
private ScrollView scrollView;
|
||||
private Toolbar toolbar;
|
||||
|
||||
private AbstractDeviceModel[] models;
|
||||
|
||||
//是否是横屏切换!
|
||||
private boolean isBackPressed = false;
|
||||
|
||||
@@ -63,6 +69,17 @@ public class AppMainDevices extends BaseActivity {
|
||||
setContentView(R.layout.act_app_devices);
|
||||
initViews();
|
||||
initActions();
|
||||
|
||||
// USB_Device opt
|
||||
models = new AbstractDeviceModel[]{
|
||||
new Acr122uUsbRawModel(),
|
||||
new ChameleonUsb2UartModel(),
|
||||
new PN532Usb2UartModel()
|
||||
};
|
||||
|
||||
for (AbstractDeviceModel model : models) {
|
||||
model.register(this);
|
||||
}
|
||||
}
|
||||
|
||||
private void initViews() {
|
||||
@@ -225,10 +242,13 @@ public class AppMainDevices extends BaseActivity {
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
//如果是横屏,那我们就没必要全部销毁。
|
||||
//如果是横屏动作,那我们就没必要全部销毁。
|
||||
if (isBackPressed) {
|
||||
AppUtil.getInstance().finishAll();
|
||||
System.exit(0);
|
||||
}
|
||||
for (AbstractDeviceModel model : models) {
|
||||
model.unregister(this);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@ import cn.rrg.rdv.activities.px53x.MfcukConsoleActivity;
|
||||
import cn.rrg.rdv.activities.px53x.MfocConsoleActivity;
|
||||
import cn.rrg.rdv.activities.px53x.NfcListConsoleActivity;
|
||||
|
||||
public class PN53XNfcMain extends BaseActivity {
|
||||
public class PN53XNfcMain extends BaseActivity {
|
||||
|
||||
private Button btnNestedCrack = null;
|
||||
private Button btnPRNGCrack = null;
|
||||
|
||||
@@ -107,7 +107,6 @@ public abstract class DeviceConnectActivity
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
//TODO 不需要解注册,避免在其他位置接收不到设备的移除广播!
|
||||
for (AbstractDeviceModel model : models) {
|
||||
model.unregister(this);
|
||||
}
|
||||
|
||||
@@ -14,7 +14,7 @@ public class DeviceConnectNewFragment
|
||||
implements DevCallback<DevBean> {
|
||||
|
||||
//持有中介者!
|
||||
List<DeviceAttachPresenter> presenters = new ArrayList<>();
|
||||
private List<DeviceAttachPresenter> presenters = new ArrayList<>();
|
||||
|
||||
@Override
|
||||
public void onDestroy() {
|
||||
@@ -36,6 +36,7 @@ public class DeviceConnectNewFragment
|
||||
if (models != null) {
|
||||
for (AbstractDeviceModel model : models) {
|
||||
DeviceAttachPresenter presenter = new DeviceAttachPresenter(model);
|
||||
presenters.add(presenter);
|
||||
//初始化中介者并且绑定视图!
|
||||
presenter.attachSubView(this);
|
||||
presenter.attachView(this);
|
||||
|
||||
@@ -78,9 +78,9 @@ public abstract class AbsShowInformationFragment
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onHiddenChanged(boolean hidden) {
|
||||
super.onHiddenChanged(hidden);
|
||||
if (isVisible()) {
|
||||
public void setUserVisibleHint(boolean isVisibleToUser) {
|
||||
super.setUserVisibleHint(isVisibleToUser);
|
||||
if (isVisibleToUser) {
|
||||
workingMsgDialog.show();
|
||||
// 在用户切换到这个fragment时才进行信息请求!
|
||||
presenter.show();
|
||||
|
||||
@@ -9,9 +9,9 @@ import cn.dxl.common.util.AppUtil;
|
||||
import cn.rrg.com.ContextCallback;
|
||||
import cn.rrg.com.ContextHandle;
|
||||
import cn.rrg.com.DevCallback;
|
||||
import cn.rrg.com.Device;
|
||||
import cn.rrg.com.DriverInterface;
|
||||
import cn.rrg.devices.Proxmark3RRGRdv4;
|
||||
import cn.rrg.com.UsbSerialControl;
|
||||
import cn.rrg.rdv.application.RuntimeProperties;
|
||||
import cn.rrg.rdv.callback.ConnectCallback;
|
||||
import cn.rrg.rdv.javabean.DevBean;
|
||||
import cn.rrg.rdv.util.Commons;
|
||||
@@ -52,6 +52,10 @@ public abstract class AbsUsb2UartModel extends AbstractDeviceModel<String, UsbMa
|
||||
Commons.removeDevByList(devBean, devAttachList);
|
||||
//如果设置了接口实现则需要通知接口移除
|
||||
detachDispatcher(devBean);
|
||||
// 设置连接状态!
|
||||
if (dev.equals(UsbSerialControl.NAME_DRIVER_USB_UART)) {
|
||||
RuntimeProperties.isConnected = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -62,7 +66,7 @@ public abstract class AbsUsb2UartModel extends AbstractDeviceModel<String, UsbMa
|
||||
UsbManager manager = mDI.getAdapter();
|
||||
if (manager != null)
|
||||
if (manager.getDeviceList().size() > 0) {
|
||||
context.sendBroadcast(new Intent("cn.rrg.devices.usb_attach_uart"));
|
||||
AppUtil.getInstance().getApp().sendBroadcast(new Intent(UsbSerialControl.ACTION_BROADCAST));
|
||||
} else Log.d(TAG, "startDiscovery: 找不到任何一个USB设备!");
|
||||
}
|
||||
}
|
||||
@@ -95,6 +99,7 @@ public abstract class AbsUsb2UartModel extends AbstractDeviceModel<String, UsbMa
|
||||
public void disconnect() {
|
||||
if (mDI != null) {
|
||||
mDI.disconect();
|
||||
RuntimeProperties.isConnected = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,11 +7,14 @@ import android.util.Log;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import cn.dxl.common.util.AppUtil;
|
||||
import cn.dxl.common.util.FileUtil;
|
||||
import cn.rrg.com.DevCallback;
|
||||
import cn.rrg.com.Device;
|
||||
import cn.rrg.com.DriverInterface;
|
||||
import cn.rrg.com.UsbAcr122Raw;
|
||||
import cn.rrg.devices.PN53X;
|
||||
import cn.rrg.rdv.application.RuntimeProperties;
|
||||
import cn.rrg.rdv.callback.ConnectCallback;
|
||||
import cn.rrg.rdv.javabean.DevBean;
|
||||
import cn.rrg.rdv.util.Commons;
|
||||
@@ -46,6 +49,10 @@ public class Acr122uUsbRawModel extends AbstractDeviceModel<String, UsbManager>
|
||||
Commons.removeDevByList(devBean, devAttachList);
|
||||
//如果设置了接口实现则需要通知接口移除
|
||||
detachDispatcher(devBean);
|
||||
// 如果是当前的驱动被移除,则我们需要将设备重置状态!
|
||||
if (dev.equals(UsbAcr122Raw.DRIVER_ACR122U)) {
|
||||
RuntimeProperties.isConnected = false;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -57,7 +64,8 @@ public class Acr122uUsbRawModel extends AbstractDeviceModel<String, UsbManager>
|
||||
UsbManager manager = mDI.getAdapter();
|
||||
if (manager != null)
|
||||
if (manager.getDeviceList().size() > 0) {
|
||||
context.sendBroadcast(new Intent("cn.coderboy.nfc.usb_attach_acr"));
|
||||
Log.d(TAG, "发送广播成功!");
|
||||
AppUtil.getInstance().getApp().sendBroadcast(new Intent(UsbAcr122Raw.ACTION_BROADCAST));
|
||||
} else Log.d(TAG, "startDiscovery: 找不到任何一个USB设备!");
|
||||
}
|
||||
}
|
||||
@@ -76,7 +84,7 @@ public class Acr122uUsbRawModel extends AbstractDeviceModel<String, UsbManager>
|
||||
}
|
||||
// TODO 谨记更换底层配置!
|
||||
FileUtil.writeString(new File(Paths.PN53X_CONF_FILE), "ACR122", false);
|
||||
boolean ret = mDI.connect(null);
|
||||
boolean ret = mDI.connect(UsbAcr122Raw.DRIVER_ACR122U);
|
||||
if (ret) {
|
||||
Log.d(TAG, "Acr122连接成功!");
|
||||
callback.onConnectSucces();
|
||||
@@ -88,7 +96,9 @@ public class Acr122uUsbRawModel extends AbstractDeviceModel<String, UsbManager>
|
||||
|
||||
@Override
|
||||
public void disconnect() {
|
||||
if (mDI != null)
|
||||
if (mDI != null) {
|
||||
mDI.disconect();
|
||||
RuntimeProperties.isConnected = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package cn.rrg.com;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
@@ -19,15 +20,23 @@ import java.util.List;
|
||||
|
||||
import android.hardware.usb.UsbConstants;
|
||||
|
||||
import cn.dxl.common.util.AppUtil;
|
||||
|
||||
public class UsbAcr122Raw implements DriverInterface<String, UsbManager> {
|
||||
|
||||
// Application context, is global. cant cache activity context!
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private static final Context mContext = AppUtil.getInstance().getApp();
|
||||
//日志特征
|
||||
private static final String LOG_TAG = UsbAcr122Raw.class.getSimpleName();
|
||||
private static final int UNIQUE_ID = 0x03;
|
||||
private static DevCallback<String> mCallback = null;
|
||||
//广播接收器,在设备插入和移除时使用
|
||||
private static BroadcastReceiver mReceiver = null;
|
||||
//控制广播注册状态
|
||||
private boolean isRegister = false;
|
||||
private static BroadcastReceiver mReceiver;
|
||||
//主页状态!
|
||||
private static boolean isRegister = false;
|
||||
//广播过滤器!
|
||||
private static IntentFilter filter = new IntentFilter();
|
||||
//缓存设备管理器
|
||||
private static UsbManager mUsbManger = null;
|
||||
//缓存插入的设备
|
||||
@@ -41,8 +50,9 @@ public class UsbAcr122Raw implements DriverInterface<String, UsbManager> {
|
||||
//USB写端点
|
||||
private static UsbEndpoint mEpOut = null;
|
||||
//单例模式
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private static UsbAcr122Raw mUsbRaw = null;
|
||||
//设备码
|
||||
//设备VP码
|
||||
private static final int[] VP_ID = new int[]{
|
||||
120566529, 120566532, 120554240, 120554242,
|
||||
120554247, 120554241, 120557568, 120557775,
|
||||
@@ -64,6 +74,43 @@ public class UsbAcr122Raw implements DriverInterface<String, UsbManager> {
|
||||
120529482, 120553985, 120553990, 120557574,
|
||||
120557787, 120566272, 120566022
|
||||
};
|
||||
public static final String ACTION_BROADCAST = "com.rrg.devices.usb_attach_acr";
|
||||
public static final String DRIVER_ACR122U = "ACS-ACR_122U(龙杰-ACR_122U)";
|
||||
|
||||
static {
|
||||
//建立意图过滤数组
|
||||
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
|
||||
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
|
||||
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
|
||||
filter.addAction(ACTION_BROADCAST);
|
||||
mReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
final String _action = intent.getAction();
|
||||
if (_action == null) {
|
||||
Log.d(LOG_TAG, "UsbAcr122Raw 广播action为空!");
|
||||
return;
|
||||
}
|
||||
switch (_action) {
|
||||
//在设备插入的时候初始化
|
||||
case UsbManager.ACTION_USB_DEVICE_ATTACHED:
|
||||
case ACTION_BROADCAST: {
|
||||
if (init(context)) {
|
||||
Log.d(LOG_TAG, "UsbAcr122Raw 广播发现设备: " + DRIVER_ACR122U);
|
||||
mCallback.onAttach(DRIVER_ACR122U);
|
||||
} else {
|
||||
Log.d(LOG_TAG, "init failed!");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case UsbManager.ACTION_USB_DEVICE_DETACHED:
|
||||
mCallback.onDetach(DRIVER_ACR122U);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
//私有构造方法,避免被直接调用
|
||||
private UsbAcr122Raw() { /*can't using default constructor*/ }
|
||||
@@ -80,8 +127,30 @@ public class UsbAcr122Raw implements DriverInterface<String, UsbManager> {
|
||||
return mUsbRaw;
|
||||
}
|
||||
|
||||
private void register1() {
|
||||
unRegister();
|
||||
try {
|
||||
//注册广播事件
|
||||
AppUtil.getInstance().getApp().registerReceiver(mReceiver, filter);
|
||||
isRegister = true;
|
||||
Log.d(LOG_TAG, "注册广播成功!");
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
private void unRegister() {
|
||||
try {
|
||||
if (isRegister) {
|
||||
//注册广播事件
|
||||
AppUtil.getInstance().getApp().unregisterReceiver(mReceiver);
|
||||
isRegister = false;
|
||||
}
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
|
||||
//初始化
|
||||
private boolean init(Context context) {
|
||||
private static boolean init(Context context) {
|
||||
if (mUsbManger == null) {
|
||||
Log.d(LOG_TAG, "USB管理器为空!");
|
||||
return false;
|
||||
@@ -103,9 +172,7 @@ public class UsbAcr122Raw implements DriverInterface<String, UsbManager> {
|
||||
//空链接,可能需要申请权限!
|
||||
if (mCon == null) {
|
||||
//发送广播申请权限
|
||||
PendingIntent intent =
|
||||
PendingIntent.getBroadcast(context,
|
||||
0, new Intent("cn.rrg.devices.usb_attach_acr"), 0);
|
||||
PendingIntent intent = PendingIntent.getBroadcast(mContext, 0, new Intent(ACTION_BROADCAST), 0);
|
||||
Log.d(LOG_TAG, "trying get usb permission!");
|
||||
mUsbManger.requestPermission(mDevice, intent);
|
||||
//当没有权限的时候应当直接返回
|
||||
@@ -122,11 +189,10 @@ public class UsbAcr122Raw implements DriverInterface<String, UsbManager> {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isAcr122(int producetId, int ventorId) {
|
||||
private static boolean isAcr122(int producetId, int ventorId) {
|
||||
boolean ret = false;
|
||||
int var3 = ventorId << 16 | producetId;
|
||||
int count = 0;
|
||||
|
||||
while (true) {
|
||||
if (count >= 75) {
|
||||
break;
|
||||
@@ -142,46 +208,11 @@ public class UsbAcr122Raw implements DriverInterface<String, UsbManager> {
|
||||
|
||||
@Override
|
||||
public void register(Context context, final DevCallback<String> callback) {
|
||||
mCallback = callback;
|
||||
//初始化USB管理器资源
|
||||
mUsbManger = (UsbManager) context.getSystemService(Context.USB_SERVICE);
|
||||
//只注册一次广播
|
||||
if (isRegister) return;
|
||||
//建立意图过滤数组
|
||||
IntentFilter filter = new IntentFilter();
|
||||
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
|
||||
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
|
||||
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
|
||||
filter.addAction("cn.rrg.devices.usb_attach_acr");
|
||||
mReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
final String _action = intent.getAction();
|
||||
if (_action == null) return;
|
||||
switch (_action) {
|
||||
//在设备插入的时候初始化
|
||||
case UsbManager.ACTION_USB_DEVICE_ATTACHED:
|
||||
case "cn.rrg.devices.usb_attach_acr": {
|
||||
if (init(context)) {
|
||||
callback.onAttach("ACR_122");
|
||||
} else {
|
||||
Log.d(LOG_TAG, "init failed!");
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case UsbManager.ACTION_USB_DEVICE_DETACHED:
|
||||
callback.onDetach("ACR_122");
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
try {
|
||||
//注册广播事件
|
||||
context.registerReceiver(mReceiver, filter);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
//将标志置为true,避免重复注册!
|
||||
isRegister = true;
|
||||
mUsbManger = (UsbManager) mContext.getSystemService(Context.USB_SERVICE);
|
||||
// register driver
|
||||
register1();
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -263,13 +294,7 @@ public class UsbAcr122Raw implements DriverInterface<String, UsbManager> {
|
||||
|
||||
@Override
|
||||
public void unregister(Context context) {
|
||||
if (isRegister) {
|
||||
try {
|
||||
context.unregisterReceiver(mReceiver);
|
||||
isRegister = false;
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
unRegister();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package cn.rrg.com;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
@@ -19,18 +20,25 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
import cn.dxl.common.util.AppUtil;
|
||||
|
||||
/*
|
||||
* Usb 2 uart Serial implements
|
||||
*/
|
||||
public class UsbSerialControl extends ContextHandle implements DriverInterface<String, UsbManager> {
|
||||
|
||||
// Application context, is global.
|
||||
@SuppressLint("StaticFieldLeak")
|
||||
private static final Context mContext = AppUtil.getInstance().getApp();
|
||||
//日志标签
|
||||
private static final String LOG_TAG = UsbSerialControl.class.getSimpleName();
|
||||
private static final int UNIQUE_ID = 0x04;
|
||||
//广播名称
|
||||
private static final String USB_PERMISSION_ACTION = "cn.rrg.nfctools.UsbSerialPer";
|
||||
public static final String ACTION_BROADCAST = "com.rrg.devices.usb_attach_uart";
|
||||
//权限请求广播!
|
||||
private static final String ACTION_PERMISSION = "com.rrg.devices.usb_permission_uart";
|
||||
//设备名称!
|
||||
private static final String usbName = "Usb2UartSerialDevice";
|
||||
public static final String NAME_DRIVER_USB_UART = "OTGToUartSerial(OTG转串口)";
|
||||
//串口对象
|
||||
private static UsbSerialDevice mPort = null;
|
||||
//单例模式
|
||||
@@ -38,11 +46,74 @@ public class UsbSerialControl extends ContextHandle implements DriverInterface<S
|
||||
//回调接口
|
||||
private static DevCallback<String> mCallback = null;
|
||||
//广播接收,由于是单例,因此实际上广播接收也可以设置为单例!
|
||||
private static BroadcastReceiver usbReceiver = null;
|
||||
private static BroadcastReceiver usbReceiver;
|
||||
//注册状态
|
||||
private static boolean isRegister = false;
|
||||
//轮询队列
|
||||
private static final Queue<Byte> recvBufQueue = new LinkedList<>();
|
||||
//广播过滤!
|
||||
private static IntentFilter filter = new IntentFilter();
|
||||
|
||||
static {
|
||||
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
|
||||
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
|
||||
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
|
||||
filter.addAction(ACTION_BROADCAST);
|
||||
filter.addAction(ACTION_PERMISSION);
|
||||
usbReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
//取出广播的意图
|
||||
String action = intent.getAction();
|
||||
|
||||
if (action != null) {
|
||||
//在申请权限的时候如果成功那么应当进行设备的初始化
|
||||
if (action.equals(ACTION_PERMISSION)) {
|
||||
//get permission success
|
||||
if (initUsbSerial(context)) {
|
||||
//初始化成功则回调串口设备加入方法
|
||||
mCallback.onAttach(NAME_DRIVER_USB_UART);
|
||||
} else {
|
||||
//不成则打印到LOG
|
||||
Log.e(LOG_TAG, "NAME_DRIVER_USB_UART: no usb permission!");
|
||||
}
|
||||
}
|
||||
|
||||
//对比意图,根据意图做出回调选择
|
||||
if (action.equals(UsbManager.ACTION_USB_ACCESSORY_ATTACHED) ||
|
||||
action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED) ||
|
||||
action.equals(ACTION_BROADCAST)) {
|
||||
Log.d(LOG_TAG, "收到UsbSerial设备寻找的广播!");
|
||||
if (mCallback != null) {
|
||||
if (initUsbSerial(context)) {
|
||||
//初始化成功则回调串口设备加入方法
|
||||
mCallback.onAttach(NAME_DRIVER_USB_UART);
|
||||
} else {
|
||||
//不成则打印到LOG
|
||||
//Log.e(LOG_TAG, "no usb permission!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//在设备移除时应当释放USB设备
|
||||
if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
|
||||
//判断并且释放USB串口
|
||||
if (mThiz != null) {
|
||||
try {
|
||||
mThiz.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
//回调设备移除接口
|
||||
if (mPort != null)
|
||||
if (mCallback != null)
|
||||
mCallback.onDetach(NAME_DRIVER_USB_UART);
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/*私有化构造方法,懒汉单例模式*/
|
||||
private UsbSerialControl() {
|
||||
@@ -62,9 +133,10 @@ public class UsbSerialControl extends ContextHandle implements DriverInterface<S
|
||||
}
|
||||
|
||||
//串口备初始化函数
|
||||
private boolean initUsbSerial(Context context) {
|
||||
private static boolean initUsbSerial(Context context) {
|
||||
//得到Usb管理器
|
||||
UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
|
||||
if (usbManager == null) return false;
|
||||
//尝试取出所有可用的列表
|
||||
if (usbManager.getDeviceList() == null || usbManager.getDeviceList().size() <= 0) {
|
||||
Log.d(LOG_TAG, "initUsbSerial() 未发现设备!");
|
||||
@@ -82,16 +154,14 @@ public class UsbSerialControl extends ContextHandle implements DriverInterface<S
|
||||
//如果对于这个设备没有权限!
|
||||
if (!usbManager.hasPermission(usbDevice)) {
|
||||
//发送广播申请权限
|
||||
PendingIntent intent =
|
||||
PendingIntent.getBroadcast(context,
|
||||
0, new Intent(USB_PERMISSION_ACTION), 0);
|
||||
PendingIntent intent = PendingIntent.getBroadcast(context, 0, new Intent(ACTION_PERMISSION), 0);
|
||||
//Log.d(LOG_TAG, "尝试获得USB权限!");
|
||||
usbManager.requestPermission(usbDevice, intent);
|
||||
//当没有权限的时候应当直接返回
|
||||
return false;
|
||||
}
|
||||
//一切正常返回true!
|
||||
return connect("dxl");
|
||||
return connect1("dxl");
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -198,77 +268,38 @@ public class UsbSerialControl extends ContextHandle implements DriverInterface<S
|
||||
@Override
|
||||
public void register(Context context, DevCallback<String> callback) {
|
||||
mCallback = callback;
|
||||
if (isRegister) return;
|
||||
IntentFilter filter = new IntentFilter(USB_PERMISSION_ACTION);
|
||||
filter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
|
||||
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
|
||||
filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
|
||||
filter.addAction("cn.rrg.devices.usb_attach_uart");
|
||||
usbReceiver = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
Log.d(LOG_TAG, "收到UsbSerial设备寻找的广播!");
|
||||
//取到广播的意图
|
||||
String action = intent.getAction();
|
||||
//对比意图,根据意图做出回调选择
|
||||
if (action.equals(UsbManager.ACTION_USB_ACCESSORY_ATTACHED) ||
|
||||
action.equals(UsbManager.ACTION_USB_DEVICE_ATTACHED) ||
|
||||
action.equals("cn.rrg.devices.usb_attach_uart")) {
|
||||
if (mCallback != null) {
|
||||
if (initUsbSerial(context)) {
|
||||
//初始化成功则回调串口设备加入方法
|
||||
mCallback.onAttach(usbName);
|
||||
} else {
|
||||
//不成则打印到LOG
|
||||
//Log.e(LOG_TAG, "no usb permission!");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//在申请权限的时候如果成功那么应当进行设备的初始化
|
||||
if (USB_PERMISSION_ACTION.equals(action)) {
|
||||
//get permission success
|
||||
if (initUsbSerial(context)) {
|
||||
//初始化成功则回调串口设备加入方法
|
||||
mCallback.onAttach(usbName);
|
||||
} else {
|
||||
//不成则打印到LOG
|
||||
//Log.e(LOG_TAG, "no usb permission!");
|
||||
}
|
||||
}
|
||||
|
||||
//在设备移除时应当释放USB设备
|
||||
if (action.equals(UsbManager.ACTION_USB_DEVICE_DETACHED)) {
|
||||
//判断并且释放USB串口
|
||||
if (mThiz != null) {
|
||||
try {
|
||||
mThiz.close();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
//回调设备移除接口
|
||||
if (mPort != null)
|
||||
if (mCallback != null)
|
||||
mCallback.onDetach(usbName);
|
||||
}
|
||||
}
|
||||
};
|
||||
try {
|
||||
context.registerReceiver(usbReceiver, filter);
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
isRegister = true;
|
||||
register1();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean connect(String t) {
|
||||
private void register1() {
|
||||
if (!isRegister) {
|
||||
unRegister();
|
||||
try {
|
||||
mContext.registerReceiver(usbReceiver, filter);
|
||||
isRegister = true;
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void unRegister() {
|
||||
if (isRegister) {
|
||||
try {
|
||||
mContext.unregisterReceiver(usbReceiver);
|
||||
isRegister = false;
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean connect1(String addr) {
|
||||
if (mPort != null) {
|
||||
mPort.close();
|
||||
mPort = null;
|
||||
}
|
||||
//得到Usb管理器
|
||||
UsbManager usbManager = (UsbManager) getContext().getSystemService(Context.USB_SERVICE);
|
||||
UsbManager usbManager = (UsbManager) get().getContext().getSystemService(Context.USB_SERVICE);
|
||||
if (usbManager == null) return false;
|
||||
//迭代集合里面的设备对象
|
||||
List<UsbDevice> devList = new ArrayList<>(usbManager.getDeviceList().values());
|
||||
//取出第一个USB对象
|
||||
@@ -278,7 +309,7 @@ public class UsbSerialControl extends ContextHandle implements DriverInterface<S
|
||||
//判断是否非空,为空证明没有权限
|
||||
if (connection == null) {
|
||||
//发送广播申请权限
|
||||
PendingIntent intent = PendingIntent.getBroadcast(getContext(), 0, new Intent(USB_PERMISSION_ACTION), 0);
|
||||
PendingIntent intent = PendingIntent.getBroadcast(get().getContext(), 0, new Intent(ACTION_PERMISSION), 0);
|
||||
//Log.d(LOG_TAG, "尝试获得USB权限!");
|
||||
usbManager.requestPermission(usbDevice, intent);
|
||||
//当没有权限的时候应当直接返回
|
||||
@@ -316,6 +347,11 @@ public class UsbSerialControl extends ContextHandle implements DriverInterface<S
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean connect(String t) {
|
||||
return connect1(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UsbManager getAdapter() {
|
||||
return (UsbManager) getContext().getSystemService(Context.USB_SERVICE);
|
||||
@@ -339,12 +375,6 @@ public class UsbSerialControl extends ContextHandle implements DriverInterface<S
|
||||
@Override
|
||||
public void unregister(Context context) {
|
||||
//广播解注册
|
||||
if (isRegister) {
|
||||
try {
|
||||
context.unregisterReceiver(usbReceiver);
|
||||
isRegister = false;
|
||||
} catch (Exception ignored) {
|
||||
}
|
||||
}
|
||||
unRegister();
|
||||
}
|
||||
}
|
||||
|
||||
Binary file not shown.
@@ -1,5 +0,0 @@
|
||||
# ninja log v5
|
||||
1 341 591194423 CMakeFiles/crapto1.dir/crapto1.c.o 2ae20ff9d3de30c2
|
||||
4 356 591194423 CMakeFiles/crapto1.dir/crypto1.c.o 208a3418496fca92
|
||||
6 485 591194424 CMakeFiles/crapto1.dir/main.c.o 1902701a56f595ff
|
||||
485 811 591194424 D:/Developer/AndroidStudioProject/RFID-Tools/crapto1/build/intermediates/cmake/debug/obj/x86/libcrapto1.so ac668822d378730a
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,7 +0,0 @@
|
||||
Executable : C:\Users\DXL\android-sdk\cmake\3.10.2.4988404\bin\ninja.exe
|
||||
arguments :
|
||||
-C
|
||||
D:\Developer\AndroidStudioProject\RFID-Tools\crapto1\.cxx\cmake\debug\x86
|
||||
crapto1
|
||||
jvmArgs :
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
ninja: Entering directory `D:\Developer\AndroidStudioProject\RFID-Tools\crapto1\.cxx\cmake\debug\x86'
|
||||
[1/4] Building C object CMakeFiles/crapto1.dir/crapto1.c.o
|
||||
D:/Developer/AndroidStudioProject/RFID-Tools/crapto1/src/main/cpp/crapto1.c:103:47: warning: '&' within '^' [-Wbitwise-op-parentheses]
|
||||
o_head[1] |= parity(*e_head ^ *o_head & LF_POLY_ODD);
|
||||
~ ~~~~~~~~^~~~~~~~~~~~~
|
||||
D:/Developer/AndroidStudioProject/RFID-Tools/crapto1/src/main/cpp/crapto1.c:103:47: note: place parentheses around the '&' expression to silence this warning
|
||||
o_head[1] |= parity(*e_head ^ *o_head & LF_POLY_ODD);
|
||||
~~~~~~~~^~~~~~~~~~~~~
|
||||
D:/Developer/AndroidStudioProject/RFID-Tools/crapto1/src/main/cpp/crapto1.c:119:19: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
|
||||
if (e = recover(o_tail--, o, oks, e_tail--, e, eks, rem))
|
||||
~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
D:/Developer/AndroidStudioProject/RFID-Tools/crapto1/src/main/cpp/crapto1.c:119:19: note: place parentheses around the assignment to silence this warning
|
||||
if (e = recover(o_tail--, o, oks, e_tail--, e, eks, rem))
|
||||
^
|
||||
( )
|
||||
D:/Developer/AndroidStudioProject/RFID-Tools/crapto1/src/main/cpp/crapto1.c:119:19: note: use '==' to turn this assignment into an equality comparison
|
||||
if (e = recover(o_tail--, o, oks, e_tail--, e, eks, rem))
|
||||
^
|
||||
==
|
||||
D:/Developer/AndroidStudioProject/RFID-Tools/crapto1/src/main/cpp/crapto1.c:213:41: warning: '&' within '^' [-Wbitwise-op-parentheses]
|
||||
cmb = cmb >> 1 ^ -(cmb & 1) & MAGIX2;
|
||||
~ ~~~~~~~~~~~^~~~~~~~
|
||||
D:/Developer/AndroidStudioProject/RFID-Tools/crapto1/src/main/cpp/crapto1.c:213:41: note: place parentheses around the '&' expression to silence this warning
|
||||
cmb = cmb >> 1 ^ -(cmb & 1) & MAGIX2;
|
||||
~~~~~~~~~~~^~~~~~~~
|
||||
3 warnings generated.
|
||||
[2/4] Building C object CMakeFiles/crapto1.dir/crypto1.c.o
|
||||
[3/4] Building C object CMakeFiles/crapto1.dir/main.c.o
|
||||
[4/4] Linking C shared library D:\Developer\AndroidStudioProject\RFID-Tools\crapto1\build\intermediates\cmake\debug\obj\x86\libcrapto1.so
|
||||
@@ -5,7 +5,43 @@
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "JSON \u0027D:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\.cxx\\cmake\\debug\\x86\\android_gradle_build.json\u0027 was up-to-date"
|
||||
"message": "Trying to locate CMake in local SDK repository."
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "- CMake found in SDK at \u0027C:\\Users\\DXL\\android-sdk\\cmake\\3.10.2.4988404\u0027 had version \u00273.10.2\u0027"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "rebuilding JSON D:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\.cxx\\cmake\\debug\\x86\\android_gradle_build.json due to:"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "- force flag, will remove stale json folder"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "removing stale contents from \u0027D:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\.cxx\\cmake\\debug\\x86\u0027"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "created folder \u0027D:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\.cxx\\cmake\\debug\\x86\u0027"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "executing cmake Executable : C:\\Users\\DXL\\android-sdk\\cmake\\3.10.2.4988404\\bin\\cmake.exe\narguments : \n-HD:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\src\\main\\cpp\n-BD:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\.cxx\\cmake\\debug\\x86\n-DANDROID_ABI\u003dx86\n-DANDROID_PLATFORM\u003dandroid-18\n-DCMAKE_LIBRARY_OUTPUT_DIRECTORY\u003dD:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\build\\intermediates\\cmake\\debug\\obj\\x86\n-DCMAKE_BUILD_TYPE\u003dDebug\n-DANDROID_NDK\u003dC:\\Users\\DXL\\android-sdk\\ndk-bundle\n-DCMAKE_SYSTEM_NAME\u003dAndroid\n-DCMAKE_ANDROID_ARCH_ABI\u003dx86\n-DCMAKE_SYSTEM_VERSION\u003d18\n-DCMAKE_EXPORT_COMPILE_COMMANDS\u003dON\n-DCMAKE_ANDROID_NDK\u003dC:\\Users\\DXL\\android-sdk\\ndk-bundle\n-DCMAKE_TOOLCHAIN_FILE\u003dC:\\Users\\DXL\\android-sdk\\ndk-bundle\\build\\cmake\\android.toolchain.cmake\n-G Ninja\n-DCMAKE_MAKE_PROGRAM\u003dC:\\Users\\DXL\\android-sdk\\cmake\\3.10.2.4988404\\bin\\ninja.exe\n-DANDROID_STL\u003dc++_static\njvmArgs : \n\n"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "done executing cmake"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "write build output D:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\.cxx\\cmake\\debug\\x86\\build_output.txt"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
"message": "write command file D:\\Developer\\AndroidStudioProject\\RFID-Tools\\crapto1\\.cxx\\cmake\\debug\\x86\\build_command.txt"
|
||||
},
|
||||
{
|
||||
"level": "INFO",
|
||||
|
||||
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user