| | |
| | | } |
| | | } |
| | | } |
| | | 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(); |
| | | } |
| | | } |