SDL中文论坛
标题:
kOS:USB
[打印本页]
作者:
ancientcc
时间:
2019-5-30 20:11
标题:
kOS:USB
一、获得访问usb设备的句柄
UsbManager mUsbManager;
UsbDevice mDevice;
复制代码
1.1)mUsbManager = (UsbManager)getSystemService(Context.USB_SERVICE);
1.2)mUsbManager.getDeviceList()得到设备列表,UsbDevice表示当中的一个设备。UsbDevice中有vid、pid字段,app需预先知道你想操作设备的vid、pid,当一致时得到一个device,这个device就是此次操作这设备的句柄。
1.3) 向系统请求操作该device设备的权限。
Intent intent = new Intent(ACTION_USB_PERMISSION);
PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
mUsbManager.requestPermission(device, mPermissionIntent);
复制代码
device就是你想操作的UsbDevice,以上3条语句的作用是请求权限,执行它们之前需先执行以下代码,用于向系统注册个广播接收器。
IntentFilter filter = new IntentFilter();
filter.addAction(ACTION_USB_PERMISSION);
filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
registerReceiver(mUsbReceiver, filter);
复制代码
上面都用到了一个字符串常量ACTION_USB_PERMISSION,它不是Android内定,是app自定义。
String ACTION_USB_PERMISSION = "com.Routon.HIDTest.USB_PERMISSION"
复制代码
registerReceiver是app需自写的BroadcastReceiver。
private BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (ACTION_USB_PERMISSION.equals(action)) {
UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
// 设备已授权。可以访问
mDevice = device; // mDeivce是app定义的变量,此至得到了操作该设备要用到的句柄。
} else {
// 设备未授权。不能访问
}
}
}
}
复制代码
二、读数据
三、写数据
四、关闭设备句柄
作者:
ancientcc
时间:
2019-5-30 20:16
标题:
访问USB身份证模块
本帖最后由 ancientcc 于 2019-5-30 20:18 编辑
1、mHIDDev.GetSamStaus();
{0, 3, 17, -1, -19}
2、ret = mHIDDev.GetSamId(samIDInfo);
{0, 3, 18, -1, -18}
3、ret = mHIDDev.Authenticate();
public int Authenticate() {
byte[] inn = new byte[4];
byte[] sn = new byte[8];
return this.findIDCard(inn) < 0?-1:(this.selectIDCard(sn) < 0?-2:0);
}
复制代码
ret >=0 时表示找到卡
4、ReadBaseFPMsg
sIDInfo = mHIDDev.new SecondIDInfo();
byte[] fingerPrint = new byte[1024];
ret = mHIDDev.ReadBaseFPMsg(sIDInfo, fingerPrint);
复制代码
读取身份证数据。在selectIDCard和ReadBaseFPMsg之间挪开身份证时,ReadBaseFPMsg就可能返回失败。得到的sIDInfo保存着读到的身份证
5、峰鸣。有些身份证模块自带
ret = mHIDDev.BeepLed(true, true, 500);
欢迎光临 SDL中文论坛 (http://www.libsdl.cn/bbs/)
Powered by Discuz! X3.3