Commit 92b5af793d9e364dc8b76ffeb00a1f87e37610dc
1 parent
0e8d5378
feat:synchronize 0
Showing
5 changed files
with
198 additions
and
139 deletions
HDFwear/Tools/BleMessage+Function.swift
... | ... | @@ -92,4 +92,9 @@ extension BleMessage { |
92 | 92 | let bytes: [UInt8] = [remind.isOn ? 0x01 : 0x00, UInt8(remind.startDate.hour), UInt8(remind.startDate.minute), UInt8(remind.endDate.hour), UInt8(remind.endDate.minute)] |
93 | 93 | return createDataPacket(key: .setNoDisturb, bytes: bytes) |
94 | 94 | } |
95 | + | |
96 | + func getSyncCmd(_ type: SyncType) -> Data { | |
97 | + let bytes: [UInt8] = [type.rawValue] | |
98 | + return createDataPacket(key: .setSynWatch, bytes: bytes) | |
99 | + } | |
95 | 100 | } | ... | ... |
HDFwear/Tools/BleMessage.swift
... | ... | @@ -139,15 +139,6 @@ class BleMessage: NSObject { |
139 | 139 | return getSendData(cmd: .set, key: key, bytes: contactBytes) |
140 | 140 | } |
141 | 141 | |
142 | - | |
143 | - | |
144 | - | |
145 | - func getSyncCmd(_ type: SyncType, day: SyncDay = .today) -> Data { | |
146 | - let date = DateInRegion().date + day.rawValue.days | |
147 | - let syncBytes: [UInt8] = [type.rawValue, UInt8(date.year%100), UInt8(date.month), UInt8(date.day), 0x00, 0x00, 0x00] | |
148 | - return getSendData(cmd: .sync, key: .sync, bytes: syncBytes) | |
149 | - } | |
150 | - | |
151 | 142 | func getSyncDialCmd(bytes: [UInt8]) -> Data { |
152 | 143 | return getSendData(cmd: .set, key: .dial, bytes: bytes) |
153 | 144 | } | ... | ... |
HDFwear/Tools/Bluetooth+Types.swift
... | ... | @@ -135,9 +135,9 @@ enum NewCmd: UInt8 { |
135 | 135 | case setUserInfo = 0x0026 |
136 | 136 | case setNoDisturb = 0x0027 |
137 | 137 | //jtd! |
138 | - case setFetchWatchData = 0x0028 | |
139 | - case setBeiDouContact = 0x0029 | |
140 | - case setBeiDouQuickAnswer = 0x0030 | |
138 | + case setSynWatch = 0x0028 | |
139 | +// case setBeiDouContact = 0x0029 | |
140 | +// case setBeiDouQuickAnswer = 0x0030 | |
141 | 141 | |
142 | 142 | } |
143 | 143 | |
... | ... | @@ -158,14 +158,15 @@ enum SyncCmd: UInt8 { |
158 | 158 | } |
159 | 159 | |
160 | 160 | enum SyncType: UInt8 { |
161 | - case sleep = 0x01 | |
162 | - case hr = 0x02 | |
161 | + case all = 0x00 | |
162 | + case heartRate = 0x01 | |
163 | + case bloodOxygen = 0x02 | |
163 | 164 | case step = 0x03 |
164 | - case train = 0x04 | |
165 | - case bo = 0x05 | |
166 | - case bp = 0x07 | |
167 | - case pressure = 0x08 | |
168 | - case mett = 0x09 | |
165 | + case temperature = 0x04 | |
166 | + case pressure = 0x05 | |
167 | + case sleep = 0x06 | |
168 | + case train = 0x07 | |
169 | + case other = 0xff | |
169 | 170 | } |
170 | 171 | |
171 | 172 | enum SyncDay: Int { | ... | ... |
HDFwear/Tools/BluetoothManager+Function.swift
... | ... | @@ -90,7 +90,7 @@ extension BluetoothManager { |
90 | 90 | } |
91 | 91 | |
92 | 92 | // 设置查找手表 |
93 | - // bool 0表示关闭振动 1表示打开震动 | |
93 | + // bool 0表示关闭 1表示打开 | |
94 | 94 | func newSetFindWatch(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { |
95 | 95 | let data = BleMessage.shared.getFindWatchCmd(bool) |
96 | 96 | self.setCmdClosure = completion |
... | ... | @@ -98,7 +98,7 @@ extension BluetoothManager { |
98 | 98 | } |
99 | 99 | |
100 | 100 | // 设置压力自动检测 |
101 | - // bool 0表示关闭振动 1表示打开震动 | |
101 | + // bool 0表示关闭 1表示打开 | |
102 | 102 | func newSetPressureAutoDetect(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { |
103 | 103 | let data = BleMessage.shared.getPressureAutoDetectCmd(bool) |
104 | 104 | self.setCmdClosure = completion |
... | ... | @@ -106,7 +106,7 @@ extension BluetoothManager { |
106 | 106 | } |
107 | 107 | |
108 | 108 | // 设置血压自动检测 |
109 | - // bool 0表示关闭振动 1表示打开震动 | |
109 | + // bool 0表示关闭 1表示打开 | |
110 | 110 | func newSetBloodOxygenAutoDetect(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { |
111 | 111 | let data = BleMessage.shared.getBloodOxygenAutoDetectCmd(bool) |
112 | 112 | self.setCmdClosure = completion |
... | ... | @@ -127,6 +127,112 @@ extension BluetoothManager { |
127 | 127 | sendData(data) |
128 | 128 | } |
129 | 129 | |
130 | + //MARK: - 同步健康数据 | |
131 | + func getSleepHistoryData(day: SyncDay = .today, closure: SleepClosure? = nil) { | |
132 | + let data = BleMessage.shared.getSyncCmd(.sleep) | |
133 | + newStartSyncHealthData(closure: closure, data: data, synType: .sleep) | |
134 | + } | |
135 | + | |
136 | + func getBloodPressureHistoryData(day: SyncDay = .today, closure: BloodPressureClosure? = nil) { | |
137 | +// let data = BleMessage.shared.getSyncCmd(.bloodOxygen) | |
138 | +// newStartSyncHealthData(closure: closure, data: data, synType: .pressure) | |
139 | + } | |
140 | + | |
141 | + func getBloodOxygenHistoryData(day: SyncDay = .today, closure: BloodOxygenClosure? = nil) { | |
142 | + let data = BleMessage.shared.getSyncCmd(.bloodOxygen) | |
143 | + newStartSyncHealthData(closure: closure, data: data, synType: .bloodOxygen) | |
144 | + } | |
145 | + | |
146 | + func getHeartRateHistoryData(day: SyncDay = .today, closure: HeartRateClosure? = nil) { | |
147 | + let data = BleMessage.shared.getSyncCmd(.heartRate) | |
148 | + newStartSyncHealthData(closure: closure, data: data, synType: .heartRate) | |
149 | + } | |
150 | + | |
151 | + func getStepHistoryData(day: SyncDay = .today, closure: StepClosure? = nil) { | |
152 | + let data = BleMessage.shared.getSyncCmd(.step) | |
153 | + newStartSyncHealthData(closure: closure, data: data, synType: .step) | |
154 | + } | |
155 | + | |
156 | + func getTrainHistoryData(day: SyncDay = .today, closure: TrainClosure? = nil) { | |
157 | + let data = BleMessage.shared.getSyncCmd(.train) | |
158 | + newStartSyncHealthData(closure: closure, data: data, synType: .train) | |
159 | + } | |
160 | + | |
161 | + func getPressureHistoryData(day: SyncDay = .today, closure: PressureClosure? = nil) { | |
162 | + let data = BleMessage.shared.getSyncCmd(.pressure) | |
163 | + newStartSyncHealthData(closure: closure, data: data, synType: .pressure) | |
164 | + } | |
165 | + | |
166 | + func getMettHistoryData(day: SyncDay = .today, closure: MettClosure? = nil) { | |
167 | +// startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.mett, day: day), cmd: .mett) | |
168 | + } | |
169 | + | |
170 | + // 同步数据 | |
171 | + func newStartSyncHealthData(closure: Any?, data: Data, synType: SyncType) { | |
172 | + if !isSync { | |
173 | + GCDTimer.shared.scheduledDispatchTimerNotNow(WithTimerName: "SyncInterval", timeInterval: 0.1, queue: .main, repeats: false) { | |
174 | + self.clearClosures(closure: closure) | |
175 | + self.startSyncTimer() | |
176 | + self.isNextSync = false | |
177 | + self.isSync = true | |
178 | + self.isSyncType = synType | |
179 | + self.sendData(data) | |
180 | + } | |
181 | + } else { | |
182 | + switch closure { | |
183 | + case is BloodPressureClosure: | |
184 | + if bloodPressureClosure == nil { | |
185 | + bloodPressureClosure = closure as? BloodPressureClosure | |
186 | + bloodPressureClosure?([], -1002) | |
187 | + bloodPressureClosure = nil | |
188 | + } | |
189 | + case is HeartRateClosure: | |
190 | + if heartRateClosure == nil { | |
191 | + heartRateClosure = closure as? HeartRateClosure | |
192 | + heartRateClosure?([], -1002) | |
193 | + heartRateClosure = nil | |
194 | + } | |
195 | + case is BloodOxygenClosure: | |
196 | + if bloodOxygenClosure == nil { | |
197 | + bloodOxygenClosure = closure as? BloodOxygenClosure | |
198 | + bloodOxygenClosure?([], -1002) | |
199 | + bloodOxygenClosure = nil | |
200 | + } | |
201 | + case is SleepClosure: | |
202 | + if sleepClosure == nil { | |
203 | + sleepClosure = closure as? SleepClosure | |
204 | + sleepClosure?([], -1002) | |
205 | + sleepClosure = nil | |
206 | + } | |
207 | + case is StepClosure: | |
208 | + if stepClosure == nil { | |
209 | + stepClosure = closure as? StepClosure | |
210 | + stepClosure?([], -1002) | |
211 | + stepClosure = nil | |
212 | + } | |
213 | + case is TrainClosure: | |
214 | + if trainClosure == nil { | |
215 | + trainClosure = closure as? TrainClosure | |
216 | + trainClosure?(nil, -1002) | |
217 | + trainClosure = nil | |
218 | + } | |
219 | + case is PressureClosure: | |
220 | + if pressureClosure == nil { | |
221 | + pressureClosure = closure as? PressureClosure | |
222 | + pressureClosure?([], -1002) | |
223 | + pressureClosure = nil | |
224 | + } | |
225 | + case is MettClosure: | |
226 | + if mettClosure == nil { | |
227 | + mettClosure = closure as? MettClosure | |
228 | + mettClosure?([], -1002) | |
229 | + mettClosure = nil | |
230 | + } | |
231 | + default: | |
232 | + break | |
233 | + } | |
234 | + } | |
235 | + } | |
130 | 236 | //MARK: - 发送数据 |
131 | 237 | func sendData(_ data: Data) { |
132 | 238 | if peripheral == nil { | ... | ... |
HDFwear/Tools/BluetoothManager.swift
... | ... | @@ -132,10 +132,10 @@ class BluetoothManager: NSObject { |
132 | 132 | var mergeLength: Int = 0 |
133 | 133 | |
134 | 134 | //sync |
135 | - private var isSyncReceived: Bool = false //是否收到同步data | |
136 | - private var isSync: Bool = false //是否在同步中 | |
137 | - private var isSyncCmd: SyncCmd = .other //正在同步的指令 | |
138 | - private var isNextSync: Bool = false //是否有下一个同步包 | |
135 | + var isSyncReceived: Bool = false //是否收到同步data | |
136 | + var isSync: Bool = false //是否在同步中 | |
137 | + var isSyncType: SyncType = .other //正在同步的指令 | |
138 | + var isNextSync: Bool = false //是否有下一个同步包 | |
139 | 139 | // private var |
140 | 140 | |
141 | 141 | override init() { |
... | ... | @@ -588,116 +588,72 @@ class BluetoothManager: NSObject { |
588 | 588 | } |
589 | 589 | } |
590 | 590 | } |
591 | - | |
592 | - | |
593 | - | |
594 | - //MARK: - 同步健康数据 | |
595 | - func getSleepHistoryData(day: SyncDay = .today, closure: SleepClosure? = nil) { | |
596 | - var sleepDay: SyncDay = day | |
597 | - let curPlatform = CurDevice.platform | |
598 | - if curPlatform == ._828 { | |
599 | - if day == .today { | |
600 | - sleepDay = .yesterday | |
601 | - } else if day == .yesterday { | |
602 | - sleepDay = .dayBeforYesterday | |
603 | - } | |
604 | - } | |
605 | - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.sleep, day: sleepDay), cmd: .sleep) | |
606 | - } | |
607 | - | |
608 | - func getBloodPressureHistoryData(day: SyncDay = .today, closure: BloodPressureClosure? = nil) { | |
609 | - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.bp, day: day), cmd: .bp) | |
610 | - } | |
611 | - | |
612 | - func getBloodOxygenHistoryData(day: SyncDay = .today, closure: BloodOxygenClosure? = nil) { | |
613 | - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.bo, day: day), cmd: .bo) | |
614 | - } | |
615 | - | |
616 | - func getHeartRateHistoryData(day: SyncDay = .today, closure: HeartRateClosure? = nil) { | |
617 | - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.hr, day: day), cmd: .hr) | |
618 | - } | |
619 | - | |
620 | - func getStepHistoryData(day: SyncDay = .today, closure: StepClosure? = nil) { | |
621 | - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.step, day: day), cmd: .step) | |
622 | - } | |
623 | - | |
624 | - func getTrainHistoryData(day: SyncDay = .today, closure: TrainClosure? = nil) { | |
625 | - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.train, day: day), cmd: .train) | |
626 | - } | |
627 | - | |
628 | - func getPressureHistoryData(day: SyncDay = .today, closure: PressureClosure? = nil) { | |
629 | - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.pressure, day: day), cmd: .pressure) | |
630 | - } | |
631 | - | |
632 | - func getMettHistoryData(day: SyncDay = .today, closure: MettClosure? = nil) { | |
633 | - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.mett, day: day), cmd: .mett) | |
634 | - } | |
635 | 591 | |
636 | - func startSyncHealthData(closure: Any?, data: Data, cmd: SyncCmd) { | |
637 | - if !isSync { | |
638 | - GCDTimer.shared.scheduledDispatchTimerNotNow(WithTimerName: "SyncInterval", timeInterval: 0.1, queue: .main, repeats: false) { | |
639 | - self.clearClosures(closure: closure) | |
640 | - self.startSyncTimer() | |
641 | - self.isNextSync = false | |
642 | - self.isSync = true | |
643 | - self.isSyncCmd = cmd | |
644 | - self.sendData(data) | |
645 | - } | |
646 | - } else { | |
647 | - switch closure { | |
648 | - case is BloodPressureClosure: | |
649 | - if bloodPressureClosure == nil { | |
650 | - bloodPressureClosure = closure as? BloodPressureClosure | |
651 | - bloodPressureClosure?([], -1002) | |
652 | - bloodPressureClosure = nil | |
653 | - } | |
654 | - case is HeartRateClosure: | |
655 | - if heartRateClosure == nil { | |
656 | - heartRateClosure = closure as? HeartRateClosure | |
657 | - heartRateClosure?([], -1002) | |
658 | - heartRateClosure = nil | |
659 | - } | |
660 | - case is BloodOxygenClosure: | |
661 | - if bloodOxygenClosure == nil { | |
662 | - bloodOxygenClosure = closure as? BloodOxygenClosure | |
663 | - bloodOxygenClosure?([], -1002) | |
664 | - bloodOxygenClosure = nil | |
665 | - } | |
666 | - case is SleepClosure: | |
667 | - if sleepClosure == nil { | |
668 | - sleepClosure = closure as? SleepClosure | |
669 | - sleepClosure?([], -1002) | |
670 | - sleepClosure = nil | |
671 | - } | |
672 | - case is StepClosure: | |
673 | - if stepClosure == nil { | |
674 | - stepClosure = closure as? StepClosure | |
675 | - stepClosure?([], -1002) | |
676 | - stepClosure = nil | |
677 | - } | |
678 | - case is TrainClosure: | |
679 | - if trainClosure == nil { | |
680 | - trainClosure = closure as? TrainClosure | |
681 | - trainClosure?(nil, -1002) | |
682 | - trainClosure = nil | |
683 | - } | |
684 | - case is PressureClosure: | |
685 | - if pressureClosure == nil { | |
686 | - pressureClosure = closure as? PressureClosure | |
687 | - pressureClosure?([], -1002) | |
688 | - pressureClosure = nil | |
689 | - } | |
690 | - case is MettClosure: | |
691 | - if mettClosure == nil { | |
692 | - mettClosure = closure as? MettClosure | |
693 | - mettClosure?([], -1002) | |
694 | - mettClosure = nil | |
695 | - } | |
696 | - default: | |
697 | - break | |
698 | - } | |
699 | - } | |
700 | - } | |
592 | +// func startSyncHealthData(closure: Any?, data: Data, cmd: SyncCmd) { | |
593 | +// if !isSync { | |
594 | +// GCDTimer.shared.scheduledDispatchTimerNotNow(WithTimerName: "SyncInterval", timeInterval: 0.1, queue: .main, repeats: false) { | |
595 | +// self.clearClosures(closure: closure) | |
596 | +// self.startSyncTimer() | |
597 | +// self.isNextSync = false | |
598 | +// self.isSync = true | |
599 | +// self.isSyncType = cmd | |
600 | +// self.sendData(data) | |
601 | +// } | |
602 | +// } else { | |
603 | +// switch closure { | |
604 | +// case is BloodPressureClosure: | |
605 | +// if bloodPressureClosure == nil { | |
606 | +// bloodPressureClosure = closure as? BloodPressureClosure | |
607 | +// bloodPressureClosure?([], -1002) | |
608 | +// bloodPressureClosure = nil | |
609 | +// } | |
610 | +// case is HeartRateClosure: | |
611 | +// if heartRateClosure == nil { | |
612 | +// heartRateClosure = closure as? HeartRateClosure | |
613 | +// heartRateClosure?([], -1002) | |
614 | +// heartRateClosure = nil | |
615 | +// } | |
616 | +// case is BloodOxygenClosure: | |
617 | +// if bloodOxygenClosure == nil { | |
618 | +// bloodOxygenClosure = closure as? BloodOxygenClosure | |
619 | +// bloodOxygenClosure?([], -1002) | |
620 | +// bloodOxygenClosure = nil | |
621 | +// } | |
622 | +// case is SleepClosure: | |
623 | +// if sleepClosure == nil { | |
624 | +// sleepClosure = closure as? SleepClosure | |
625 | +// sleepClosure?([], -1002) | |
626 | +// sleepClosure = nil | |
627 | +// } | |
628 | +// case is StepClosure: | |
629 | +// if stepClosure == nil { | |
630 | +// stepClosure = closure as? StepClosure | |
631 | +// stepClosure?([], -1002) | |
632 | +// stepClosure = nil | |
633 | +// } | |
634 | +// case is TrainClosure: | |
635 | +// if trainClosure == nil { | |
636 | +// trainClosure = closure as? TrainClosure | |
637 | +// trainClosure?(nil, -1002) | |
638 | +// trainClosure = nil | |
639 | +// } | |
640 | +// case is PressureClosure: | |
641 | +// if pressureClosure == nil { | |
642 | +// pressureClosure = closure as? PressureClosure | |
643 | +// pressureClosure?([], -1002) | |
644 | +// pressureClosure = nil | |
645 | +// } | |
646 | +// case is MettClosure: | |
647 | +// if mettClosure == nil { | |
648 | +// mettClosure = closure as? MettClosure | |
649 | +// mettClosure?([], -1002) | |
650 | +// mettClosure = nil | |
651 | +// } | |
652 | +// default: | |
653 | +// break | |
654 | +// } | |
655 | +// } | |
656 | +// } | |
701 | 657 | |
702 | 658 | |
703 | 659 | |
... | ... | @@ -706,7 +662,7 @@ class BluetoothManager: NSObject { |
706 | 662 | GCDTimer.shared.scheduledDispatchTimerNotNow(WithTimerName: "syncBug", timeInterval: 25, queue: .main, repeats: false) { |
707 | 663 | print("同步超时") |
708 | 664 | self.isSync = false |
709 | - self.isSyncCmd = .other | |
665 | + self.isSyncType = .other | |
710 | 666 | self.isSyncReceived = false |
711 | 667 | for delegate in self.syncDelegateList { |
712 | 668 | delegate.syncBug() |
... | ... | @@ -837,7 +793,7 @@ class BluetoothManager: NSObject { |
837 | 793 | stopSyncTimer(BLEConfig.SyncHealthTimer) |
838 | 794 | if !isNextSync { |
839 | 795 | isSync = false |
840 | - isSyncCmd = .other | |
796 | + isSyncType = .other | |
841 | 797 | } |
842 | 798 | |
843 | 799 | switch key { |
... | ... | @@ -1303,7 +1259,7 @@ class BluetoothManager: NSObject { |
1303 | 1259 | print("同步失败") |
1304 | 1260 | // stopSyncTimer(BLEConfig.SyncHealthTimer) |
1305 | 1261 | isSync = false |
1306 | - isSyncCmd = .other | |
1262 | + isSyncType = .other | |
1307 | 1263 | heartRateClosure?([], -1001) |
1308 | 1264 | bloodPressureClosure?([], -1001) |
1309 | 1265 | bloodOxygenClosure?([], -1001) |
... | ... | @@ -1511,7 +1467,7 @@ extension BluetoothManager: ClientProfileDelegate { |
1511 | 1467 | if bytes[0] == 0xED && bytes[1] == 0x7E { |
1512 | 1468 | // if bytes.count > 10, BleCmd(rawValue: bytes[8]) == .sync { |
1513 | 1469 | // if isSync { |
1514 | -// if SyncCmd(rawValue: bytes[10]) != isSyncCmd { | |
1470 | +// if SyncCmd(rawValue: bytes[10]) != isSyncType { | |
1515 | 1471 | // syncReceiveFail() |
1516 | 1472 | // } else { |
1517 | 1473 | // isNextSync = bytes[1] == 112 | ... | ... |