Ruff 驱动开发的基本概念
在 Ruff 的开发体系内,驱动是一个重要的概念,它是硬件设备能够正常运作的基础。从 Ruff 应用开发者的角度来看,驱动同普通的模块没有任何分别,都是能够调用的普通程序库。但在开发层面,驱动同普通的模块还是略有不同。
接口
接口,是外设的连接方式。通过这些接口,外设就可以上报数据、下发控制、彼此通信等。业界目前已经有了一些标准的接口,大多数外设都是能够满足这些接口的。Ruff 对这些接口进行了抽象,使得开发者可以用 JavaScript 控制硬件设备。
输入输出
Ruff 的驱动里有一个描述文件: driver.json
,这个文件定义了驱动的输入和输出。
这里的输入指的是,驱动所需要的接口,比如,对于一个按键的外设而言,它需要一个 GPIO 接口。下面是一个例子:{
"models": [...],
"inputs": {
"...": {
"type": ...,
"args": {
...
}
}
}
}
请参考接口文档了解具体的配置:
驱动开发
定义设备: ;
var driver = require('ruff-driver');
module.exports = driver({
attach: function (inputs) {
// ...
}
});
这里用到了 ruff-driver
,这是驱动开发的基础。我们给 driver
方法提供了一些参数,这里可以声明我们要给应用开发者提供的方法。
请参考 Ruff Driver 了解更多。
依赖注入
依赖注入是一种常见的软件设计模式。
Ruff 的驱动编程模型采用了依赖注入的方式,在驱动开发过程中,开发者无需关心设备的具体连接方式,只需关注本驱动的功能。驱动所依赖的接口是在运行过程中由框架注入的。
这种设计方式将开发者从底层硬件连接方式中解放出来,同时,也为测试驱动的功能打下了基础。
获取依赖的方式我们已经在 attach
部分看到了,通过输入参数即可得到。