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 | 19 | @Persisted var date: Date? = nil |
20 | 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 | 23 | self.init() |
24 | 24 | self.number = number |
25 | 25 | self.distance = Float(Int(distance*100))/100.0 |
... | ... | @@ -30,14 +30,14 @@ class StepModel: Object { |
30 | 30 | |
31 | 31 | class func toStepArray(_ bytes: [UInt8]) -> [StepModel] { |
32 | 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 | 41 | stepArray.append(step) |
42 | 42 | } |
43 | 43 | return stepArray |
... | ... | @@ -478,8 +478,8 @@ class TemperatureModel: Object { |
478 | 478 | let hexValue = group.prefix(4).reduce(0) { ($0 << 8) + UInt32($1) } |
479 | 479 | let timestamp = TimeInterval(hexValue) |
480 | 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 | 484 | return tArray |
485 | 485 | } | ... | ... |
HDFwear/Tools/BluetoothManager+Function.swift
... | ... | @@ -301,6 +301,7 @@ extension BluetoothManager { |
301 | 301 | } |
302 | 302 | //MARK: - 新解析数据 |
303 | 303 | func parseData(_ bytes: [UInt8]) { |
304 | + // jtd! | |
304 | 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 | 306 | totalLength = 0 |
306 | 307 | mergeLength = 0 |
... | ... | @@ -355,6 +356,8 @@ extension BluetoothManager { |
355 | 356 | parsePressureData(content) |
356 | 357 | case 0x8021:// 分时段计步数据上报 |
357 | 358 | print("分时段计步数据上报") |
359 | + let content = parseContentFromBytes(bytes) | |
360 | + parseStepData(content) | |
358 | 361 | case 0x8022:// 遥控拍照 |
359 | 362 | print("遥控拍照") |
360 | 363 | let stauts = bytes[10] |
... | ... | @@ -490,4 +493,15 @@ extension BluetoothManager { |
490 | 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 | } | ... | ... |