Я пытаюсь прочитать ввод устройства linux через ioctl (), и я видел на многих примерах кода с макросом «test_bit», но единственный код, который я нашел об этом, это: #define test_bit(bit, array) (array[bit / 8] & (1 << (bit % 8)))
, и это не так Работа. Я пришел к выводу, что, возможно, есть что-то, что нужно включить в мой класс, чтобы иметь этот макрос.
Кто-нибудь может мне помочь с этим, я несколько дней застрял с этой проблемой?
Спасибо
Редактировать:
Вот код, который я использую:
void test(){
uint8_t key_b[KEY_MAX/8 + 1];
/* the events (up to 64 at once) */
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++) {
if (test_bit(yalv, key_b)) {
switch ( yalv)
{
case 0x1c :
dial->setMessage("Enter");
dial->show();
break;
case 0x66 :
dial->setMessage("Home");
dial->show();
break;
case 0x3b :
dial->setMessage("F1");
dial->show();
break;
case 0x3c :
dial->setMessage("F2");
dial->show();
break;
default:
dial->setMessage("Unknow for now");
dial->show();
}
}
}
}