[英]Using ioctl to change value of autorepeat
如何使用ioctl更改C中給定設備的自動重復值?
我知道
#define REP_DELAY 0x00
#define REP_PERIOD 0x01
來源: http : //lxr.free-electrons.com/source/include/uapi/linux/input.h#L931
我沒有找到有關這些東西的任何教程或文檔。 這個問題並不模糊,實際上只是將ioctl與REP_DELAY和REP_PERIOD一起使用。 如何將它們與ioctl一起使用?
您需要獲取該特定設備的文件描述符。 該請求是
#define KDKBDREP 0x4B52
要傳遞的參數是
struct kbd_repeat {
int delay;
int period;
}
來源http://lxr.free-electrons.com/source/include/uapi/linux/kd.h?v=3.10#L153 。
我認為您需要的ioctl是EVIOCGREP
和EVIOCSREP
。 我找不到關於它們的任何文檔,但是在這里它們被聲明為在unsigned int[2]
上工作,因此我猜想REP_DELAY
和REP_PERIOD
是該數組中的索引。
這樣的事情應該起作用:
unsigned int rep[2];
ioctl(fd, EVIOCGREP, rep); /* get current values */
/* do something with rep[REP_DELAY] and/or rep[REP_PERIOD] */
ioctl(fd, EVIOCSREP, rep) /* write new values */
KD
ioctls早於evdev,因此REP_
宏不與它們一起使用。 如果直接在虛擬控制台( /dev/tty1
等)上操作,則可以使用KD
和struct kbd_repeat
。 在較新的輸入設備上, EVIOC
和REP_
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.