模块 serial

USB 串行设备接口

函数

add_handler (args) 添加新的串行设备处理器
send (dev, data) 向串行设备发送消息

表

cc CC(特殊字符)常量
iflag iflag 常量
oflag oflag 常量
cflag cflag 常量
lflag lflag 常量
speed 速度常量


函数

add_handler (args)
添加新的串行设备处理器

参数:

  • args
    • id 处理器的唯一标识符
    • match 函数(attrs),如果处理器应该接受具有给定属性的设备则返回 true, 否则返回 false
    • configure 函数(term),接收设备的初始终端设置并返回新的终端 设置。回调应该使用按位操作修改输入表,然后返回输入表
    • add 函数(id, name, dev),当此处理器的新设备已连接并初始化时调用
    • remove 函数(id),当此处理器的已连接设备已断开连接时调用
    • event 函数(id, data),当从此处理器的已连接设备接收到消息时调用。 data 参数的长度不会超过 255 字节。超过 255 字节的消息将在 多个事件回调中分散。多个短于 255 字节的消息可能出现在单个事件 回调中。

用法:

    friends = {}
    
    serial.add_handler({
      id = "example_id", -- 可以是数字或字符串
    
      match = function(attrs)
        local is_match = (
              (attrs["vendor"] == "FTDI")
          and (attrs["model"] == "FT232R")
          and (attrs["serial"] == "ABC123")
          and (attrs["interface"] == "00")
        )
        return is_match
      end,
    
      configure = function(term)
          -- 设置波特率。
          term.ispeed = term.ispeed | serial.speed.B115200
          term.ospeed = term.ospeed | serial.speed.B115200
    
          -- 启用一些标志。
          term.iflag = term.iflag | serial.iflag.INCLR
          term.oflag = term.oflag | serial.oflag.ONLCR
          term.cflag = term.cflag | serial.cflag.CS8
    
          -- 禁用一些标志。
          term.lflag = term.lflag & (~serial.lflag.ECHO)
    
          -- 返回复制并修改的表。
          return term
      end,
    
      add = function(id, name, dev)
        print("说你好...")
        serial.send(dev, "hello " .. name .. "!")
        tab.insert(friends, id, dev)
      end,
    
      remove = function(id)
        print("说再见已经太晚了。")
        tab.remove(friends, id)
      end,
    
      event = function(id, data)
        print(friends[id] .. " 说:", data)
      end
    })
send (dev, data)
向串行设备发送消息

参数:

  • dev 不透明设备指针
  • data 要发送的字符串消息

表

cc
CC(特殊字符)常量

字段:

  • VINTR INTR 字符
  • VQUIT QUIT 字符
  • VERASE ERASE 字符
  • VKILL KILL 字符
  • VEOF EOF 字符
  • VTIME TIME 值
  • VMIN MIN 值
  • VSTART START 字符
  • VSTOP STOP 字符
  • VSUSP SUSP 字符
  • VEOL EOL 字符
iflag
iflag 常量

字段:

  • IGNBREAK 忽略中断条件。
  • BRKINT 中断时发出信号。
  • IGNPAR 忽略具有奇偶校验错误的字符。
  • PARMRK 标记奇偶校验和帧错误。
  • INPCK 启用输入奇偶校验。
  • ISTRIP 剥离字符的第 8 位。
  • INCLR 在输入时将 NL 映射到 CR。
  • IGNCR 忽略 CR。
  • ICRNL 在输入时将 CT 映射到 NL。
  • IUCLC 在输入时将大写字符映射为小写(不在 POSIX 中)。
  • IXON 启用开始/停止输出控制。
  • IXANY 启用任何字符重新启动输出。
  • IXOFF 启用开始/停止输入控制。
  • IMAXBEL 启用开始/停止输入控制。
  • IUTF8 输入是 UTF8(不在 POSIX 中)。
oflag
oflag 常量

字段:

  • OPOST 后处理输出。
  • OLCUC 在输出时将小写字符映射为大写(不在 POSIX 中)。
  • ONLCR 在输出时将 NL 映射到 CR-NL。
  • OCRNL 在输出时将 CR 映射到 NL。
  • ONOCR 在第 0 列不输出 CR。
  • ONLRET NL 执行 CR 功能。
  • OFILL 使用填充字符进行延迟。
  • OFDEL 填充是 DEL。
  • VTDLY 选择垂直制表符延迟:
  • VT0 垂直制表符延迟类型 0。
  • VT1 垂直制表符延迟类型 1。
cflag
cflag 常量

字段:

  • CSIZE 字符大小
  • CS5 每个字符/符号 5 位。
  • CS6 每个字符/符号 6 位。
  • CS7 每个字符/符号 7 位。
  • CS8 每个字符/符号 8 位。
  • CSTOPB 发送两个停止位,否则发送一个。
  • CREAD 启用接收器。
  • PARENB 奇偶校验启用。
  • PARODD 奇校验,否则偶校验。
  • HUPCL 最后关闭时挂断。
  • CLOCAL 忽略调制解调器状态线。
lflag
lflag 常量

字段:

  • ISIG 启用信号。
  • ICANON 规范输入(擦除和终止处理)。
  • ECHO 启用回显。
  • ECHOE 将擦除字符回显为纠错退格。
  • ECHOK 回显 KILL。
  • ECHONL 回显 NL。
  • NOFLSH 中断或退出后禁用刷新。
  • TOSTOP 为后台输出发送 SIGTTOU。
  • IEXTEN 启用实现定义的输入处理。
speed
速度常量

字段:

  • B50 50 波特
  • B75 75 波特
  • B110 110 波特
  • B134 134 波特
  • B150 150 波特
  • B200 200 波特
  • B300 300 波特
  • B600 600 波特
  • B1200 1200 波特
  • B1800 1800 波特
  • B2400 2400 波特
  • B4800 4800 波特
  • B9600 9600 波特
  • B19200 19200 波特
  • B38400 38400 波特
  • B57600 57600 波特
  • B115200 115200 波特
  • B230400 230400 波特
  • B460800 460800 波特
  • B500000 500000 波特
  • B576000 576000 波特
  • B921600 921600 波特
  • B1000000 1000000 波特
  • B1152000 1152000 波特
  • B1500000 1500000 波特
  • B2000000 2000000 波特
  • B2500000 2500000 波特
  • B3000000 3000000 波特
  • B3500000 3500000 波特
  • B4000000 4000000 波特
由 LDoc 1.5.0 生成 最后更新 2025-04-06 15:35:25