簡體   English   中英

使用ioctl更改自動重復的值

[英]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是EVIOCGREPEVIOCSREP 我找不到關於它們的任何文檔,但是在這里它們被聲明為在unsigned int[2]上工作,因此我猜想REP_DELAYREP_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等)上操作,則可以使用KDstruct kbd_repeat 在較新的輸入設備上, EVIOCREP_

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM