模拟器

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

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

下文以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/ 选择对应的模拟器发送模拟指令。

模拟器列表 console1.png

选择对应的模拟器发送模拟指令 console.png

results matching ""

    No results matching ""