From e491cdb48129752324c4e3764f99bd9203c56dec Mon Sep 17 00:00:00 2001
From: lgq <1015864684@qq.com>
Date: 星期二, 31 三月 2026 09:48:44 +0800
Subject: [PATCH] 1.新增VF205门禁机代码
---
vf205_access/dxmodules/vgUartWorker.js | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 166 insertions(+), 0 deletions(-)
diff --git a/vf205_access/dxmodules/vgUartWorker.js b/vf205_access/dxmodules/vgUartWorker.js
new file mode 100644
index 0000000..62adb8c
--- /dev/null
+++ b/vf205_access/dxmodules/vgUartWorker.js
@@ -0,0 +1,166 @@
+//build:20240715
+//鐢ㄤ簬绠�鍖杣art缁勪欢寰厜閫氫俊鍗忚鐨勪娇鐢紝鎶妘art灏佽鍦ㄨ繖涓獁orker閲岋紝浣跨敤鑰呭彧闇�瑕佽闃卐ventcenter鐨勪簨浠跺氨鍙互鐩戝惉uart
+import log from './dxLogger.js'
+import uart from './dxUart.js'
+import common from './dxCommon.js';
+import dxMap from './dxMap.js'
+import * as os from "os";
+import std from './dxStd.js'
+const map = dxMap.get('default')
+const id = "{{id}}"
+const options = map.get("__vguart__run_init" + id)
+const timeout = 100
+const longTimeout = 500
+
+function run() {
+ uart.open(options.type, options.path, options.id)
+ log.info('vg uart start......,id =', id)
+ std.setInterval(() => {
+ try {
+ // 鎺ユ敹鏁版嵁妯″紡
+ if (options.passThrough) {
+ // 閫忎紶妯″紡锛岄�傞厤闊︽牴涔嬬被
+ passThrough()
+ }
+ if(options.type == uart.TYPE.USBHID){
+ receiveUsb()
+ } else {
+ // 寰厜閫氫俊鍗忚妯″紡
+ receive()
+ }
+ } catch (error) {
+ log.error(error)
+ }
+ }, 10)
+}
+
+// 閫忎紶妯″紡
+function passThrough() {
+ let pack = [];
+ let buffer = readOne()
+ while (buffer !== null) {
+ pack.push(buffer)
+ os.sleep(10)
+ buffer = readOne()
+ }
+ if (pack.length !== 0) {
+ __bus.fire(uart.VG.RECEIVE_MSG + options.id, pack)//bus.newworker鐨勬椂鍊欎細import eventbus as __bus
+ }
+}
+
+function receive() {
+ //鍓�2涓瓧鑺傚繀椤绘槸55aa
+ let buffer = readOne()
+ if (buffer === null) {
+ return;
+ }
+ if (buffer == 85) {//0x55
+ buffer = readOne()
+ if (buffer != 170) {//0xaa
+ return;
+ }
+ } else {
+ return;
+ }
+ let pack = {};
+ // 璇诲彇鍛戒护瀛楋紙鍗犵敤1Byte锛�
+ buffer = readOne()
+ if (buffer === null) {
+ return;
+ }
+ pack.cmd = buffer
+ if (options.result) {
+ // 璇诲彇缁撴灉瀛楋紙鍗犵敤1Byte锛�
+ buffer = readOne()
+ if (buffer === null) {
+ return;
+ }
+ pack.result = buffer;
+ } else {
+ pack.result = 0//0涓嶅奖鍝峛cc鐨勮绠楃粨鏋�
+ }
+ // 鍛戒护澶村凡瑙f瀽瀹岋紝璇诲彇闀垮害瀛楋紙鍗犵敤2Byte锛�
+ let len1 = readOne()
+ if (len1 === null) {
+ return;
+ }
+ let len2 = readOne()
+ if (len2 === null) {
+ return;
+ }
+ // 瑙f瀽闀垮害瀛楋紝鑾峰彇鏁版嵁鍩熼暱搴�
+ let len = len1 + len2 * 256
+ // 鏍规嵁闀垮害瀛楄鍙栨寚瀹氭暟鎹暱搴�
+ pack.length = len
+ if (len > 0) {
+ buffer = uart.receive(len, longTimeout, options.id)
+ if (buffer === null) {
+ return;
+ }
+ pack.data = Array.from(buffer);
+ } else {
+ pack.data = 0
+ }
+ // 璇诲彇1Byte鐨勬牎楠屼綅
+ buffer = readOne()
+ if (buffer === null) {
+ return;
+ }
+ let bcc = valid(pack, buffer)
+ let res = { cmd: int2hex(pack.cmd), length: pack.length, bcc: bcc }
+ if (pack.length > 0) {
+ res.data = common.arrToHex(pack.data)
+ }
+ if (options.result) {
+ res.result = int2hex(pack.result)
+ }
+ __bus.fire(uart.VG.RECEIVE_MSG + options.id, res)//bus.newworker鐨勬椂鍊欎細import eventbus as __bus
+}
+
+
+function receiveUsb() {
+ let arr = uart.receive(1024, 100, options.id)
+ if (arr && arr[0] == 0x55 && arr[1] == 0xAA) {
+ let cmd = arr[2]
+ let dlen = arr[4] * 256 + arr[3]
+ if (dlen > (1024 - 6)) {
+ let tempLen = dlen - 1024 + 5
+ while(tempLen >= 0){
+ let tempArr = uart.receive(1024, 100, options.id)
+ tempLen = tempLen - tempArr.length
+ let newArr = new Uint8Array(arr.length + tempArr.length)
+ newArr.set(arr)
+ newArr.set(tempArr, arr.length)
+ arr = newArr
+ }
+ }
+ let data = (dlen == 0 ? [] : Object.values(arr.slice(5, 5 + dlen)))
+ let bcc = common.calculateBcc([0x55, 0xAA, arr[2], arr[3], arr[4]].concat(data))
+ data = data.map(v => v.toString(16).padStart(2, '0')).join('')
+ if (bcc == arr[5 + dlen]) {
+ let res = { "cmd": cmd.toString(16).padStart(2, '0'), "length": dlen, "data": data, "bcc": true }
+ __bus.fire(uart.VG.RECEIVE_MSG + options.id, res)//bus.newworker鐨勬椂鍊欎細import eventbus as __bus
+ }
+ }
+}
+
+function valid(pack, bcc) {
+ let temp = common.calculateBcc([0x55, 0xaa, pack.cmd, pack.result, pack.length % 256, Math.floor(pack.length / 256)].concat(pack.data))
+ return temp === bcc
+}
+function readOne() {
+ let buffer = uart.receive(1, timeout, options.id)
+ if (buffer) {
+ return parseInt(buffer);
+ }
+ return null
+}
+function int2hex(num) {
+ return num.toString(16).padStart(2, '0')
+}
+
+try {
+ run()
+} catch (error) {
+ log.error(error, error.stack)
+}
\ No newline at end of file
--
Gitblit v1.9.3