- uni-app x官方无内置蓝牙API(文档明确见插件市场),为实现去插件化,工程整体迁移为uni-app vue3(vue/ts),App端内置完整BLE API,标准基座即可运行 - 新建src/BluetoothManager.ts:基于uni内置BLE API(createBLEConnection/notifyBLECharacteristicValueChange/writeBLECharacteristicValue(writeNoResponse)/setBLEMTU/getBLEDeviceRSSI等),保持原插件type约定,页面业务逻辑不变 - 删除uni_modules/android-ble及未使用的lime-*、uni-wifi;保留uni-icons、uni-scss - uts模块全部移植为ts(src/mcm、api、common):UTSJSONObject改Record<string,any>,适配vue3 getStorageSync空值返回空串的差异 - 7个页面uvue转vue:模板不变,显式import ref与生命周期钩子;OTA固件读取由java.io改为plus.io+uni.base64ToArrayBuffer - manifest.json去uni-app-x改app-plus结构,补Android 12+蓝牙权限;删除platformConfig.json;运行改用标准基座
49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
export function bytesToAscii(bytes: number[]): string {
|
||
let s = ''
|
||
for (let i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i] & 0xFF)
|
||
return s
|
||
}
|
||
|
||
export function asciiToBytes(s: string): Array<number> {
|
||
const out = [] as Array<number>
|
||
for (let i = 0; i < s.length; i++) {
|
||
const c = s.charCodeAt(i)
|
||
out.push(c == null ? 0 : c)
|
||
}
|
||
return out
|
||
}
|
||
|
||
export function bytesToHex(bytes: number[]): string {
|
||
let s = ''
|
||
for (let i = 0; i < bytes.length; i++) {
|
||
const v = bytes[i] & 0xFF
|
||
s += (v < 16 ? '0' : '') + v.toString(16)
|
||
}
|
||
return s
|
||
}
|
||
|
||
// "4D 00 00 01 01" => 0x4d 0x00 0x00 0x01 0x01
|
||
export function parseHexBytes(input: string): Array<number> | null {
|
||
let s = input.trim()
|
||
if (s.length == 0) return [] as Array<number>
|
||
|
||
// 逗号、换行、制表符 全部变空格(全局)
|
||
s = s.replace(/[,\n\t]/g, " ")
|
||
|
||
// 去掉 0x / 0X(全局)
|
||
s = s.replace(/0x/ig, "")
|
||
|
||
const parts = s.split(" ")
|
||
const out = [] as Array<number>
|
||
|
||
for (let i = 0; i < parts.length; i++) {
|
||
const p = parts[i].trim()
|
||
if (p.length == 0) continue
|
||
|
||
const token = (p.length == 1) ? ("0" + p) : p
|
||
const v = parseInt(token, 16)
|
||
if (isNaN(v) || v < 0 || v > 255) return null
|
||
out.push(v)
|
||
}
|
||
return out
|
||
} |