Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:1
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
Клавиатура USB
simark1979
Добавлено 27.09.2014 17:05
0
Сообщение: 1
simark1979
0

Пункты: 6256
Регистрация: 03.10.2012
Пол: Мужчина
Тема, наверное не нова.
Поделитесь с опытом

Задача состоит в следующем:
При загрузке системы должен запуститься скрипт, который ждет ввода серийного номера с USB клавиатуры (точнее со сканера штрих-кода, работающего в режиме эмуляции клавиатуры) подключенной железяке после чего кладет его куда надо.
(Конкретно речь идет об IMX6-oem)

Пока это дело надо запустить с обычной usb-клавиатурой.

На данный момент при подключении клавиатуры вываливается это:


updater:/>> usb 1-1: new low-speed USB device number 4 using ci_hdrc
input: BTC USB Keyboard as /devices/soc0/soc.1/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-1/1-1:1.0/input/input6
hid-generic 0003:046E:6000.0005: input: USB HID v1.10 Keyboard [BTC USB Keyboard] on usb-ci_hdrc.1-1/input0
hid-generic 0003:046E:6000.0006: usb_submit_urb(ctrl) failed: -1
hid-generic 0003:046E:6000.0006: timeout initializing reports
input: BTC USB Keyboard as /devices/soc0/soc.1/2100000.aips-bus/2184200.usb/ci_hdrc.1/usb1/1-1/1-1:1.1/input/input7
hid-generic 0003:046E:6000.0006: input: USB HID v1.10 Device [BTC USB Keyboard] on usb-ci_hdrc.1-1/input1


В каталоге /sys/class/input/
появляется новый каталог input7

updater:/>> ls /sys/class/input/
event0 event1 event3 input0 input3 input7 mice mouse0


Содержимое ls /dev/input/ до и после не меняется.
updater:/>> ls /dev/input/
event0 event1 event2 event3 mice mouse0 mouse1 mouse2 mouse3

Светодиод на клавиатуре не загорается.

Подскажите, как это дело настроить?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 27.09.2014 20:39 Редактировалось 27.09.2014 20:40 Сообщение: 2
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
попробуйте, для начала, включить клавиатуру через промежуточный юсб хаб

а перед этим проверьте жизнеспособность клавы
Код
evtest /dev/input/event1
evtest /dev/input/event7


номера эвентов смотрите в логе на строчках определения клавиатуры (цифра после input)

вместо evtest можно использовать hexview или обычный cat - в последнем случае будут закорючки, чисто для оценки работы..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
simark1979
Добавлено 29.09.2014 12:43 Редактировалось 29.09.2014 12:44 Сообщение: 3
simark1979
0

Пункты: 6256
Регистрация: 03.10.2012
Пол: Мужчина
Наконец-то добрался до места

События нажатия отлавливаются нормально:



evtest /dev/input/event1

..............................................
Event: time 1411993325.986623, type 4 (EV_MSC), code 4 (MSC_SCAN), value 70014
Event: time 1411993325.986623, type 1 (EV_KEY), code 16 (KEY_Q), value 1
Event: time 1411993325.986623, -------------- EV_SYN ------------
.............................................


Теперь как это дело прицепить к скрипту?
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 29.09.2014 13:40 Сообщение: 4
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Теперь как это дело прицепить к скрипту?

понятия не имею..
ищите утилиту или пишите сами приблуду на Си, которая будет транслировать сырые коды в удобный формат и это уже можно скармливать скрипту..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
simark1979
Добавлено 29.09.2014 13:47 Сообщение: 5
simark1979
0

Пункты: 6256
Регистрация: 03.10.2012
Пол: Мужчина
Да, я тоже простого решения не нашел, видимо придется писать прослойку на Сях.....

Спасибо!
Спуститься к концу Подняться к началу
Персональная информация
simark1979
Добавлено 29.09.2014 16:59 Сообщение: 6
simark1979
0

Пункты: 6256
Регистрация: 03.10.2012
Пол: Мужчина
Вот:


In this code example we will be able to read a keyboard device input directly from/to /dev/input/eventX in Ubuntu with C++. You might want to change the default event device if that is not your keyboard. (Support for mouse etc. is not implemented)
You can find right device by:
# cat /proc/bus/input/devices
Find your keyboard and find a line like this "H: Handlers=kbd event5 ". Event5 tells you that right value for EVENT_DEVICE variable is "/dev/input/event5".
Run in terminal with:
# sudo ./<compiled_file> "/dev/input/event5"
Code:
#include <linux/input.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>

int main(int argc, char **argv)
{
int fd;
if(argc < 2) {
printf("usage: %s \n", argv[0]);
return 1;
}
fd = open(argv[1], O_RDONLY);
struct input_event ev;

while (1)
{
read(fd, &ev, sizeof(struct input_event));

if(ev.type == 1)
//printf("key %i state %i\n", ev.code, ev.value);
if(ev.value == 0)
printf(" : [key %i]\n ", ev.code);
}
}
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 30.09.2014 00:15 Сообщение: 7
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
во-во, примерно о такой я и писал..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
simark1979
Добавлено 02.01.2015 13:19 Редактировалось 02.01.2015 13:28 Сообщение: 8
simark1979
0

Пункты: 6256
Регистрация: 03.10.2012
Пол: Мужчина
Хочу снова поднять этот вопрос :)

Я конечно в этом деле туплю, но мне кажется есть более красивое решение, чем писать программу-прослойку....
Иначе получается считывать ввод с подключенной usb клавиатуры осложнен, бред какой-то.....
Все-таки Linux - это зрелая система, оттого и не верится....
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 02.01.2015 16:41 Сообщение: 9
Jury093
4.5

Пункты: 54271
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
Я конечно в этом деле туплю, но мне кажется есть более красивое решение, чем писать программу-прослойку....
Иначе получается считывать ввод с подключенной usb клавиатуры осложнен, бред какой-то.....

ну раз не нравится Си, напишите скриптовый парсер, который будет обрабатывать поток от evtest..

Цитата
Все-таки Linux - это зрелая система, оттого и не верится....

ядро ядром, а линукс линуксом - ядро предоставляет сервисы, а утилиты и демоны ими кормятся.. и если в ядре нет нужного выхлопа, то, имхо, никто не запрещает дописать/написать свой.. опять же, если его нет, то возможно такое никому не нужно или вредно/неправильно с т.з. идеологии ядра..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
simark1979
Добавлено 02.01.2015 17:24 Редактировалось 02.01.2015 17:28 Сообщение: 10
simark1979
0

Пункты: 6256
Регистрация: 03.10.2012
Пол: Мужчина
Цитата
ну раз не нравится Си, напишите скриптовый парсер, который будет обрабатывать поток от evtest..


Юра, дело не в том нравится мне Си или нет.
Я задачу решил именно на Си.
Просто сейчас опять столкнулся со своим кодом и опять подумал, что что-то тут не то....
Тут уже просто интересно стало, т.е. из этого следует, что я не могу юзать клавиатуру в консоли что ли, так?
Наверняка, можно...

Ну или должна быть какая-то утилита готовая
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux