打印

struct input_dev成员的含义?

[复制链接]
5893|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dewlife|  楼主 | 2012-2-21 16:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
求高手解答input_dev各个成员的含义?
struct input_dev {
const char *name;
const char *phys;
const char *uniq;
struct input_id id;
unsigned long evbit[BITS_TO_LONGS(EV_CNT)];
unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];
unsigned long relbit[BITS_TO_LONGS(REL_CNT)];
unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];
unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];
unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];
unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];
unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];
unsigned long swbit[BITS_TO_LONGS(SW_CNT)];
unsigned int keycodemax;
unsigned int keycodesize;
void *keycode;
int (*setkeycode)(struct input_dev *dev, int scancode, int keycode);
int (*getkeycode)(struct input_dev *dev, int scancode, int *keycode);
struct ff_device *ff;
unsigned int repeat_key;
struct timer_list timer;
int sync;
int abs[ABS_MAX + 1];
int rep[REP_MAX + 1];
unsigned long key[BITS_TO_LONGS(KEY_CNT)];
unsigned long led[BITS_TO_LONGS(LED_CNT)];
unsigned long snd[BITS_TO_LONGS(SND_CNT)];
unsigned long sw[BITS_TO_LONGS(SW_CNT)];
int absmax[ABS_MAX + 1];
int absmin[ABS_MAX + 1];
int absfuzz[ABS_MAX + 1];
int absflat[ABS_MAX + 1];
int absres[ABS_MAX + 1];
int (*open)(struct input_dev *dev);
void (*close)(struct input_dev *dev);
int (*flush)(struct input_dev *dev, struct file *file);
int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);
struct input_handle *grab;
spinlock_t event_lock;
struct mutex mutex;
unsigned int users;
int going_away;
struct device dev;
struct list_head h_list;
struct list_head node;
};

相关帖子

沙发
五谷道场| | 2012-2-21 16:40 | 只看该作者
struct input_dev {
         constchar *name;                                                                                    /*设备名                                         */
         constchar *phys;                                                                                   
         constchar *uniq;
         structinput_id id;                                                                                    /*用于匹配事件处理层handler   */

         unsignedlong evbit[BITS_TO_LONGS(EV_CNT)];                            /*用于记录支持的事件类型的位图*/
         unsignedlong keybit[BITS_TO_LONGS(KEY_CNT)];                       /*记录支持的按键值的位图        */
         unsignedlong relbit[BITS_TO_LONGS(REL_CNT)];                         /*记录支持的相对坐标的位图   */
         unsignedlong absbit[BITS_TO_LONGS(ABS_CNT)];                       /*记录支持的绝对坐标的位图   */
         unsignedlong mscbit[BITS_TO_LONGS(MSC_CNT)];
         unsignedlong ledbit[BITS_TO_LONGS(LED_CNT)];                        /*led                                                 */
         unsignedlong sndbit[BITS_TO_LONGS(SND_CNT)];                       /*beep                                               */
         unsignedlong ffbit[BITS_TO_LONGS(FF_CNT)];
         unsignedlong swbit[BITS_TO_LONGS(SW_CNT)];

         unsignedint keycodemax;                                                                       /*支持的按键值的个数                */
         unsignedint keycodesize;                                                                        /*每个键值的字节数                              */
      void *keycode;                                                                                       /*存储按键值的数组首地址       */
         int(*setkeycode)(struct input_dev *dev, int scancode, int keycode);      /* 修改键值的函数,可选             */
         int(*getkeycode)(struct input_dev *dev, int scancode, int *keycode);    /* 获取扫描码的键值,可选         */

         structff_device *ff;

         unsignedint repeat_key;                                                                          /*最近一次按键值,用于连击     */
         structtimer_list timer;                                                                              /*自动连击计时器                         */

         intsync;                                                                                            /*最后一次同步后没有新的事件置1*/

         intabs[ABS_MAX + 1];                                                                      /* 当前各个坐标的值                            */
         int rep[REP_MAX + 1];                                                                         /*自动连击的参数              */

         unsigned longkey[BITS_TO_LONGS(KEY_CNT)];                           /*反映当前按键状态的位图        */
         unsignedlong led[BITS_TO_LONGS(LED_CNT)];                                      /*反映当前led状态的位图          */
         unsignedlong snd[BITS_TO_LONGS(SND_CNT)];                           /*反映当前beep状态的位图        */
         unsignedlong sw[BITS_TO_LONGS(SW_CNT)];                             

         intabsmax[ABS_MAX + 1];                                                                           /*记录各个坐标的最大值            */
         intabsmin[ABS_MAX + 1];                                                                  /*记录各个坐标的最小值            */
         intabsfuzz[ABS_MAX + 1];                                                                           /*记录各个坐标的分辨率            */
         intabsflat[ABS_MAX + 1];                                                                   /*记录各个坐标的基准值            */

