Страниц: [1]
  Печать  
Автор Тема: Встроенная клавиатура и Photon  (Прочитано 2909 раз)
Goofy
Full Member
***
Offline Offline

Сообщений: 122


Просмотр профиля
« : Августа 07, 2011, 06:06:41 pm »

Графическая система строится на ARM и чтобы не городить лишнего, есть желание ловить события по нажатию физических кнопок на уровне граф окна.
Кнопки через буфер заведены на ноги микроконтроллера и   должны формировать клавиатурные скан коды на символы от 'a' до 'z'.

Разворотил драйвер devi-touch из BSP на AT91SAM9G45-EK. Из ABS устройства переделал на KBD, шлю для теста сканкоды нажатия и отжатия:
Код:
static void *intr_thread( void *data )
{
input_module_t    *module = (input_module_t *) data;
private_data_t    *dp = module->data;
input_module_t    *up = module->up;



while (1)
{

delay ( 1000 );
dp->tp.key.key_scan = 0x1e;
dp->tp.key.flags = KEY_SCAN_VALID | KEY_DOWN;
(up->input)(up, 1, &dp->tp);

delay ( 100 );
dp->tp.key.key_scan = 0x9e;
dp->tp.key.flags = KEY_SCAN_VALID;
(up->input)(up, 1, &dp->tp);



}
}

По дебагу события нажатия проходят до некой функции gfi_emit_kbd (PhRawKeyEvent_t const *kbd_ev):
Код:
int
gfi_emit_kbd (PhRawKeyEvent_t const *kbd_ev)
{
int rc = 0;
gfi_event_t *gfev;

pthread_mutex_lock (&gfi_mutex);

if (kbd_focus_layer != NULL) {
if (kbd_focus_layer->flags & GFI_ATTR_KEY_SENSITIVE) {
gfev = &kbd_focus_layer->events[kbd_focus_layer->ev_tail];
if ((gfev = enqueue_ev (kbd_focus_layer)) != NULL) {
gfev->type = GFI_EVENT_TYPE_KEY;
gfev->u.key.modifiers = kbd_ev->key_mods;
gfev->u.key.flags = kbd_ev->key_flags;
gfev->u.key.cap = kbd_ev->key_cap;
gfev->u.key.sym = kbd_ev->key_sym;
gfev->u.key.scan = kbd_ev->key_scan;
}
}

if (!(kbd_focus_layer->flags & GFI_ATTR_KEY_TRANSPARENT)) {
/* Prevent the key press from getting to Photon */
rc = 1;
}
}

pthread_mutex_unlock (&gfi_mutex);

return rc;
}

Где kbd_focus_layer глобальная переменная ссылающаяся на нечто мне пока не понятное. Понятно только то, что в моём случае это всегда NULL и что меняется от внешнего процесса через devctl вызов. Вызова такого не происходит. Подозреваю что фотон этим должен заниматься после определённого запроса.

Документация по устройствам ввода весьма скупа.

Кому нибудь приходилось работать с драйверами ввода?
Есть ли информация по структуре работы устройств ввода?
Есть ли что подсказать по поводу моих действий и рассуждений?
« Последнее редактирование: Августа 07, 2011, 08:15:50 pm от Goofy » Записан
rw9uao
Участник
*
Offline Offline

Сообщений: 33


Просмотр профиля
« Ответ #1 : Февраля 26, 2012, 06:16:23 pm »

кста, Гуфи. допиленный драйвер езернета под Пашину плату на 9г45 есть. взять можно где обычно.
Записан
T_i_m_u_r_l_a_n
Участник
*
Offline Offline

Сообщений: 30


Просмотр профиля
« Ответ #2 : Апреля 22, 2015, 10:57:12 am »

Мне приходилось/ виртуальная клавиатура, тачскрин и т.п. Пишите в личку.
Записан
Страниц: [1]
  Печать  
 
Перейти в: