驱动编程模型

Ruff 驱动开发的基本概念

在 Ruff 的开发体系内,驱动是一个重要的概念,它是硬件设备能够正常运作的基础。从 Ruff 应用开发者的角度来看,驱动同普通的模块没有任何分别,都是能够调用的普通程序库。但在开发层面,驱动同普通的模块还是略有不同。

接口

接口,是外设的连接方式。通过这些接口,外设就可以上报数据、下发控制、彼此通信等。业界目前已经有了一些标准的接口,大多数外设都是能够满足这些接口的。Ruff 对这些接口进行了抽象,使得开发者可以用 JavaScript 控制硬件设备。

输入输出

Ruff 的驱动里有一个描述文件: driver.json ,这个文件定义了驱动的输入和输出。

这里的输入指的是,驱动所需要的接口,比如,对于一个按键的外设而言,它需要一个 GPIO 接口。下面是一个例子:

{
"models": [...],
"inputs": {
"...": {
"type": ...,
"args": {
...
}
}
}
}

请参考接口文档了解具体的配置:

驱动开发

定义设备:

'use strict';

var driver = require('ruff-driver');

module.exports = driver({
attach: function (inputs) {
// ...
}
});

这里用到了 ruff-driver ,这是驱动开发的基础。我们给 driver 方法提供了一些参数,这里可以声明我们要给应用开发者提供的方法。

请参考 Ruff Driver 了解更多。

依赖注入

依赖注入是一种常见的软件设计模式。

Ruff 的驱动编程模型采用了依赖注入的方式,在驱动开发过程中,开发者无需关心设备的具体连接方式,只需关注本驱动的功能。驱动所依赖的接口是在运行过程中由框架注入的。

这种设计方式将开发者从底层硬件连接方式中解放出来,同时,也为测试驱动的功能打下了基础。

获取依赖的方式我们已经在 attach 部分看到了,通过输入参数即可得到。