Merge pull request #6 from xianglin1998/master

device connect opt
This commit is contained in:
DXL
2019-09-27 16:22:44 +08:00
committed by GitHub
1457 changed files with 848 additions and 3658 deletions
+2 -13
View File
@@ -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.
-5
View File
@@ -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
@@ -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