Я использую Ubuntu 12.04, и мне нужно управлять своими настраиваемыми клавишами USB-клавиатуры и усилителем; Светодиоды. Ключи работают хорошо. Когда я попробовал использовать стандартную клавиатуру (со светодиодами NUM, SCROLL, CAPS lock), я не смог написать биты состояния светодиодов.
Я не хочу использовать консольные вызовы ibctl kb для управления светодиодами. Есть ли способ управлять напрямую с помощью функции ioctl или write в области драйверов.
Ниже приведен код, который я попробовал:
kb = open(/dev/input/event2, O_RDWR );
char kbname [256] = "key-x123";
char LedStatus = 0;
ioctl (kb, EVIOCGNAME (sizeof (kbname)), kbname);
ioctl (kb, EVIOCGBIT (EV_LED,sizeof (LedStatus)), &LedStatus);
ioctl (kb, EVIOCGLED (sizeof (LedStatus)), &LedStatus);
Все эти звонки работают хорошо, и я мог бы получить ключи. Но не удалось установить какие-либо светодиоды. Не находите никаких макросов, таких как EVIOCGLED, для установки светодиодов через ioctl (2).
Я также попробовал приведенный ниже код, который выдает ошибку «Недопустимый параметр».
struct input_event event;
event.type = EV_LED;
event.code = LED_NUML | LED_CAPSL | LED_SCROLLL;
event.value = 7;
if (write (kb, &event, sizeof (struct input_event)) < 0)
Работает нормально с кодом ниже:
event.type = EV_LED;
event.code = LED_CAPSL; /* or any other LEDs */
event.value = 0; /* or 1 */
if (write (kb, &event, sizeof (struct input_event)) < 0)