mirror of
https://github.com/RfidResearchGroup/RFIDtools.git
synced 2026-05-12 11:19:59 -07:00
2019/09/27 ver1.3.2:
1. Fixed the problem that the equipment needs to be found in the interface. 2. Fixed the problem of USB device removing the connection status that could not be updated. 3. ACU122 equipment changed its name to ACS-ACR_122U (Longjie-ACR_122U) 4. Change the name of USB_UART device to OTGToUart Serial (OTG to serial port) 5. Delete Signature File Configuration
This commit is contained in:
+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