Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru
Партнеры:
otladka.com.ua - г.Киев

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

User Info


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

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

Ник:
Пароль:

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

ОбновитьПодробнееВсегоВсего:5
Форум » starterkit.ru » Embedded Linux
Qt keyPressEvent и GPIO Buttons
sasamy
Добавлено 10.04.2014 18:45 Сообщение: 21
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Суть вашего драйвера - зарегистрироваться как устройство ввода, описать ядру какой тип, получать скан-коды, преобразовать в код клавишы и сообщить о нажатии этой клавиши с кодом. Вот компактный пример для i2c

http://lxr.free-electrons.com/source/drivers/input/keyboard/tca6416-keypad.c

для начала прямо в драйвере в массиве храните соотвествие скан-кода кодам клавиш, потом как заработает - сделайте настройку через параметры.
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 11.04.2014 15:08 Сообщение: 22
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Спасибо, буду разбираться
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 11.04.2014 15:30 Редактировалось 11.04.2014 19:19 Сообщение: 23
sasamy
4.70

Пункты: 76988
Регистрация: 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
Добавлено 14.04.2014 11:33 Сообщение: 24
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Спасибо. Сам примерно так же и планировал.
Минимальный опыт ядерного писания есть.
Буду делать по этапам.
Спуститься к концу Подняться к началу
Персональная информация
AGevork
Добавлено 14.04.2014 16:18 Сообщение: 25
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Господа подскажите плс кто как борится с дребезгом клавиш в QT ? Если кнопки реализованы как GPIO BUTTONS.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 14.04.2014 16:36 Редактировалось 14.04.2014 16:36 Сообщение: 26
sasamy
4.70

Пункты: 76988
Регистрация: 14.08.2009
Зачем в Qt с ним бороться :) в бордфайле в структуре где кнопка описана укажите .debounce_interval, например так

{
.code = KEY_Q,
.gpio = AT91_PIN_PB30,
.active_low = 1,
.desc = "power",
.wakeup = 1,
.debounce_interval = 10,
},
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux