如何设置或清除 USB 键盘 LED

如何设置或清除 USB 键盘 LED

我正在使用 Ubuntu 12.04,我需要控制我的自定义 USB 键盘按键和 LED。按键工作正常。当我尝试使用标准键盘(具有 NUM、SCROLL、CAPS 锁定 LED)时,我无法成功写入 LED 状态位。

我不想使用基于控制台的 kb ioctl 调用来控制 LED。有没有办法直接使用 ioctl 或在驱动程序空间写入函数来控制。

以下是我尝试过的代码:

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);

所有这些调用都运行良好,我可以读取按键。但无法设置任何 LED。找不到任何宏,如 EVIOCGLED,可通过 ioctl(2) 设置 LED。

我也尝试了下面的代码,它抛出了“无效参数”错误。

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)

答案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)

相关内容