|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | /** | 
|---|
|  |  |  | * 校验数据是否正确 | 
|---|
|  |  |  | * @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));   //将String里的每一个char转换为Hex | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | for (i = 0; i < len; i++) {    //将每两个Hex合并成一个byte | 
|---|
|  |  |  | 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) { //将单个char转换为Hex | 
|---|
|  |  |  | 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(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|