         int(*open)(struct input_dev *dev);                                                /*打开函数                                     */
         void(*close)(struct input_dev *dev);                                                      /*关闭函数                                     */
         int(*flush)(struct input_dev *dev, struct file *file);                                /* 断开连接时冲洗数据                 */
         int(*event)(struct input_dev *dev, unsigned int type, unsigned int code, intvalue); /* 回调函数,可选       */

         structinput_handle *grab;

         spinlock_tevent_lock;
         structmutex mutex;

         unsignedint users;
         intgoing_away;

         structdevice dev;

         structlist_head    h_list;                                                                          /*handle链表                                  */  structlist_head    node;                                                                           /*input_dev链表                        */
};

使用特权

评论回复
板凳
五谷道场| | 2012-2-21 16:43 | 只看该作者
char *name;

       //设备名字,如键盘名字。

char *phys;

       //设备文件节点名,如input/kbd0。

char *uniq;

       //全球唯一的ID号。

使用特权

评论回复
地板
年轻不再| | 2012-2-21 17:09 | 只看该作者
:$,呼唤高手。

使用特权

评论回复
5
爱在2012| | 2012-2-21 18:29 | 只看该作者
留个印看解答。

使用特权

评论回复
6
明天我还来| | 2012-2-24 23:13 | 只看该作者
:L

使用特权

评论回复
7
ielife| | 2012-7-30 16:55 | 只看该作者
struct input_dev {

        void *private;                                //输入设备私有指针,一般指向用于描述设备驱动层的设备结构

        const char *name;                        //提供给用户的输入设备的名称
        const char *phys;                        //提供给编程者的设备节点的名称
        const char *uniq;                        //指定唯一的ID号,就像MAC地址一样
        struct input_id id;                        //输入设备标识ID,用于和事件处理层进行匹配

        unsigned long evbit[NBITS(EV_MAX)];                //位图,记录设备支持的事件类型
        unsigned long keybit[NBITS(KEY_MAX)];                //位图,记录设备支持的按键类型
        unsigned long relbit[NBITS(REL_MAX)];                //位图,记录设备支持的相对坐标
        unsigned long absbit[NBITS(ABS_MAX)];                //位图,记录设备支持的绝对坐标
        unsigned long mscbit[NBITS(MSC_MAX)];        //位图,记录设备支持的其他功能
        unsigned long ledbit[NBITS(LED_MAX)];                //位图,记录设备支持的指示灯
        unsigned long sndbit[NBITS(SND_MAX)];                //位图,记录设备支持的声音或警报
        unsigned long ffbit[NBITS(FF_MAX)];                //位图,记录设备支持的作用力功能
        unsigned long swbit[NBITS(SW_MAX)];                //位图,记录设备支持的开关功能

        unsigned int keycodemax;                //设备支持的最大按键值个数
        unsigned int keycodesize;                //每个按键的字节大小
        void *keycode;                                //指向按键池,即指向按键值数组首地址
        int (*setkeycode)(struct input_dev *dev, int scancode, int keycode);        //修改按键值
        int (*getkeycode)(struct input_dev *dev, int scancode, int *keycode);        //获取按键值

        struct ff_device *ff;                        //

        unsigned int repeat_key;                //支持重复按键
        struct timer_list timer;                //设置当有连击时的延时定时器

        int state;                //

        int sync;                //同步事件完成标识,为1说明事件同步完成

        int abs[ABS_MAX + 1];                //记录坐标的值
        int rep[REP_MAX + 1];                //记录重复按键的参数值

        unsigned long key[NBITS(KEY_MAX)];                //位图,按键的状态
        unsigned long led[NBITS(LED_MAX)];                //位图,led的状态
        unsigned long snd[NBITS(SND_MAX)];                //位图,声音的状态
        unsigned long sw[NBITS(SW_MAX)];                        //位图,开关的状态

        int absmax[ABS_MAX + 1];                                        //位图,记录坐标的最大值
        int absmin[ABS_MAX + 1];                                        //位图,记录坐标的最小值
        int absfuzz[ABS_MAX + 1];                                        //位图,记录坐标的分辨率
        int absflat[ABS_MAX + 1];                                        //位图,记录坐标的基准值

        int (*open)(struct input_dev *dev);                        //输入设备打开函数
        void (*close)(struct input_dev *dev);                        //输入设备关闭函数
        int (*flush)(struct input_dev *dev, struct file *file);        //输入设备断开后刷新函数
        int (*event)(struct input_dev *dev, unsigned int type, unsigned int code, int value);        //事件处理

        struct input_handle *grab;                //

        struct mutex mutex;                //用于open、close函数的连续访问互斥
        unsigned int users;                //

        struct class_device cdev;        //输入设备的类信息
        union {                                //设备结构体
                struct device *parent;
        } dev;

        struct list_head        h_list;        //handle链表
        struct list_head        node;        //input_dev链表
};
还有一些不确定,坐等解答

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

69

主题

353

帖子

0

粉丝