12.2.7 触摸屏设备驱动的读函数
触摸屏设备驱动的读函数实现缓冲区中信息向用户空间的复制,当缓冲区有内容时,直接复制;否则,如果用户阻塞访问触摸屏,则进程在等待队列上睡眠,否则,立即返回-EAGAIN,如代码清单12.25所示。
代码清单12.25 触摸屏设备驱动的读函数
1 static ssize_t s3c2410_ts_read(struct file *filp, char *buffer, size_t count,
2 loff_t *ppos)
3 {
4 TS_RET ts_ret;
5
6 retry:
7 if (tsdev.head != tsdev.tail) //缓冲区有信息
8 {
9 int count;
10 count = tsRead(&ts_ret);
11 if (count)
12 copy_to_user(buffer, (char*) &ts_ret, count);//复制到用户空间
13 return count;
14 }
15 else
16 {
17 if (filp->f_flags &O_NONBLOCK) //非阻塞读
18 return - EAGAIN;
19 interruptible_sleep_on(&(tsdev.wq)); //在等待队列上睡眠
20 if (signal_pending(current))
21 return - ERESTARTSYS;
22 goto retry;
23 }
24
25 return sizeof(TS_RET);
26 }
|
| 回书目 上一节 下一节 |