package dell_system; import dell55AAData.Dell55AA12HighPerf; import dell55AAData.Dell55AA12HighPerf.ParseResult; import dell55AAData.Dell55AA01Parser; import java.text.SimpleDateFormat; import java.util.Date; import java.util.ResourceBundle; /** * ¹«¹²½âÎöÆ÷£º¸ù¾Ý°üͷͳһ½âÎö 55AA01 / 55AA12 / δ֪ЭÒé * ¿É±»ÈκΠUI »òÒµÎñÀàÖ±½Óµ÷Óà */ public final class SerialPacketParser { private static final SimpleDateFormat SDF = new SimpleDateFormat("HH:mm:ss.SSS"); private SerialPacketParser() { /* ¹¤¾ßÀ࣬½ûֹʵÀý»¯ */ } /** * ½âÎöÈë¿Ú * * @param data ÍêÕû×Ö½ÚÊý×é * @param bundle ¹ú¼Ê»¯×ÊÔ´ * @param showTime ÊÇ·ñÔÚ½á¹ûǰ¼Óʱ¼ä´Á * @return ½âÎöºóµÄ¿É¶Á×Ö·û´®£¬Èô½âÎöʧ°Ü·µ»ØÌáʾ */ public static String parse(byte[] data,ResourceBundle bundle,boolean showTime) { String hex = bytesToHex(data).toUpperCase(); StringBuilder sb = new StringBuilder(); if (showTime) { sb.append('[').append(SDF.format(new Date())).append("]"); } if (hex.startsWith("55AA01")) { Dell55AA01Parser.ParseResult r = Dell55AA01Parser.parse(hex,"127.0.0.1", 0); if (r == null) { sb.append(bundle.getString("parser.invalid")).append(" 55AA01"); return sb.toString(); } String button = r.buttonPressed ? bundle.getString("yes") : bundle.getString("no"); sb.append(bundle.getString("label.sequence")).append(": ").append(r.sequenceNum).append(',') .append(bundle.getString("label.id")).append(": ").append(r.tagId).append(',') .append(bundle.getString("label.anchor_ids")).append(": ").append(r.anchorId).append(',') .append(bundle.getString("label.distances")).append(": ").append(r.distance).append(',') .append(bundle.getString("label.power")).append(": ").append(r.power).append("%,") .append(bundle.getString("status.button")).append(": ").append(button); } else if (hex.startsWith("55AA12")) { ParseResult r = Dell55AA12HighPerf.parse(hex); if (r == null) { sb.append(bundle.getString("parser.invalid")).append(" 55AA12"); return sb.toString(); } // ×é×°»ùÕ¾ÐÅÏ¢ StringBuilder ids = new StringBuilder(); StringBuilder dists = new StringBuilder(); StringBuilder powers = new StringBuilder(); for (int i = 0; i < r.anchorCount; i++) { if (i > 0) { ids.append(','); dists.append(','); powers.append(','); } ids.append(r.anchorIds[i]); dists.append(r.distances[i]); powers.append(r.anchorPowers[i]); } String button = r.sosButtonPressed ? bundle.getString("yes") : bundle.getString("no"); String stat = r.isStatic ? bundle.getString("yes") : bundle.getString("no"); String sleep = r.isSleeping ? bundle.getString("yes") : bundle.getString("no"); String vibrate = (r.vibrationState == 1) ? bundle.getString("on") : bundle.getString("off"); String uwb = r.tagRemoved ? bundle.getString("off") : bundle.getString("on"); sb.append(bundle.getString("label.id")).append(": ").append(r.tagId).append('\n') .append(bundle.getString("label.sequence")).append(": ").append(r.sequenceNum).append('\n') .append(bundle.getString("label.power")).append(": ").append(r.power).append("%\n") .append(bundle.getString("label.status")).append(": ") .append(bundle.getString("status.button")).append('[').append(button).append("], ") .append(bundle.getString("status.static")).append('[').append(stat).append("], ") .append(bundle.getString("status.sleeping")).append('[').append(sleep).append("], ") .append(bundle.getString("status.vibration")).append('[').append(vibrate).append("], ") .append(bundle.getString("status.uwb_switch")).append('[').append(uwb).append("]\n") .append(bundle.getString("label.tag_height")).append(": ").append(r.tagHeight).append('\n') .append(bundle.getString("label.anchor_count")).append(": ").append(r.anchorCount).append('\n') .append(bundle.getString("label.anchor_ids")).append(": (").append(ids).append(")\n") .append(bundle.getString("label.distances")).append(": (").append(dists).append(")\n") .append(bundle.getString("label.anchor_powers")).append(": (").append(powers).append(")\n"); } else { sb.append(bundle.getString("parser.unknown")); } sb.append("\n"); return sb.toString(); } private static String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(bytes.length * 2); for (byte b : bytes) sb.append(String.format("%02X", b)); return sb.toString(); } }