/** * 应用主入口文件 * 负责初始化系统各组件、驱动和服务,启动应用程序 */ import log from '../dxmodules/dxLogger.js' import std from '../dxmodules/dxStd.js' import bus from '../dxmodules/dxEventBus.js' import screen from './screen.js' import driver from './driver.js' import pool from '../dxmodules/dxWorkerPool.js' import config from '../dxmodules/dxConfig.js' import face from '../dxmodules/dxFace.js' import net from '../dxmodules/dxNet.js' import mqtt from '../dxmodules/dxMqtt.js' import dxNfc from '../dxmodules/dxNfc.js' import dxUart from '../dxmodules/dxUart.js' import dxGpioKey from '../dxmodules/dxGpioKey.js' /** * 事件总线主题列表 * 包含系统中所有需要监听的事件主题 */ let topics = ["getCode", face.RECEIVE_MSG, dxGpioKey.RECEIVE_MSG, "netGetWifiSsidList", "switchNetworkType", "access", "setConfig", dxNfc.RECEIVE_MSG, net.STATUS_CHANGE, mqtt.CONNECTED_CHANGED, mqtt.RECEIVE_MSG, dxUart.VG.RECEIVE_MSG + driver.uart485.id, dxUart.VG.RECEIVE_MSG + driver.uartCode.id, "trackResult"] /** * 初始化控制器 * 初始化系统所有驱动模块 */ function initController() { driver.gpio.init() // 初始化GPIO driver.watchdog.init() // 初始化看门狗 driver.config.init() // 初始化配置 driver.gpiokey.init() // 初始化GPIO按键 driver.net.init() // 初始化网络 driver.sqlite.init() // 初始化数据库 driver.alsa.init() // 初始化音频 driver.nfc.init() // 初始化NFC driver.nfc.eidInit() // 初始化EID(电子身份证) driver.uart485.init() // 初始化UART485 driver.uartCode.init() // 初始化UART码 driver.capturer.init() // 初始化摄像头 std.sleep(100) // 等待100ms driver.face.init() // 初始化人脸识别 std.sleep(100) // 等待100ms driver.pwm.init() // 初始化PWM std.sleep(100) // 等待100ms driver.mqtt.init() // 初始化MQTT driver.autoRestart.init() // 初始化自动重启 } /** * 应用程序启动函数 * 初始化控制器、屏幕、创建工作线程和服务池 */ (function () { initController() // 初始化控制器 screen.init() // 初始化屏幕 bus.newWorker('controller', '/app/code/src/controller.js') // 创建控制器工作线程 pool.init('/app/code/src/services.js', bus, topics, 5, 100) // 初始化服务池 const appVersion = 'vf105_v12_access_2.0.1.1' // 应用版本号 config.setAndSave('sys.version', appVersion) // 保存版本号到配置 config.setAndSave('sys.appVersion', appVersion) // 保存应用版本号到配置 log.info("=================== version:" + appVersion + " ====================") })(); /** * 主循环 * 定期喂狗、执行看门狗循环和屏幕循环 */ std.setInterval(() => { try { driver.watchdog.feed("main", 30) // 喂狗,设置30秒超时 driver.watchdog.loop() // 执行看门狗循环 screen.loop() // 执行屏幕循环 } catch (error) { log.error(error) // 记录错误 } }, 5) // 每5ms执行一次