From 8ff90d87687b6d38158809aae776b6c709d7b60a Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期四, 04 十二月 2025 12:01:41 +0800
Subject: [PATCH] 指纹钥匙柜
---
keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/i485/SportUtils.java | 191 +++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 181 insertions(+), 10 deletions(-)
diff --git a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/i485/SportUtils.java b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/i485/SportUtils.java
index 1ce6dc4..11f64e6 100644
--- a/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/i485/SportUtils.java
+++ b/keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/i485/SportUtils.java
@@ -5,25 +5,196 @@
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbInterface;
import android.hardware.usb.UsbManager;
+import android.serialport.SerialPortFinder;
import java.util.ArrayList;
import java.util.List;
public class SportUtils {
public static List<String> getSerialPortPaths(Context context) {
- UsbManager usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
- List<UsbDevice> devices = new ArrayList<>(usbManager.getDeviceList().values());
+ // 鑾峰彇鎵�鏈変覆鍙h澶囪矾寰�
+ String[] devices = new SerialPortFinder().getAllDevicesPath();
List<String> serialPaths = new ArrayList<>();
-
- for (UsbDevice device : devices) {
- for (int i = 0; i < device.getInterfaceCount(); i++) {
- UsbInterface intf = device.getInterface(i);
- if (intf.getInterfaceClass() == UsbConstants.USB_CLASS_CDC_DATA) {
- serialPaths.add(device.getDeviceName());
- break;
- }
+ if(devices!=null){
+ for(String key:devices){
+ serialPaths.add(key);
}
}
return serialPaths;
}
+
+ /**
+ * 瀛楄妭鏁扮粍杞�16杩涘埗
+ * @param bytes 闇�瑕佽浆鎹㈢殑byte鏁扮粍
+ * @return 杞崲鍚庣殑Hex瀛楃涓�
+ */
+ public static String bytesToHexSimple(byte[] bytes) {
+ StringBuilder sb = new StringBuilder();
+ for (byte b : bytes) {
+ sb.append(String.format("%02x", b & 0xFF));
+ }
+ return sb.toString();
+ }
+
+ /**
+ * hex瀛楃涓茶浆byte鏁扮粍
+ * @param inHex 寰呰浆鎹㈢殑Hex瀛楃涓�
+ * @return 杞崲鍚庣殑byte鏁扮粍缁撴灉
+ */
+ public static byte[] hexToByteArray(String inHex){
+ int hexlen = inHex.length();
+ byte[] result;
+ if (hexlen % 2 == 1){
+ //濂囨暟
+ hexlen++;
+ result = new byte[(hexlen/2)];
+ inHex="0"+inHex;
+ }else {
+ //鍋舵暟
+ result = new byte[(hexlen/2)];
+ }
+ int j=0;
+ for (int i = 0; i < hexlen; i+=2){
+ result[j]=hexToByte(inHex.substring(i,i+2));
+ j++;
+ }
+ return result;
+ }
+
+ /**
+ * 鏍¢獙鏁版嵁鏄惁姝g‘
+ * @param data
+ * @return
+ */
+ public static boolean checkData(String data){
+ if(data.length()>2){
+ String d = data.substring(0,data.length()-2);
+ String hz = data.substring(data.length()-2,data.length());
+ if(hz.equals(SportUtils.getBCC(d))){
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Hex瀛楃涓茶浆byte
+ * @param inHex 寰呰浆鎹㈢殑Hex瀛楃涓�
+ * @return 杞崲鍚庣殑byte
+ */
+ public static byte hexToByte(String inHex){
+ return (byte)Integer.parseInt(inHex,16);
+ }
+
+ public static String getBCC(String hex) {
+ int i = 0, j = 0;
+ int len = hex.length();
+ short inb[] = new short[len];
+ for (i = 0; i < len; i++) {
+ inb[i] = charToHex(hex.charAt(i)); //灏哠tring閲岀殑姣忎竴涓猚har杞崲涓篐ex
+ }
+
+ for (i = 0; i < len; i++) { //灏嗘瘡涓や釜Hex鍚堝苟鎴愪竴涓猙yte
+ inb[j] = (byte) (((inb[i] << 4) & 0x00f0) | ((inb[i + 1]) & 0x000f));
+ i++;
+ j++;
+ }
+ byte temp = 0x00; //鏍¢獙鍊�
+ for (i = 0; i < len / 2; i++) { //寮傛垨
+ temp ^= inb[i];
+ }
+ byte[] bytes = new byte[1];
+ bytes[0] = temp;
+ return byteToStr(bytes, bytes.length);
+ }
+ /**
+ * 鎺ユ敹鍒扮殑瀛楄妭鏁扮粍杞崲16杩涘埗瀛楃涓�
+ */
+ public static String byteToStr(byte[] b, int size) {
+ String ret = "";
+ for (int i = 0; i < size; i++) {
+ String hex = Integer.toHexString(b[i] & 0xFF);
+ if (hex.length() == 1) {
+ hex = '0' + hex;
+ }
+ ret += hex.toUpperCase();
+ }
+ return ret;
+ }
+ public static short charToHex(char x) { //灏嗗崟涓猚har杞崲涓篐ex
+ short result = 0;
+ switch (x) {
+ case 'a':
+ result = 10;
+ break;
+ case 'b':
+ result = 11;
+ break;
+ case 'c':
+ result = 12;
+ break;
+ case 'd':
+ result = 13;
+ break;
+ case 'e':
+ result = 14;
+ break;
+ case 'f':
+ result = 15;
+ break;
+ case 'A':
+ result = 10;
+ break;
+ case 'B':
+ result = 11;
+ break;
+ case 'C':
+ result = 12;
+ break;
+ case 'D':
+ result = 13;
+ break;
+ case 'E':
+ result = 14;
+ break;
+ case 'F':
+ result = 15;
+ break;
+ default:
+ result = (short) Character.getNumericValue(x);
+ break;
+ }
+ return result;
+ }
+
+ public static String intToHex(int n) {
+ //StringBuffer s = new StringBuffer();
+ StringBuilder sb = new StringBuilder(2);
+ String a;
+ char []b = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
+ while(n != 0){
+ sb = sb.append(b[n%16]);
+ n = n/16;
+ }
+ if(sb.length()==1){
+ sb.append("0");
+ }
+ a = sb.reverse().toString();
+ return a;
+ }
+
+ /**
+ * 16杩涘埗杞�2杩涘埗
+ * @param hexString
+ * @return
+ */
+ public static String hexToBinary(String hexString) {
+ StringBuilder binary = new StringBuilder();
+ for (char c : hexString.toCharArray()) {
+ int value = Character.digit(c, 16);
+ String bits = String.format("%4s", Integer.toBinaryString(value)).replace(' ', '0');
+ binary.append(bits);
+ }
+ return binary.toString();
+ }
}
--
Gitblit v1.9.3