Warning: touch() [function.touch]: Unable to create file /home/starterkit/starterkit.ru/html/error.log because Permission denied in /home/starterkit/starterkit.ru/html/errorhandler.php on line 51
Qt keyPressEvent и GPIO Buttons - Embedded Linux - Форум - starterkit.ru
Ник:
Пароль:

Контакты

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
AGevork
Добавлено 09.04.2014 12:49 Редактировалось 09.04.2014 13:01 Сообщение: 11
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Попробую спасибо!
Спуститься к концу Подняться к началу
Персональная информация
AGevork
Добавлено 09.04.2014 13:16 Сообщение: 12
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Цитата
[quote]Но дрыгать ножкой через sys/class/gpio получается

все правильно - считайте, что это ручной режим..
теперь надо управление пином возложить на ядро и работать через подсистему ввода
в файле у вас все прописано правильно.. для проверки я практикую отладочный вывод - в вашем случае примерно
Код
static void __init ek_add_device_buttons(void)
{
int i;
printk("** ek_add_device_buttons start\n");

for (i = 0; i < ARRAY_SIZE(ek_buttons); i++) {

at91_set_GPIO_periph(ek_buttons[i].gpio, 1);

at91_set_deglitch(ek_buttons[i].gpio, 1);

}

platform_device_register(&ek_button_device);
printk("** ek_add_device_buttons finish\n");

}

потом в логе смотрю, что произошло между "start" и "finish"

но у вас похоже, что-то в ядре недовключенно..[/quote]


Сделал добавил в board файле, ничего не произошло. докучи отключил TS и event вообще пропал =( не понимаю в чем проблема....
Спуститься к концу Подняться к началу
Персональная информация
AGevork
Добавлено 09.04.2014 13:33 Редактировалось 09.04.2014 13:37 Сообщение: 13
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Но при этом
Код

cd /sys/bus/platform/drivers/gpio-keys/
ls
bind uevent unbind

Как я понял получается что драйвер есть.

Но в логе загрзки вот такая фигня
Код

gpio-keys gpio-keys: failed to request GPIO 0, error -22
gpio-keys: probe of gpio-keys failed with error -22
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 09.04.2014 13:44 Редактировалось 09.04.2014 13:45 Сообщение: 14
sasamy
4.70

Пункты: 76882
Регистрация: 14.08.2009
Закоментируйте/уберите в бордфайле полностью лишние кнопики а не только номера gpio

{ /* BP2, "rightclic" */
.code = BTN_RIGHT,
// .gpio = AT91_PIN_PC12,
.active_low = 1,
.desc = "rightclic",
.wakeup = 0,
},

при таком объяевлении gpio = 0, а таких gpio нет.
Спуститься к концу Подняться к началу
Персональная информация
AGevork
Добавлено 09.04.2014 14:16 Сообщение: 15
AGevork
4.71

Пункты: 10580
Регистрация: 14.08.2013
Всем ОГРОМНОЕ СПАСИБО! Все получилось! Теперь продолжу войну с QT. Программка приведенная мной просто меняет расположение выделенных объектов "в лево"
Теперь надо думать уже с верхним уровнем!
Всем очень благодарен!
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 10.04.2014 11:40 Сообщение: 16
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Можно я вклинюсь в тему автора? Просто вопрос довольно близок.
У меня ситуация чуть посложнее - есть собственная клавиатура (20 клавиш), подключенная к 9G45 через spi. На данный момент я с ней работаю через spidev и sysfs, что, конечно же, идеологически неправильно (к тому же инстументы Qt не могут отслеживать изменения на sysfs, приходится юзать poll()).
Хотелось бы написать несложный драйвер с таким алгоритмом: захватывается один GPIO (прерывание по нажатию клавишы), захватывается один spi-канал, при изменении уровня на GPIO читается значение из spi-канала клавиатуры, и в итоге генерируется событие нажатия клавиши. Т.е. хочу, чтобы моя клавиатура была неотличима от стандартных и можно было бы единообразно работать и в консоли, и в Qt.
Очень помогли бы хотя бы ключевые слова для поиска, идеально - примеры.
Спасибо.
Спуститься к концу Подняться к началу
Персональная информация
Jury093
Добавлено 10.04.2014 14:34 Сообщение: 17
Jury093
4.5

Пункты: 54233
Регистрация: 25.05.2009
Пол: Мужчина
Из: Санкт-Петербург
Цитата
У меня ситуация чуть посложнее - есть собственная клавиатура (20 клавиш), подключенная к 9G45 через spi.

а клава на SPI принципиально или возможны варианты?
можно например матрицу прицепить прямо к свободным ножкам АРМа и хэвать фан:
http://starterkit.ru/html/index.php?name=forum&op=view&id=12359&num=6#12719

существуют решения на отдельном чипе, как правило с интерфейсом i2c - на входе матрица кнопок, на выходе стандартное (для линукса) устройство ввода..

На любой вопрос есть любой ответ.
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 10.04.2014 14:40 Сообщение: 18
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Цитата
существуют решения на отдельном чипе, как правило с интерфейсом i2c - на входе матрица кнопок, на выходе стандартное (для линукса) устройство ввода..

Устройство уже разработано и я работаю с тем, что есть, перемены возможны, но это только следующие hw-релизы.
Я, вроде, уже напал на след input_event))
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 10.04.2014 16:03 Редактировалось 10.04.2014 16:04 Сообщение: 19
sasamy
4.70

Пункты: 76882
Регистрация: 14.08.2009
Так на чем сделана клава - есть линия для прерывания что какая-то клавша изменила состояние ? если нет то никакой разницы - в ядре или в юзерспейс поллить spi - все равно кривое решение, если есть то по такому же принципу драйвер как для тачскрина напишите, разница только в том что там абсолютные координаты вычисляются а вам надо скан-код клавишы вычитать по spi и если ваша клава сразу готовый код отсылает то весь драйвер там 20 строчек кода будет.
Спуститься к концу Подняться к началу
Персональная информация
titan83
Добавлено 10.04.2014 17:06 Сообщение: 20
titan83
3

Пункты: 3141
Регистрация: 16.12.2012
Цитата
Так на чем сделана клава - есть линия для прерывания что какая-то клавша изменила состояние ? если нет то никакой разницы - в ядре или в юзерспейс поллить spi - все равно кривое решение, если есть то по такому же принципу драйвер как для тачскрина напишите, разница только в том что там абсолютные координаты вычисляются а вам надо скан-код клавишы вычитать по spi и если ваша клава сразу готовый код отсылает то весь драйвер там 20 строчек кода будет.

Именно так и сделано - одна линия меняет свое состояние (1 -> 0), когда нажата клавиша, потом в spi надо считать скан-код. Но скан-коды собственные (0-19) и нужно делать преобразование в стандартные.
Но пока пример с тачем для меня не очевиден(( Не осознаю, куда надо послать преобразованный скан-код.
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Embedded Linux