/** * 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;