Commit cbe73597ebf8de2aabfe25215eec8ff4272cd651

Authored by daifengyi
1 parent 69e5b680

feat:heart rate

HDFwear/Home/Model/HealthModel.swift
@@ -287,10 +287,14 @@ class HeartRateModel: Object { @@ -287,10 +287,14 @@ class HeartRateModel: Object {
287 287
288 class func toHeartRateArray(_ bytes: [UInt8]) -> [HeartRateModel] { 288 class func toHeartRateArray(_ bytes: [UInt8]) -> [HeartRateModel] {
289 var hrArray: [HeartRateModel] = [] 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 hrArray.append(hr) 298 hrArray.append(hr)
295 } 299 }
296 return hrArray 300 return hrArray
HDFwear/Tools/BluetoothManager+Function.swift
@@ -301,6 +301,7 @@ extension BluetoothManager { @@ -301,6 +301,7 @@ extension BluetoothManager {
301 } 301 }
302 //MARK: - 新解析数据 302 //MARK: - 新解析数据
303 func parseData(_ bytes: [UInt8]) { 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 totalLength = 0 305 totalLength = 0
305 mergeLength = 0 306 mergeLength = 0
306 totalBytes = [] 307 totalBytes = []
@@ -336,6 +337,8 @@ extension BluetoothManager { @@ -336,6 +337,8 @@ extension BluetoothManager {
336 } 337 }
337 case 0x8016:// 历史心率数据上报 338 case 0x8016:// 历史心率数据上报
338 print("历史心率数据上报") 339 print("历史心率数据上报")
  340 + let content = parseContentFromBytes(bytes)
  341 + parseHeartRateData(content)
339 case 0x8017:// 历史血氧数据上报 342 case 0x8017:// 历史血氧数据上报
340 print("历史血氧数据上报") 343 print("历史血氧数据上报")
341 case 0x8018:// 历史体温数据上报 344 case 0x8018:// 历史体温数据上报
@@ -371,11 +374,11 @@ extension BluetoothManager { @@ -371,11 +374,11 @@ extension BluetoothManager {
371 } 374 }
372 375
373 private func parseContentFromBytes(_ bytes: [UInt8]) -> [UInt8] { 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 return [] // 如果字节数组长度不足以包含内容,返回空数组 379 return [] // 如果字节数组长度不足以包含内容,返回空数组
377 } 380 }
378 - let content = Array(bytes[11..<(11 + contentLength)]) // 获取内容部分 381 + let content = Array(bytes[10..<(10 + contentLength)]) // 获取内容部分
379 return content 382 return content
380 } 383 }
381 384
@@ -438,4 +441,15 @@ extension BluetoothManager { @@ -438,4 +441,15 @@ extension BluetoothManager {
438 print("内容: \(info)") 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 }