Commit 36b76cd7949818ee2bde712d8c48ad97333b8894
1 parent
6e0a8d81
feat:intensive time now & history data
Showing
7 changed files
with
126 additions
and
3 deletions
HDFwear.xcodeproj/project.pbxproj
... | ... | @@ -286,6 +286,7 @@ |
286 | 286 | 847482762B03793C0004F0C2 /* NewWeatherModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847482752B03793C0004F0C2 /* NewWeatherModel.swift */; }; |
287 | 287 | 847672B82B074E43007DC2DE /* NewBeiDouContactModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847672B72B074E43007DC2DE /* NewBeiDouContactModel.swift */; }; |
288 | 288 | 847AF36E2B4CF35F00E3456E /* NewSleepModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847AF36D2B4CF35F00E3456E /* NewSleepModel.swift */; }; |
289 | + 847B88EF2B5780CA00851EE7 /* NewIntensiveTimeModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 847B88EE2B5780CA00851EE7 /* NewIntensiveTimeModel.swift */; }; | |
289 | 290 | 84DA399D2B4D3A5B008D34A9 /* NewGpsModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DA399C2B4D3A5B008D34A9 /* NewGpsModel.swift */; }; |
290 | 291 | B212F1FD2A14CE0400781D59 /* LaunchSetting.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B212F1FF2A14CE0400781D59 /* LaunchSetting.storyboard */; }; |
291 | 292 | B212F2052A14D28E00781D59 /* LaunchMyBodySettingVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = B212F2042A14D28E00781D59 /* LaunchMyBodySettingVC.swift */; }; |
... | ... | @@ -666,6 +667,7 @@ |
666 | 667 | 847482752B03793C0004F0C2 /* NewWeatherModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewWeatherModel.swift; sourceTree = "<group>"; }; |
667 | 668 | 847672B72B074E43007DC2DE /* NewBeiDouContactModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewBeiDouContactModel.swift; sourceTree = "<group>"; }; |
668 | 669 | 847AF36D2B4CF35F00E3456E /* NewSleepModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewSleepModel.swift; sourceTree = "<group>"; }; |
670 | + 847B88EE2B5780CA00851EE7 /* NewIntensiveTimeModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewIntensiveTimeModel.swift; sourceTree = "<group>"; }; | |
669 | 671 | 847D1C4A2B009FAC0097A96E /* 20231111ReadMe.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = 20231111ReadMe.md; sourceTree = "<group>"; }; |
670 | 672 | 847D2DE42B3D575F001BA7EF /* 20240110ReadMe.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = 20240110ReadMe.md; sourceTree = "<group>"; }; |
671 | 673 | 84DA399C2B4D3A5B008D34A9 /* NewGpsModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewGpsModel.swift; sourceTree = "<group>"; }; |
... | ... | @@ -1287,6 +1289,7 @@ |
1287 | 1289 | 847AF36D2B4CF35F00E3456E /* NewSleepModel.swift */, |
1288 | 1290 | 84DA399C2B4D3A5B008D34A9 /* NewGpsModel.swift */, |
1289 | 1291 | 845ADEA02B551C8E00C3AD73 /* NewStepModel.swift */, |
1292 | + 847B88EE2B5780CA00851EE7 /* NewIntensiveTimeModel.swift */, | |
1290 | 1293 | ); |
1291 | 1294 | path = Model; |
1292 | 1295 | sourceTree = "<group>"; |
... | ... | @@ -1713,6 +1716,7 @@ |
1713 | 1716 | 6C1B7EA427B7976600DB9D1C /* NFCDetailVC.swift in Sources */, |
1714 | 1717 | 6CD70CFE27D5AAEB00687095 /* PayProcessVC.swift in Sources */, |
1715 | 1718 | 6C411EE5275DFF37009B2E02 /* Bluetooth+Types.swift in Sources */, |
1719 | + 847B88EF2B5780CA00851EE7 /* NewIntensiveTimeModel.swift in Sources */, | |
1716 | 1720 | 6C0AE825279151260064D377 /* AppVersionView.swift in Sources */, |
1717 | 1721 | 6C2EE98E2780265B0051413A /* SleepReportCell.swift in Sources */, |
1718 | 1722 | 6C1B7EA127B7976600DB9D1C /* NFCProblemsVC.swift in Sources */, | ... | ... |
HDFwear/20240126ReadMe.md
... | ... | @@ -88,8 +88,17 @@ BluetoothManager+Function |
88 | 88 | 接收: [237, 126, 0, 1, 128, 37, 0, 1, 0, 169, 1, 101, 133, 64, 133, 0, 0, 0, 20, 13, 84, 138, 254, 0, 1, 134, 160, 67, 167, 168, 250, 0, 1, 134, 160, 13, 84, 142, 230, 0, 1, 134, 160, 67, 167, 172, 226, 0, 1, 134, 160, 13, 84, 146, 206, 0, 1, 134, 160, 67, 167, 176, 202, 0, 1, 134, 160, 13, 84, 142, 230, 0, 1, 134, 160, 67, 167, 172, 226, 0, 1, 134, 160, 13, 84, 138, 254, 0, 1, 134, 160, 67, 167, 168, 250, 0, 1, 134, 160, 13, 84, 135, 22, 0, 1, 134, 160, 67, 167, 161, 42, 0, 1, 134, 160, 13, 84, 131, 46, 0, 1, 134, 160, 67, 167, 157, 66, 0, 1, 134, 160, 13, 84, 123, 94, 0, 1, 134, 160, 67, 167, 153, 90, 0, 1, 134, 160, 13, 84, 119, 118, 0, 1, 134, 160, 67, 167, 149, 114, 0, 1, 134, 160, 13, 84, 115, 142, 0, 1, 134, 160, 67, 167, 141, 162, 0, 1, 134, 160, 68, 78] |
89 | 89 | 接收: [237, 126, 0, 1, 128, 37, 0, 1, 0, 1, 255, 107, 166] |
90 | 90 | |
91 | - | |
92 | - | |
93 | - | |
91 | +拉取中高强度时长数据 | |
92 | + func newGetIntensiveTimeData(option: SyncOption = .now, closure: IntensiveTimeClosure? = nil) | |
93 | + 当前 | |
94 | + 发送: [237, 126, 0, 1, 0, 40, 0, 1, 0, 2, 11, 1, 250, 50] | |
95 | + 接收: [237, 126, 0, 1, 128, 40, 0, 1, 0, 28, 7, 232, 1, 9, 0, 0, 0, 0, 0, 0, 10, 10, 10, 20, 30, 52, 0, 24, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 123] | |
96 | + 接收: [237, 126, 0, 1, 128, 40, 0, 1, 0, 1, 255, 37, 229] | |
97 | + 历史 | |
98 | + 发送: [237, 126, 0, 1, 0, 40, 0, 1, 0, 2, 11, 2, 202, 81] | |
99 | + 接收: [237, 126, 0, 1, 128, 40, 0, 2, 0, 28, 7, 232, 1, 8, 0, 0, 0, 0, 0, 0, 10, 10, 10, 20, 30, 52, 0, 24, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 149] | |
100 | + 接收: [237, 126, 0, 1, 128, 40, 0, 2, 0, 28, 7, 232, 1, 8, 0, 0, 0, 0, 0, 0, 10, 10, 10, 20, 30, 52, 0, 24, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 225, 149] | |
101 | + 接收: [237, 126, 0, 1, 128, 40, 0, 2, 0, 28, 7, 232, 1, 9, 0, 0, 0, 0, 0, 0, 10, 10, 10, 20, 30, 52, 0, 24, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 164, 33] | |
102 | + 接收: [237, 126, 0, 1, 128, 40, 0, 2, 0, 1, 255, 190, 57] | |
94 | 103 | |
95 | 104 | 接受数据类 | ... | ... |
HDFwear/Home/Model/NewIntensiveTimeModel.swift
0 → 100644
1 | +// | |
2 | +// NewIntensiveTimeModel.swift | |
3 | +// HDFwear | |
4 | +// | |
5 | +// Created by admin on 2024/1/17. | |
6 | +// | |
7 | + | |
8 | +import Foundation | |
9 | +import UIKit | |
10 | +import HandyJSON | |
11 | +import SwiftDate | |
12 | + | |
13 | +class NewIntensiveTimeModel: NSObject { | |
14 | + required override init() { } | |
15 | + | |
16 | + var year: UInt32 = 0 | |
17 | + var month: UInt32 = 0 | |
18 | + var day: UInt32 = 0 | |
19 | + var intensiveFragments : [UInt8] = [] | |
20 | + | |
21 | + | |
22 | + override var description: String { | |
23 | + let dateFormatter = DateFormatter() | |
24 | + dateFormatter.dateFormat = "yyyy-MM-dd" | |
25 | + let dateString = dateFormatter.string(from: DateComponents(calendar: Calendar.current, year: Int(year), month: Int(month), day: Int(day)).date!) | |
26 | + | |
27 | + let fragmentsString = intensiveFragments.map { String(format: "%d", $0) }.joined(separator: " ") | |
28 | + | |
29 | + return "NewIntensiveTimeModel\n" + | |
30 | + "Date: \(dateString)\n" + | |
31 | + "Intensive Fragments: \(fragmentsString)" | |
32 | + } | |
33 | + | |
34 | + class func toIntensiveTimeModel(_ data: [UInt8]) -> NewIntensiveTimeModel { | |
35 | + let s = NewIntensiveTimeModel() | |
36 | + guard data.count >= 28 else { | |
37 | + return s | |
38 | + } | |
39 | + | |
40 | + s.year = data[0..<2].reduce(0) { ($0 << 8) + UInt32($1) } | |
41 | + s.month = data[2..<3].reduce(0) { ($0 << 8) + UInt32($1) } | |
42 | + s.day = data[3..<4].reduce(0) { ($0 << 8) + UInt32($1) } | |
43 | + s.intensiveFragments = Array(data[4..<28]) | |
44 | + return s; | |
45 | + } | |
46 | +} | ... | ... |
HDFwear/Mine/MineViewController.swift
... | ... | @@ -590,6 +590,27 @@ extension MineViewController: UITableViewDataSource, UITableViewDelegate { |
590 | 590 | } |
591 | 591 | } |
592 | 592 | |
593 | + let archiveAction102a = UIAlertAction(title: "newGetIntensiveTimeData now", style: .default) {[weak self] action in | |
594 | + BluetoothManager.shared.newGetIntensiveTimeData(option: .now) {intensiveTimeModel, error in | |
595 | + if error != nil { | |
596 | + print("newGetIntensiveTimeData" + (error?.description ?? "")) | |
597 | + }else { | |
598 | + self?.showDetailAlert(msg: intensiveTimeModel?.description) | |
599 | + print("newGetIntensiveTimeData success") | |
600 | + } | |
601 | + } | |
602 | + } | |
603 | + let archiveAction102b = UIAlertAction(title: "newGetIntensiveTimeData history", style: .default) {[weak self] action in | |
604 | + BluetoothManager.shared.newGetIntensiveTimeData(option: .history) {intensiveTimeModel, error in | |
605 | + if error != nil { | |
606 | + print("newGetIntensiveTimeData" + (error?.description ?? "")) | |
607 | + }else { | |
608 | + self?.showDetailAlert(msg: intensiveTimeModel?.description) | |
609 | + print("newGetIntensiveTimeData success") | |
610 | + } | |
611 | + } | |
612 | + } | |
613 | + | |
593 | 614 | |
594 | 615 | alert.addAction(archiveAction9a) |
595 | 616 | alert.addAction(archiveAction9b) |
... | ... | @@ -605,6 +626,8 @@ extension MineViewController: UITableViewDataSource, UITableViewDelegate { |
605 | 626 | alert.addAction(archiveAction22) |
606 | 627 | alert.addAction(archiveAction101a) |
607 | 628 | alert.addAction(archiveAction101b) |
629 | + alert.addAction(archiveAction102a) | |
630 | + alert.addAction(archiveAction102b) | |
608 | 631 | |
609 | 632 | alert.addAction(UIAlertAction(title: "取消", style: .destructive, handler: nil)) |
610 | 633 | present(alert, animated: true, completion: nil) | ... | ... |
HDFwear/Tools/Bluetooth+Types.swift
HDFwear/Tools/BluetoothManager+Function.swift
... | ... | @@ -238,6 +238,12 @@ extension BluetoothManager { |
238 | 238 | newStartSyncHealthData(closure: closure, data: data, synType: .gps) |
239 | 239 | } |
240 | 240 | |
241 | + // 拉取中高强度时长 | |
242 | + func newGetIntensiveTimeData(option: SyncOption = .now, closure: IntensiveTimeClosure? = nil) { | |
243 | + let data = BleMessage.shared.getSyncCmd(.intensiveTime, option) | |
244 | + newStartSyncHealthData(closure: closure, data: data, synType: .intensiveTime) | |
245 | + } | |
246 | + | |
241 | 247 | //MARK: - old code |
242 | 248 | // 拉取睡眠数据 |
243 | 249 | func getSleepData(option: SyncOption = .now, closure: SleepClosure? = nil) { |
... | ... | @@ -342,6 +348,12 @@ extension BluetoothManager { |
342 | 348 | gpsClosure?(nil, -1002) |
343 | 349 | gpsClosure = nil |
344 | 350 | } |
351 | + case is IntensiveTimeClosure: | |
352 | + if intensiveTimeClosure == nil { | |
353 | + intensiveTimeClosure = closure as? IntensiveTimeClosure | |
354 | + intensiveTimeClosure?(nil, -1002) | |
355 | + intensiveTimeClosure = nil | |
356 | + } | |
345 | 357 | default: |
346 | 358 | break |
347 | 359 | } |
... | ... | @@ -534,6 +546,16 @@ extension BluetoothManager { |
534 | 546 | }else { |
535 | 547 | parseGpsData(content) |
536 | 548 | } |
549 | + case 0x8028://中高强度时长 | |
550 | + print("中高强度时长") | |
551 | + let content = parseContentFromBytes(bytes) | |
552 | + if (content.count == 1 && content.first == 0xff) { | |
553 | + for delegate in syncDelegateList { | |
554 | + delegate.didReceiveFinishCommand(0x8028) | |
555 | + } | |
556 | + }else { | |
557 | + parseIntensiveTimeData(content) | |
558 | + } | |
537 | 559 | default: |
538 | 560 | break |
539 | 561 | } |
... | ... | @@ -718,4 +740,15 @@ extension BluetoothManager { |
718 | 740 | let gpsModel = NewGpsModel.toGpsModel(content) |
719 | 741 | gpsClosure?(gpsModel, nil) |
720 | 742 | } |
743 | + | |
744 | + // 中高强度时长数据 | |
745 | + func parseIntensiveTimeData(_ content: [UInt8]) { | |
746 | + guard content.count > 0 else { | |
747 | + print("无有效的信息") | |
748 | + intensiveTimeClosure?(nil, nil) | |
749 | + return | |
750 | + } | |
751 | + let gpsModel = NewIntensiveTimeModel.toIntensiveTimeModel(content) | |
752 | + intensiveTimeClosure?(gpsModel, nil) | |
753 | + } | |
721 | 754 | } | ... | ... |
HDFwear/Tools/BluetoothManager.swift
... | ... | @@ -95,6 +95,8 @@ class BluetoothManager: NSObject { |
95 | 95 | var mettClosure: MettClosure? |
96 | 96 | typealias GpsClosure = (_ gps: NewGpsModel?, _ error: Int?) -> Void |
97 | 97 | var gpsClosure: GpsClosure? |
98 | + typealias IntensiveTimeClosure = (_ intensiveTime:NewIntensiveTimeModel?, _ error: Int?) -> Void | |
99 | + var intensiveTimeClosure: IntensiveTimeClosure? | |
98 | 100 | |
99 | 101 | typealias DialProgressClosure = (_ progress: Int) -> Void |
100 | 102 | var dialProgressClosure: DialProgressClosure? |
... | ... | @@ -1291,6 +1293,8 @@ class BluetoothManager: NSObject { |
1291 | 1293 | trainClosure = nil |
1292 | 1294 | pressureClosure = nil |
1293 | 1295 | mettClosure = nil |
1296 | + gpsClosure = nil | |
1297 | + intensiveTimeClosure = nil | |
1294 | 1298 | switch closure { |
1295 | 1299 | case is BloodPressureClosure: |
1296 | 1300 | bloodPressureClosure = closure as? BloodPressureClosure |
... | ... | @@ -1310,6 +1314,8 @@ class BluetoothManager: NSObject { |
1310 | 1314 | mettClosure = closure as? MettClosure |
1311 | 1315 | case is GpsClosure: |
1312 | 1316 | gpsClosure = closure as? GpsClosure |
1317 | + case is IntensiveTimeClosure: | |
1318 | + intensiveTimeClosure = closure as? IntensiveTimeClosure | |
1313 | 1319 | default: |
1314 | 1320 | break |
1315 | 1321 | } | ... | ... |