From c7376f8d1091b70597ba4430a281496b585b386e Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期四, 23 十月 2025 21:58:26 +0800
Subject: [PATCH] 钥匙柜

---
 keyCabinet-android/app/src/main/java/com/doumee/keyCabinet/utils/i485/SportUtils.java |  185 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 185 insertions(+), 0 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..d68579e 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
@@ -24,6 +24,191 @@
                 }
             }
         }
+        if(serialPaths.size()==0){
+            serialPaths.add("/dev/ttyS0");
+            serialPaths.add("/dev/ttyS1");
+            serialPaths.add("/dev/ttyS2");
+            serialPaths.add("/dev/ttyS3");
+            serialPaths.add("/dev/ttyS4");
+            serialPaths.add("/dev/ttyS5");
+            serialPaths.add("/dev/ttyS6");
+            serialPaths.add("/dev/ttyS7");
+        }
         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