Конвертировать данные клавиатуры USB из байтового массива в строку USB4Java - PullRequest
1 голос
/ 28 апреля 2019

Я читаю ввод с клавиатуры USB (сканер QR-кода), используя usb4java.

Мой фрагмент кода выглядит так:

byte[] data = new byte[16];
UsbPipe usbPipe = usbEndpoint.getUsbPipe();
if (usbPipe != null) {
    if (!usbPipe.isOpen()) {
        usbPipe.open();
    }
    if (usbPipe.isOpen()) {
        UsbIrp usbIrp = usbPipe.createUsbIrp();
        usbIrp.setData(data);

У меня есть два вопроса:

1] При нажатии A данные массива байтов равны 2,0,0,0,0,0,0,0,2,0,4,0,0,0,0,0
При нажатии AB данные байтовых массивов составляют 2,0,0,0,0,0,0,0,2,0,4,0,0,0,0,0,2,0,5,0,0, 0,0,0

Как преобразовать его в символ в Java? то есть получить A или AB после преобразования.

2] В настоящее время я передаю фиксированный размер байтового массива в приведенном выше фрагменте кода. Например, если я ожидаю 1 символ, я передаю 16 как размер байтового массива, для 2 символов 24 как размер и так далее. Есть ли другое элегантное решение для придания ему динамики?

PS: Мой фрагментный преобразователь байтового массива:

StringBuffer sb = new StringBuffer();
for (byte b : data) {
    sb.append(b);
    sb.append(",");
}
String byteString = sb.toString();
return byteString;

Спасибо за любую помощь

РЕДАКТИРОВАТЬ 1: Полный исходный код здесь: http://tpcg.io/zt3WfM

1 Ответ

3 голосов
/ 02 мая 2019

На основании документации формат должен быть:

22 00 04 00 00 00 00 00
Offset  Size    Description
0       Byte    Modifier keys status.
1       Byte    Reserved field.
2       Byte    Keypress #1.
3       Byte    Keypress #2.
4       Byte    Keypress #3.
5       Byte    Keypress #4.
6       Byte    Keypress #5.
7       Byte    Keypress #6. 

На основе ASCII-кодов

// 'A' is 0x65
byte codeA = 0x04;     // The code for A key
cahr a = 0x61 + codeA ;
byte codeX = 0x1B;     // The code for X key
char x = 0x61 + code; // x == 'X'

System.out.println(a);
System.out.println(x);

Или вы можете использовать карту (0x04, 'A')

...