From c844cfbd3c6112cef396bdbaadb9cdd2e92680c7 Mon Sep 17 00:00:00 2001 From: liyi Date: Fri, 7 Mar 2025 18:10:07 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E5=A2=9E=E5=8A=A0=E6=8C=87=E7=BA=B9?= =?UTF-8?q?=E8=93=9D=E7=89=99=E5=9B=9E=E8=B0=83=E5=90=8E=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=AF=B9=E5=BA=94=E7=9A=84=E6=8E=A5=E5=8F=A3=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E3=80=81=E5=A2=9E=E5=8A=A0padding:=20'none'=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=93=9D=E7=89=99=E6=AD=A5=E9=AA=A4=E6=97=B6?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E7=9A=84=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common.js | 72 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 59 insertions(+), 13 deletions(-) diff --git a/common.js b/common.js index 11f6e31..4323ad0 100644 --- a/common.js +++ b/common.js @@ -17,14 +17,14 @@ import { } from './uni/basic' import { addCustomPasswordRequest, addFingerprintRequest, addIcCardRequest, - changeAdminKeyboardPwdRequest, clearAllIcCard, deleteIcCardRequest, + changeAdminKeyboardPwdRequest, clearAllFingerprint, clearAllIcCard, deleteFingerprintRequest, deleteIcCardRequest, deleteLockRequest, deletePasswordRequest, getLastRecordTimeRequest, getLockNetTokenRequest, getStarCloudToken, getUserNoListRequest, - updateElectricQuantityRequest, updateIcCardRequest, + updateElectricQuantityRequest, updateFingerprintRequest, updateIcCardRequest, updateLockUserNoRequest, updatePasswordRequest, uploadRecordRequest @@ -699,7 +699,7 @@ export function listenCharacteristicValue(res) { } else { this.parsingCharacteristicValue(binaryData).then(() => { }) - console.log('listenCharacteristicValue binaryData', binaryData) + } } else if (this.completeArray) { const combinedArray = new Uint8Array(this.completeArray.length + binaryData.length) @@ -717,6 +717,7 @@ export function listenCharacteristicValue(res) { // 解析特征值 export async function parsingCharacteristicValue(binaryData) { + // 0x20 明文 0x22 SM4(事先约定密钥) 0x23 SM4(设备指定密钥) if (binaryData[7] === 0x20) { if (binaryData[12] * 256 + binaryData[13] === cmdIds.getPublicKey) { @@ -763,7 +764,8 @@ export async function parsingCharacteristicValue(binaryData) { const cebBinaryData = binaryData.slice(12, binaryData.length - 2) const decrypted = sm4.decrypt(cebBinaryData, this.lockInfo.bluetooth.privateKey, { mode: 'ecb', - output: 'array' + output: 'array', + padding: 'none' }) console.log('ecb解密后的数据', decrypted) @@ -1001,13 +1003,56 @@ export async function parsingCharacteristicValue(binaryData) { } break; case subCmdIds.registerFingerprint: - console.log('注册指纹开始回调') - // 返回锁版应答的Status状态 - this.characteristicValueCallback(new Result(decrypted[2])) + console.log('注册指纹开始回调', decrypted) + if (decrypted[2] === Result.Success.code) { + // 锁版应答成功 + switch (this.requestParams.operate) { + case 0: + // 注册开始返回最大注册次数 + this.characteristicValueCallback(new Result(Result.Success.code, { + maxRegCount: decrypted[11], + }, Result.Success.message)) + await this.disconnectDevice() + break; + case 1: + // 修改 + const updateResult = await updateFingerprintRequest({ + ...this.requestParams, + fingerprintId: this.requestParams.fingerprintId, + fingerRight: this.requestParams.isAdmin + }) + this.characteristicValueCallback(updateResult) + await this.disconnectDevice() + break; + case 2: + // 删除 + const deleteResult = await deleteFingerprintRequest({ + fingerprintId: this.requestParams.fingerprintId, + lockId: this.lockInfo.lockId, + }) + this.characteristicValueCallback(deleteResult) + await this.disconnectDevice() + break; + case 3: + // 删除全部 + const deleteAllResult = await clearAllFingerprint({ + lockId: this.lockInfo.lockId, + }) + this.characteristicValueCallback(deleteAllResult) + await this.disconnectDevice() + break; + default: + this.characteristicValueCallback(new Result(decrypted[2])) + break; + } + } break; case subCmdIds.registerFingerprintProcess: console.log('注册指纹过程回调', decrypted) - emitRegisterFingerprintProcessEvent(decrypted) + emitRegisterFingerprintProcessEvent({ + status: decrypted[5], + process: decrypted[6] + }) break; case subCmdIds.registerFingerprintConfirm: if (this.requestParams.operate === 0) { @@ -1020,12 +1065,13 @@ export async function parsingCharacteristicValue(binaryData) { fingerprintUserNo: this.requestParams.fingerprintUserNo }) if (addResult.code === Result.Success.code) { - console.log('注册指纹确认回调') - // 触发指纹确认事件 - emitRegisterFingerprintConfirmEvent(addResult) - // 断开蓝牙连接 - await this.disconnectDevice() + // 增加返回一个指纹序号 + addResult.data.fingerprintNumber = decrypted[9] * 256 + decrypted[10]; } + // 触发指纹确认事件 + emitRegisterFingerprintConfirmEvent(addResult) + // 断开蓝牙连接 + await this.disconnectDevice() } break; default: