simulator

模拟器提供了一个虚拟的环境,让我们可以在其中运行和测试各种操作系统和软件配置, 无需使用实际的物理硬件或在真实的操作系统环境中执行。

目前支持的模拟器设备包括:

  • 身份证读卡器设备
  • NFC设备
  • 指纹设备
  • 血液冷藏箱设备
  • 体检机设备

使用模拟器开发驱动时使用的模拟器主要分为类:

开发的设备模拟器继承于以上两种类型,并在设备模拟器中重写或补充特定的方法。

项目结构

├── 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/ 选择对应的模拟器发送模拟指令。 thumbnail.png

results matching ""

    No results matching ""