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/src/service/gpiokeyService.js |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 52 insertions(+), 0 deletions(-)

diff --git a/vf205_access/src/service/gpiokeyService.js b/vf205_access/src/service/gpiokeyService.js
new file mode 100644
index 0000000..bfbae2a
--- /dev/null
+++ b/vf205_access/src/service/gpiokeyService.js
@@ -0,0 +1,52 @@
+/**
+ * GPIO鎸夐敭鏈嶅姟妯″潡
+ * 澶勭悊GPIO鎸夐敭鐩稿叧鐨勪笟鍔¢�昏緫锛屼富瑕佸寘鎷槻鎷嗘姤璀﹀姛鑳�
+ */
+import logger from "../../dxmodules/dxLogger.js";
+import config from "../../dxmodules/dxConfig.js";
+import driver from "../driver.js";
+import bus from "../../dxmodules/dxEventBus.js";
+
+const gpiokeyService = {}
+
+/**
+ * 鎺ユ敹GPIO鎸夐敭娑堟伅骞跺鐞�
+ * @param {object} data - GPIO鎸夐敭鏁版嵁
+ * @param {number} data.code - GPIO鐨勬爣璇嗭紝琛ㄧず鏄摢涓狦PIO鏈夎緭鍏�  256-闃叉媶锛�257-闂ㄧ
+ * @param {number} data.type - 鎸夐敭绫诲瀷锛�1琛ㄧず闃叉媶/闂ㄧ鐘舵�佸彉鍖�
+ * @param {number} data.value - 鎸夐敭鍊硷紝1琛ㄧず瑙﹀彂/闂ㄥ紑锛�0琛ㄧず鏈Е鍙�/闂ㄥ叧
+ */
+gpiokeyService.receiveMsg = function (data) {
+    logger.info('[gpiokeyService] 鎺ユ敹鍒癎PIO娑堟伅:', JSON.stringify(data))
+    
+    // 闃叉媶鎶ヨ澶勭悊
+    if (data.code === 256) {
+        if (config.get("access.tamperAlarm") && data.type == 1 && data.value == 1) {
+            logger.info('[gpiokeyService] 闃叉媶鎶ヨ瑙﹀彂')
+            driver.alsa.play("/app/code/resource/wav/alarm.wav")
+        }
+    }
+    
+    // 闂ㄧ鐘舵�佸彉鍖栧鐞�
+    if (data.code === 257) {
+        const doorStatus = data.value == 1 ? "闂ㄥ紑" : "闂ㄥ叧"
+        logger.info(`[gpiokeyService] 闂ㄧ鐘舵�佸彉鍖�: ${doorStatus}`)
+
+        if (data.value === 1) {
+            // 闂ㄥ紑
+            driver.alsa.play("/app/code/resource/CN/wav/door_open.wav")
+        } else {
+            // 闂ㄥ叧
+            driver.alsa.play("/app/code/resource/CN/wav/door_close.wav")
+        }
+        
+        // 鍙戦�侀棬纾佺姸鎬佸彉鍖栭�氱煡浜嬩欢
+        bus.fire('doorStatusChanged', {
+            status: data.value,
+            statusText: doorStatus,
+            time: Math.floor(Date.now() / 1000)
+        })
+    }
+}
+
+export default gpiokeyService
\ No newline at end of file

--
Gitblit v1.9.3