Emacs 可以与串口进行通信。在交互使用时,
M-x serial-term 会打开一个终端窗口。在 Lisp 程序中,
make-serial-process 会创建一个进程对象。
串口可以在运行时配置,无需关闭再重新打开。
serial-process-configure 函数允许你修改波特率、数据位和其他参数。
在由 serial-term 创建的终端窗口中,你可以点击模式行进行配置。
串口连接由进程对象表示,其使用方式与子进程或网络进程类似。
你可以发送和接收数据,并配置串口。不过,串口进程对象没有进程 ID,
你也无法向其发送信号,并且其状态码与其他类型的进程不同。
对进程对象使用 delete-process 或对进程缓冲区使用 kill-buffer
会关闭连接,但不会影响连接到串口的设备。
对于表示串口连接的进程对象,process-type 函数会返回符号 serial。
串口功能在 GNU/Linux、Unix 以及 MS Windows 系统上均可用。
在新缓冲区中为串口启动终端模拟器。 port 是要连接的串口名称。例如,在 Unix 上可以是 /dev/ttyS0。 在 MS Windows 上,可以是 COM1 或 \\.\COM10 (在 Lisp 字符串中反斜杠要写双份)。
speed 是串口的波特率(比特每秒)。9600 是常用值。
该缓冲区会处于 Term 模式;相关命令可参见 Term Mode in The GNU Emacs Manual。
你可以在模式行菜单中修改速率和配置。
如果 line-mode 非 nil,则使用 term-line-mode;
否则使用 term-raw-mode。
该函数创建一个进程和对应的缓冲区。参数以关键字/值对的形式指定。 以下是有意义的关键字列表,其中前两个(port 和 speed)为必填项:
:port port串口名称。在 Unix 和 GNU 系统上,这是一个文件名,如 /dev/ttyS0。 在 Windows 上,可以是 COM1,对于大于 COM9 的端口可使用 \\.\COM10 (Lisp 字符串中反斜杠需双写)。
:speed speed串口波特率,单位比特每秒。该函数会调用 serial-process-configure 处理速率;
更多细节参见该函数的后续说明。
:name name进程名称。如果未指定 name,则使用 port 作为进程名。
:buffer buffer与进程关联的缓冲区。取值可以是缓冲区对象或表示缓冲区名称的字符串。
进程输出会追加到该缓冲区末尾,除非你指定了输出流或过滤器函数来处理输出。
如果未指定 buffer,进程缓冲区名称取自 :name 关键字的值。
:coding coding如果 coding 是一个符号,它指定该进程读写共用的编码系统。
如果 coding 是 cons (decoding . encoding),
则 decoding 用于读取,encoding 用于写入。
如果未指定,默认根据数据本身确定编码系统。
:noquery query-flag将进程查询标志初始化为 query-flag。See 退出前询问确认。
未指定时该标志默认为 nil。
:stop bool如果 bool 非 nil,进程以停止状态启动。
在停止状态下,串口进程不接收传入数据,但可以发送 outgoing 数据。
停止状态可由 continue-process 清除,由 stop-process 设置。
:filter filter安装 filter 作为进程过滤器。
:sentinel sentinel安装 sentinel 作为进程标记函数。
:plist plist安装 plist 作为进程的初始属性列表。
:bytesize:parity:stopbits:flowcontrol这些参数由 make-serial-process 调用的 serial-process-configure 处理。
可通过 process-contact 函数获取原始参数列表(可能被后续配置修改)。
示例:
(make-serial-process :port "/dev/ttyS0" :speed 9600)
该函数配置串口连接。参数以关键字/值对形式指定。
未给出的属性会从进程当前配置(可通过 process-contact 获取)重新初始化,
或设为合理的默认值。定义的参数如下:
:process process:name name:buffer buffer:port port可以使用其中任意一个参数来标识要配置的进程。 如果这些参数均未指定,则使用当前缓冲区的进程。
:speed speed串口波特率,又称 波特率(baud rate)。取值可以是任意数字,
但大多数串口仅在 1200 到 115200 之间的少数固定值下工作,最常用的是 9600。
如果 speed 为 nil,函数会忽略其他所有参数且不配置串口。
这对某些特殊串口(如蓝牙转串口适配器)很有用,这类设备只能通过连接发送 AT 指令配置。
nil 仅对已通过 make-serial-process 或 serial-term 打开的连接有效。
:bytesize bytesize每个字节的位数,可为 7 或 8。如果未指定或为 nil,默认值为 8。
:parity parity取值可为 nil(不使用校验位)、符号 odd(奇校验)或符号 even(偶校验)。
未指定时默认无校验。
:stopbits stopbits终止每个字节传输的停止位位数。stopbits 可为 1 或 2。
未指定或为 nil 时默认值为 1。
:flowcontrol flowcontrol该连接使用的流控类型,可为 nil(不使用流控)、
符号 hw(使用 RTS/CTS 硬件流控)或符号 sw(使用 XON/XOFF 软件流控)。
未指定时默认无流控。
在内部,make-serial-process 会调用 serial-process-configure
完成串口的初始配置。