/**
|
* iData UHF RFID 工具类
|
* 封装 iData-UHFPlugin 插件的所有功能
|
*/
|
|
// #ifdef APP-PLUS
|
const uhfModel = uni.requireNativePlugin("iData-UHFPlugin-UHFModule");
|
const globalEvent = uni.requireNativePlugin('globalEvent');
|
const modal = uni.requireNativePlugin('modal');
|
// #endif
|
|
class iDataRFID {
|
constructor() {
|
this.isInitialized = false;
|
this.isScanning = false;
|
this.powerStatus = 'disconnected'; // connected/disconnected
|
this.scanCallback = null;
|
this.powerCallback = null;
|
}
|
|
/**
|
* 清除配置信息(在初始化前调用,避免"Please use the 'clearConfigInfo' function to clear the current instance first"错误)
|
*/
|
clearConfigInfo() {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
console.error('[iDataRFID] 插件未找到');
|
return;
|
}
|
console.log('[iDataRFID] 清除配置信息...');
|
if (uhfModel.clearConfigInfo) {
|
uhfModel.clearConfigInfo();
|
}
|
// #endif
|
}
|
|
/**
|
* 初始化UHF模块
|
* @param {Number} mode - 1为SLR模块,0为UM模块,2为GX模块
|
* @param {Function} callback - 回调函数
|
*/
|
initUHF(mode, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
console.error('[iDataRFID] 插件未找到');
|
if (callback) callback({ code: 'error', msg: '插件未找到' });
|
return;
|
}
|
|
// 先清除配置信息,避免"Please use the 'clearConfigInfo' function to clear the current instance first"错误
|
this.clearConfigInfo();
|
|
// 延迟一下再初始化,确保清除操作完成
|
setTimeout(() => {
|
console.log('[iDataRFID] initUHF mode:', mode);
|
uhfModel.initUHF(mode, (ret) => {
|
console.log('[iDataRFID] initUHF result:', ret);
|
if (typeof ret === 'string' && ret.includes('success')) {
|
this.isInitialized = true;
|
}
|
if (callback) callback(ret);
|
});
|
}, 100);
|
// #endif
|
// #ifndef APP-PLUS
|
if (callback) callback({ code: 'error', msg: '仅支持APP环境' });
|
// #endif
|
}
|
|
/**
|
* 监听模块上电结果
|
* @param {Function} callback - 回调函数 (e) => {}
|
*/
|
onPowerEvent(callback) {
|
// #ifdef APP-PLUS
|
if (!globalEvent) {
|
console.error('[iDataRFID] globalEvent未找到');
|
return;
|
}
|
this.powerCallback = callback;
|
globalEvent.addEventListener('POWEREvent', (e) => {
|
console.log('[iDataRFID] POWEREvent:', JSON.stringify(e));
|
if (e && e.status === 'connected') {
|
this.powerStatus = 'connected';
|
} else {
|
this.powerStatus = 'disconnected';
|
}
|
if (callback) callback(e);
|
});
|
// #endif
|
}
|
|
/**
|
* 监听UHF盘点扫描结果
|
* @param {Function} callback - 回调函数 (e) => {}
|
*/
|
onScanEvent(callback) {
|
// #ifdef APP-PLUS
|
if (!globalEvent) {
|
console.error('[iDataRFID] globalEvent未找到');
|
return;
|
}
|
this.scanCallback = callback;
|
globalEvent.addEventListener('iDataUHFEvent', (e) => {
|
console.log('[iDataRFID] ========== 扫描到标签 ==========');
|
console.log('[iDataRFID] iDataUHFEvent:', JSON.stringify(e));
|
console.log('[iDataRFID] EPC:', e ? e.epc : 'undefined');
|
console.log('[iDataRFID] TID:', e ? e.tid : 'undefined');
|
console.log('[iDataRFID] ====================================');
|
if (callback) callback(e);
|
});
|
// #endif
|
}
|
|
/**
|
* 开始/结束扫描
|
* @param {Function} callback - 回调函数
|
*/
|
startOrStopRFID(callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback({ code: 'error', msg: '插件未找到' });
|
return;
|
}
|
|
console.log('[iDataRFID] ========== 开始/停止扫描 ==========');
|
console.log('[iDataRFID] 当前扫描状态:', this.isScanning);
|
console.log('[iDataRFID] 当前上电状态:', this.powerStatus);
|
uhfModel.startOrStopRFID((ret) => {
|
console.log('[iDataRFID] startOrStopRFID result:', JSON.stringify(ret));
|
if (ret && ret.code === 'success') {
|
if (ret.msg === 'start') {
|
this.isScanning = true;
|
console.log('[iDataRFID] ✓ 扫描已启动');
|
console.log('[iDataRFID] 【提示】请将标签放在读取范围内(建议5-10cm)');
|
console.log('[iDataRFID] 【提示】如果扫描不到标签,请检查:');
|
console.log('[iDataRFID] 1. 功率设置是否足够(建议20-30)');
|
console.log('[iDataRFID] 2. 标签是否在读取范围内');
|
console.log('[iDataRFID] 3. 频率设置是否正确');
|
} else {
|
this.isScanning = false;
|
console.log('[iDataRFID] ✓ 扫描已停止');
|
}
|
} else {
|
console.error('[iDataRFID] ✗ 扫描操作失败:', ret ? ret.msg : '未知错误');
|
}
|
console.log('[iDataRFID] ====================================');
|
if (callback) callback(ret);
|
});
|
// #endif
|
// #ifndef APP-PLUS
|
if (callback) callback({ code: 'error', msg: '仅支持APP环境' });
|
// #endif
|
}
|
|
/**
|
* 设置盘点标签返回的数据内容模式
|
* @param {Number} mode - 0只读取EPC, 1读取EPC和TID
|
* @param {Function} callback - 回调函数
|
*/
|
readTagModeSet(mode, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.readTagModeSet(mode, (ret) => {
|
console.log('[iDataRFID] readTagModeSet result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 获取盘点标签返回的数据内容模式
|
* @param {Function} callback - 回调函数
|
*/
|
readTagModeGet(callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.readTagModeGet((ret) => {
|
console.log('[iDataRFID] readTagModeGet result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 移除事件监听器(参考示例项目)
|
*/
|
removeEventListeners() {
|
// #ifdef APP-PLUS
|
if (globalEvent) {
|
globalEvent.removeEventListener('POWEREvent');
|
globalEvent.removeEventListener('iDataUHFEvent');
|
console.log('[iDataRFID] 事件监听器已移除');
|
}
|
this.powerCallback = null;
|
this.scanCallback = null;
|
// #endif
|
}
|
|
/**
|
* 模块下电
|
*/
|
closeUHF() {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
console.error('[iDataRFID] 插件未找到');
|
return;
|
}
|
uhfModel.closeUHF();
|
this.isInitialized = false;
|
this.isScanning = false;
|
this.powerStatus = 'disconnected';
|
|
// 移除事件监听
|
this.removeEventListeners();
|
// #endif
|
}
|
|
/**
|
* 单标签读取,无过滤条件
|
* @param {Number} readBank - 0->RESERVED,1->EPC,2->TID,3->USR
|
* @param {Number} startBlock - 起始地址(Word类型)
|
* @param {Number} len - 数据长度(Word类型)
|
* @param {String} pwd - 访问密码,默认00000000
|
* @param {Function} callback - 回调函数
|
*/
|
readTagWithoutFilter(readBank, startBlock, len, pwd, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
console.error('[iDataRFID] readTagWithoutFilter: 插件未找到');
|
if (callback) callback({ code: 'error', msg: '插件未找到' });
|
return;
|
}
|
console.log('[iDataRFID] readTagWithoutFilter 调用参数:');
|
console.log('[iDataRFID] readBank:', readBank, '(' + ['RESERVED', 'EPC', 'TID', 'USR'][readBank] + ')');
|
console.log('[iDataRFID] startBlock:', startBlock);
|
console.log('[iDataRFID] len:', len);
|
console.log('[iDataRFID] pwd:', pwd || '00000000');
|
uhfModel.readTagWithoutFilter(readBank, startBlock, len, pwd || '00000000', (ret) => {
|
console.log('[iDataRFID] readTagWithoutFilter 返回结果:');
|
console.log('[iDataRFID] 完整结果:', JSON.stringify(ret));
|
console.log('[iDataRFID] code:', ret ? ret.code : 'undefined');
|
console.log('[iDataRFID] msg:', ret ? ret.msg : 'undefined');
|
console.log('[iDataRFID] data:', ret ? ret.data : 'undefined');
|
if (ret && ret.code === 'fail') {
|
console.error('[iDataRFID] 读取标签失败!');
|
console.error('[iDataRFID] 失败原因:', ret.msg || '未知错误');
|
console.error('[iDataRFID] 错误详情:', JSON.stringify(ret));
|
}
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 单标签写入,无过滤条件
|
* @param {Number} writeBank - 0->RESERVED,1->EPC,2->TID,3->USR
|
* @param {Number} startBlock - 起始地址(Word类型)
|
* @param {String} writeData - 写入的数据
|
* @param {String} pwd - 访问密码,默认00000000
|
* @param {Function} callback - 回调函数
|
*/
|
writeTagWithoutFilter(writeBank, startBlock, writeData, pwd, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback({ code: 'error', msg: '插件未找到' });
|
return;
|
}
|
uhfModel.writeTagWithoutFilter(writeBank, startBlock, writeData, pwd || '00000000', (ret) => {
|
console.log('[iDataRFID] writeTagWithoutFilter result:', JSON.stringify(ret));
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 单标签读取,有过滤条件
|
* @param {Object} options - 参数对象
|
* @param {Function} callback - 回调函数
|
*/
|
readTagWithFilter(options, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback({ code: 'error', msg: '插件未找到' });
|
return;
|
}
|
const {
|
fBank, fStartBlock, fLen, fData,
|
readBank, startBlock, len, pwd
|
} = options;
|
uhfModel.readTagWithFilter(fBank, fStartBlock, fLen, fData, readBank, startBlock, len, pwd || '00000000', (ret) => {
|
console.log('[iDataRFID] readTagWithFilter result:', JSON.stringify(ret));
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 单标签写入,有过滤条件
|
* @param {Object} options - 参数对象
|
* @param {Function} callback - 回调函数
|
*/
|
writeTagWithFilter(options, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback({ code: 'error', msg: '插件未找到' });
|
return;
|
}
|
const {
|
fBank, fStartBlock, fLen, fData,
|
writeBank, startBlock, writeData, pwd
|
} = options;
|
uhfModel.writeTagWithFilter(fBank, fStartBlock, fLen, fData, writeBank, startBlock, writeData, pwd || '00000000', (ret) => {
|
console.log('[iDataRFID] writeTagWithFilter result:', JSON.stringify(ret));
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 盘点模式设置
|
* @param {Number} mode - UM:0多标签模式,1快盘模式,2低功耗模式 | SLR:0异步模式,2智能控温,3新快速模式,4普通模式
|
* @param {Function} callback - 回调函数
|
*/
|
inventoryModeSet(mode, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.inventoryModeSet(mode, (ret) => {
|
console.log('[iDataRFID] inventoryModeSet result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 盘点模式获取
|
* @param {Function} callback - 回调函数
|
*/
|
inventoryModeGet(callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.inventoryModeGet((ret) => {
|
console.log('[iDataRFID] inventoryModeGet result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 占空比参数设置
|
* @param {Number} scanTime - 盘点时间
|
* @param {Number} waitTime - 休眠时间
|
* @param {Boolean} save - 是否断电保存配置
|
* @param {Function} callback - 回调函数
|
*/
|
inventoryWaitTimeSet(scanTime, waitTime, save, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.inventoryWaitTimeSet(scanTime, waitTime, save, (ret) => {
|
console.log('[iDataRFID] inventoryWaitTimeSet result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 占空比参数获取
|
* @param {Function} callback - 回调函数
|
*/
|
inventoryWaitTimeGet(callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.inventoryWaitTimeGet((ret) => {
|
console.log('[iDataRFID] inventoryWaitTimeGet result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 天线功率参数设置
|
* @param {Number} power - 0-33
|
* @param {Function} callback - 回调函数
|
*/
|
setPower(power, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.setPower(power, (ret) => {
|
console.log('[iDataRFID] setPower result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 天线功率参数获取
|
* @param {Function} callback - 回调函数
|
*/
|
getPower(callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.getPower((ret) => {
|
console.log('[iDataRFID] getPower result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 频率设置
|
* @param {Number} mode - 0:中国(840-845MHz),1:中国(920-925MHz),2:欧洲(865-868MHz),3:美国(902-928MHz)
|
* @param {Function} callback - 回调函数
|
*/
|
setFrequencyMode(mode, callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.setFrequencyMode(mode, (ret) => {
|
console.log('[iDataRFID] setFrequencyMode result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 频率获取
|
* @param {Function} callback - 回调函数
|
*/
|
getFrequencyMode(callback) {
|
// #ifdef APP-PLUS
|
if (!uhfModel) {
|
if (callback) callback('插件未找到');
|
return;
|
}
|
uhfModel.getFrequencyMode((ret) => {
|
console.log('[iDataRFID] getFrequencyMode result:', ret);
|
if (callback) callback(ret);
|
});
|
// #endif
|
}
|
|
/**
|
* 显示Toast消息
|
* @param {String} message - 消息内容
|
* @param {Number} duration - 持续时间(秒)
|
*/
|
showToast(message, duration = 1.5) {
|
// #ifdef APP-PLUS
|
if (modal) {
|
modal.toast({
|
message: message,
|
duration: duration
|
});
|
} else {
|
uni.showToast({
|
title: message,
|
icon: 'none',
|
duration: duration * 1000
|
});
|
}
|
// #endif
|
// #ifndef APP-PLUS
|
uni.showToast({
|
title: message,
|
icon: 'none',
|
duration: duration * 1000
|
});
|
// #endif
|
}
|
}
|
|
// 创建单例实例
|
const idataRFID = new iDataRFID();
|
|
export default idataRFID;
|