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