From 3244dbd998aaed5ba13db688a5c0b85eb88e75a6 Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期五, 26 十二月 2025 11:00:12 +0800
Subject: [PATCH] 可升级200万摄像头,兼容旧摄像头,多个摄像头都可升级
---
app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java | 217 ++++++++++++++++++++++++++++++++---------------------
1 files changed, 131 insertions(+), 86 deletions(-)
diff --git a/app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java b/app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java
index 28fe7bf..02bd982 100644
--- a/app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java
+++ b/app/src/main/java/com/fwupgrade/saymanss/deviceplug/UstorageDeviceInstance.java
@@ -1,52 +1,34 @@
package com.fwupgrade.saymanss.deviceplug;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.hardware.usb.UsbAccessory;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbManager;
-import android.os.Build;
-import android.os.SystemClock;
-import android.support.annotation.RequiresApi;
+import android.text.TextUtils;
import android.util.Log;
-
-
-import com.spca.usb.CUSBListener;
-import com.spca.usb.SpcaJNI;
import java.util.ArrayList;
import java.util.HashMap;
-import java.util.concurrent.LinkedBlockingQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import static android.content.Context.USB_SERVICE;
-/**
- * Created by Wangj on 2016/10/25.
- */
public class UstorageDeviceInstance {
+ private static String TAG = UstorageDeviceInstance.class.getSimpleName();
private static UstorageDeviceInstance instance;
private static Lock mLock= new ReentrantLock();
-
public static final String ACTION_USB_PERMISSION = "wfd.action.USB_PERMISSION";
-
private UsbManager mUsbManager;
- private PendingIntent mPermissionIntent;
+ private CUSBListener mUSBListener;
+ private Context g_cotext_;
+
+ private ArrayList<CameraControlTransfer> curDevListArray;
+ public ArrayList<CameraControlTransfer> devListArray;
/** 璁惧鍙戠幇鍥炴帀 */
private IUsbDevicePlugDelegate iUsbDevicePlugDelegate;
-
-
- private UstorageDeviceInstance() {
- }
public static UstorageDeviceInstance getInstance() {
if (instance == null) {
@@ -59,87 +41,125 @@
return instance;
}
+ UstorageDeviceInstance() {
+ devListArray = new ArrayList<CameraControlTransfer>();
+ curDevListArray = new ArrayList<CameraControlTransfer>();
+ }
+
+
+ final String getUSBFSName(final CUSBListener.UsbControlBlock ctrlBlock) {
+ String result = null;
+ final String name = ctrlBlock.getDeviceName();
+ final String[] v = !TextUtils.isEmpty(name) ? name.split("/") : null;
+ if ((v != null) && (v.length > 2)) {
+ final StringBuilder sb = new StringBuilder(v[0]);
+ for (int i = 1; i < v.length - 2; i++)
+ sb.append("/").append(v[i]);
+ result = sb.toString();
+ }
+ if (TextUtils.isEmpty(result)) {
+ result = "/dev/bus/usb";
+ }
+ return result;
+ }
+
/**
* 灏濊瘯鏄惁鏈夎繛鎺ヨ澶囷紙OTG锛�
*/
- public int tryAttcheDeviceHandle(Context context, IUsbDevicePlugDelegate iUsbDevicePlugDelegate) {
- Log.d("fwup","tryAttcheDeviceHandle: ");
+ public void tryAttcheDeviceHandle(Context context, IUsbDevicePlugDelegate iUsbDevicePlugDelegate) {
this.iUsbDevicePlugDelegate = iUsbDevicePlugDelegate;
mUsbManager = (UsbManager) context.getSystemService(USB_SERVICE);
- /* Object deviceInfo = null;
+ devListArray.clear();
+ curDevListArray.clear();
- if (null != (deviceInfo = acceptOTGDeviceInfo(mUsbManager))) {
- //婊¤冻 鍗冲綋鍓嶅瓨鍦∣TG璁惧鎻掑叆 OTG璁惧绫诲瀷
-// initOTGDeviceModule(context, (UsbDevice) deviceInfo);
- acceptLicense(context, deviceInfo);
- }*/
+ g_cotext_ = context;
+// //鎷垮埌OTG璁惧鍒楄〃
+ HashMap<String, UsbDevice> deviceList = mUsbManager.getDeviceList();
+ Log.d("deviceList", String.valueOf(deviceList.size()));
+ for (UsbDevice usbDevice : deviceList.values()) {
+ Log.i("Start", String.valueOf(usbDevice.getProductName()));
+ Boolean find = false;
+ for (int i = 0; i < curDevListArray.size(); i++) {
+ if(usbDevice.equals(curDevListArray.get(i))){
+ find= true;
+ Log.e("ERROR", "find device");
+ Log.e("ERROR", String.valueOf(usbDevice.getDeviceClass()));
+ Log.e("ERROR", String.valueOf(usbDevice.getDeviceName()));
+ Log.e("ERROR", String.valueOf(usbDevice.getProductName()));
+ continue;
+ }
+ }
+ if(usbDevice.getDeviceClass() != 0xEF) {
+ Log.e("ERROR", "getDeviceClass!=0xEF");
+ Log.e("ERROR", String.valueOf(usbDevice.getDeviceClass()));
+ Log.e("ERROR", String.valueOf(usbDevice.getDeviceName()));
+ Log.e("ERROR", String.valueOf(usbDevice.getProductName()));
+ continue;
+ }
+ if(!find){
+// if(usbDevice.getVendorId() != 0x0581 || usbDevice.getProductId() != 0x0b20){
+// continue;
+// }
- ArrayList<UsbDevice> devices = acceptOTGDeviceInfo(mUsbManager);
- if (devices==null || devices.size()==0){
- Log.i("fwup","devices==null");
- return 1;
+
+// Log.d("usbDevice", String.valueOf(usbDevice.toString()));
+// Log.d("getDeviceSubclass", String.valueOf(usbDevice.getDeviceSubclass()));
+ Log.d("devName", usbDevice.getDeviceName());
+ Log.d("proName", usbDevice.getProductName());
+ Log.d("vid", String.valueOf(usbDevice.getVendorId()));
+ Log.d("pid", String.valueOf(usbDevice.getProductId()));
+ CameraControlTransfer infos = new CameraControlTransfer();
+ infos.dev = usbDevice;
+ infos.bPermission = false;
+ try {
+ infos.usbListener = mUSBListener;
+ mUSBListener = new CUSBListener(context, mOnDeviceConnectListener);
+ mUSBListener.register();
+ mUSBListener.requestPermission(usbDevice);
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+ curDevListArray.add(infos);
+ Log.d(TAG, "curDevListArraySize: " + curDevListArray.size());
+ }
}
- for (UsbDevice dev: devices) {
- acceptLicense(context, dev);
- }
- return 0;
}
- public int tryAgain(Context context){
- mUsbManager = (UsbManager) context.getSystemService(USB_SERVICE);
-
- /* Object deviceInfo = null;
-
- if (null != (deviceInfo = acceptOTGDeviceInfo(mUsbManager))) {
- //婊¤冻 鍗冲綋鍓嶅瓨鍦∣TG璁惧鎻掑叆 OTG璁惧绫诲瀷
-// initOTGDeviceModule(context, (UsbDevice) deviceInfo);
- acceptLicense(context, deviceInfo);
- }*/
-
- ArrayList<UsbDevice> devices = acceptOTGDeviceInfo(mUsbManager);
- if (devices==null || devices.size()==0){
- Log.i("fwup","tryAgain devices==null");
- return 1;
+ public boolean startAcceptLicense(int position, Context context, Object deviceInfo) {
+ if(devListArray.get(position).usbListener.hasPermission((UsbDevice)deviceInfo)){
+ return true;
}
- for (UsbDevice dev: devices) {
- acceptLicense(context, dev);
+ try {
+ devListArray.get(position).usbListener.requestPermission((UsbDevice) deviceInfo);
+ mUsbManager.openDevice((UsbDevice) deviceInfo);
+ } catch (Exception e) {
+ e.printStackTrace();
}
- return 0;
+ return false;
}
+
//<<<--------------------------------------- Usb 鐩稿叧澶勭悊--------------------------------------------
/**
* 鑾峰彇绗﹀悎淇℃伅鐨凮TG璁惧
* @param usbManager
*/
- public ArrayList<UsbDevice> acceptOTGDeviceInfo(UsbManager usbManager) {
-// UsbDevice device = null;
- ArrayList<UsbDevice> devices = new ArrayList<>();
+ private UsbDevice acceptOTGDeviceInfo(Context context, UsbManager usbManager) {
+ UsbDevice device = null;
+
//鎷垮埌OTG璁惧鍒楄〃
HashMap<String, UsbDevice> deviceList = usbManager.getDeviceList();
- if (deviceList==null || deviceList.size()==0){
- Log.d("fwup","deviceList涓虹┖ ");
- }
+
for (UsbDevice usbDevice : deviceList.values()) {
- int productId = usbDevice.getProductId();
-// if (productId != 36940) {
-// device = usbDevice; // 鍙互澧炲姞鍘傚晢 鐗堟湰绛夊垽鏂�
-// break;
-// }
int vendorId = usbDevice.getVendorId();
- Log.d("fwup","vendorId: " + vendorId);
- if (vendorId == 3141) {
-// device = usbDevice; // 鍙互澧炲姞鍘傚晢 鐗堟湰绛夊垽鏂�
- devices.add(usbDevice);
+ if (vendorId == 0x0c45) {
+ device = usbDevice;
+ break;
}
}
- return devices;
+ return device;
}
-
-
- CUSBListener mUSBListener;
- private SpcaJNI mSpcaJNI;
private void acceptLicense(Context context, Object deviceInfo) {
try {
@@ -149,16 +169,16 @@
UsbDevice usbDevice = (UsbDevice) deviceInfo;
- Log.d("fwup", "acceptLicense:" + usbDevice.getDeviceName());
// request permission [frank.chang 7/25/2018]
mUSBListener.requestPermission((UsbDevice)usbDevice);
// open the device [frank.chang 7/25/2018]
-// mUsbManager.openDevice((UsbDevice)usbDevice);
+ mUsbManager.openDevice((UsbDevice)usbDevice);
} catch (Exception e) {
e.printStackTrace();
}
}
+
// implement OnDeviceConnectListener
private final CUSBListener.OnDeviceConnectListener mOnDeviceConnectListener = new CUSBListener.OnDeviceConnectListener() {
@@ -169,23 +189,48 @@
@Override
public void onConnect(final UsbDevice device, final CUSBListener.UsbControlBlock ctrlBlock, final boolean createNew) {
- iUsbDevicePlugDelegate.permissionFinish(true, ctrlBlock);
+ for (int i = 0; i < curDevListArray.size(); i++) {
+ if(device.equals(curDevListArray.get(i).dev)){
+ Log.d(TAG, "Get Permission:" + device.getDeviceName());
+ CameraControlTransfer cct = curDevListArray.get(i);
+ cct.bPermission = true;
+ cct.connection = ctrlBlock.mConnection;
+ String fsName = new String();
+ fsName = ctrlBlock.getDeviceName();;
+ cct.usbFSName = fsName;
+ cct.fd = ctrlBlock.getFileDescriptor();
+ mUsbManager.openDevice(device);
+ devListArray.add(cct);
+// int a = ctrlBlock.getBusNum();
+// int b = ctrlBlock.getDevNum();
+
+ iUsbDevicePlugDelegate.permissionFinish(true, ctrlBlock, cct);
+ break;
+ }
+ }
+// iUsbDevicePlugDelegate.permissionFinish(true, ctrlBlock);
}
@Override
public void onDisconnect(final UsbDevice device, final CUSBListener.UsbControlBlock ctrlBlock) {
- if (mSpcaJNI != null) {
- mSpcaJNI.close();
- }
+
}
@Override
public void onDettach(final UsbDevice device) {
+ for (int i = 0; i < devListArray.size(); i++) {
+ if(device.equals(device)){
+ devListArray.remove(i);
+ break;
+ }
+ }
iUsbDevicePlugDelegate.usbDeviceDetached();
}
@Override
public void onCancel() {
+
}
};
-}
+
+}
\ No newline at end of file
--
Gitblit v1.8.0