1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/**
 * 应用主入口文件
 * 负责初始化系统各组件、驱动和服务,启动应用程序
 */
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执行一次