simulator
模拟器提供了一个虚拟的环境,让我们可以在其中运行和测试各种操作系统和软件配置, 无需使用实际的物理硬件或在真实的操作系统环境中执行。
目前支持的模拟器设备包括:
- 身份证读卡器设备
- NFC设备
- 指纹设备
- 血液冷藏箱设备
- 体检机设备
使用模拟器开发驱动时使用的模拟器主要分为类:
- 串口模拟器:serialport simulator
- 本地库模拟器:native lib simulator
开发的设备模拟器继承于以上两种类型,并在设备模拟器中重写或补充特定的方法。
- 设备模拟器:device simulator
项目结构
├── driver/ # 驱动
│ ├── src/ # 驱动源码目录
│ ├── simulator/ #
│ ├── device-simulator.js # 继承的模拟器类,可在其中重写触发事件方法、处理数据方法或自定义方法
│ ├── config.json # 配置文件,配置相关参数
│ ├── driver-template.js # 驱动模版
│ ├── driver-template-def.js # 设备驱动数据定义(与sdk中一样)
│ ├── index.js # 驱动加载文件
│ ├── test/ # 测试目录
│ ├── main.js # 测试入口文件,模拟cutos,创建一个驱动服务
│ ├── package.json # 本项目的配置信息
│ ├── gulpfile.js # 打包文件
│ ├── readme.txt # 说明书
├── sdk/ # 接口SDK
│ ├── src/ # 源码目录
│ ├── driver-template.js # 设备模版
│ ├── driver-template-def.js # 设备驱动数据定义(与driver中一样)
│ ├── test/ # 测试目录
│ ├── main.js # 测试入口文件
│ ├── package.json # 本项目的配置信息
│ ├── gulpfile.mjs # 打包文件
│ ├── readme.txt # 说明书
使用模拟器开发驱动 VS 真实设备开发驱动
下文以NFC模拟器为例
驱动
一、增加模拟器文件 simulator/device-simulator.js
"use strict";
const fs = require('node:fs')
const path = require('node:path')
const {SerialPortSimulator} = require('@cutos/drivers')
const config = require('../config.json')
class DeviceNFCSimulator extends SerialPortSimulator {
constructor() {
super(config);
}
getInfo() {
let readme = fs.readFileSync(path.join(__dirname, 'README.md'), 'utf-8')
return {readme}
}
}
module.exports = {DeviceNFCSimulator};
二、驱动文件device-nfc.js变化
① 导入device-simulator.js
const {SerialPort} = require("@cutos/drivers");
const {DeviceNFCSimulator} = require("./simulator/device-nfc-simulator");
②驱动文件的构造函数中判断'mock'确定使用串口模拟数据,未传'mock'使用真实设备。
if (name === 'mock') {
this.simulator = new DeviceNFCSimulator()
}
③设备连接方法中创建一个SerialPort实例,并监听端口发出的数据。
connect(args, callback)
{
let params = {...opts, ...args}
if (this.port) {
callback({status: true, msg: params})
}
this.port = new SerialPort(params.path, params.baudRate, err => {
if (err) {
callback({status: false, msg: err.message})
} else {
callback({status: true, msg: params})
}
}, this.simulator)
this.port.on('data', data => this.onSerialData(data))
}
sdk
① test/main.js
中实例化传入'mock'
let device = new DeviceNFC('mock');
② 调用设备连接方法,传入端口路径
device.connect('/dev/ttySS2', (result, error) => {
console.log('Connect', result, error)
});
模拟器控制台
CUTOS上传驱动,发布lwa后可以打开模拟器控制台: http://+ CUTOS IP地址 +:3000/webapps/simulator/
,例如
http://192.168.1.105:3000/webapps/simulator/ 选择对应的模拟器发送模拟指令。