Iput设备使用分析--2(应用层面)
来源:互联网 发布:w10安装不了软件 编辑:程序博客网 时间:2024/05/23 02:29
5.input设备使用分析--2(应用层面)
应用程序打开一个设备(需要包含内核一些头文件.h)---
/*struct input_event
{
struct timeval time;
__u16 type;
__u16 code;
__s32 value;
};
*/
void main()
{
struct input_event key_event;
int fd = open("/dev/event0", O_RDWR); /*最后执行-->evdev_open;*/
int cnt = 0;
while( (cnt = read(fd, &key_event, sizeof(struct input_event)) > 0) /*最后执行evdev_read*/
{
printf("%d,%d,%d,%d\n", key_event.type, key_event.code, key_event.value);
}
}
/************************接着分析evdev_open******************/
static int evdev_open(struct inode *inode, struct file *file)
{
struct evdev *evdev;
struct evdev_client *client;
int i = iminor(inode) - EVDEV_MINOR_BASE;
unsigned int bufsize;
evdev = evdev_table[i]; /*根据号码取得evdev设备*/
if (evdev)
get_device(&evdev->dev);
bufsize = evdev_compute_buffer_size(evdev->handle.dev); /*构造bufsize和client*/
client = kzalloc(sizeof(struct evdev_client) +
bufsize * sizeof(struct input_event),
GFP_KERNEL);
client->bufsize = bufsize;
client->evdev = evdev;
evdev_attach_client(evdev, client); /*将evdev添加到evdev->client_list链表中-->list_add_tail_rcu(&client->node, &evdev->client_list);*/
if (error)
goto err_free_client;
file->private_data = client; /*将client作为file的私有数据*/
return 0;
}
/********************接着分析evdev_read()***********************************/
static ssize_t evdev_read(struct file *file, char __user *buffer,
size_t count, loff_t *ppos)
{
struct evdev_client *client = file->private_data; /*取得相应的evdev_client*/
struct evdev *evdev = client->evdev;
struct input_event event;
int retval;
while (retval + input_event_size() <= count &&
evdev_fetch_next_event(client, &event)) { /*将client->buffer中的数据放到event中*/
if (input_event_to_user(buffer + retval, &event)) /*将event中的数据拷贝到应用层buffer中*/
return -EFAULT;
retval += input_event_size();
}
return retval;
}
- Iput设备使用分析--2(应用层面)
- Iput设备使用分析--1(驱动层面)
- 应用层面的优化
- solr-搜索-层面分析
- hashmap源码层面分析
- 关于sensor在android系统原生应用中的使用(从应用层面验证sensor移植)
- [转]MySQL 高可用架构在业务层面的应用分析
- Mysql应用层面的优化
- 应用层面的均衡负载
- 数据库分类----业务应用层面
- Iput子系统模型探究--2(handler-->以evdev_handler为例)
- 架构层面的需求分析
- OpenvSwitch 数据层面瓶颈分析
- ibatis mybatis区别-使用层面
- 反渗透设备:反渗透设备的应用范围详细分析
- 反渗透设备:反渗透设备应用范围详细分析
- 企业应用层面知识管理咨询方法
- Android 应用层面屏蔽状态栏方法总结
- 同一窗口下基于KCF 目标跟踪和基于模板匹配的目标跟踪效果比较
- 使用jQuery库出错:index.jsp:16 Uncaught ReferenceError: $ is not defined
- 函数中返回字符串的方法
- Linux:使用xargs为其他命令提供参数
- iOS OC内存分析优化~笔记
- Iput设备使用分析--2(应用层面)
- 189. Rotate Array
- C#基础-016 循环
- 邻接表的创建
- 深度学习方法(十四):轻量级CNN网络设计——MobileNet,ShuffleNet,文末有思考
- JAVA中的反射机制
- 1016
- static关键字解析
- idea中Hibernate错误:无法解析表