Files
akbleserver/unpackage/dist/dev/.uvue/app-android/pages/akbletest.uvue.map
2026-03-16 10:37:46 +08:00

1 line
68 KiB
Plaintext
Raw 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.
{"version":3,"sources":["pages/akbletest.uvue"],"names":[],"mappings":"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","file":"pages/akbletest.uvue","sourcesContent":["<template>\r\n\t<scroll-view direction=\"vertical\" class=\"container\">\r\n\t\t<view class=\"section\">\r\n\t\t\t<button @click=\"scanDevices\" :disabled=\"scanning\">{{ scanning ? '正在扫描...' : '扫描设备' }}</button>\r\n\t\t\t<!-- \t\t\t<view style=\"display:flex; flex-direction:row; margin-left:12px; align-items:center\">\r\n\t\t\t\t<text style=\"margin-right:8px\">预设:</text>\r\n\t\t\t\t<radio-group :modelValue=\"presetSelected\" @change=\"onPresetChange\">\r\n\t\t\t\t\t<view v-for=\"(opt, index) in presetOptions\" :key=\"index\"\r\n\t\t\t\t\t\tstyle=\"margin-right:8px; display:flex; align-items:center\">\r\n\t\t\t\t\t\t<radio :value=\"opt['value'] as string\" />\r\n\t\t\t\t\t\t<text style=\"margin-left:4px\">{{ opt['label'] as string }}</text>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</radio-group>\r\n\t\t\t</view> -->\r\n\t\t\t<input v-model=\"optionalServicesInput\" placeholder=\"可选服务 UUID, 逗号分隔\" style=\"margin-left:12px; width: 40%\" />\r\n\t\t\t<button @click=\"autoConnect\" :disabled=\"connecting || devices.length == 0\"\r\n\t\t\t\tstyle=\"margin-left:12px;\">{{ connecting ? '正在自动连接...' : '自动连接' }}</button>\r\n\t\t\t<!-- Debug: show devices count and raw devices for troubleshooting -->\r\n\t\t\t<view>\r\n\t\t\t\t<text>设备计数: {{ devices.length }}</text>\r\n\t\t\t\t<text style=\"font-size:12px; color:gray\">{{ _fmt(devices) }}</text>\r\n\t\t\t</view>\r\n\t\t\t<view v-if=\"devices.length\">\r\n\t\t\t\t<text>已发现设备:</text>\r\n\t\t\t\t<view v-for=\"item in devices\" :key=\"item.deviceId\" class=\"device-item\">\r\n\t\t\t\t\t<text>{{ item.name!='' ? item.name : '未知设备' }} ({{ item.deviceId }})</text>\r\n\t\t\t\t\t<button @click=\"connect(item.deviceId)\">连接</button>\r\n\r\n\t\t\t\t\t<button v-if=\"connectedIds.includes(item.deviceId)\" @click=\"disconnect(item.deviceId)\"\r\n\t\t\t\t\t\t:disabled=\"disconnecting\">断开</button>\r\n\t\t\t\t\t<button v-if=\"connectedIds.includes(item.deviceId)\"\r\n\t\t\t\t\t\t@click=\"showServices(item.deviceId)\">查看服务</button>\r\n\t\t\t\t\t<button v-if=\"connectedIds.includes(item.deviceId)\"\r\n\t\t\t\t\t\t@click=\"autoDiscoverInterfaces(item.deviceId)\">自动发现接口</button>\r\n\t\t\t\t\t<button v-if=\"connectedIds.includes(item.deviceId)\"\r\n\t\t\t\t\t\t@click=\"getDeviceInfo(item.deviceId)\">设备信息</button>\r\n\r\n\t\t\t\t\t<!-- DFU 按钮,仅在 APP-ANDROID 可见 -->\r\n\r\n\t\t\t\t\t<button v-if=\"connectedIds.includes(item.deviceId)\" @click=\"startDfuFlow(item.deviceId)\">DFU\r\n\t\t\t\t\t\t升级</button>\r\n\t\t\t\t\t<button v-if=\"connectedIds.includes(item.deviceId)\"\r\n\t\t\t\t\t\t@click=\"startDfuFlow(item.deviceId, '/static/OmFw2509140009.zip')\">使用内置固件 DFU</button>\r\n\r\n\r\n\t\t\t\t</view>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view class=\"section\">\r\n\t\t\t<text>日志:</text>\r\n\t\t\t<scroll-view direction=\"vertical\" style=\"height:240px;\">\r\n\t\t\t\t<text v-for=\"(log, idx) in logs\" :key=\"idx\" style=\"font-size:12px;\">{{ log }}</text>\r\n\t\t\t</scroll-view>\r\n\t\t</view>\r\n\t\t<view v-if=\"showingServicesFor\">\r\n\t\t\t<view class=\"section\">\r\n\t\t\t\t<text>设备 {{ showingServicesFor }} 的服务:</text>\r\n\t\t\t\t<view v-if=\"services.length\">\r\n\t\t\t\t\t<view v-for=\"srv in services\" :key=\"srv.uuid\" class=\"service-item\">\r\n\t\t\t\t\t\t<text>{{ srv.uuid }}</text>\r\n\t\t\t\t\t\t<button @click=\"showCharacteristics(showingServicesFor, srv.uuid)\">查看特征</button>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view v-else><text>无服务</text></view>\r\n\t\t\t\t<button @click=\"closeServices\">关闭</button>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t\t<view v-if=\"showingCharacteristicsFor\">\r\n\t\t\t<view class=\"section\">\r\n\t\t\t\t<text>服务 的特征:</text>\r\n\t\t\t\t<view v-if=\"characteristics.length\">\r\n\t\t\t\t\t<view v-for=\"char in characteristics\" :key=\"char.uuid\" class=\"char-item\">\r\n\t\t\t\t\t\t<text>{{ char.uuid }} [{{ charProps(char) }}]</text>\r\n\t\t\t\t\t\t<view style=\"display:flex; flex-direction:row; margin-top:6px\">\r\n\t\t\t\t\t\t\t<button v-if=\"char.properties?.read\"\r\n\t\t\t\t\t\t\t\t@click=\"readCharacteristic(showingCharacteristicsFor.deviceId, showingCharacteristicsFor.serviceId, char.uuid)\">读取</button>\r\n\t\t\t\t\t\t\t<button v-if=\"char.properties?.write\"\r\n\t\t\t\t\t\t\t\t@click=\"writeCharacteristic(showingCharacteristicsFor.deviceId, showingCharacteristicsFor.serviceId, char.uuid)\">写入(测试)</button>\r\n\t\t\t\t\t\t\t<button v-if=\"char.properties?.notify\"\r\n\t\t\t\t\t\t\t\t@click=\"toggleNotify(showingCharacteristicsFor.deviceId, showingCharacteristicsFor.serviceId, char.uuid)\">{{ isNotifying(char.uuid) ? '取消订阅' : '订阅' }}</button>\r\n\t\t\t\t\t\t</view>\r\n\t\t\t\t\t</view>\r\n\t\t\t\t</view>\r\n\t\t\t\t<view v-else><text>无特征</text></view>\r\n\t\t\t\t<button @click=\"closeCharacteristics\">关闭</button>\r\n\t\t\t</view>\r\n\t\t</view>\r\n\t</scroll-view>\r\n</template>\r\n\r\n<script lang=\"uts\">\r\n\timport { BluetoothService } from '@/uni_modules/ak-sbsrv/utssdk/interface.uts'\r\n\t// Platform-specific entrypoint: import the platform index per build target to avoid bundler including Android-only code in web builds\r\n\r\n\timport { bluetoothService } from '@/uni_modules/ak-sbsrv/utssdk/app-android/index.uts'\r\n\r\n\r\n\r\n\r\n\timport type { BleDevice, BleService, BleCharacteristic } from '@/uni_modules/ak-sbsrv/utssdk/interface.uts'\r\n\timport { ProtocolHandler } from '@/uni_modules/ak-sbsrv/utssdk/protocol_handler.uts'\r\n\r\n\r\n\timport { dfuManager } from '@/uni_modules/ak-sbsrv/utssdk/app-android/dfu_manager.uts'\r\n\r\n\timport { PermissionManager } from '@/ak/PermissionManager.uts'\r\n\ttype ShowingCharacteristicsFor = {\r\n\t\tdeviceId : string,\r\n\t\tserviceId : string\r\n\t}\r\n\r\n\texport default {\r\n\t\tdata() {\r\n\t\t\treturn {\r\n\t\t\t\tscanning: false,\r\n\t\t\t\tconnecting: false,\r\n\t\t\t\tdisconnecting: false,\r\n\t\t\t\tdevices: [] as BleDevice[],\r\n\t\t\t\tconnectedIds: [] as string[],\r\n\t\t\t\tlogs: [] as string[],\r\n\t\t\t\tshowingServicesFor: '',\r\n\t\t\t\tservices: [] as BleService[],\r\n\t\t\t\tshowingCharacteristicsFor: { deviceId: '', serviceId: '' } as ShowingCharacteristicsFor,\r\n\t\t\t\tcharacteristics: [] as BleCharacteristic[],\r\n\t\t\t\t// 新增协议相关参数\r\n\t\t\t\tprotocolDeviceId: '',\r\n\t\t\t\tprotocolServiceId: '',\r\n\t\t\t\tprotocolWriteCharId: '',\r\n\t\t\t\tprotocolNotifyCharId: '',\r\n\t\t\t\t// protocol handler instances/cache\r\n\t\t\t\tprotocolHandlerMap: new Map<string, ProtocolHandler>(),\r\n\t\t\t\tprotocolHandler: null as ProtocolHandler | null,\r\n\t\t\t\t// optional services input (comma-separated UUIDs)\r\n\t\t\t\toptionalServicesInput: '',\r\n\t\t\t\t// presets for common BLE services (label -> UUID). 'custom' allows free-form input.\r\n\t\t\t\tpresetOptions: [\r\n\t\t\t\t\t{ label: '无', value: '' },\r\n\t\t\t\t\t{ label: 'Battery Service (180F)', value: '0000180f-0000-1000-8000-00805f9b34fb' },\r\n\t\t\t\t\t{ label: 'Device Information (180A)', value: '0000180a-0000-1000-8000-00805f9b34fb' },\r\n\t\t\t\t\t{ label: 'Generic Attribute (1801)', value: '00001801-0000-1000-8000-00805f9b34fb' },\r\n\t\t\t\t\t{ label: 'Nordic DFU', value: '00001530-1212-efde-1523-785feabcd123' },\r\n\t\t\t\t\t{ label: 'Nordic UART (NUS)', value: '6e400001-b5a3-f393-e0a9-e50e24dcca9e' },\r\n\t\t\t\t\t{ label: '自定义', value: 'custom' }\r\n\t\t\t\t],\r\n\t\t\t\tpresetSelected: '',\r\n\t\t\t\t// map of characteristicId -> boolean (is currently subscribed)\r\n\t\t\t\tnotifyingMap: new Map<string, boolean>(),\r\n\t\t\t}\r\n\t\t},\r\n\t\tmounted() {\r\n\t\t\tPermissionManager.requestBluetoothPermissions((granted : boolean) => {\r\n\t\t\t\tif (!granted) {\r\n\t\t\t\t\tuni.showToast({ title: '请授权蓝牙和定位权限', icon: 'none' });\r\n\t\t\t\t}\r\n\r\n\r\n\t\t\t});\r\n\t\t\tthis.log('页面 mounted: 初始化事件监听和蓝牙权限请求完成')\r\n\t\t\t// deviceFound - only accept devices whose name starts with 'CF' or 'BCL'\r\n\t\t\tbluetoothService.on('deviceFound', (payload) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// this.log('[event] deviceFound -> ' + this._fmt(payload))\r\n\t\t\t\t\t// console.log('[event] deviceFound -> ' + this._fmt(payload))\r\n\t\t\t\t\t// payload can be UTSJSONObject-like or plain object. Normalize.\r\n\t\t\t\t\tlet rawDevice = payload?.device;\r\n\t\t\t\t\tif (rawDevice == null) {\r\n\t\t\t\t\t\tthis.log('[event] deviceFound - payload.device is null, ignoring');\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// extract name\r\n\t\t\t\t\tlet name : string | null = rawDevice.name;\r\n\r\n\t\t\t\t\tif (name == null) {\r\n\t\t\t\t\t\tthis.log('[event] deviceFound - 无名称,忽略: ' + this._fmt(rawDevice as any))\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst n = name as string;\r\n\t\t\t\t\tif (!(n.startsWith('CF') || n.startsWith('BCL'))) {\r\n\t\t\t\t\t\tthis.log('[event] deviceFound - 名称不匹配前缀,忽略: ' + n)\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst exists = this.devices.some(d => d != null && d.name == n);\r\n\r\n\t\t\t\t\tif (!exists) {\r\n\t\t\t\t\t\t// rawDevice is non-null here per earlier guard\r\n\t\t\t\t\t\tthis.devices.push(rawDevice as BleDevice);\r\n\t\t\t\t\t\tconst deviceIdStr = (rawDevice.deviceId != null) ? rawDevice.deviceId : '';\r\n\t\t\t\t\t\tthis.log('发现设备: ' + n + ' (' + deviceIdStr + ')');\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst deviceIdStr = (rawDevice.deviceId != null) ? rawDevice.deviceId : '';\r\n\t\t\t\t\t\tthis.log('发现重复设备: ' + n + ' (' + deviceIdStr + ')')\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tthis.log('[error] deviceFound handler error: ' + getErrorMessage(err))\r\n\t\t\t\t\tconsole.log(err)\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\t// scanFinished\r\n\t\t\tbluetoothService.on('scanFinished', (payload) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tthis.scanning = false\r\n\t\t\t\t\tthis.log('[event] scanFinished -> ' + this._fmt(payload))\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tthis.log('[error] scanFinished handler error: ' + getErrorMessage(err))\r\n\t\t\t\t}\r\n\t\t\t})\r\n\r\n\t\t\t// connectionStateChanged\r\n\t\t\tbluetoothService.on('connectionStateChanged', (payload) => {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tthis.log('[event] connectionStateChanged -> ' + this._fmt(payload))\r\n\t\t\t\t\tif (payload != null) {\r\n\t\t\t\t\t\tconst device = payload.device\r\n\t\t\t\t\t\tconst state = payload.state\r\n\t\t\t\t\t\tthis.log(`设备 ${device?.deviceId} 连接状态变为: ${state}`)\r\n\t\t\t\t\t\t// maintain connectedIds\r\n\t\t\t\t\t\tif (state == 2) {\r\n\t\t\t\t\t\t\tif (device != null && device.deviceId != null && !this.connectedIds.includes(device.deviceId)) {\r\n\t\t\t\t\t\t\t\tthis.connectedIds.push(device.deviceId)\r\n\t\t\t\t\t\t\t\tthis.log(`已记录已连接设备: ${device.deviceId}`)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} else if (state == 0) {\r\n\t\t\t\t\t\t\tif (device != null && device.deviceId != null) {\r\n\t\t\t\t\t\t\t\tthis.connectedIds = this.connectedIds.filter(id => id !== device.deviceId)\r\n\t\t\t\t\t\t\t\tthis.log(`已移除已断开设备: ${device.deviceId}`)\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tthis.log('[error] connectionStateChanged handler error: ' + getErrorMessage(err))\r\n\t\t\t\t}\r\n\t\t\t})\r\n\t\t},\r\n\t\tmethods: {\r\n\t\t\tasync startDfuFlow(deviceId : string, staticFilePath : string = '') {\r\n\t\t\t\tif (staticFilePath != null && staticFilePath !== '') {\r\n\t\t\t\t\tthis.log('DFU 开始: 使用内置固件文件 ' + staticFilePath)\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.log('DFU 开始: 请选择固件文件')\r\n\t\t\t\t}\r\n\t\t\t\ttry {\r\n\t\t\t\t\tlet chosenPath : string | null = null\r\n\t\t\t\t\tlet fileName : string | null = null\r\n\t\t\t\t\tif (staticFilePath != null && staticFilePath !== '') {\r\n\t\t\t\t\t\t// Use the app's bundled static file path\r\n\t\t\t\t\t\tchosenPath = staticFilePath.replace(/^\\/+/, '')\r\n\t\t\t\t\t\tconst tmpName = staticFilePath.split(/[\\/]/).pop()\r\n\t\t\t\t\t\tfileName = (tmpName != null && tmpName !== '') ? tmpName : staticFilePath\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst res = await new Promise<any>((resolve, reject) => {\r\n\t\t\t\t\t\t\tuni.chooseFile({ count: 1, success: (r) => resolve(r), fail: (e) => reject(e) })\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tconsole.log(res)\r\n\t\t\t\t\t\t// Generator-friendly: avoid property iteration or bracket indexing.\r\n\t\t\t\t\t\t// Serialize and regex-match common file fields (path/uri/tempFilePath/name).\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tconst s = (() => { try { return JSON.stringify(res); } catch (e) { return ''; } })()\r\n\t\t\t\t\t\t\tconst m = s.match(/\"(?:path|uri|tempFilePath|temp_file_path|tempFilePath|name)\"\\s*:\\s*\"([^\"]+)\"/i)\r\n\t\t\t\t\t\t\tif (m != null && m.length >= 2) {\r\n\t\t\t\t\t\t\t\tconst capturedCandidate : string | null = (m[1] != null ? m[1] : null)\r\n\t\t\t\t\t\t\t\tconst captured : string = capturedCandidate != null ? capturedCandidate : ''\r\n\t\t\t\t\t\t\t\tif (captured !== '') {\r\n\t\t\t\t\t\t\t\t\tchosenPath = captured\r\n\t\t\t\t\t\t\t\t\tconst toTest : string = captured\r\n\t\t\t\t\t\t\t\t\tif (!(/^[a-zA-Z]:\\\\|^\\\\\\//.test(toTest) || /:\\/\\//.test(toTest))) {\r\n\t\t\t\t\t\t\t\t\t\tconst m2 = s.match(/\"(?:path|uri|tempFilePath|temp_file_path|tempFilePath)\"\\s*:\\s*\"([^\"]+)\"/i)\r\n\t\t\t\t\t\t\t\t\t\tif (m2 != null && m2.length >= 2 && m2[1] != null) {\r\n\t\t\t\t\t\t\t\t\t\t\tconst pathCandidate : string = m2[1] != null ? ('' + m2[1]) : ''\r\n\t\t\t\t\t\t\t\t\t\t\tif (pathCandidate !== '') chosenPath = pathCandidate\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tconst nameMatch = s.match(/\"name\"\\s*:\\s*\"([^\"]+)\"/i)\r\n\t\t\t\t\t\t\tif (nameMatch != null && nameMatch.length >= 2 && nameMatch[1] != null) {\r\n\t\t\t\t\t\t\t\tconst nm : string = nameMatch[1] != null ? ('' + nameMatch[1]) : ''\r\n\t\t\t\t\t\t\t\tif (nm !== '') fileName = nm\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} catch (err) { /* ignore */ }\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (chosenPath == null || chosenPath == '') {\r\n\t\t\t\t\t\tthis.log('未选择文件')\r\n\t\t\t\t\t\treturn\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// filePath is non-null and non-empty here\r\n\t\t\t\t\tconst fpStr : string = chosenPath as string\r\n\t\t\t\t\tconst lastSeg = fpStr.split(/[\\/]/).pop();\r\n\t\t\t\t\tconst displayName = (fileName != null && fileName !== '') ? fileName : (lastSeg != null && lastSeg !== '' ? lastSeg : fpStr)\r\n\t\t\t\t\tthis.log('已选文件: ' + displayName + ' 路径: ' + fpStr)\r\n\t\t\t\t\tconst bytes = await this._readFileAsUint8Array(fpStr)\r\n\t\t\t\t\tthis.log('固件读取完成, 大小: ' + bytes.length)\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tawait dfuManager.startDfu(deviceId, bytes, {\r\n\t\t\t\t\t\t\tuseNordic: false,\r\n\t\t\t\t\t\t\tonProgress: (p : number) => this.log('DFU 进度: ' + p + '%'),\r\n\t\t\t\t\t\t\tonLog: (s : string) => this.log('DFU: ' + s),\r\n\t\t\t\t\t\t\tcontrolTimeout: 30000\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tthis.log('DFU 完成')\r\n\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\tthis.log('DFU 失败: ' + getErrorMessage(e))\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.log('选择或读取固件失败: ' + e)\r\n\t\t\t\t}\r\n\t\t\t},\r\n\r\n\t\t\t_readFileAsUint8Array(path : string) : Promise<Uint8Array> {\r\n\t\t\t\treturn new Promise((resolve, reject) => {\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tconsole.log('should readfile')\r\n\t\t\t\t\t\tconst fsm = uni.getFileSystemManager()\r\n\t\t\t\t\t\tconsole.log(fsm)\r\n\t\t\t\t\t\t// Read file as ArrayBuffer directly to avoid base64 encoding issues\r\n\t\t\t\t\t\tfsm.readFile({\r\n\t\t\t\t\t\t\tfilePath: path, success: (res) => {\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tconst data = res.data as ArrayBuffer\r\n\t\t\t\t\t\t\t\t\tconst arr = new Uint8Array(data)\r\n\t\t\t\t\t\t\t\t\tresolve(arr)\r\n\t\t\t\t\t\t\t\t} catch (e) { reject(e) }\r\n\t\t\t\t\t\t\t}, fail: (err) => { reject(err) }\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t} catch (e) { reject(e) }\r\n\t\t\t\t})\r\n\t\t\t},\r\n\r\n\t\t\tlog(msg : string) {\r\n\t\t\t\tconst ts = new Date().toISOString();\r\n\t\t\t\tthis.logs.unshift(`[${ts}] ${msg}`)\r\n\t\t\t\tif (this.logs.length > 100) this.logs.length = 100\r\n\t\t\t},\r\n\t\t\t_fmt(obj : any) : string {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tif (obj == null) return 'null'\r\n\t\t\t\t\tif (typeof obj == 'string') return obj\r\n\t\t\t\t\treturn JSON.stringify(obj)\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\treturn '' + obj\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonPresetChange(e : any) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// Some platforms emit { detail: { value: 'x' } }, others emit { value: 'x' } or just 'x'.\r\n\t\t\t\t\t// Serialize and regex-extract to avoid direct property access that the UTS->Kotlin generator may emit incorrectly.\r\n\t\t\t\t\tconst s = (() => { try { return JSON.stringify(e); } catch (err) { return ''; } })()\r\n\t\t\t\t\tlet val : string = this.presetSelected\r\n\t\t\t\t\t// try detail.value first\r\n\t\t\t\t\tconst m = s.match(/\"detail\"\\s*:\\s*\\{[^}]*\"value\"\\s*:\\s*\"([^\\\"]+)\"/i)\r\n\t\t\t\t\tif (m != null && m.length >= 2 && m[1] != null) {\r\n\t\t\t\t\t\tval = '' + m[1]\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tconst m2 = s.match(/\"value\"\\s*:\\s*\"([^\\\"]+)\"/i)\r\n\t\t\t\t\t\tif (m2 != null && m2.length >= 2 && m2[1] != null) {\r\n\t\t\t\t\t\t\tval = '' + m2[1]\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.presetSelected = val\r\n\t\t\t\t\tif (val == 'custom' || val == '') {\r\n\t\t\t\t\t\tthis.log('已选择预设: ' + (val == 'custom' ? '自定义' : '无'))\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tthis.optionalServicesInput = val;\r\n\t\t\t\t\tthis.log('已选择预设服务 UUID: ' + val)\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tthis.log('[error] onPresetChange: ' + getErrorMessage(err))\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tscanDevices() {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tthis.scanning = true\r\n\t\t\t\t\tthis.devices = []\r\n\t\t\t\t\t// prepare optional services: prefer free-form input, otherwise use selected preset (unless preset is 'custom' or empty)\r\n\t\t\t\t\tlet raw = (this.optionalServicesInput != null ? this.optionalServicesInput : '').trim();\r\n\t\t\t\t\tif (raw.length == 0 && this.presetSelected != null && this.presetSelected !== '' && this.presetSelected !== 'custom') {\r\n\t\t\t\t\t\traw = this.presetSelected;\r\n\t\t\t\t\t}\r\n\t\t\t\t\t// normalize helper: expand 16-bit UUIDs like '180F' to full 128-bit UUIDs\r\n\t\t\t\t\tconst normalize = (s : string) => {\r\n\t\t\t\t\t\tif (s == null || s.length == 0) return '';\r\n\t\t\t\t\t\tconst u = s.toLowerCase().replace(/^0x/, '').trim();\r\n\t\t\t\t\t\tconst hex = u.replace(/[^0-9a-f]/g, '');\r\n\t\t\t\t\t\tif (/^[0-9a-f]{4}$/.test(hex)) return `0000${hex}-0000-1000-8000-00805f9b34fb`;\r\n\t\t\t\t\t\treturn s;\r\n\t\t\t\t\t};\r\n\t\t\t\t\tconst optionalServices = raw.length > 0 ? raw.split(',').map(s => normalize(s.trim())).filter(s => s.length > 0) : []\r\n\t\t\t\t\tthis.log('开始扫描... optionalServices=' + JSON.stringify(optionalServices))\r\n\t\t\t\t\tbluetoothService.scanDevices({ \"protocols\": ['BLE'], \"optionalServices\": optionalServices })\r\n\t\t\t\t\t\t.then(() => {\r\n\t\t\t\t\t\t\tthis.log('scanDevices resolved')\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\t.catch((e) => {\r\n\t\t\t\t\t\t\tthis.log('[error] scanDevices failed: ' + getErrorMessage(e))\r\n\t\t\t\t\t\t\tthis.scanning = false\r\n\t\t\t\t\t\t})\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tthis.log('[error] scanDevices thrown: ' + getErrorMessage(err))\r\n\t\t\t\t\tthis.scanning = false\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tconnect(deviceId : string) {\r\n\t\t\t\tthis.connecting = true\r\n\t\t\t\tthis.log(`connect start -> ${deviceId}`)\r\n\t\t\t\ttry {\r\n\t\t\t\t\tbluetoothService.connectDevice(deviceId, 'BLE', { timeout: 10000 }).then(() => {\r\n\t\t\t\t\t\tif (!this.connectedIds.includes(deviceId)) this.connectedIds.push(deviceId)\r\n\t\t\t\t\t\tthis.log('连接成功: ' + deviceId)\r\n\t\t\t\t\t}).catch((e) => {\r\n\t\t\t\t\t\tthis.log('连接失败: ' + getErrorMessage(e!));\r\n\t\t\t\t\t}).finally(() => {\r\n\t\t\t\t\t\tthis.connecting = false\r\n\t\t\t\t\t\tthis.log(`connect finished -> ${deviceId}`)\r\n\t\t\t\t\t})\r\n\t\t\t\t} catch (err) {\r\n\t\t\t\t\tthis.log('[error] connect thrown: ' + getErrorMessage(err))\r\n\t\t\t\t\tthis.connecting = false\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tdisconnect(deviceId : string) {\r\n\t\t\t\tif (!this.connectedIds.includes(deviceId)) return\r\n\t\t\t\tthis.disconnecting = true\r\n\t\t\t\tthis.log(`disconnect start -> ${deviceId}`)\r\n\t\t\t\tbluetoothService.disconnectDevice(deviceId, 'BLE').then(() => {\r\n\t\t\t\t\tthis.log('已断开: ' + deviceId)\r\n\t\t\t\t\tthis.connectedIds = this.connectedIds.filter(id => id !== deviceId)\r\n\t\t\t\t\t// 清理协议处理器缓存\r\n\t\t\t\t\tthis.protocolHandlerMap.delete(deviceId)\r\n\t\t\t\t}).catch((e) => {\r\n\t\t\t\t\tthis.log('断开失败: ' + getErrorMessage(e!));\r\n\t\t\t\t}).finally(() => {\r\n\t\t\t\t\tthis.disconnecting = false\r\n\t\t\t\t\tthis.log(`disconnect finished -> ${deviceId}`)\r\n\t\t\t\t})\r\n\t\t\t},\r\n\t\t\tshowServices(deviceId : string) {\r\n\t\t\t\tthis.showingServicesFor = deviceId\r\n\t\t\t\tthis.services = []\r\n\t\t\t\tthis.log(`showServices start -> ${deviceId}`)\r\n\t\t\t\tbluetoothService.getServices(deviceId).then((list) => {\r\n\t\t\t\t\tthis.log('showServices result -> ' + this._fmt(list))\r\n\t\t\t\t\tthis.services = list as BleService[]\r\n\t\t\t\t\tthis.log('服务数: ' + (list != null ? list.length : 0) + ' [' + deviceId + ']');\r\n\t\t\t\t}).catch((e) => {\r\n\t\t\t\t\tthis.log('获取服务失败: ' + getErrorMessage(e!));\r\n\t\t\t\t}).finally(() => {\r\n\t\t\t\t\tthis.log(`showServices finished -> ${deviceId}`)\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tcloseServices() {\r\n\t\t\t\tthis.showingServicesFor = ''\r\n\t\t\t\tthis.services = []\r\n\t\t\t},\r\n\t\t\tshowCharacteristics(deviceId : string, serviceId : string) {\r\n\t\t\t\tthis.showingCharacteristicsFor = { deviceId, serviceId }\r\n\t\t\t\tthis.characteristics = []\r\n\t\t\t\tbluetoothService.getCharacteristics(deviceId, serviceId).then((list) => {\r\n\t\t\t\t\tthis.characteristics = list as BleCharacteristic[]\r\n\t\t\t\t\tconsole.log('特征数: ' + (list != null ? list.length : 0) + ' [' + deviceId + ']');\r\n\t\t\t\t\t// 自动查找可用的写入和通知特征\r\n\t\t\t\t\tconst writeChar = this.characteristics.find(c => c.properties.write)\r\n\t\t\t\t\tconst notifyChar = this.characteristics.find(c => c.properties.notify)\r\n\t\t\t\t\tif (writeChar != null && notifyChar != null) {\r\n\t\t\t\t\t\tthis.protocolDeviceId = deviceId\r\n\t\t\t\t\t\tthis.protocolServiceId = serviceId\r\n\t\t\t\t\t\tthis.protocolWriteCharId = writeChar.uuid\r\n\t\t\t\t\t\tthis.protocolNotifyCharId = notifyChar.uuid\r\n\t\t\t\t\t\tlet abs = bluetoothService as BluetoothService\r\n\t\t\t\t\t\tthis.protocolHandler = new ProtocolHandler(abs)\r\n\t\t\t\t\t\tlet handler = this.protocolHandler\r\n\t\t\t\t\t\thandler?.setConnectionParameters(deviceId, serviceId, writeChar.uuid, notifyChar.uuid)\r\n\t\t\t\t\t\thandler?.initialize()?.then(() => {\r\n\t\t\t\t\t\t\tconsole.log(\"协议处理器已初始化,可进行协议测试\")\r\n\t\t\t\t\t\t})?.catch(e => {\r\n\t\t\t\t\t\t\tconsole.log(\"协议处理器初始化失败: \" + getErrorMessage(e!))\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t}).catch((e) => {\r\n\t\t\t\t\tconsole.log('获取特征失败: ' + getErrorMessage(e!));\r\n\t\t\t\t});\r\n\t\t\t\t// tracking notifying state\r\n\t\t\t\t// this.$set(this, 'notifyingMap', this.notifyingMap || {});\r\n\t\t\t},\r\n\t\t\tcloseCharacteristics() {\r\n\t\t\t\tthis.showingCharacteristicsFor = { deviceId: '', serviceId: '' }\r\n\t\t\t\tthis.characteristics = []\r\n\t\t\t},\r\n\t\t\tcharProps(char : BleCharacteristic) : string {\r\n\t\t\t\tconst p = char.properties\r\n\t\t\t\tconst parts = [] as string[]\r\n\t\t\t\tif (p.read) parts.push('R')\r\n\t\t\t\tif (p.write) parts.push('W')\r\n\t\t\t\tif (p.notify) parts.push('N')\r\n\t\t\t\tif (p.indicate) parts.push('I')\r\n\t\t\t\treturn parts.join('/')\r\n\t\t\t\t// return [p.read ? 'R' : '', p.write ? 'W' : '', p.notify ? 'N' : '', p.indicate ? 'I' : ''].filter(Boolean).join('/')\r\n\t\t\t},\r\n\t\t\tisNotifying(uuid : string) {\r\n\t\t\t\treturn this.notifyingMap.has(uuid) && this.notifyingMap.get(uuid) == true\r\n\t\t\t},\r\n\t\t\tasync readCharacteristic(deviceId : string, serviceId : string, charId : string) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tthis.log(`readCharacteristic ${charId} ...`)\r\n\t\t\t\t\tconst buf = await bluetoothService.readCharacteristic(deviceId, serviceId, charId)\r\n\t\t\t\t\tlet text = ''\r\n\t\t\t\t\ttry { text = new TextDecoder().decode(new Uint8Array(buf)) } catch (e) { text = '' }\r\n\t\t\t\t\tconst hex = Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join(' ')\r\n\t\t\t\t\tconsole.log(`读取 ${charId}: text='${text}' hex='${hex}'`)\r\n\t\t\t\t\tthis.log(`读取 ${charId}: text='${text}' hex='${hex}'`)\r\n\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tthis.log('读取特征失败: ' + getErrorMessage(e))\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tasync writeCharacteristic(deviceId : string, serviceId : string, charId : string) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst payload = new Uint8Array([0x01])\r\n\t\t\t\t\tconst ok = await bluetoothService.writeCharacteristic(deviceId, serviceId, charId, payload, null)\r\n\t\t\t\t\tif (ok) this.log(`写入 ${charId} 成功`);\r\n\t\t\t\t\telse this.log(`写入 ${charId} 失败`);\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tthis.log('写入特征失败: ' + getErrorMessage(e))\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tasync toggleNotify(deviceId : string, serviceId : string, charId : string) {\r\n\t\t\t\ttry {\r\n\t\t\t\t\tconst map = this.notifyingMap\r\n\t\t\t\t\tconst cur = map.get(charId) == true\r\n\t\t\t\t\tif (cur) {\r\n\t\t\t\t\t\t// unsubscribe\r\n\t\t\t\t\t\tawait bluetoothService.unsubscribeCharacteristic(deviceId, serviceId, charId)\r\n\t\t\t\t\t\tmap.set(charId, false)\r\n\t\t\t\t\t\tthis.log(`取消订阅 ${charId}`)\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\t// subscribe with callback\r\n\t\t\t\t\t\tawait bluetoothService.subscribeCharacteristic(deviceId, serviceId, charId, (payload : any) => {\r\n\t\t\t\t\t\t\tlet data : ArrayBuffer | null = null\r\n\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\tif (payload instanceof ArrayBuffer) {\r\n\t\t\t\t\t\t\t\t\tdata = payload\r\n\t\t\t\t\t\t\t\t} else if (payload != null && typeof payload == 'string') {\r\n\t\t\t\t\t\t\t\t\t// some runtimes deliver base64 strings\r\n\t\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\t\tconst s = atob(payload)\r\n\t\t\t\t\t\t\t\t\t\tconst tmp = new Uint8Array(s.length)\r\n\t\t\t\t\t\t\t\t\t\tfor (let i = 0; i < s.length; i++) {\r\n\t\t\t\t\t\t\t\t\t\t\tconst ch = s.charCodeAt(i)\r\n\t\t\t\t\t\t\t\t\t\t\ttmp[i] = (ch == null) ? 0 : (ch & 0xff)\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t\tdata = tmp.buffer\r\n\t\t\t\t\t\t\t\t\t} catch (e) { data = null }\r\n\t\t\t\t\t\t\t\t} else if (payload != null && (payload as UTSJSONObject).get('data') instanceof ArrayBuffer) {\r\n\t\t\t\t\t\t\t\t\tdata = (payload as UTSJSONObject).get('data') as ArrayBuffer\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tconst arr = data != null ? new Uint8Array(data) : new Uint8Array([])\r\n\t\t\t\t\t\t\t\tconst hex = Array.from(arr).map(b => b.toString(16).padStart(2, '0')).join(' ')\r\n\t\t\t\t\t\t\t\tthis.log(`notify ${charId}: ${hex}`)\r\n\t\t\t\t\t\t\t} catch (e) { this.log('notify callback error: ' + getErrorMessage(e)) }\r\n\t\t\t\t\t\t})\r\n\t\t\t\t\t\tmap.set(charId, true)\r\n\t\t\t\t\t\tthis.log(`订阅 ${charId}`)\r\n\t\t\t\t\t}\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tthis.log('订阅/取消订阅失败: ' + getErrorMessage(e))\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tautoConnect() {\r\n\t\t\t\tif (this.connecting) return;\r\n\t\t\t\tthis.connecting = true;\r\n\t\t\t\tconst toConnect = this.devices.filter(d => !this.connectedIds.includes(d.deviceId));\r\n\t\t\t\tif (toConnect.length == 0) {\r\n\t\t\t\t\tthis.log('没有可自动连接的设备');\r\n\t\t\t\t\tthis.connecting = false;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tlet successCount = 0;\r\n\t\t\t\tlet failCount = 0;\r\n\t\t\t\tlet finished = 0;\r\n\t\t\t\ttoConnect.forEach(device => {\r\n\t\t\t\t\tbluetoothService.connectDevice(device.deviceId, 'BLE', { timeout: 10000 }).then(() => {\r\n\t\t\t\t\t\tif (!this.connectedIds.includes(device.deviceId)) this.connectedIds.push(device.deviceId);\r\n\t\t\t\t\t\tthis.log('自动连接成功: ' + device.deviceId);\r\n\t\t\t\t\t\tsuccessCount++;\r\n\t\t\t\t\t\t//\tthis.getOrInitProtocolHandler(device.deviceId);\r\n\t\t\t\t\t}).catch((e) => {\r\n\t\t\t\t\t\tthis.log('自动连接失败: ' + device.deviceId + ' ' + getErrorMessage(e!));\r\n\t\t\t\t\t\tfailCount++;\r\n\t\t\t\t\t}).finally(() => {\r\n\t\t\t\t\t\tfinished++;\r\n\t\t\t\t\t\tif (finished == toConnect.length) {\r\n\t\t\t\t\t\t\tthis.connecting = false;\r\n\t\t\t\t\t\t\tthis.log(`自动连接完成,成功${successCount},失败${failCount}`);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t});\r\n\t\t\t\t});\r\n\t\t\t},\r\n\t\t\tautoDiscoverInterfaces(deviceId : string) {\r\n\t\t\t\tthis.log('自动发现接口中...')\r\n\t\t\t\tbluetoothService.getAutoBleInterfaces(deviceId)\r\n\t\t\t\t\t.then((res) => {\r\n\t\t\t\t\t\tconsole.log(res)\r\n\t\t\t\t\t\tthis.log('自动发现接口成功: ' + JSON.stringify(res))\r\n\t\t\t\t\t})\r\n\t\t\t\t\t.catch((e) => {\r\n\t\t\t\t\t\tconsole.log(e)\r\n\t\t\t\t\t\tthis.log('自动发现接口失败: ' + getErrorMessage(e!))\r\n\t\t\t\t\t})\r\n\t\t\t},\r\n\t\t\t// 新增:测试电量功能\r\n\t\t\tasync getOrInitProtocolHandler(deviceId : string) : Promise<ProtocolHandler> {\r\n\t\t\t\tlet handler = this.protocolHandlerMap.get(deviceId);\r\n\t\t\t\tif (handler == null) {\r\n\t\t\t\t\t// 自动发现接口\r\n\t\t\t\t\tconst res = await bluetoothService.getAutoBleInterfaces(deviceId);\r\n\t\t\t\t\thandler = new ProtocolHandler(bluetoothService as BluetoothService);\r\n\t\t\t\t\thandler.setConnectionParameters(deviceId, res.serviceId, res.writeCharId, res.notifyCharId);\r\n\t\t\t\t\tawait handler.initialize();\r\n\t\t\t\t\tthis.protocolHandlerMap.set(deviceId, handler);\r\n\t\t\t\t\tthis.log(`协议处理器已初始化: ${deviceId}`);\r\n\t\t\t\t}\r\n\t\t\t\treturn handler!;\r\n\t\t\t},\r\n\r\n\t\t\tasync getDeviceInfo(deviceId : string) {\r\n\t\t\t\tthis.log('获取设备信息中...');\r\n\t\t\t\ttry {\r\n\t\t\t\t\t// First try protocol handler (if device exposes custom protocol)\r\n\t\t\t\t\ttry {\r\n\t\t\t\t\t\tconst handler = await this.getOrInitProtocolHandler(deviceId);\r\n\t\t\t\t\t\t// 获取电量\r\n\t\t\t\t\t\tconst battery = await handler.testBatteryLevel();\r\n\t\t\t\t\t\tthis.log('协议: 电量: ' + battery);\r\n\t\t\t\t\t\t// 获取软件/硬件版本\r\n\t\t\t\t\t\tconst swVersion = await handler.testVersionInfo(false);\r\n\t\t\t\t\t\tthis.log('协议: 软件版本: ' + swVersion);\r\n\t\t\t\t\t\tconst hwVersion = await handler.testVersionInfo(true);\r\n\t\t\t\t\t\tthis.log('协议: 硬件版本: ' + hwVersion);\r\n\t\t\t\t\t} catch (protoErr) {\r\n\t\t\t\t\t\tthis.log('协议处理器不可用或初始化失败,继续使用通用 GATT 查询: ' + ((protoErr != null && protoErr instanceof Error) ? protoErr.message : this._fmt(protoErr)));\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\t// Additionally, attempt to read standard services: Generic Access (0x1800), Generic Attribute (0x1801), Battery (0x180F)\r\n\t\t\t\t\tconst stdServices = ['1800', '1801', '180f'].map(s => {\r\n\t\t\t\t\t\tconst hex = s.toLowerCase().replace(/^0x/, '');\r\n\t\t\t\t\t\treturn /^[0-9a-f]{4}$/.test(hex) ? `0000${hex}-0000-1000-8000-00805f9b34fb` : s;\r\n\t\t\t\t\t});\r\n\t\t\t\t\t// fetch services once to avoid repeated GATT server queries\r\n\t\t\t\t\tconst services = await bluetoothService.getServices(deviceId);\r\n\t\t\t\t\tfor (const svc of stdServices) {\r\n\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\tthis.log('读取服务: ' + svc);\r\n\t\t\t\t\t\t\t// find matching service\r\n\t\t\t\t\t\t\tconst found = services.find((x : any) => {\r\n\t\t\t\t\t\t\t\tconst uuid = (x as UTSJSONObject).get('uuid')\r\n\t\t\t\t\t\t\t\treturn uuid != null && uuid.toString().toLowerCase() == svc.toLowerCase()\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\tif (found == null) {\r\n\t\t\t\t\t\t\t\tthis.log('未发现服务 ' + svc + '(需重新扫描并包含 optionalServices');\r\n\t\t\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tconst chars = await bluetoothService.getCharacteristics(deviceId, found?.uuid as string);\r\n\t\t\t\t\t\t\tconsole.log(`服务 ${svc} 包含 ${chars.length} 个特征`, chars);\r\n\t\t\t\t\t\t\tfor (const c of chars) {\r\n\t\t\t\t\t\t\t\ttry {\r\n\t\t\t\t\t\t\t\t\tif (c.properties?.read == true) {\r\n\t\t\t\t\t\t\t\t\t\tconst buf = await bluetoothService.readCharacteristic(deviceId, found?.uuid as string, c.uuid);\r\n\t\t\t\t\t\t\t\t\t\t// try to decode as utf8 then hex\r\n\t\t\t\t\t\t\t\t\t\tlet text = '';\r\n\t\t\t\t\t\t\t\t\t\ttry { text = new TextDecoder().decode(new Uint8Array(buf)); } catch (e) { text = ''; }\r\n\t\t\t\t\t\t\t\t\t\tconst hex = Array.from(new Uint8Array(buf)).map(b => b.toString(16).padStart(2, '0')).join(' ');\r\n\t\t\t\t\t\t\t\t\t\tconsole.log(`特征 ${c.uuid} 读取: text='${text}' hex='${hex}'`);\r\n\t\t\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\t\t\tconsole.log(`特征 ${c.uuid} 不可读`);\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\t\t\tconsole.log(`读取特征 ${c.uuid} 失败: ${getErrorMessage(e)}`);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t} catch (e) {\r\n\t\t\t\t\t\t\tconsole.log('查询服务 ' + svc + ' 失败: ' + getErrorMessage(e));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t} catch (e) {\r\n\t\t\t\t\tconsole.log('获取设备信息失败: ' + getErrorMessage(e));\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\tfunction getErrorMessage(e : Error | string | null) : string {\r\n\t\tif (e == null) return '';\r\n\t\tif (typeof e == 'string') return e;\r\n\t\ttry {\r\n\t\t\treturn JSON.stringify(e);\r\n\t\t} catch (err) {\r\n\t\t\treturn '' + e;\r\n\t\t}\r\n\t}\r\n</script>\r\n\r\n<style scoped>\r\n\t.container {\r\n\t\tpadding: 16px;\r\n\t\tflex: 1;\r\n\t}\r\n\r\n\t.section {\r\n\t\tmargin-bottom: 18px;\r\n\t}\r\n\r\n\t.device-item {\r\n\t\tdisplay: flex;\r\n\t\tflex-direction: row;\r\n\t\tflex-wrap: wrap;\r\n\t}\r\n\r\n\t.service-item,\r\n\t.char-item {\r\n\t\tmargin: 6px 0;\r\n\t}\r\n\r\n\tbutton {\r\n\t\tmargin-left: 8px;\r\n\t}\r\n</style>"]}