模拟器
模拟器提供了一个虚拟的环境,让我们可以在其中运行和测试各种操作系统和软件配置, 无需使用实际的物理硬件或在真实的操作系统环境中执行。
使用模拟器开发驱动时使用的模拟器主要分为两类:
- 串口模拟器:serialport simulator
- 本地库模拟器:native lib simulator
下文以NFC驱动为例介绍模拟器的开发
名称 | 描述 | 下载 |
---|---|---|
device-nfc-v3.3.0 | NFC设备驱动 | 下载 |
驱动
一、增加模拟器文件 simulator/device-nfc-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
"use strict";
const {CoreDefine, CoreClass} = require('@cutos/core');
const {SerialPort} = require("@cutos/drivers");
const {TYPE, CMD} = require('./device-nfc-def.js');
const {DeviceNFCSimulator} = require("./simulator/device-nfc-simulator");//导入模拟器
const {opts} = require('./config.json');
class DeviceNFC extends CoreClass.Driver {
constructor(name) {
super(name, TYPE);
//name为'mock'使用模拟器
if (name === 'mock') {
this.simulator = new DeviceNFCSimulator()
}
this.startBeat();
this.updateStatusInfo(CoreDefine.HEARTBEAT_STATUS.ALIVE, "alive");
this.onCommand(({cmd, args}, callback) => {
switch (cmd) {
case CMD.CONNECT:
this.connect(args, callback);
break;
}
});
}
connect(args, callback) {
let params = {...opts, ...args}
if (this.port) {
callback({status: true, msg: params})
}
//传入simulator参数,将模拟器与串口关联
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))
}
onSerialData(data) {
let code = ''
data = data.slice(2,)
for (let d of data) {
let hex = Number(d).toString(16)
hex = ('0' + hex).substring(hex.length - 1)
code += hex
}
this.sendData({id: code})
}
}
module.exports = DeviceNFC;
sdk
import {CoreAPI} from '@cutos/core';
import {DeviceNFC} from '../src/device-nfc.js';
CoreAPI.init('localhost', () => {
//实例化传入`'mock'`启动模拟器
let device = new DeviceNFC('mock');
device.init((result, error) => {
if (error) {
console.log(error)
return;
}
device.connect('/dev/ttySS2', (result, error) => {
console.log('Connect', result, error)
});
device.onData(data => {
console.log(data)
})
})
});
模拟器控制台
CUTOS上传驱动,发布lwa后可以打开模拟器控制台: http://+ CUTOS IP地址 +:3000/webapps/simulator/
,例如
http://192.168.1.105:3000/webapps/simulator/ 选择对应的模拟器发送模拟指令。
模拟器列表
选择对应的模拟器发送模拟指令