2016-03-09 3 views
1

У меня есть проект, в который вход будет поступать из нескольких периферийных устройств (в данном случае, сканеров штрих-кодов), и мне нужно будет знать, с какого сканера штрих-кода поступает вход, но все, что я нашел когда исследование этого происходило из-за USB-накопителя. Я использую Java на малине Pi 2.Обнаружение, из которого поступает вход USB-порта

+1

Litle bit меньше информации, которую вы предоставляете, но я думаю, что вы используете hidapi. Если так, посмотрите в этом классе: HIDDeviceInfo есть свойство interface_number, которое должно быть тем, что вы ищете. –

+0

в противном случае попытайтесь получить результат lsusb – HRgiger

ответ

0

Я предполагаю, что ваше приложение будет делать конкретные вещи с данными конкретных сканеров штрих-кода, то есть сканер 1 подключен к кассовому аппарату 1 и сканеру2 для регистрации 2 и т. Д. Далее я предполагаю, что вы используете стандартное оборудование сканера, которое идентифицирует систему Linux как клавиатуру HID .

В современных Linux-операционных системах, таких как USB-устройства Raspbian, регистрируются как узлы устройств в /dev/input/by-id. Примером клавиатуры, подключенной к моему Pi, является: /dev/input/by-id/usb-0130_0005-event-kbd.

Узлы устройств Linux HID позволяют вам непосредственно читать их так же, как вы читали бы из файла. Это означает, что вы можете сделать что-то вроде следующего, чтобы убедиться, что ваша программа Java читает от конкретного сканера штрих-кода только:

DataInputStream in = new DataInputStream(
     new FileInputStream("/dev/input/by-id/usb-0130_0005-event-kbd")); 
BufferedReader reader = new BufferedReader(new InputStreamReader(in)); 
String line; 
while((line = reader.readLine()) != null) { 
    // evaluate the EAN code which is now in line 
} 

предположение, что ваш сканер, как наша отправить возврат каретки/перевод строки после каждого успешно отсканированы код.

Мы используем аналогичный код в одном из наших приложений, чтобы убедиться, что наши пользователи не случайно сканируют коды EAN в других полях, таких как имена и поля описания. В нашем приложении сканеры штрих-кода добавляют элементы в список элементов, а ввод с клавиатуры используется исключительно для других пользователей.

При запуске приложения в методе main мы используем код, похожий на этот код, чтобы удостовериться, что клавиатура и сканеры штрих-кода различаются.

public static void main(String args[]) { 
    String keyboardInput = args[0]; 
    String barcodeInput = args[1]; 
    // see code above how to read from the particular devices 
} 

Что касается запуска приложения мы используем Linux инструменты командной строки, чтобы определить, какие устройства узлы относятся к сканеру штрих-кодов и которые к клавиатуре. В основном это комбинация lsusb и набор правил Udev, которые выполняются при подключении USB-устройства к аппарату. Однако это не соответствует вашему вопросу.

Смежные вопросы