759 lines
28 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import {searchAndConnectDevice, writeBLECharacteristicValue} from "../uni/basic.js";
import {cmdIds, Result, subCmdIds, supportFunctionsFeatureBit} from '../constant'
import {
convertWeekdaysToNumber,
createPackageEnd,
md5Encrypt,
parseTimeToList,
timestampToArray,
convertTimeToBytes,
convertWeekdayArrayToBit,
_convertToMilliseconds,
checkRequiredFields,
} from "../format.js";
import {sm4} from "sm-crypto";
import {
checkRepeatCardName,
checkRepeatFaceName,
checkRepeatFingerprintName,
checkRepeatPalmVeinName,
checkRepeatRemoteName,
clearAllIcCard,
deleteIcCardRequest, getFaceListRequest,
getFingerprintListRequest,
getIcCardListRequest, getLockSettingRequest, getPalmVeinListRequest, getRemoteListRequest,
updateIcCardRequest
} from "../api.js";
/**
* 注册扩展产品(卡片、指纹、人脸、遥控、掌静脉等)
*
* @param {Object} params - 所需参数
* @param {string} params.type - 产品类型,['card','fingerprint','face','remote','palmVein']
* @param {string} params.keyId - 钥匙 ID
* @param {string} params.uid - 用户 ID
* @param {number} params.userCountLimit - 使用次数限制整型0xFFFF 表示不限次数
* @param {number} params.operate - 操作类型整型0: 注册, 1: 修改, 2: 删除, 3: 删除全部
* @param {number} params.isAdmin - 是否管理员整型1 表示是0 表示否
* @param {number} params.isForce - 是否胁迫整型1 表示是0 表示否
* @param {number} params.isRound - 是否循环整型1 表示是0 表示否
* @param {array} params.weekDay - 循环周期数组Bit0 -- 6 置位分别代表周日 -- 周六,例如:循环星期一、星期二、星期四,对应为:[124]
* @param {number} params.startDate - 生效日期时间戳永久则填0
* @param {number} params.endDate - 失效日期时间戳永久则填0
* @param {string} params.startTime - 生效时间,字符串,例如:'00:00'
* @param {string} params.endTime - 失效时间,字符串,例如:'00:00'
* @param {number} params.cardId - 卡片Id添加后由监听事件返回仅当 type 为 'card' 且operate!=1 时需要
* @param {number} params.cardNumber - 卡片序号,仅当 type 为 'card' 时需要
* @param {string} params.cardName - 卡片名称,仅当 type 为 'card' 时需要
* @param {number} params.cardType - 卡片类型1:永久2期限4:循环,仅当 type 为 'card' 时需要
* @param {number} params.cardUserNo - 卡UserNo仅当 type 为 'card' 时需要 (选填)
* @param {number} params.fingerprintId - 指纹id添加后由监听事件返回仅当 type 为 'fingerprint' 且operate!=1 时需要
* @param {number} params.fingerprintName - 指纹名,仅当 type 为 'fingerprint' 时需要
* @param {string} params.fingerprintNumber - 指纹序号,仅当 type 为 'fingerprint' 时需要
* @param {number} params.fingerprintType - 指纹类型1:永久2期限3单次4:循环,仅当 type 为 'fingerprint' 时需要
* @param {number} params.fingerprintUserNo - 指纹UserNo仅当 type 为 'fingerprint' 时需要 (选填)
* @param {number} params.deleteType - 删除方式,仅当 type 为 'fingerprint' 时需要 删除方式:1-通过APP走蓝牙删除必需先通过APP蓝牙删除后再调用该接口,2-通过网关或WiFi锁删除如果是WiFi锁或有连接网关则可以传2直接调用该接口从锁里删除指纹
* @param {number} params.faceId - 人脸id添加后由监听事件返回仅当 type 为 'face' 且operate!=1 时需要
* @param {number} params.faceName - 人脸名,仅当 type 为 'face' 时需要
* @param {string} params.faceNumber - 指纹序号,仅当 type 为 'face' 时需要
* @param {number} params.faceType - 指纹类型1:永久2期限4:循环,仅当 type 为 'face' 时需要
* @param {number} params.faceUserNo - 指纹UserNo仅当 type 为 'face' 时需要 (选填)
* @param {number} params.palmVeinId - 掌静脉id,添加后由监听事件返回,仅当 type 为 'palmVein' 且operate!=1 时需要
* @param {number} params.palmVeinName - 掌静脉名,仅当 type 为 'palmVein' 时需要
* @param {string} params.palmVeinNumber - 掌静脉序号,仅当 type 为 'palmVein' 时需要
* @param {number} params.palmVeinType - 掌静脉类型1:永久2期限4:循环,仅当 type 为 'palmVein' 时需要
* @param {number} params.palmVeinUserNo - 掌静脉UserNo仅当 type 为 'palmVein' 时需要 (选填)
* @param {number} params.remoteId - 遥控名,添加后由监听事件返回,仅当 type 为 'remote' 且operate!=1 时需要
* @param {number} params.remoteName - 遥控名,仅当 type 为 'remote' 时需要
* @param {string} params.remoteNumber - 遥控序号,仅当 type 为 'remote' 时需要
* @param {number} params.remoteType - 遥控类型1:永久2期限4:循环,仅当 type 为 'remote' 时需要
* @param {number} params.remoteUserNo - 遥控UserNo仅当 type 为 'remote' 时需要 (选填)
* @returns {Promise<Result>} - 返回注册结果的 Promise 对象
*/
export async function registerExtendedProducts(params) {
const cardRequiredFields = ['type', 'userCountLimit', 'operate', 'isAdmin', 'isForce', 'isRound', 'startDate', 'endDate'];
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `参数信息不完整: ${missingField}`);
}
// 循环类型参数校验
if (params.isRound && params.isRound === 1) {
const roundRequiredFields = ['startTime', 'endTime', 'weekDay'];
const missingField = checkRequiredFields(params, roundRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `参数信息不完整: ${missingField}`);
}
}
// 如果是卡片的话需要增加的参数
if (params.type === 'card') {
// 注册卡片时的参数校验
if (params.operate === 0) {
const cardRequiredFields = ['cardName', 'cardType', 'cardNumber'];
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `卡片信息不完整: ${missingField}`);
}
// 检查卡昵称是否重复
const checkRepeatCardNameResult = await checkRepeatCardName({
lockId: this.lockInfo.lockId,
cardName: params.cardName
})
if (checkRepeatCardNameResult.code !== Result.Success.code) {
return checkRepeatCardNameResult
}
}
// 修改卡片时的参数校验
if (params.operate === 1 || params.operate === 2) {
let cardRequiredFields = ['cardId'];
if (params.operate === 1) {
cardRequiredFields.push('cardType')
}
if (params.operate === 2) {
cardRequiredFields.push('cardNumber')
}
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `卡片信息不完整: ${missingField}`);
}
}
}
// 如果是指纹的话需要增加的参数
if (params.type === 'fingerprint') {
if (params.operate === 0) {
const cardRequiredFields = ['fingerprintName', 'fingerprintNumber', 'fingerprintType'];
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `指纹信息不完整: ${missingField}`);
}
// 检查卡昵称是否重复
const checkRepeatFingerprintNameResult = await checkRepeatFingerprintName({
lockId: this.lockInfo.lockId,
fingerprintName: params.fingerprintName
})
if (checkRepeatFingerprintNameResult.code !== Result.Success.code) {
return checkRepeatFingerprintNameResult
}
}
// 修改指纹时的参数校验
if (params.operate === 1 || params.operate === 2) {
let cardRequiredFields = ['fingerprintId'];
if (params.operate === 1) {
cardRequiredFields.push('fingerprintType')
}
if (params.operate === 2) {
cardRequiredFields.push('deleteType')
cardRequiredFields.push('fingerprintNumber')
}
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `指纹信息不完整: ${missingField}`);
}
}
}
// 如果是人脸的话需要增加的参数
if (params.type === 'face') {
if (params.operate === 0) {
const cardRequiredFields = ['faceName', 'faceNumber', 'faceType'];
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `人脸信息不完整: ${missingField}`);
}
// 检查卡昵称是否重复
const checkRepeatFaceNameResult = await checkRepeatFaceName({
lockId: this.lockInfo.lockId,
faceName: params.faceName
})
if (checkRepeatFaceNameResult.code !== Result.Success.code) {
return checkRepeatFaceNameResult
}
}
// 修改指纹时的参数校验
if (params.operate === 1 || params.operate === 2) {
let cardRequiredFields = ['faceId'];
if (params.operate === 1) {
cardRequiredFields.push('faceType')
}
if (params.operate === 2) {
cardRequiredFields.push('faceNumber')
}
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `人脸信息不完整: ${missingField}`);
}
}
}
// 如果是掌静脉的话需要增加的参数
if (params.type === 'palmVein') {
if (params.operate === 0) {
const cardRequiredFields = ['palmVeinName', 'palmVeinNumber', 'palmVeinType'];
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `掌静脉信息不完整: ${missingField}`);
}
// 检查卡昵称是否重复
const checkRepeatFaceNameResult = await checkRepeatPalmVeinName({
lockId: this.lockInfo.lockId,
palmVeinName: params.palmVeinName
})
if (checkRepeatFaceNameResult.code !== Result.Success.code) {
return checkRepeatFaceNameResult
}
}
// 修改指纹时的参数校验
if (params.operate === 1 || params.operate === 2) {
let cardRequiredFields = ['palmVeinId'];
if (params.operate === 1) {
cardRequiredFields.push('palmVeinType')
}
if (params.operate === 2) {
cardRequiredFields.push('palmVeinNumber')
}
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `掌静脉信息不完整: ${missingField}`);
}
}
}
// 如果是遥控的话需要增加的参数
if (params.type === 'remote') {
if (params.operate === 0) {
const cardRequiredFields = ['remoteName', 'remoteNumber', 'remoteType'];
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `遥控信息不完整: ${missingField}`);
}
// 检查卡昵称是否重复
const checkRepeatFaceNameResult = await checkRepeatRemoteName({
lockId: this.lockInfo.lockId,
remoteName: params.remoteName
})
if (checkRepeatFaceNameResult.code !== Result.Success.code) {
return checkRepeatFaceNameResult
}
}
// 修改指纹时的参数校验
if (params.operate === 1 || params.operate === 2) {
let cardRequiredFields = ['remoteId'];
if (params.operate === 1) {
cardRequiredFields.push('remoteType')
}
if (params.operate === 2) {
cardRequiredFields.push('remoteNumber')
}
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `遥控信息不完整: ${missingField}`);
}
}
}
// 添加类型1蓝牙2远程3发卡器
params.addType = 1;
// 操作后不断开蓝牙
params.disconnect = false;
let {
type,
operate,
isAdmin,
userCountLimit,
isForce,
isRound,
weekDay,
startDate,
endDate,
startTime,
endTime,
} = params
const uid = this.accountInfo.uid.toString()
const keyId = this.lockInfo.keyId.toString()
// 设置执行账号
const result = await this.login(uid)
if (result.code !== Result.Success.code) {
return result
}
// 确认设备连接正常
if (!params.connected) {
const searchResult = await searchAndConnectDevice(this.lockInfo.bluetooth.bluetoothDeviceName)
if (searchResult.code !== Result.Success.code) {
return searchResult
}
this.updateLockInfo(searchResult.data)
}
// 检查是否已添加为用户
const checkResult = await this.checkLockUser()
if (!checkResult) {
return {
code: -1
}
}
this.requestParams = params
// 处理时间戳
if (this.requestParams.startDate !== undefined && this.requestParams.startDate !== null) {
// 确保转换为数字类型
const startDate = Number(this.requestParams.startDate);
if (!isNaN(startDate)) {
this.requestParams.startDate = _convertToMilliseconds(startDate);
}
}
if (this.requestParams.endDate !== undefined && this.requestParams.endDate !== null) {
// 确保转换为数字类型
const endDate = Number(this.requestParams.endDate);
if (!isNaN(endDate)) {
this.requestParams.endDate = _convertToMilliseconds(endDate);
}
}
startDate = Math.floor(startDate / 1000)
endDate = Math.floor(endDate / 1000)
const length = 2 + 1 + 1 + 40 + 20 + 2 + 2 + 1 + 1 + 1 + 4 + 1 + 1 + 4 + 4 + 4 + 4 + 1 + 16
const headArray = this.createPackageHeader(3, length)
const contentArray = new Uint8Array(length)
contentArray[0] = cmdIds.expandCmd / 256
contentArray[1] = cmdIds.expandCmd % 256
// 子命令
if (type === 'card') {
contentArray[2] = subCmdIds.registerCard
} else if (type === 'fingerprint') {
contentArray[2] = subCmdIds.registerFingerprint
} else if (type === 'face') {
contentArray[2] = subCmdIds.registerFace
} else if (type === 'remote') {
contentArray[2] = subCmdIds.registerRemote
} else if (type === 'palmVein') {
contentArray[2] = subCmdIds.registerPalmVein
}
contentArray[3] = length - 3
for (let i = 0; i < keyId.length; i++) {
contentArray[i + 4] = keyId.charCodeAt(i)
}
for (let i = 0; i < uid.length; i++) {
contentArray[i + 44] = uid.charCodeAt(i)
}
// 子命令
if (type === 'card') {
contentArray[64] = (params.cardNumber || 0) / 256
contentArray[65] = (params.cardNumber || 0) % 256
} else if (type === 'fingerprint') {
contentArray[64] = (params.fingerprintNumber || 0) / 256
contentArray[65] = (params.fingerprintNumber || 0) % 256
} else if (type === 'face') {
contentArray[64] = (params.faceNumber || 0) / 256
contentArray[65] = (params.faceNumber || 0) % 256
} else if (type === 'remote') {
contentArray[64] = (params.remoteNumber || 0) / 256
contentArray[65] = (params.remoteNumber || 0) % 256
} else if (type === 'palmVein') {
contentArray[64] = (params.palmVeinNumber || 0) / 256
contentArray[65] = (params.palmVeinNumber || 0) % 256
}
contentArray[66] = (userCountLimit || 0xffff) / 256
contentArray[67] = (userCountLimit || 0xffff) % 256
contentArray[68] = operate
contentArray[69] = isAdmin || 0
contentArray[70] = isForce || 0
contentArray.set(this.lockInfo.token || new Uint8Array([0, 0, 0, 0]), 71)
contentArray[75] = isRound
contentArray[76] = convertWeekdaysToNumber(weekDay)
contentArray.set(timestampToArray(startDate), 77)
contentArray.set(timestampToArray(endDate), 81)
if (isRound) {
contentArray.set(parseTimeToList(startTime), 85)
contentArray.set(parseTimeToList(endTime), 89)
} else {
contentArray.set(new Uint8Array([0, 0, 0, 0]), 85)
contentArray.set(new Uint8Array([0, 0, 0, 0]), 89)
}
contentArray[93] = 16
const md5Array = md5Encrypt(
keyId + uid,
this.lockInfo.token || new Uint8Array([0, 0, 0, 0]),
this.lockInfo.bluetooth.signKey
)
contentArray.set(md5Array, 94)
console.log('加密前:', Array.from(contentArray))
const cebArray = sm4.encrypt(contentArray, this.lockInfo.bluetooth.privateKey, {
mode: 'ecb',
output: 'array'
})
const packageArray = createPackageEnd(headArray, cebArray)
const writeResult = await writeBLECharacteristicValue(this.lockInfo.deviceId,
this.lockInfo.serviceId,
this.lockInfo.writeCharacteristicId,
packageArray)
if (writeResult.code !== Result.Success.code) {
return writeResult
}
return this.getWriteResult(this.registerExtendedProducts, params)
}
/**
* 取消注册扩展产品
*
* @param {Object} params - 所需参数
* @param {string} params.Type - 产品类型,['card','fingerprint','face','remote','palmVein']
* @param {string} params.KeyID - 钥匙 ID
* @param {string} params.uid - 用户 ID
*/
export async function registerExtendedProductsCancel(params) {
const {type, keyId, uid} = params
// 设置执行账号
const result = await this.login(uid)
if (result.code !== Result.Success.code) {
return result
}
// 确认设备连接正常
if (!params.connected) {
const searchResult = await searchAndConnectDevice(this.lockInfo.bluetooth.bluetoothDeviceName)
if (searchResult.code !== Result.Success.code) {
return searchResult
}
this.updateLockInfo(searchResult.data)
}
// 检查是否已添加为用户
const checkResult = await this.checkLockUser()
if (!checkResult) {
return {
code: -1
}
}
this.requestParams = params
const length = 2 + 1 + 1 + 40 + 20 + 4 + 1 + 16
const headArray = this.createPackageHeader(3, length)
const contentArray = new Uint8Array(length)
contentArray[0] = cmdIds.expandCmd / 256
contentArray[1] = cmdIds.expandCmd % 256
// 子命令
if (type === 'card') {
contentArray[2] = subCmdIds.registerCardCancel
} else if (type === 'fingerprint') {
contentArray[2] = subCmdIds.registerFingerprintCancel
} else if (type === 'face') {
contentArray[2] = subCmdIds.registerFaceCancel
} else if (type === 'remote') {
contentArray[2] = subCmdIds.registerRemoteCancel
} else if (type === 'palmVein') {
contentArray[2] = subCmdIds.registerPalmVeinCancel
}
contentArray[3] = length - 3
for (let i = 0; i < keyId.length; i++) {
contentArray[i + 4] = keyId.charCodeAt(i)
}
for (let i = 0; i < uid.length; i++) {
contentArray[i + 44] = uid.charCodeAt(i)
}
contentArray.set(this.lockInfo.token || new Uint8Array([0, 0, 0, 0]), 64)
contentArray[68] = 16
const md5Array = md5Encrypt(
keyId + uid,
this.lockInfo.token || new Uint8Array([0, 0, 0, 0]),
this.lockInfo.bluetooth.signKey
)
contentArray.set(md5Array, 69)
const cebArray = sm4.encrypt(contentArray, this.lockInfo.bluetooth.privateKey, {
mode: 'ecb',
output: 'array'
})
const packageArray = createPackageEnd(headArray, cebArray)
await writeBLECharacteristicValue(this.lockInfo.deviceId,
this.lockInfo.serviceId,
this.lockInfo.writeCharacteristicId,
packageArray)
}
/**
* 更新支持功能项设置(带参数)
*
* @param {Object} params - 所需参数
* @param {Object} params.accountInfo - 用户信息
* @param {Number} params.featureBit - 支持功能对应的位
* @param {boolean} params.withParams - 是否携带参数
* @param {Object} params.data - 是否携带参数
* @param {Number} params.featureEnable - 不携带参数时的开关1-开0-关
*/
export async function updateSupportFunctionsWithParams(params) {
// 需要校验的参数
const baseRequiredFields = [
'accountInfo',
'featureBit',
'withParams',
];
// 定义功能位对应的必填字段映射
const featureBitFields = {
[supportFunctionsFeatureBit.passageMode]: [
'passageMode',
'startDate',
'endDate',
'isAllDay',
'weekDay',
'autoUnlock'
]
};
// 根据operate值动态添加必填字段
let cardRequiredFields = [...baseRequiredFields];
if (params && params.withParams && params.withParams === true) {
cardRequiredFields.push('data');
// 如果存在对应的功能位字段配置,则添加相应字段
if (featureBitFields[params.featureBit]) {
const dataFields = featureBitFields[params.featureBit];
for (const field of dataFields) {
if (params.data === undefined || params.data[field] === undefined) {
return new Result(Result.codes.NotMoreData, null, `data参数信息不完整: ${field}`);
}
}
}
} else if (params && params.withParams && params.withParams === false) {
cardRequiredFields.push('featureEnable');
}
const missingField = checkRequiredFields(params, cardRequiredFields);
if (missingField) {
return new Result(Result.codes.NotMoreData, null, `参数信息不完整: ${missingField}`);
}
// 深拷贝一份参数赋值
this.requestParams = JSON.parse(JSON.stringify(params))
// 转换参数
if (params && params.withParams && params.withParams === true && params.data) {
try {
switch (params.featureBit) {
case supportFunctionsFeatureBit.passageMode:
const {passageMode, startDate, endDate, isAllDay, weekDay, autoUnlock} = params.data
const startDateBytes = convertTimeToBytes(startDate);
const endDateBytes = convertTimeToBytes(endDate);
const weekDayBit = parseInt(String(convertWeekdayArrayToBit(weekDay)), 2);
params.data = [
passageMode,
...startDateBytes,
...endDateBytes,
isAllDay,
weekDayBit,
autoUnlock
]
break;
default:
params.data = [params.data]
break;
}
console.log('转换后的参数:', params.data)
} catch (e) {
return new Result(Result.codes.NotMoreData, null, `参数转换时异常,请检查参数格式: ${e}`);
}
}
// 设置执行账号
const result = await this.login(params.uid)
if (result.code !== Result.Success.code) {
return result
}
// 确认设备连接正常
if (!params.connected) {
const searchResult = await searchAndConnectDevice(this.lockInfo.bluetooth.bluetoothDeviceName)
if (searchResult.code !== Result.Success.code) {
return searchResult
}
this.updateLockInfo(searchResult.data)
}
// 检查是否已添加为用户
const checkResult = await this.checkLockUser()
if (checkResult.code !== Result.Success.code) {
return checkResult
}
let {featureBit, data, withParams, featureEnable} = params
const uid = this.accountInfo.uid.toString()
const keyId = this.lockInfo.keyId.toString()
// 确保data是数组形式
let dataArray = Array.isArray(data) ? data : [data]
let length = 2 + 1 + 1 + 40 + 20 + 4 + 1 + 16
if (withParams) {
length += 2 + dataArray.length
} else {
length += 2
}
const headArray = this.createPackageHeader(3, length)
const contentArray = new Uint8Array(length)
contentArray[0] = cmdIds.expandCmd / 256
contentArray[1] = cmdIds.expandCmd % 256
contentArray[2] = withParams ? subCmdIds.supportFunctionsWithParams : subCmdIds.supportFunctions
contentArray[3] = length - 3
for (let i = 0; i < keyId.length; i++) {
contentArray[i + 4] = keyId.charCodeAt(i)
}
for (let i = 0; i < uid.length; i++) {
contentArray[i + 44] = uid.charCodeAt(i)
}
contentArray[64] = featureBit
if (withParams) {
contentArray[65] = dataArray.length
contentArray.set(new Uint8Array(dataArray), 66)
} else {
contentArray[65] = featureEnable
}
contentArray.set(
this.lockInfo.token || new Uint8Array([0, 0, 0, 0]),
withParams ? 66 + dataArray.length : 66
)
contentArray[withParams ? 70 + dataArray.length : 70] = 16
const md5Array = md5Encrypt(
keyId + uid,
this.lockInfo.token || new Uint8Array([0, 0, 0, 0]),
this.lockInfo.bluetooth.signKey
)
contentArray.set(md5Array, withParams ? 71 + dataArray.length : 71)
console.log('加密前:', Array.from(contentArray))
const cebArray = sm4.encrypt(contentArray, this.lockInfo.bluetooth.privateKey, {
mode: 'ecb',
output: 'array'
})
const packageArray = createPackageEnd(headArray, cebArray)
await writeBLECharacteristicValue(this.lockInfo.deviceId,
this.lockInfo.serviceId,
this.lockInfo.writeCharacteristicId,
packageArray)
return this.getWriteResult(this.updateSupportFunctionsWithParams, params)
}
/**
* 读取支持功能项设置
* @param params
* @param {Number} params.lockId 锁id (必填)
* @returns {Promise<void>}
*/
export async function readSupportFunctionsSetting(params) {
return await getLockSettingRequest(params)
}
/**
* 获取Ic卡列表
* @param params.lockId 锁id (必填)
* @param params.pageNo 页码(选填)
* @param params.pageSize 每页显示数(选填)
* @returns {Promise<unknown>}
*/
export async function getIcCardList(params) {
return await getIcCardListRequest(params)
}
/**
* 获取指纹列表
* @param params.lockId 锁id (必填)
* @param params.pageNo 页码(选填)
* @param params.pageSize 每页显示数(选填)
* @returns {Promise<unknown>}
*/
export async function getFingerprintList(params) {
return await getFingerprintListRequest(params)
}
/**
* 获取掌静脉列表
* @param params.lockId 锁id (必填)
* @param params.pageNo 页码(选填)
* @param params.pageSize 每页显示数(选填)
* @returns {Promise<unknown>}
*/
export async function getPalmVeinList(params) {
return await getPalmVeinListRequest(params)
}
/**
* 获取掌静脉列表
* @param params.lockId 锁id (必填)
* @param params.pageNo 页码(选填)
* @param params.pageSize 每页显示数(选填)
* @returns {Promise<unknown>}
*/
export async function getRemoteList(params) {
return await getRemoteListRequest(params)
}
/**
* 获取人脸列表
* @param params.lockId 锁id (必填)
* @param params.pageNo 页码(选填)
* @param params.pageSize 每页显示数(选填)
* @returns {Promise<unknown>}
*/
export async function getFaceList(params) {
return await getFaceListRequest(params)
}