Commit b74ad0a2c03e2da9a6b9d38ad2429789068b6704
1 parent
a21b612e
feat:bo remind & hr auto detect
Showing
5 changed files
with
123 additions
and
4 deletions
HDFwear/20240126ReadMe.md
... | ... | @@ -161,7 +161,17 @@ BluetoothManager+Function |
161 | 161 | 发送: [237, 126, 0, 1, 0, 40, 0, 1, 0, 2, 21, 1, 218, 78] |
162 | 162 | 接收: [237, 126, 0, 1, 128, 56, 0, 1, 0, 1, 1, 49, 176] |
163 | 163 | |
164 | +拉取血氧预警开关 | |
165 | + func newGetBoLowRemindData(option: SyncOption = .now, closure: BoLowRemindClosure? = nil) | |
166 | + 发送: [237, 126, 0, 1, 0, 40, 0, 1, 0, 2, 15, 1, 54, 246] | |
167 | + 接收: [237, 126, 0, 1, 128, 50, 0, 1, 0, 1, 80, 253, 102] | |
164 | 168 | |
169 | +拉取心率自动测量开关 | |
170 | + func newGetHrAutoDetectData(option: SyncOption = .now, closure: BoAutoDetectClosure? = nil) | |
171 | + 发送: [237, 126, 0, 1, 0, 40, 0, 1, 0, 2, 16, 1, 37, 187] | |
172 | + 接收: [237, 126, 0, 1, 128, 51, 0, 1, 0, 1, 1, 242, 18] | |
173 | + | |
174 | + | |
165 | 175 | 接受数据类 |
166 | 176 | |
167 | 177 | 固件升级 | ... | ... |
HDFwear/Mine/MineViewController.swift
... | ... | @@ -384,7 +384,17 @@ extension MineViewController: UITableViewDataSource, UITableViewDelegate { |
384 | 384 | } |
385 | 385 | } |
386 | 386 | |
387 | - let archiveAction25 = UIAlertAction(title: "newSetHeartRateDetectInterval", style: .default) { action in | |
387 | + let archiveAction25a = UIAlertAction(title: "newSetHeartRateDetectInterval disable", style: .default) { action in | |
388 | + BluetoothManager.shared.newSetHeartRateDetectInterval(bool: false, interval: 30) { error in | |
389 | + if error != nil { | |
390 | + print("newSetHeartRateDetectInterval" + (error?.description ?? "")) | |
391 | + }else { | |
392 | + print("newSetHeartRateDetectInterval success") | |
393 | + } | |
394 | + } | |
395 | + } | |
396 | + | |
397 | + let archiveAction25b = UIAlertAction(title: "newSetHeartRateDetectInterval enable 18", style: .default) { action in | |
388 | 398 | BluetoothManager.shared.newSetHeartRateDetectInterval(bool: true, interval: 18) { error in |
389 | 399 | if error != nil { |
390 | 400 | print("newSetHeartRateDetectInterval" + (error?.description ?? "")) |
... | ... | @@ -394,7 +404,17 @@ extension MineViewController: UITableViewDataSource, UITableViewDelegate { |
394 | 404 | } |
395 | 405 | } |
396 | 406 | |
397 | - let archiveAction26 = UIAlertAction(title: "newSetBloodOxygenLowRemind", style: .default) { action in | |
407 | + let archiveAction26a = UIAlertAction(title: "newSetBloodOxygenLowRemind disable", style: .default) { action in | |
408 | + BluetoothManager.shared.newSetBloodOxygenLowRemind(minBo: 0) { error in | |
409 | + if error != nil { | |
410 | + print("newSetBloodOxygenLowRemind" + (error?.description ?? "")) | |
411 | + }else { | |
412 | + print("newSetBloodOxygenLowRemind success") | |
413 | + } | |
414 | + } | |
415 | + } | |
416 | + | |
417 | + let archiveAction26b = UIAlertAction(title: "newSetBloodOxygenLowRemind enable 80", style: .default) { action in | |
398 | 418 | BluetoothManager.shared.newSetBloodOxygenLowRemind(minBo: 80) { error in |
399 | 419 | if error != nil { |
400 | 420 | print("newSetBloodOxygenLowRemind" + (error?.description ?? "")) |
... | ... | @@ -500,8 +520,10 @@ extension MineViewController: UITableViewDataSource, UITableViewDelegate { |
500 | 520 | |
501 | 521 | alert.addAction(archiveAction23) |
502 | 522 | alert.addAction(archiveAction24) |
503 | - alert.addAction(archiveAction25) | |
504 | - alert.addAction(archiveAction26) | |
523 | + alert.addAction(archiveAction25a) | |
524 | + alert.addAction(archiveAction25b) | |
525 | + alert.addAction(archiveAction26a) | |
526 | + alert.addAction(archiveAction26b) | |
505 | 527 | alert.addAction(archiveAction27) |
506 | 528 | alert.addAction(archiveAction28a) |
507 | 529 | alert.addAction(archiveAction28d) |
... | ... | @@ -764,6 +786,28 @@ extension MineViewController: UITableViewDataSource, UITableViewDelegate { |
764 | 786 | } |
765 | 787 | } |
766 | 788 | |
789 | + let archiveAction109 = UIAlertAction(title: "newGetBoLowRemindData", style: .default) {[weak self] action in | |
790 | + BluetoothManager.shared.newGetBoLowRemindData() {value, error in | |
791 | + if error != nil { | |
792 | + print("newGetBoLowRemindData" + (error?.description ?? "")) | |
793 | + }else { | |
794 | + self?.showDetailAlert(msg: String(value)) | |
795 | + print("newGetBoLowRemindData success") | |
796 | + } | |
797 | + } | |
798 | + } | |
799 | + | |
800 | + let archiveAction110 = UIAlertAction(title: "newGetHrAutoDetectData", style: .default) {[weak self] action in | |
801 | + BluetoothManager.shared.newGetHrAutoDetectData() {enable, error in | |
802 | + if error != nil { | |
803 | + print("newGetHrAutoDetectData" + (error?.description ?? "")) | |
804 | + }else { | |
805 | + self?.showDetailAlert(msg: String(enable)) | |
806 | + print("newGetHrAutoDetectData success") | |
807 | + } | |
808 | + } | |
809 | + } | |
810 | + | |
767 | 811 | |
768 | 812 | alert.addAction(archiveAction9a) |
769 | 813 | alert.addAction(archiveAction9b) |
... | ... | @@ -787,6 +831,8 @@ extension MineViewController: UITableViewDataSource, UITableViewDelegate { |
787 | 831 | alert.addAction(archiveAction106) |
788 | 832 | alert.addAction(archiveAction107) |
789 | 833 | alert.addAction(archiveAction108) |
834 | + alert.addAction(archiveAction109) | |
835 | + alert.addAction(archiveAction110) | |
790 | 836 | |
791 | 837 | alert.addAction(UIAlertAction(title: "取消", style: .destructive, handler: nil)) |
792 | 838 | present(alert, animated: true, completion: nil) | ... | ... |
HDFwear/Tools/Bluetooth+Types.swift
... | ... | @@ -180,6 +180,8 @@ enum SyncType: UInt8 { |
180 | 180 | case beidouCard = 0x0C |
181 | 181 | case noDisturb = 0x0D |
182 | 182 | case boAutoDetect = 0x0E |
183 | + case boLowRemind = 0x0F | |
184 | + case hrAutoDetect = 0x10 | |
183 | 185 | case firmwareVersion = 0x14 |
184 | 186 | case wristSense = 0x15 |
185 | 187 | case other = 0xff | ... | ... |
HDFwear/Tools/BluetoothManager+Function.swift
... | ... | @@ -270,6 +270,17 @@ extension BluetoothManager { |
270 | 270 | newStartSyncHealthData(closure: closure, data: data, synType: .boAutoDetect) |
271 | 271 | } |
272 | 272 | |
273 | + // 拉取血氧预警开关 | |
274 | + func newGetBoLowRemindData(option: SyncOption = .now, closure: BoLowRemindClosure? = nil) { | |
275 | + let data = BleMessage.shared.getSyncCmd(.boLowRemind, option) | |
276 | + newStartSyncHealthData(closure: closure, data: data, synType: .boLowRemind) | |
277 | + } | |
278 | + | |
279 | + // 拉取心率自动检测开关 | |
280 | + func newGetHrAutoDetectData(option: SyncOption = .now, closure: BoAutoDetectClosure? = nil) { | |
281 | + let data = BleMessage.shared.getSyncCmd(.hrAutoDetect, option) | |
282 | + newStartSyncHealthData(closure: closure, data: data, synType: .hrAutoDetect) | |
283 | + } | |
273 | 284 | // 拉取抬腕提醒开关 |
274 | 285 | func newGetWristSenseData(option: SyncOption = .now, closure: WristSenseClosure? = nil) { |
275 | 286 | let data = BleMessage.shared.getSyncCmd(.wristSense, option) |
... | ... | @@ -661,6 +672,26 @@ extension BluetoothManager { |
661 | 672 | }else { |
662 | 673 | parseBoAutoDetectData(content) |
663 | 674 | } |
675 | + case 0x8032://血氧预警开关 | |
676 | + print("血氧自动测量开关") | |
677 | + let content = parseContentFromBytes(bytes) | |
678 | + if (content.count == 1 && content.first == 0xff) { | |
679 | + for delegate in syncDelegateList { | |
680 | + delegate.didReceiveFinishCommand(0x8032) | |
681 | + } | |
682 | + }else { | |
683 | + parseBoLowRemindData(content) | |
684 | + } | |
685 | + case 0x8033://心率自动测量开关 | |
686 | + print("心率自动测量开关") | |
687 | + let content = parseContentFromBytes(bytes) | |
688 | + if (content.count == 1 && content.first == 0xff) { | |
689 | + for delegate in syncDelegateList { | |
690 | + delegate.didReceiveFinishCommand(0x8033) | |
691 | + } | |
692 | + }else { | |
693 | + parseHrAutoDetectData(content) | |
694 | + } | |
664 | 695 | case 0x8037://固件版本号 |
665 | 696 | print("固件版本号") |
666 | 697 | let content = parseContentFromBytes(bytes) |
... | ... | @@ -919,6 +950,28 @@ extension BluetoothManager { |
919 | 950 | boAutoDetectClosure?(enable, nil) |
920 | 951 | } |
921 | 952 | |
953 | + // 血氧预警开关 | |
954 | + func parseBoLowRemindData(_ content: [UInt8]) { | |
955 | + guard content.count > 0 else { | |
956 | + print("无有效的信息") | |
957 | + boLowRemindClosure?(0, nil) | |
958 | + return | |
959 | + } | |
960 | + let value = Int(content[0]) | |
961 | + boLowRemindClosure?(value, nil) | |
962 | + } | |
963 | + | |
964 | + // 心率自动测量开关 | |
965 | + func parseHrAutoDetectData(_ content: [UInt8]) { | |
966 | + guard content.count > 0 else { | |
967 | + print("无有效的信息") | |
968 | + hrAutoDetectClosure?(false, nil) | |
969 | + return | |
970 | + } | |
971 | + let enable = (content[0] == 0x01) | |
972 | + hrAutoDetectClosure?(enable, nil) | |
973 | + } | |
974 | + | |
922 | 975 | // 运动数据 |
923 | 976 | func parseExerciseData(_ content: [UInt8], _ index: Int) { |
924 | 977 | guard content.count > 0 else { | ... | ... |
HDFwear/Tools/BluetoothManager.swift
... | ... | @@ -112,6 +112,10 @@ class BluetoothManager: NSObject { |
112 | 112 | var noDisturbClosure: NoDisturbClosure? |
113 | 113 | typealias BoAutoDetectClosure = (_ enable:Bool, _ error: Int?) -> Void |
114 | 114 | var boAutoDetectClosure: BoAutoDetectClosure? |
115 | + typealias BoLowRemindClosure = (_ value:Int, _ error: Int?) -> Void | |
116 | + var boLowRemindClosure: BoLowRemindClosure? | |
117 | + typealias HrAutoDetectClosure = (_ enable:Bool, _ error: Int?) -> Void | |
118 | + var hrAutoDetectClosure: HrAutoDetectClosure? | |
115 | 119 | typealias WristSenseClosure = (_ enable:Bool, _ error: Int?) -> Void |
116 | 120 | var wristSenseClosure: WristSenseClosure? |
117 | 121 | typealias FirmwareVersionClosure = (_ first:Int?, _ second:Int?, _ error: Int?) -> Void |
... | ... | @@ -1387,6 +1391,10 @@ class BluetoothManager: NSObject { |
1387 | 1391 | noDisturbClosure = closure as? NoDisturbClosure |
1388 | 1392 | case .boAutoDetect: |
1389 | 1393 | boAutoDetectClosure = closure as? BoAutoDetectClosure |
1394 | + case .boLowRemind: | |
1395 | + boLowRemindClosure = closure as? BoLowRemindClosure | |
1396 | + case .hrAutoDetect: | |
1397 | + hrAutoDetectClosure = closure as? HrAutoDetectClosure | |
1390 | 1398 | case .wristSense: |
1391 | 1399 | wristSenseClosure = closure as? WristSenseClosure |
1392 | 1400 | case .firmwareVersion: | ... | ... |