// // BluetoothManager+Function.swift // HDFwear // // Created by daifengyi on 2023/6/27. // import SwiftDate extension BluetoothManager { // 设置时间 func newSetTime(completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getTimeCmd() self.setCmdClosure = completion sendData(data) } // 设置时间格式 func newSetTimeFormat(format: TimeFormat, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getTimeFormatCmd(format: format) self.setCmdClosure = completion sendData(data) } // 设置温度单位 func newSetTemperatureUnit(unit: TemperatureUnit, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getTemperatureUnitCmd(unit: unit) self.setCmdClosure = completion sendData(data) } // 设置公英制 func newSetDistanceUnit(unit: DistanceUnit, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getDistanceUnitCmd(unit: unit) self.setCmdClosure = completion sendData(data) } // 设置抬腕唤醒 func newSetWristSense(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getWristSenseCmd(bool) self.setCmdClosure = completion sendData(data) } // 设置触摸唤醒 func newSetTouchSense(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getTouchSenseCmd(bool) self.setCmdClosure = completion sendData(data) } // 设置低电提醒 func newSetLowPowerRemind(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getLowPowerRemind(bool) self.setCmdClosure = completion sendData(data) } // 设置语言 // lan 0表示中文,1表示英语 func newSetLanguage(lan: UInt8, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getLanguageCmd(lan) self.setCmdClosure = completion sendData(data) } // 设置恢复出厂设置 func newSetRestore(completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getRestoreCmd() self.setCmdClosure = completion sendData(data) } // 设置心率过高提醒 // maxHr 0表示关闭提醒 其他值表示最大值 func newSetHeartRateHighRemind(maxHr: UInt8, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getHeartRateHighRemindCmd(maxHr) self.setCmdClosure = completion sendData(data) } // 设置心率过低提醒 // minHr 0表示关闭提醒 其他值表示最小值 func newSetHeartRateLowRemind(minHr: UInt8, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getHeartRateLowRemindCmd(minHr) self.setCmdClosure = completion sendData(data) } // 设置查找手表 // bool 0表示关闭振动 1表示打开震动 func newSetFindWatch(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getFindWatchCmd(bool) self.setCmdClosure = completion sendData(data) } // 设置压力自动检测 // bool 0表示关闭振动 1表示打开震动 func newSetPressureAutoDetect(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getPressureAutoDetectCmd(bool) self.setCmdClosure = completion sendData(data) } // 设置血压自动检测 // bool 0表示关闭振动 1表示打开震动 func newSetBloodOxygenAutoDetect(bool: Bool, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getBloodOxygenAutoDetectCmd(bool) self.setCmdClosure = completion sendData(data) } // 设置用户信息 func newSetUserInfo(_ user: UserInfoModel, completion: ((_ error: Int?) -> ())? = nil) { let data = BleMessage.shared.getUserInfoCmd(user) self.setCmdClosure = completion sendData(data) } // 设置勿扰模式 func newSetNotDisturb(remind: RemindModel, completion: @escaping(_ error: Int?) -> ()) { let data = BleMessage.shared.getNotDisturbCmd(remind) self.setCmdClosure = completion sendData(data) } //MARK: - 发送数据 func sendData(_ data: Data) { if peripheral == nil { print("peripheral == nil") return } var serverUUID: String = "" var writeUUID: String = "" switch platform { case ._828: serverUUID = BLEConfig.ServerUUID writeUUID = BLEConfig.WriteUUID default: break } if let services = peripheral?.services { for service in services { if service.uuid.uuidString == serverUUID { if service.characteristics == nil { return } for char in service.characteristics! { if char.uuid.uuidString == writeUUID { if platform == ._828 { if data.count <= 20 { print("发送: \([UInt8](data))") peripheral?.writeValue(data, for: char, type: .withoutResponse) } else { print("发送 拼: \([UInt8](data))") let n = data.count/20 + (data.count%20 == 0 ? 0 : 1) for i in 0.. 12 else { return } let msgId = Int(UInt16(bytes[4]) << 8 | UInt16(bytes[5])) let data = Data(bytes: bytes, count: bytes.count) switch msgId { case 0x8001: parseDefaultResponseData(bytes) case 0x8002:// 设备信息查询应答 print("设备信息查询应答") case 0x8009:// 实时步数、卡路里、距离自动上报 print("实时步数、卡路里、距离自动上报") case 0x8010:// 电量变化自动上报 print("电量变化自动上报") case 0x8014:// 电话挂断 print("电话挂断") case 0x8015:// 找手机 print("找手机") case 0x8016:// 历史心率数据上报 print("历史心率数据上报") case 0x8017:// 历史血氧数据上报 print("历史血氧数据上报") case 0x8018:// 历史体温数据上报 print("历史体温数据上报") case 0x8019:// 睡眠数据上报 print("睡眠数据上报") case 0x8020:// 历史压力数据上报 print("历史压力数据上报") default: break } // switch cmd { // case .set, .find, .device, .remind, .firmware: // parseSetData(SetCmd(rawValue: bytes[10]), data: data) // case .sync: // let valueBytes = Array(bytes[13..