驱动_Input输入子系统

 

 


 

 

 

 

 

 

 

<结构体>html

  struct input_dev {
    const char *name;
    const char *phys;
    const char *uniq;
    struct input_id id;node

    //位表
    unsigned long evbit[BITS_TO_LONGS(EV_CNT)]; //表示可以产生哪一种类型的数据:EV_KEY,EV_ABS
    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)];编程

    struct device dev; //父类编码

    struct list_head h_list;
    struct list_head node; //链表的节点
  }; spa

 

  struct input_event {   //上报给用户的输入设备的数据包的类型
    struct timeval time; //时间戳
    __u16 type; //读到的数据类型:EV_KEY,EV_ABS,EV_REL
    __u16 code; //编码值
    __s32 value; //状态
  };code

 

 

 <笔记>htm

 

1.input handler    用户交互,不知数据,只知上传对象

2.input_core   维护了两个链表,为上下层提供接口,他不是总线!!blog

3.input device      硬件交互,知道数据,不知上传接口

4.编程:

  1,分配一个 input device对象
  2,初始化input device对象
  3,注册input device对象
  4,硬件初始化,获取到硬件的数据,上报给input handler

 

5.代码:

   key:http://www.javashuo.com/article/p-gtejnwho-cn.html

    ts  :http://www.javashuo.com/article/p-ehpnoibg-cw.html

6.input_core层也实现了一个fops,但只实现了open,就回到了input_handler层,因此他第一个打开 

7.一个设备对应一个connect方法,对应一个设备节点,对应一个event对象,对应一个input_handle,对应一个event_client缓冲队列,因此数据上报不会混乱

8.应用程序会根据设备号找到对应的缓冲队列

相关文章
相关标签/搜索