Как установить или очистить светодиоды клавиатуры USB

Я использую 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)
2
задан 18 July 2013 в 17:55

1 ответ

Работает нормально с кодом ниже:

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)
0
ответ дан 18 July 2013 в 17:55

Другие вопросы по тегам:

Похожие вопросы: