打印
[MCU]

这些的定义

[复制链接]
258|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
heweibig|  楼主 | 2019-9-15 14:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

求高手解答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;
};

使用特权

评论回复

相关帖子

沙发
jiahy| | 2019-9-15 14:10 | 只看该作者
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链表                        */
};

使用特权

评论回复
板凳
wyjie| | 2019-9-15 14:14 | 只看该作者

char *name;

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

char *phys;

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

char *uniq;

       //全球唯一的ID号。

使用特权

评论回复
地板
jiahy| | 2019-9-15 14:17 | 只看该作者


嗯,补充的好

使用特权

评论回复
5
jlyuan| | 2019-9-15 14:21 | 只看该作者

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链表
};
还有一些不确定,坐等解答

使用特权

评论回复
6
heweibig|  楼主 | 2019-9-15 14:29 | 只看该作者
好详细,多谢了哈

使用特权

评论回复
7
jlyuan| | 2019-9-15 14:33 | 只看该作者
进来学习一下,太多成员了,往往不知道使用时要设置哪些成员了。

使用特权

评论回复
8
hanwe| | 2019-9-15 14:36 | 只看该作者
好的,我明天去单位试一下,多谢各位大侠了哈,结贴了先

使用特权

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

本版积分规则

869

主题

13089

帖子

7

粉丝