|
|
|
@ -43,6 +43,10 @@ public class BleService: NSObject { |
|
|
|
private var audioCharacteristic: CBCharacteristic? |
|
|
|
|
|
|
|
private var isScanning = false |
|
|
|
|
|
|
|
// 是否是ota模式 |
|
|
|
var isEnterOta = false |
|
|
|
|
|
|
|
private var callbacks = [Callback]() |
|
|
|
private var connectionState = BleConst.STATE_DISCONNECTED |
|
|
|
|
|
|
|
@ -212,6 +216,9 @@ public class BleService: NSObject { |
|
|
|
|
|
|
|
/// 统一的连接方法,支持恢复和重连 |
|
|
|
private func connectPeripheral(_ peripheral: CBPeripheral) { |
|
|
|
if isEnterOta { |
|
|
|
return |
|
|
|
} |
|
|
|
guard let manager = centralManager else { |
|
|
|
return |
|
|
|
} |
|
|
|
@ -592,19 +599,14 @@ public class BleService: NSObject { |
|
|
|
] |
|
|
|
|
|
|
|
if !responseData.isEmpty { |
|
|
|
if let versionStr = String(data: responseData, encoding: .utf8) { |
|
|
|
resultMap["version"] = versionStr |
|
|
|
os_log("接收到目标版本号: %@", log: logger, type: .info, versionStr) |
|
|
|
} else { |
|
|
|
// 如果无法解析为字符串,以点分隔的数字表示版本 |
|
|
|
let versionNums = responseData |
|
|
|
.map { $0 } |
|
|
|
.filter { $0 != 0xFF } // 过滤掉无效字节 |
|
|
|
.map { String($0) } |
|
|
|
.joined(separator: ".") |
|
|
|
resultMap["version"] = versionNums |
|
|
|
os_log("接收到目标版本号(数字格式): %@", log: logger, type: .info, versionNums) |
|
|
|
} |
|
|
|
// 如果无法解析为字符串,以点分隔的数字表示版本 |
|
|
|
let versionNums = responseData |
|
|
|
.map { $0 } |
|
|
|
.filter { $0 != 0xFF } // 过滤掉无效字节 |
|
|
|
.map { String($0) } |
|
|
|
.joined(separator: ".") |
|
|
|
resultMap["version"] = versionNums |
|
|
|
os_log("接收到目标版本号(数字格式): %@", log: logger, type: .info, versionNums) |
|
|
|
} |
|
|
|
|
|
|
|
notifyDeviceInfoReceived(infoType: Int(cmd), infoData: resultMap) |
|
|
|
@ -616,13 +618,8 @@ public class BleService: NSObject { |
|
|
|
"rawData": responseData |
|
|
|
] |
|
|
|
|
|
|
|
if responseData.count >= 2 { |
|
|
|
let productId = UInt16(responseData[0]) << 8 | UInt16(responseData[1]) |
|
|
|
resultMap["productId"] = productId |
|
|
|
os_log("接收到产品ID: %d", log: logger, type: .info, productId) |
|
|
|
} else if !responseData.isEmpty { |
|
|
|
// 单字节产品ID |
|
|
|
let productId = UInt16(responseData[0]) |
|
|
|
if !responseData.isEmpty { |
|
|
|
let productId = responseData.map { String($0 & 0xFF) }.joined(separator: ".") |
|
|
|
resultMap["productId"] = productId |
|
|
|
os_log("接收到产品ID: %d", log: logger, type: .info, productId) |
|
|
|
} |
|
|
|
@ -1263,4 +1260,4 @@ extension BleService: CBPeripheralDelegate { |
|
|
|
os_log("✅ 描述符写入成功: %{public}@", log: logger, type: .debug, descriptor.uuid.uuidString) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|