diff --git a/HDFwear/Tools/BleMessage+Function.swift b/HDFwear/Tools/BleMessage+Function.swift index 885bc08..1323242 100644 --- a/HDFwear/Tools/BleMessage+Function.swift +++ b/HDFwear/Tools/BleMessage+Function.swift @@ -92,4 +92,9 @@ extension BleMessage { let bytes: [UInt8] = [remind.isOn ? 0x01 : 0x00, UInt8(remind.startDate.hour), UInt8(remind.startDate.minute), UInt8(remind.endDate.hour), UInt8(remind.endDate.minute)] return createDataPacket(key: .setNoDisturb, bytes: bytes) } + + func getSyncCmd(_ type: SyncType) -> Data { + let bytes: [UInt8] = [type.rawValue] + return createDataPacket(key: .setSynWatch, bytes: bytes) + } } diff --git a/HDFwear/Tools/BleMessage.swift b/HDFwear/Tools/BleMessage.swift index d6cdedf..7b43e1f 100644 --- a/HDFwear/Tools/BleMessage.swift +++ b/HDFwear/Tools/BleMessage.swift @@ -139,15 +139,6 @@ class BleMessage: NSObject { return getSendData(cmd: .set, key: key, bytes: contactBytes) } - - - - func getSyncCmd(_ type: SyncType, day: SyncDay = .today) -> Data { - let date = DateInRegion().date + day.rawValue.days - let syncBytes: [UInt8] = [type.rawValue, UInt8(date.year%100), UInt8(date.month), UInt8(date.day), 0x00, 0x00, 0x00] - return getSendData(cmd: .sync, key: .sync, bytes: syncBytes) - } - func getSyncDialCmd(bytes: [UInt8]) -> Data { return getSendData(cmd: .set, key: .dial, bytes: bytes) } diff --git a/HDFwear/Tools/Bluetooth+Types.swift b/HDFwear/Tools/Bluetooth+Types.swift index 5a36549..30c8d6f 100644 --- a/HDFwear/Tools/Bluetooth+Types.swift +++ b/HDFwear/Tools/Bluetooth+Types.swift @@ -135,9 +135,9 @@ enum NewCmd: UInt8 { case setUserInfo = 0x0026 case setNoDisturb = 0x0027 //jtd! - case setFetchWatchData = 0x0028 - case setBeiDouContact = 0x0029 - case setBeiDouQuickAnswer = 0x0030 + case setSynWatch = 0x0028 +// case setBeiDouContact = 0x0029 +// case setBeiDouQuickAnswer = 0x0030 } @@ -158,14 +158,15 @@ enum SyncCmd: UInt8 { } enum SyncType: UInt8 { - case sleep = 0x01 - case hr = 0x02 + case all = 0x00 + case heartRate = 0x01 + case bloodOxygen = 0x02 case step = 0x03 - case train = 0x04 - case bo = 0x05 - case bp = 0x07 - case pressure = 0x08 - case mett = 0x09 + case temperature = 0x04 + case pressure = 0x05 + case sleep = 0x06 + case train = 0x07 + case other = 0xff } enum SyncDay: Int { diff --git a/HDFwear/Tools/BluetoothManager+Function.swift b/HDFwear/Tools/BluetoothManager+Function.swift index 8cb5c11..cc3121f 100644 --- a/HDFwear/Tools/BluetoothManager+Function.swift +++ b/HDFwear/Tools/BluetoothManager+Function.swift @@ -90,7 +90,7 @@ extension BluetoothManager { } // 设置查找手表 - // bool 0表示关闭振动 1表示打开震动 + // bool 0表示关闭 1表示打开 func newSetFindWatch(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getFindWatchCmd(bool) self.setCmdClosure = completion @@ -98,7 +98,7 @@ extension BluetoothManager { } // 设置压力自动检测 - // bool 0表示关闭振动 1表示打开震动 + // bool 0表示关闭 1表示打开 func newSetPressureAutoDetect(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getPressureAutoDetectCmd(bool) self.setCmdClosure = completion @@ -106,7 +106,7 @@ extension BluetoothManager { } // 设置血压自动检测 - // bool 0表示关闭振动 1表示打开震动 + // bool 0表示关闭 1表示打开 func newSetBloodOxygenAutoDetect(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getBloodOxygenAutoDetectCmd(bool) self.setCmdClosure = completion @@ -127,6 +127,112 @@ extension BluetoothManager { sendData(data) } + //MARK: - 同步健康数据 + func getSleepHistoryData(day: SyncDay = .today, closure: SleepClosure? = nil) { + let data = BleMessage.shared.getSyncCmd(.sleep) + newStartSyncHealthData(closure: closure, data: data, synType: .sleep) + } + + func getBloodPressureHistoryData(day: SyncDay = .today, closure: BloodPressureClosure? = nil) { +// let data = BleMessage.shared.getSyncCmd(.bloodOxygen) +// newStartSyncHealthData(closure: closure, data: data, synType: .pressure) + } + + func getBloodOxygenHistoryData(day: SyncDay = .today, closure: BloodOxygenClosure? = nil) { + let data = BleMessage.shared.getSyncCmd(.bloodOxygen) + newStartSyncHealthData(closure: closure, data: data, synType: .bloodOxygen) + } + + func getHeartRateHistoryData(day: SyncDay = .today, closure: HeartRateClosure? = nil) { + let data = BleMessage.shared.getSyncCmd(.heartRate) + newStartSyncHealthData(closure: closure, data: data, synType: .heartRate) + } + + func getStepHistoryData(day: SyncDay = .today, closure: StepClosure? = nil) { + let data = BleMessage.shared.getSyncCmd(.step) + newStartSyncHealthData(closure: closure, data: data, synType: .step) + } + + func getTrainHistoryData(day: SyncDay = .today, closure: TrainClosure? = nil) { + let data = BleMessage.shared.getSyncCmd(.train) + newStartSyncHealthData(closure: closure, data: data, synType: .train) + } + + func getPressureHistoryData(day: SyncDay = .today, closure: PressureClosure? = nil) { + let data = BleMessage.shared.getSyncCmd(.pressure) + newStartSyncHealthData(closure: closure, data: data, synType: .pressure) + } + + func getMettHistoryData(day: SyncDay = .today, closure: MettClosure? = nil) { +// startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.mett, day: day), cmd: .mett) + } + + // 同步数据 + func newStartSyncHealthData(closure: Any?, data: Data, synType: SyncType) { + if !isSync { + GCDTimer.shared.scheduledDispatchTimerNotNow(WithTimerName: "SyncInterval", timeInterval: 0.1, queue: .main, repeats: false) { + self.clearClosures(closure: closure) + self.startSyncTimer() + self.isNextSync = false + self.isSync = true + self.isSyncType = synType + self.sendData(data) + } + } else { + switch closure { + case is BloodPressureClosure: + if bloodPressureClosure == nil { + bloodPressureClosure = closure as? BloodPressureClosure + bloodPressureClosure?([], -1002) + bloodPressureClosure = nil + } + case is HeartRateClosure: + if heartRateClosure == nil { + heartRateClosure = closure as? HeartRateClosure + heartRateClosure?([], -1002) + heartRateClosure = nil + } + case is BloodOxygenClosure: + if bloodOxygenClosure == nil { + bloodOxygenClosure = closure as? BloodOxygenClosure + bloodOxygenClosure?([], -1002) + bloodOxygenClosure = nil + } + case is SleepClosure: + if sleepClosure == nil { + sleepClosure = closure as? SleepClosure + sleepClosure?([], -1002) + sleepClosure = nil + } + case is StepClosure: + if stepClosure == nil { + stepClosure = closure as? StepClosure + stepClosure?([], -1002) + stepClosure = nil + } + case is TrainClosure: + if trainClosure == nil { + trainClosure = closure as? TrainClosure + trainClosure?(nil, -1002) + trainClosure = nil + } + case is PressureClosure: + if pressureClosure == nil { + pressureClosure = closure as? PressureClosure + pressureClosure?([], -1002) + pressureClosure = nil + } + case is MettClosure: + if mettClosure == nil { + mettClosure = closure as? MettClosure + mettClosure?([], -1002) + mettClosure = nil + } + default: + break + } + } + } //MARK: - 发送数据 func sendData(_ data: Data) { if peripheral == nil { diff --git a/HDFwear/Tools/BluetoothManager.swift b/HDFwear/Tools/BluetoothManager.swift index bf2c2ba..d73eb66 100644 --- a/HDFwear/Tools/BluetoothManager.swift +++ b/HDFwear/Tools/BluetoothManager.swift @@ -132,10 +132,10 @@ class BluetoothManager: NSObject { var mergeLength: Int = 0 //sync - private var isSyncReceived: Bool = false //是否收到同步data - private var isSync: Bool = false //是否在同步中 - private var isSyncCmd: SyncCmd = .other //正在同步的指令 - private var isNextSync: Bool = false //是否有下一个同步包 + var isSyncReceived: Bool = false //是否收到同步data + var isSync: Bool = false //是否在同步中 + var isSyncType: SyncType = .other //正在同步的指令 + var isNextSync: Bool = false //是否有下一个同步包 // private var override init() { @@ -588,116 +588,72 @@ class BluetoothManager: NSObject { } } } - - - - //MARK: - 同步健康数据 - func getSleepHistoryData(day: SyncDay = .today, closure: SleepClosure? = nil) { - var sleepDay: SyncDay = day - let curPlatform = CurDevice.platform - if curPlatform == ._828 { - if day == .today { - sleepDay = .yesterday - } else if day == .yesterday { - sleepDay = .dayBeforYesterday - } - } - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.sleep, day: sleepDay), cmd: .sleep) - } - - func getBloodPressureHistoryData(day: SyncDay = .today, closure: BloodPressureClosure? = nil) { - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.bp, day: day), cmd: .bp) - } - - func getBloodOxygenHistoryData(day: SyncDay = .today, closure: BloodOxygenClosure? = nil) { - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.bo, day: day), cmd: .bo) - } - - func getHeartRateHistoryData(day: SyncDay = .today, closure: HeartRateClosure? = nil) { - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.hr, day: day), cmd: .hr) - } - - func getStepHistoryData(day: SyncDay = .today, closure: StepClosure? = nil) { - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.step, day: day), cmd: .step) - } - - func getTrainHistoryData(day: SyncDay = .today, closure: TrainClosure? = nil) { - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.train, day: day), cmd: .train) - } - - func getPressureHistoryData(day: SyncDay = .today, closure: PressureClosure? = nil) { - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.pressure, day: day), cmd: .pressure) - } - - func getMettHistoryData(day: SyncDay = .today, closure: MettClosure? = nil) { - startSyncHealthData(closure: closure, data: BleMessage.shared.getSyncCmd(.mett, day: day), cmd: .mett) - } - func startSyncHealthData(closure: Any?, data: Data, cmd: SyncCmd) { - if !isSync { - GCDTimer.shared.scheduledDispatchTimerNotNow(WithTimerName: "SyncInterval", timeInterval: 0.1, queue: .main, repeats: false) { - self.clearClosures(closure: closure) - self.startSyncTimer() - self.isNextSync = false - self.isSync = true - self.isSyncCmd = cmd - self.sendData(data) - } - } else { - switch closure { - case is BloodPressureClosure: - if bloodPressureClosure == nil { - bloodPressureClosure = closure as? BloodPressureClosure - bloodPressureClosure?([], -1002) - bloodPressureClosure = nil - } - case is HeartRateClosure: - if heartRateClosure == nil { - heartRateClosure = closure as? HeartRateClosure - heartRateClosure?([], -1002) - heartRateClosure = nil - } - case is BloodOxygenClosure: - if bloodOxygenClosure == nil { - bloodOxygenClosure = closure as? BloodOxygenClosure - bloodOxygenClosure?([], -1002) - bloodOxygenClosure = nil - } - case is SleepClosure: - if sleepClosure == nil { - sleepClosure = closure as? SleepClosure - sleepClosure?([], -1002) - sleepClosure = nil - } - case is StepClosure: - if stepClosure == nil { - stepClosure = closure as? StepClosure - stepClosure?([], -1002) - stepClosure = nil - } - case is TrainClosure: - if trainClosure == nil { - trainClosure = closure as? TrainClosure - trainClosure?(nil, -1002) - trainClosure = nil - } - case is PressureClosure: - if pressureClosure == nil { - pressureClosure = closure as? PressureClosure - pressureClosure?([], -1002) - pressureClosure = nil - } - case is MettClosure: - if mettClosure == nil { - mettClosure = closure as? MettClosure - mettClosure?([], -1002) - mettClosure = nil - } - default: - break - } - } - } +// func startSyncHealthData(closure: Any?, data: Data, cmd: SyncCmd) { +// if !isSync { +// GCDTimer.shared.scheduledDispatchTimerNotNow(WithTimerName: "SyncInterval", timeInterval: 0.1, queue: .main, repeats: false) { +// self.clearClosures(closure: closure) +// self.startSyncTimer() +// self.isNextSync = false +// self.isSync = true +// self.isSyncType = cmd +// self.sendData(data) +// } +// } else { +// switch closure { +// case is BloodPressureClosure: +// if bloodPressureClosure == nil { +// bloodPressureClosure = closure as? BloodPressureClosure +// bloodPressureClosure?([], -1002) +// bloodPressureClosure = nil +// } +// case is HeartRateClosure: +// if heartRateClosure == nil { +// heartRateClosure = closure as? HeartRateClosure +// heartRateClosure?([], -1002) +// heartRateClosure = nil +// } +// case is BloodOxygenClosure: +// if bloodOxygenClosure == nil { +// bloodOxygenClosure = closure as? BloodOxygenClosure +// bloodOxygenClosure?([], -1002) +// bloodOxygenClosure = nil +// } +// case is SleepClosure: +// if sleepClosure == nil { +// sleepClosure = closure as? SleepClosure +// sleepClosure?([], -1002) +// sleepClosure = nil +// } +// case is StepClosure: +// if stepClosure == nil { +// stepClosure = closure as? StepClosure +// stepClosure?([], -1002) +// stepClosure = nil +// } +// case is TrainClosure: +// if trainClosure == nil { +// trainClosure = closure as? TrainClosure +// trainClosure?(nil, -1002) +// trainClosure = nil +// } +// case is PressureClosure: +// if pressureClosure == nil { +// pressureClosure = closure as? PressureClosure +// pressureClosure?([], -1002) +// pressureClosure = nil +// } +// case is MettClosure: +// if mettClosure == nil { +// mettClosure = closure as? MettClosure +// mettClosure?([], -1002) +// mettClosure = nil +// } +// default: +// break +// } +// } +// } @@ -706,7 +662,7 @@ class BluetoothManager: NSObject { GCDTimer.shared.scheduledDispatchTimerNotNow(WithTimerName: "syncBug", timeInterval: 25, queue: .main, repeats: false) { print("同步超时") self.isSync = false - self.isSyncCmd = .other + self.isSyncType = .other self.isSyncReceived = false for delegate in self.syncDelegateList { delegate.syncBug() @@ -837,7 +793,7 @@ class BluetoothManager: NSObject { stopSyncTimer(BLEConfig.SyncHealthTimer) if !isNextSync { isSync = false - isSyncCmd = .other + isSyncType = .other } switch key { @@ -1303,7 +1259,7 @@ class BluetoothManager: NSObject { print("同步失败") // stopSyncTimer(BLEConfig.SyncHealthTimer) isSync = false - isSyncCmd = .other + isSyncType = .other heartRateClosure?([], -1001) bloodPressureClosure?([], -1001) bloodOxygenClosure?([], -1001) @@ -1511,7 +1467,7 @@ extension BluetoothManager: ClientProfileDelegate { if bytes[0] == 0xED && bytes[1] == 0x7E { // if bytes.count > 10, BleCmd(rawValue: bytes[8]) == .sync { // if isSync { -// if SyncCmd(rawValue: bytes[10]) != isSyncCmd { +// if SyncCmd(rawValue: bytes[10]) != isSyncType { // syncReceiveFail() // } else { // isNextSync = bytes[1] == 112