// // DeviceInfo.swift // FireBoltt // // Created by lemo. on 2020/3/22. // Copyright © 2020 Sheldon. All rights reserved. // import Foundation import ObjectMapper fileprivate enum FuncCmd: Int { case heartRate = 1 case weather, dailPush, wechatSport, bodyTemperature, bloodPressure, bloodOxygen, ecg, gps /// 抬手亮屏 case raiseHand /// 来电通知 case callRemind = 11 /// 短信通知 case messageRemind = 12 /// 远程拍照 case remoteCamera = 13 /// 应用通知 case appRemind = 14 /// 心率监测 case heartCheck /// 固件版本 case firmwareVersion /// 勿扰模式 case notDisturb /// 闹钟 case alarmRemind /// 久坐提醒 case sedentaryRemind /// 喝水提醒 case drinkRemind /// 单位设置 case unitSet /// 目标设置 case targetSet /// 设备查找 case deviceFind /// 音乐管理 case music = 30 /// 通讯录 case telephoneBook = 28 /// 钱包 case theWallet = 26 /// 名片 case businessCard = 27 /// 睡眠 case sleep = 24 } struct AdapterInfo: Mappable { var heartRate: Bool = true var weather: Bool = false var dailPush: Bool = false var wechatSport: Bool = false var bodyTemperature: Bool = false var bloodPressure: Bool = false var bloodOxygen: Bool = false var ecg: Bool = false var gps: Bool = false var callRemind: Bool = false var messageRemind: Bool = false var remoteCamera: Bool = false var appRemind: Bool = false var deviceFind: Bool = false var raiseHand: Bool = false var heartCheck: Bool = false var firmwareVersion: Bool = false var notDisturb: Bool = false var alarmRemind: Bool = false var sedentaryRemind: Bool = false var drinkRemind: Bool = false var unitSet: Bool = false var targetSet: Bool = false var telephoneBook: Bool = false var businessCard: Bool = false var theWallet: Bool = false var music: Bool = false var sleep: Bool = false var adapterNumber: Int = 0 init?(map: Map) {} /// 构建适配模型 /// - Parameter funcCmds: 功能码数组 init(funcCmds: [Int], adapterNumber: Int) { self.adapterNumber = adapterNumber funcCmds.forEach { (cmd) in if let funcCmd = FuncCmd(rawValue: cmd) { switch funcCmd { case .heartRate: heartRate = true case .dailPush: dailPush = true case .wechatSport: wechatSport = true case .bodyTemperature: bodyTemperature = true case .bloodPressure: bloodPressure = true case .bloodOxygen: bloodOxygen = true case .ecg: ecg = true case .gps: gps = true case .weather: weather = true case .callRemind: callRemind = true case .messageRemind: messageRemind = true case .remoteCamera: remoteCamera = true case .appRemind: appRemind = true case .deviceFind: deviceFind = true case .raiseHand: raiseHand = true case .heartCheck: heartCheck = true case .firmwareVersion: firmwareVersion = true case .notDisturb: notDisturb = true case .alarmRemind: alarmRemind = true case .sedentaryRemind: sedentaryRemind = true case .drinkRemind: drinkRemind = true case .unitSet: unitSet = true case .targetSet: targetSet = true case .telephoneBook: telephoneBook = true case .theWallet: theWallet = true case .businessCard: businessCard = true case .music: music = true case .sleep: sleep = true } } } } mutating func mapping(map: Map) { heartRate <- map["heartRate"] weather <- map["weather"] dailPush <- map["dailPush"] wechatSport <- map["wechatSport"] bodyTemperature <- map["bodyTemperature"] bloodPressure <- map["bloodPressure"] bloodOxygen <- map["bloodOxygen"] ecg <- map["ecg"] gps <- map["gps"] callRemind <- map["callRemind"] messageRemind <- map["messageRemind"] remoteCamera <- map["remoteCamera"] appRemind <- map["appRemind"] deviceFind <- map["deviceFind"] raiseHand <- map["raiseHand"] heartCheck <- map["heartCheck"] firmwareVersion <- map["firmwareVersion"] notDisturb <- map["notDisturb"] alarmRemind <- map["alarmRemind"] sedentaryRemind <- map["sedentaryRemind"] drinkRemind <- map["drinkRemind"] unitSet <- map["unitSet"] targetSet <- map["targetSet"] adapterNumber <- map["adapterNumber"] telephoneBook <- map["telephoneBook"] theWallet <- map["theWallet"] businessCard <- map["businessCard"] music <- map["music"] sleep <- map["sleep"] } /// 支持的目标设置,不支持返回空 var targetSetTypes: [UserTargetType] { if targetSet { switch adapterNumber { case 9999: return [.step, .walk, .run, .cycling] default: return [.step, .sleep, .walk, .run, .cycling, .climb] } } return [] } } struct DeviceInfo: Mappable { var deviceName: String = "" var UUIDString: String = "" var MACString: String = "" var adapterNumber: Int = 0 // 适配信息 var adapterInfo: AdapterInfo? init?(map: Map) {} init(deviceName: String, UUIDString: String, MACString: String) { self.deviceName = deviceName self.UUIDString = UUIDString self.MACString = MACString } mutating func mapping(map: Map) { deviceName <- map["deviceName"] UUIDString <- map["UUIDString"] MACString <- map["MACString"] adapterNumber <- map["adapterNumber"] adapterInfo <- map["adapterInfo"] } /// ota升级方案 var otaPlan: FirmwareOTAPlan { switch GlobalDeviceProfileModel.shareInstance.firwareModel?.platform { case 6: return .frq case 7: return .realtek case 8: return .jerry default: return .nordic } } }