/**
|
* 应用主入口文件
|
* 负责初始化系统各组件、驱动和服务,启动应用程序
|
*/
|
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执行一次
|