Skip to main content
自定义驱动用于控制 Lager 未内置的仪器,例如自研的测试夹具。只需将其编写为一个小型驱动包,使用 lager drivers install 安装到 Box 上,之后每位用户都可以用标准 CLI 操作它的 Net。驱动代码只保存在 Box 上。

驱动包结构

驱动可以导入 Python 标准库、pyserial 以及 Box 上的 lager 包。

清单文件

清单文件给出驱动的类型、Net 设置和操作。CLI 根据它生成 lager <type> 命令,Box 按它校验每次调用。
每个 param 和 arg 都有一个 type:str、int、float、bool 或 choice。param 还可以是 net,表示另一个指定 role 的已保存 Net;驱动通过该 Net 访问硬件。字段还可以带有 required、default、min 和 max(仅限数字)、choices(用于 choice)以及 help。名称由小写字母、数字和 _ 组成;CLI 将 hold_time 显示为 --hold-time。

驱动代码

  • 只有标记了 @action 的方法可以被调用,并且每个方法都必须在清单文件中列出。方法以关键字参数接收操作的参数,类型与清单文件一致。
  • setup() 在操作之前运行,teardown() 在操作之后运行,即使操作抛出异常也会运行。
  • 返回字典、单个值或 None。字典中的 message 由 CLI 输出,其他键显示在其下方,--json 输出完整结果。
  • 异常会作为错误返回给用户,包含其类型和消息。
  • print() 的输出和 self.log 写入 Box 日志,不会显示给用户。

调用的运行方式

每次调用都会在 Box 上的新进程中运行驱动。驱动崩溃或挂起都不会使 Box 停止工作。Box 会在调用之前加载 Lager,因此进程启动很快。每次调用都会重新加载 driver.py,因此安装的更新在下一次调用时生效。同一 Net 上的两次调用按顺序依次运行。如果某个 lager uart 会话占用了驱动所用的 UART Net,调用会被拒绝,直到该会话关闭。

在脚本中使用驱动

lager python 脚本可以直接使用自定义 Net:

安装和使用

驱动在 Box 上运行,权限与 lager python 脚本相同。它不会出现在公开的 Lager 代码中,但能够连接到 Box 的人可以读取它。