Commit cbe73597ebf8de2aabfe25215eec8ff4272cd651

Authored by daifengyi
1 parent 69e5b680

feat:heart rate

HDFwear/Home/Model/HealthModel.swift
... ... @@ -287,10 +287,14 @@ class HeartRateModel: Object {
287 287  
288 288 class func toHeartRateArray(_ bytes: [UInt8]) -> [HeartRateModel] {
289 289 var hrArray: [HeartRateModel] = []
290   - let num = bytes.count/7
291   - for i in 0..<num {
292   - let date = DateInRegion(year: Int(bytes[i*7])+2000, month: Int(bytes[i*7+1]), day: Int(bytes[i*7+2]), hour: Int(bytes[i*7+3]), minute: Int(bytes[i*7+4]), second: Int(bytes[i*7+5])).date
293   - let hr = HeartRateModel(value: Int(bytes[i*7+6]), date: date)
  290 + // 将数组分成5个一组
  291 + let groupedArray = stride(from: 0, to: bytes.count, by: 5).map { Array(bytes[$0..<min($0 + 5, bytes.count)]) }
  292 + // 处理每组的前四个数
  293 + for group in groupedArray {
  294 + let hexValue = group.prefix(4).reduce(0) { ($0 << 8) + UInt32($1) }
  295 + let timestamp = TimeInterval(hexValue)
  296 + let date = Date(timeIntervalSince1970: timestamp)
  297 + let hr = HeartRateModel(value: Int(group[4]), date: date)
294 298 hrArray.append(hr)
295 299 }
296 300 return hrArray
... ...
HDFwear/Tools/BluetoothManager+Function.swift
... ... @@ -301,6 +301,7 @@ extension BluetoothManager {
301 301 }
302 302 //MARK: - 新解析数据
303 303 func parseData(_ bytes: [UInt8]) {
  304 + let bytes: [UInt8] = [0xED, 0x7E, 0x00, 0x01, 0x80, 0x16, 0x00, 0x07, 0x00, 0xC8, 0x64, 0x9D, 0xA3, 0xB4, 0x70, 0x64, 0x9D, 0xAA, 0xBC, 0xF7, 0x64, 0x9D, 0xB1, 0xC4, 0x06, 0x64, 0x9D, 0xB8, 0xCC, 0x00, 0x64, 0x9D, 0xBF, 0xD4, 0x16, 0x64, 0x9D, 0xC6, 0xDC, 0xF9, 0x64, 0x9D, 0xCD, 0xE4, 0x06, 0x64, 0x9D, 0xD4, 0xEC, 0x00, 0x64, 0x9D, 0xDB, 0xF4, 0x00, 0x64, 0x9D, 0xE2, 0xFC, 0xFB, 0x64, 0x9D, 0xEA, 0x04, 0x06, 0x64, 0x9D, 0xF1, 0x0C, 0x00, 0x64, 0x9D, 0xF8, 0x14, 0xE5, 0x64, 0x9D, 0xFF, 0x1C, 0xFD, 0x64, 0x9E, 0x06, 0x24, 0x06, 0x64, 0x9E, 0x0D, 0x2C, 0x00, 0x64, 0x9E, 0x14, 0x34, 0xC5, 0x64, 0x9E, 0x1B, 0x3C, 0xFF, 0x64, 0x9E, 0x22, 0x44, 0x06, 0x64, 0x9E, 0x29, 0x4C, 0x00, 0x64, 0x9E, 0x30, 0x54, 0xB4, 0x64, 0x9E, 0x37, 0x5C, 0x01, 0x64, 0x9E, 0x3E, 0x64, 0x07, 0x64, 0x9E, 0x45, 0x6C, 0x00, 0x64, 0x9E, 0x4C, 0x74, 0x9E, 0x64, 0x9E, 0x53, 0x7C, 0x02, 0x64, 0x9E, 0x5A, 0x84, 0x07, 0x64, 0x9E, 0x61, 0x8C, 0x00, 0x64, 0x9E, 0x68, 0x94, 0x83, 0x64, 0x9E, 0x6F, 0x9C, 0x04, 0x64, 0x9E, 0x76, 0xA4, 0x07, 0x64, 0x9E, 0x7D, 0xAC, 0x00, 0x64, 0x9E, 0x84, 0xB4, 0x72, 0x64, 0x9E, 0x8B, 0xBC, 0x06, 0x64, 0x9E, 0x92, 0xC4, 0x07, 0x64, 0x9E, 0x99, 0xCC, 0x00, 0x64, 0x9E, 0xA0, 0xD4, 0x57, 0x64, 0x9E, 0xA7, 0xDC, 0x08, 0x64, 0x9E, 0xAE, 0xE4, 0x07, 0x64, 0x9E, 0xB5, 0xEC, 0x14, 0x17, 0x3E]
304 305 totalLength = 0
305 306 mergeLength = 0
306 307 totalBytes = []
... ... @@ -336,6 +337,8 @@ extension BluetoothManager {
336 337 }
337 338 case 0x8016:// 历史心率数据上报
338 339 print("历史心率数据上报")
  340 + let content = parseContentFromBytes(bytes)
  341 + parseHeartRateData(content)
339 342 case 0x8017:// 历史血氧数据上报
340 343 print("历史血氧数据上报")
341 344 case 0x8018:// 历史体温数据上报
... ... @@ -371,11 +374,11 @@ extension BluetoothManager {
371 374 }
372 375  
373 376 private func parseContentFromBytes(_ bytes: [UInt8]) -> [UInt8] {
374   - let contentLength = Int(bytes[10]) // 获取内容长度
375   - guard bytes.count >= 11 + contentLength else {
  377 + let contentLength = Int(bytes[9]) // 获取内容长度
  378 + guard bytes.count >= 10 + contentLength else {
376 379 return [] // 如果字节数组长度不足以包含内容,返回空数组
377 380 }
378   - let content = Array(bytes[11..<(11 + contentLength)]) // 获取内容部分
  381 + let content = Array(bytes[10..<(10 + contentLength)]) // 获取内容部分
379 382 return content
380 383 }
381 384  
... ... @@ -438,4 +441,15 @@ extension BluetoothManager {
438 441 print("内容: \(info)")
439 442 }
440 443 }
  444 +
  445 + func parseHeartRateData (_ content: [UInt8]) {
  446 + guard content.count > 0 else {
  447 + print("无有效的信息")
  448 + heartRateClosure?([], nil)
  449 + return
  450 + }
  451 + let hrArray = HeartRateModel.toHeartRateArray(content)
  452 + HeartRateModel.addArray(hrArray)// 加入数据库
  453 + heartRateClosure?(hrArray, nil)
  454 + }
441 455 }
... ...