Commit 5e73db330972d6ae1a870b615ed155ee83bbb287

Authored by daifengyi
1 parent 1605ea7d

feat:parse device info

HDFwear/Tools/Bluetooth+Types.swift
... ... @@ -182,3 +182,16 @@ enum SyncDay: Int {
182 182 // case openCamera = 0x46
183 183 // case exitCamera = 0x48
184 184 //}
  185 +
  186 +// 0x01 设备ID
  187 +// 0x02 设备名称
  188 +// 0x03 设备mac地址
  189 +// 0x04 MCU版本号
  190 +// 0x05 电量
  191 +enum deviceInfoType: UInt8 {
  192 + case deviceId = 0x01
  193 + case deviceName = 0x02
  194 + case deviceMac = 0x03
  195 + case mcuVersion = 0x04
  196 + case battery = 0x05
  197 +}
... ...
HDFwear/Tools/BluetoothManager+Function.swift
... ... @@ -311,6 +311,8 @@ extension BluetoothManager {
311 311 parseDefaultResponseData(bytes)
312 312 case 0x8002:// 设备信息查询应答
313 313 print("设备信息查询应答")
  314 + let content = parseContentFromBytes(bytes)
  315 + parseDeviceInfoData(content)
314 316 case 0x8009:// 实时步数、卡路里、距离自动上报
315 317 print("实时步数、卡路里、距离自动上报")
316 318 case 0x8010:// 电量变化自动上报
... ... @@ -368,6 +370,15 @@ extension BluetoothManager {
368 370 // }
369 371 }
370 372  
  373 + private func parseContentFromBytes(_ bytes: [UInt8]) -> [UInt8] {
  374 + let contentLength = Int(bytes[10]) // 获取内容长度
  375 + guard bytes.count >= 11 + contentLength else {
  376 + return [] // 如果字节数组长度不足以包含内容,返回空数组
  377 + }
  378 + let content = Array(bytes[11..<(11 + contentLength)]) // 获取内容部分
  379 + return content
  380 + }
  381 +
371 382 private func parseDefaultResponseData(_ bytes: [UInt8]) {
372 383 guard bytes.count == 17, bytes[9] == 5 else {
373 384 return
... ... @@ -390,4 +401,41 @@ extension BluetoothManager {
390 401 break
391 402 }
392 403 }
  404 +
  405 + private func parseDeviceInfoData (_ content:[UInt8]) {
  406 + guard content.count > 0 else {
  407 + print("无有效的信息")
  408 + return
  409 + }
  410 + let totalInfoCount = Int(content[0])
  411 + var currentIndex = 1
  412 +
  413 + // 检查总信息数是否大于0
  414 + guard totalInfoCount > 0 else {
  415 + print("无有效的信息")
  416 + return
  417 + }
  418 + for _ in 0..<totalInfoCount {
  419 + // 检查是否有足够的字节用于解析信息
  420 + guard currentIndex + 2 < content.count else {
  421 + print("数据不完整")
  422 + return
  423 + }
  424 + let infoID = Int(content[currentIndex])
  425 + currentIndex += 1
  426 + let infoLength = Int(content[currentIndex])
  427 + currentIndex += 1
  428 + // 检查内容长度是否与实际字节匹配
  429 + guard currentIndex + infoLength <= content.count else {
  430 + print("信息内容长度不匹配")
  431 + return
  432 + }
  433 + let info = content[currentIndex..<(currentIndex + infoLength)]
  434 + currentIndex += infoLength
  435 +
  436 + // 在此处执行对每个info的操作
  437 + print("ID: \(infoID)")
  438 + print("内容: \(info)")
  439 + }
  440 + }
393 441 }
... ...