我正在使用 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)