Como usar o ioctl para ler a entrada do teclado

0

Atualmente, estou tentando usar uma exibição com base no Google Arm. Esta tela tem botões e estou tentando capturar o evento quando pressiono esses botões.

Eu tenho um arquivo de dispositivo localizado em dev / input / keyboard0. Aqui está o que eu comecei a fazer:

uint8_t key_b[KEY_MAX/8 + 1];
const char *keyboard = "/dev/input/keyboard0";
int keybrdToCapture;
int yalv;
keybrdToCapture = open(keyboard, O_RDONLY);

memset(key_b, 0, sizeof(key_b));
ioctl(keybrdToCapture, EVIOCGKEY(sizeof(key_b)), key_b);

for (yalv = 0; yalv < KEY_MAX; yalv++) {
        printf("  Key 0x%02x ", yalv);
         Dialog* dial = new Dialog();
        switch ( yalv)
            {
            case 0x003b :
                dial->setMessage("F1");
                dial->show();
                break;
            case 0x003c :
                dial->setMessage("F2");
                dial->show();
                break;
            case 0x001c :
                dial->setMessage("Enter");
                dial->show();
                break;
            default:
                dial->setMessage("Unknown for now");
                dial->show();
            }
    }

Este código é baseado na "Listagem 10" deste artigo: link . Eu realmente não entendo tudo aqui e eu poderia usar alguma ajuda para me explicar mais sobre isso. No momento em que o trecho de código acima é chamado em um thread e ele bloqueia o resto do meu programa mostrando apenas o meu Dialog com a mensagem do último caso "Unknown for now"

Você pode, por favor, me ajudar a entender como isso funciona para que eu possa corrigir tudo o que eu cometi de errado?

    
por David 03.05.2018 / 16:06

0 respostas