Está funcionando bem com o código abaixo:
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)
Estou usando o Ubuntu 12.04 e preciso controlar minhas teclas de teclado USB personalizadas & amp; LEDs. As chaves estão funcionando bem. Quando tentei usar um teclado padrão (com NUM, SCROLL, LEDs de bloqueio de CAPS), não consegui escrever os bits de status do LED.
Eu não quero usar chamadas kb ioctl baseadas em console para controlar LEDs. Existe alguma maneira de controlar diretamente usando ioctl ou função de gravação no espaço do driver.
Abaixo está o código que eu tentei:
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);
Todas essas chamadas estão funcionando bem e eu poderia ativar chaves. Mas incapaz de definir qualquer LED. Não encontre macros como EVIOCGLED para definir LEDs através de ioctl (2).
Também testei abaixo o código, o que gera um erro de "parâmetro inválido".
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)
Está funcionando bem com o código abaixo:
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)