2010-07-30 91 views
0

我是开发Linux驱动程序的新手......。我正在开发使用TTY访问串行端口的SMS驱动程序(通过串口连接到调制解调器的AT命令)。使用TTY的中断驱动的驱动程序?

1)状态,以在由驾驶员发出的命令做出响应(即预期消息)

:驱动程序是用C写

在设计邮件从调制解调器驱动程序可以由两个事件触发2)指示新的短信(即意外消息)

我正在计划两个线程 - 一个用于写入TTY,另一个用于从TTY读取。是否可以配置TTY,以便我的读线程在传入的字符上醒来(即读线程是事件触发的而不是基于轮询的)?

最好的问候, 威特克

+0

附加注释:我已经使用了“对POSIX操作系统串行编程指南”(HTTP:// WWW。 easysw.com/~mike/serial/serial.html)作为启发,但在那里我的问题没有找到答案。 – Witek 2010-07-30 11:02:29

+0

你想要的是一个普通的'read()'如何在一个普通的阻塞文件描述符上工作 - 它将一直睡到数据可读取(或者一个信号被捕获或另一个异常情况)。 – caf 2010-07-30 12:25:20

回答

2

我不认为你真的想两个线程。典型的程序流程(编写AT命令,检查响应等)将更容易在单线程程序中编写和调试。

等待字符可以用select()致电。 tty层主要通过配置 的tcsetattr, tcgetattr和好友系统调用。通过这个调用,你可以在新行或每个字符上配置你想要中断的例子。请参阅手册页的man termios。两个大的选项是你想要的特殊字符,如EOF,EOL Ctrl-C等......被视为具有数据(原始模式)或被tty层(规范模式)解释。

看到串行编程指南上选择的一部分,或者选择联机帮助更多信息

+1

同意 - 单线程应该没问题。使用'select()'来阻塞,直到数据可以从串口或你的驱动程序的任何客户端获得,然后读取()数据并处理它。 – caf 2010-07-30 12:26:30