input子系统中input_dev结构体详解

input子系统中input_dev结构体

struct input_dev {
        const char *name;	/*设备名称*/
        const char *phys;	/*系统层次结构中设备的物理地址*/
        const char *uniq;	/*设备的唯一标识码*/
        struct input_id id;	/*设备id*/
		
		
        unsigned long propbit[BITS_TO_LONGS(INPUT_PROP_CNT)];	/*设备属性位图*/

        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)];	/*设备上的led位图*/
        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 hint_events_per_packet;	/*事件生成的平均数量*/
        /*设备在一个报文中产生的事件的平均数量(介于EV_SYN/SYN_REPORT事件之间)。由事件处理程序使用,用于估计保存事件所	需缓冲区的大小。*/

        unsigned int keycodemax;	/*键码表的大小*/
        unsigned int keycodesize;	/*键码表中元素的大小*/
        void *keycode;				/*此设备的扫描码到键码的映射*/

        int (*setkeycode)(struct input_dev *dev,
                          const struct input_keymap_entry *ke,
                          unsigned int *old_keycode);	/*更改当前键映射的可选方法,用于实现系数键映射*/
        int (*getkeycode)(struct input_dev *dev,
                          struct input_keymap_entry *ke);	/*获取当前键映射的可选遗留方法*/

        struct ff_device *ff;	/*与此设备相关联的力反馈结构*/

        struct input_dev_poller *poller;	/*轮询模式*/

        unsigned int repeat_key;	/*储存最后一次按下的键的键码,用于实现软件的自动重复*/
        struct timer_list timer;	/*软件自动重复的定时器*/

        int rep[REP_CNT];	/*自定重复参数的当前值(延迟、速率)*/

        struct input_mt *mt;	/*指向多点触摸状态的指针*/

        struct input_absinfo *absinfo;	/*input_absinfo元素的数组*/

        unsigned long key[BITS_TO_LONGS(KEY_CNT)];	/*反映设备按键的当时状态*/
        unsigned long led[BITS_TO_LONGS(LED_CNT)];	/*反映设备led的当前状态*/
        unsigned long snd[BITS_TO_LONGS(SND_CNT)];	/*反映当前的音频状态*/
        unsigned long sw[BITS_TO_LONGS(SW_CNT)];	/*反映设备交换机的当前状态*/

        int (*open)(struct input_dev *dev);		/*该方法在第一个用户调用时被调用 input_open_device(),驱动程序必须准备好设备开始生成事件*/
        void (*close)(struct input_dev *dev);	/*该方法在最后一个用户调用时调用 input_close_device() ,停止向input core提供事件*/
        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 __rcu *grab;	/*当前设备已被抓取的输入句柄*/

        spinlock_t event_lock;	/*自旋锁*/
        struct mutex mutex;		/*序列化对open(),close()和flush()方法的调用*/

        unsigned int users;		/*储存打开该文件的用户*/
        bool going_away;		/*标记正在注销和注销的设备*/

        struct device dev;		/*该设备的驱动模型*/

        struct list_head        h_list;		/*与设备相关的输入句柄列表*/
        struct list_head        node;	/*用于将设备放到input_dev_list中*/

        unsigned int num_vals;		/*当前帧中排队的值的数量*/
        unsigned int max_vals;		/*一个帧中队列的最大值*/
        struct input_value *vals;	/*当前帧中排队的值数组*/

        bool devres_managed;		/*使用devres框架管理设备,不需要显式取消、注册或释放*/

        ktime_t timestamp[INPUT_CLK_MAX];	/*使用input_set_timestamp设置的时间戳*/

        bool inhibited;				/*表示输入设备被抑制(input core将忽略设备产生的任何事件)*/
};
    说明:

    1) 结构体中包括名称、id和链表等。

    2) 结构体中有很多数组,数组成员大小使用宏BITS_TO_LONGS计算。

    3) 因为这些数组中,每个成员中的一位代表一种类型,所以此处就是根据其支持最多的类型,计算出数组中需要几个成员。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
HCD_DEV结构体是STMicroelectronics公司在STM32F407芯片用于描述USB主机控制器设备的数据结构。该结构体包含了USB主机控制器的各种属性和状态信息,可以用于管理和控制USB设备的数据传输。下面是HCD_DEV结构体的详细解释: 1. type:该成员变量是一个无符号整数,表示USB主机控制器的类型。 2. speed:该成员变量是一个无符号整数,表示USB设备的传输速度。 3. addr:该成员变量是一个无符号整数,表示USB设备的地址。 4. ep_out:该成员变量是一个指向HCD_EP结构体的指针,表示USB设备的输出端点。 5. ep_in:该成员变量是一个指向HCD_EP结构体的指针,表示USB设备的输入端点。 6. state:该成员变量是一个无符号整数,表示USB设备的状态。 7. toggle_out:该成员变量是一个无符号整数,表示USB设备输出端点的数据包的传输标志。 8. toggle_in:该成员变量是一个无符号整数,表示USB设备输入端点的数据包的传输标志。 9. dma:该成员变量是一个指向DMA_HandleTypeDef结构体的指针,表示USB设备的DMA控制器。 10. speed_idx:该成员变量是一个无符号整数,表示USB设备传输速度的索引。 11. pipe_out:该成员变量是一个无符号整数,表示USB设备输出端点的通道。 12. pipe_in:该成员变量是一个无符号整数,表示USB设备输入端点的通道。 总之,HCD_DEV结构体是STM32F407芯片用于管理USB主机控制器设备的数据结构,其包含了USB设备的各种属性和状态信息,可以帮助用户实现对USB设备的控制和管理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值