lager drivers install 安装到 Box 上,之后每位用户都可以用标准 CLI 操作它的 Net。驱动代码只保存在 Box 上。
驱动包结构
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:
安装和使用
lager python 脚本相同。它不会出现在公开的 Lager 代码中,但能够连接到 Box 的人可以读取它。
