Commit e756c90464ad355628d3c5ec4e13ff0db8669c8a

Authored by daifengyi
1 parent d559de19

feat:parse step

HDFwear/Home/Model/HealthModel.swift
@@ -19,7 +19,7 @@ class StepModel: Object { @@ -19,7 +19,7 @@ class StepModel: Object {
19 @Persisted var date: Date? = nil 19 @Persisted var date: Date? = nil
20 @Persisted var percent: Int = 0 20 @Persisted var percent: Int = 0
21 21
22 - convenience init(number: Int, calorie: Float, distance: Float, date: Date) { 22 + convenience init(number: Int, calorie: Float = 0, distance: Float = 0, date: Date) {
23 self.init() 23 self.init()
24 self.number = number 24 self.number = number
25 self.distance = Float(Int(distance*100))/100.0 25 self.distance = Float(Int(distance*100))/100.0
@@ -30,14 +30,14 @@ class StepModel: Object { @@ -30,14 +30,14 @@ class StepModel: Object {
30 30
31 class func toStepArray(_ bytes: [UInt8]) -> [StepModel] { 31 class func toStepArray(_ bytes: [UInt8]) -> [StepModel] {
32 var stepArray: [StepModel] = [] 32 var stepArray: [StepModel] = []
33 - let date = DateInRegion(year: Int(bytes[0])+2000, month: Int(bytes[1]), day: Int(bytes[2]), hour: 0, minute: 0, second: 0).date  
34 - let stepBytes: [UInt8] = Array(bytes[4..<bytes.count])  
35 - let num = min(stepBytes.count/4, 24)  
36 - for i in 0..<num {  
37 - let number: Int = bytesToInt(Array(stepBytes[4*i..<4*i+4]))  
38 - var distance: Float = stepToDistance(number)  
39 - distance = Float(Int(distance*100))/100.0  
40 - let step = StepModel(number: number, calorie: stepToCalorie(number), distance: stepToDistance(number), date: date+i.hours) 33 + // 将数组分成5个一组
  34 + let groupedArray = stride(from: 0, to: bytes.count, by: 5).map { Array(bytes[$0..<min($0 + 5, bytes.count)]) }
  35 + // 处理每组的前四个数
  36 + for group in groupedArray {
  37 + let hexValue = group.prefix(4).reduce(0) { ($0 << 8) + UInt32($1) }
  38 + let timestamp = TimeInterval(hexValue)
  39 + let date = Date(timeIntervalSince1970: timestamp)
  40 + let step = StepModel(number: Int(group[4]), date: date)
41 stepArray.append(step) 41 stepArray.append(step)
42 } 42 }
43 return stepArray 43 return stepArray
@@ -478,8 +478,8 @@ class TemperatureModel: Object { @@ -478,8 +478,8 @@ class TemperatureModel: Object {
478 let hexValue = group.prefix(4).reduce(0) { ($0 << 8) + UInt32($1) } 478 let hexValue = group.prefix(4).reduce(0) { ($0 << 8) + UInt32($1) }
479 let timestamp = TimeInterval(hexValue) 479 let timestamp = TimeInterval(hexValue)
480 let date = Date(timeIntervalSince1970: timestamp) 480 let date = Date(timeIntervalSince1970: timestamp)
481 - let hr = TemperatureModel(value: Int(group[4]), date: date)  
482 - tArray.append(hr) 481 + let temperature = TemperatureModel(value: Int(group[4]), date: date)
  482 + tArray.append(temperature)
483 } 483 }
484 return tArray 484 return tArray
485 } 485 }
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 + // jtd!
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] 305 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]
305 totalLength = 0 306 totalLength = 0
306 mergeLength = 0 307 mergeLength = 0
@@ -355,6 +356,8 @@ extension BluetoothManager { @@ -355,6 +356,8 @@ extension BluetoothManager {
355 parsePressureData(content) 356 parsePressureData(content)
356 case 0x8021:// 分时段计步数据上报 357 case 0x8021:// 分时段计步数据上报
357 print("分时段计步数据上报") 358 print("分时段计步数据上报")
  359 + let content = parseContentFromBytes(bytes)
  360 + parseStepData(content)
358 case 0x8022:// 遥控拍照 361 case 0x8022:// 遥控拍照
359 print("遥控拍照") 362 print("遥控拍照")
360 let stauts = bytes[10] 363 let stauts = bytes[10]
@@ -490,4 +493,15 @@ extension BluetoothManager { @@ -490,4 +493,15 @@ extension BluetoothManager {
490 pressureClosure?(array, nil) 493 pressureClosure?(array, nil)
491 } 494 }
492 495
  496 + func parseStepData (_ content: [UInt8]) {
  497 + guard content.count > 0 else {
  498 + print("无有效的信息")
  499 + stepClosure?([], nil)
  500 + return
  501 + }
  502 + let array = StepModel.toStepArray(content)
  503 + StepModel.addArray(array)// 加入数据库
  504 + stepClosure?(array, nil)
  505 + }
  506 +
493 } 507 }