Commit e756c90464ad355628d3c5ec4e13ff0db8669c8a
1 parent
d559de19
feat:parse step
Showing
2 changed files
with
25 additions
and
11 deletions
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 | } |