Qt keyPressEvent и GPIO Buttons
sasamy |
|
 |
|
|
|
|
|
Пункты: 84273 |
Регистрация: 14.08.2009 |
|
|
|
Суть вашего драйвера - зарегистрироваться как устройство ввода, описать ядру какой тип, получать скан-коды, преобразовать в код клавишы и сообщить о нажатии этой клавиши с кодом. Вот компактный пример для i2c
http://lxr.free-electrons.com/source/drivers/input/keyboard/tca6416-keypad.c
для начала прямо в драйвере в массиве храните соотвествие скан-кода кодам клавиш, потом как заработает - сделайте настройку через параметры. |
|
|
|
|
|
titan83 |
|
 |
|
|
|
|
|
Пункты: 3141 |
Регистрация: 16.12.2012 |
|
|
|
Спасибо, буду разбираться |
|
|
|
|
|
sasamy |
|
 |
|
|
|
|
|
Пункты: 84273 |
Регистрация: 14.08.2009 |
|
|
|
В документации к ядру есть простой и наглядный пример
http://lxr.free-electrons.com/source/Documentation/input/input-programming.txt
вам нужно учитывать при работе с spi один важный момент - синхронное обращение к устройсву (чтение сканкода с устройства при помощи ф-ций ядра spi_sync и построенной поверх него spi_write/spi_read) нельзя выполнять в контексе обработчика прерывания и в контексте soft irq (в таслете). Примерный план такой
1 при инициализации делаете запрос на обработку прерывания от нужного gpio куда подключена линия irq от устройства
2 в обрабочике прерывания gpio маскируете прерывание от этого gpio и ставите в очередь на обработку свою ф-цию которая будет вызвана в контексте обычного процесса, наример через schedule_work
http://lxr.free-electrons.com/source/include/linux/workqueue.h#L553
3 в этом обработчике после получения скан-кода отправляете код клавиши и событие (нажата или отпущена) ядру и снимаете маскировку прерывания от gpio |
|
|
|
|
|
titan83 |
|
 |
|
|
|
|
|
Пункты: 3141 |
Регистрация: 16.12.2012 |
|
|
|
Спасибо. Сам примерно так же и планировал.
Минимальный опыт ядерного писания есть.
Буду делать по этапам. |
|
|
|
|
|
AGevork |
|
 |
|
|
|
|
|
Пункты: 10580 |
Регистрация: 14.08.2013 |
|
|
|
Господа подскажите плс кто как борится с дребезгом клавиш в QT ? Если кнопки реализованы как GPIO BUTTONS. |
|
|
|
|
|
sasamy |
|
 |
|
|
|
|
|
Пункты: 84273 |
Регистрация: 14.08.2009 |
|
|
|
Зачем в Qt с ним бороться :) в бордфайле в структуре где кнопка описана укажите .debounce_interval, например так
{
.code = KEY_Q,
.gpio = AT91_PIN_PB30,
.active_low = 1,
.desc = "power",
.wakeup = 1,
.debounce_interval = 10,
}, |
|
|
|
|
|
|