Устройство подключенное через переходник USART-USB отправляет на комп данные, программа на компе принимает пакет данных (при помощи библиотеки JSSC) в виде массива байт. Байты массива - это заранее определенные параметры, например "Состояние устройства", "Серийный номер" и т.п. соответственно нужна какая-то константная структура, реализующая таблицу соответствий - какой байт каким параметром является. Плюс нужна какая-то константная структура для интерпретации значения параметра к виду, подходящему для вывода в GUI, типа "FF" -> "IDLE", "FE" -> "SLEEP" и т.п. Причем таких состояний десятки и параметров десятки. Cейчас начал делать так:
public class Packet {
public static String Partnum;
public static String Version;
public static String State;
public static String LQI;
public static String RSSI;
public static String Freqest;
public static String RXfifo;
public static String VCO_VC_DAC;
public static String WOR;
public static void packetHandler(String[] arg) {
Partnum = "0x"+arg[0];
Version = "0x"+arg[1];
// State
if (arg[2].equals("0D")) {
State = "RX";
}
else if (arg[2].equals("01")) {
State = "IDLE";
}
else if (arg[2].equals("11")) {
State = "RXFIFO_OVERFLOW";
}
else {
State = arg[2];
}
LQI = arg[3];
Freqest = arg[4];
RSSI = arg[5];
RXfifo = arg[6];
VCO_VC_DAC = arg[7];
WOR = arg[8]+" "+arg[9];
}
}
Оно работает, но чувствую что так не правильно и не годится для обработки больших пакетов. Да и время на обработку, даже при количестве в несколько параметров, занимает просто огромное. Как корректно разобрать и интерпретировать содержание пакета инструментами Java? Может есть какие-то примеры? то что я нашел, оно интересно https://github.com/farrellf/TelemetryViewer/tree/master/Telemetry%20Viewer , но там пакет содержит просто значения для вывода и как таковой обработки и интерпретации не требуют.
Я бы написал что-то такое:
public class Packet {
private int partNum;
private int version;
private String state;
private static boolean isRx(byte b) {
return (b==0x0d)?true:false;
}
private static boolean isIdle(byte b) {
return (b==0x01)?true:false;
}
private static boolean isOverflow(byte b) {
return (b==0x11)?true:false;
}
public void parsePacketHandler(byte[] args) {
this.partNum=args[0];
this.version=args[1];
if(isIdle(args[2))
this.state="idle";
else if(isRx(args[2]))
this.state="rx";
else if(isOverflow(args[2]))
this.state="overflow"
else
this.state=""+args[2];
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Столкнулся с проблемой некорректного отображения русских символовНе знаю в чём проблема
Добрый деньИзвестно, что хэшкод для строк кэшируется в поле hash в момент первого вызова методы hashCode(), и для последующих вызовов не рассчитывается
Что нужно дописать в код, чтобы текст обновлялся на кнопке раз в секунду, или ткните где искать инфу, заранее благодарю
Ломаю голову второй деньНеобходимо программно менять цвет у элементов ExpListView (Не родителей)