| objects = { | objects = { | ||||
| /* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
| 788D913726A1849C0009489E /* AILinkBleSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 958B4E0B263C079500476BAE /* AILinkBleSDK.framework */; }; | |||||
| 788D913F26A2C4AE0009489E /* libHTBodyfat_SDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 958B4DFC263C079500476BAE /* libHTBodyfat_SDK.a */; }; | |||||
| 958B4E43263C079500476BAE /* EightScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4DF7263C079500476BAE /* EightScaleScanViewController.m */; }; | |||||
| 958B4E44263C079500476BAE /* EightScaleConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4DF8263C079500476BAE /* EightScaleConnectionViewController.m */; }; | |||||
| 958B4E46263C079500476BAE /* ELEightScaleRecordModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4DFD263C079500476BAE /* ELEightScaleRecordModel.m */; }; | |||||
| 958B4E47263C079500476BAE /* ELEightScaleAlgorithmTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4DFF263C079500476BAE /* ELEightScaleAlgorithmTool.m */; }; | |||||
| 958B4E48263C079500476BAE /* BabyScaleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E02263C079500476BAE /* BabyScaleViewController.m */; }; | |||||
| 958B4E49263C079500476BAE /* BabyScaleConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E05263C079500476BAE /* BabyScaleConnectViewController.m */; }; | |||||
| 958B4E4A263C079500476BAE /* OximeterScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E08263C079500476BAE /* OximeterScanViewController.m */; }; | |||||
| 958B4E4B263C079500476BAE /* OximeterConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E0A263C079500476BAE /* OximeterConnectionViewController.m */; }; | |||||
| 958B4E4D263C079500476BAE /* ELBfsWifiScanVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E0F263C079500476BAE /* ELBfsWifiScanVC.m */; }; | |||||
| 958B4E4E263C079500476BAE /* ELBfsWifiConnectVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E10263C079500476BAE /* ELBfsWifiConnectVC.m */; }; | |||||
| 958B4E4F263C079500476BAE /* ELBfsWifiConnectTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E11263C079500476BAE /* ELBfsWifiConnectTableViewCell.m */; }; | |||||
| 958B4E50263C079500476BAE /* ThermometerScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E14263C079500476BAE /* ThermometerScanViewController.m */; }; | |||||
| 958B4E51263C079500476BAE /* ThermometerConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E17263C079500476BAE /* ThermometerConnectViewController.m */; }; | |||||
| 958B4E52263C079500476BAE /* ForeheadConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E19263C079500476BAE /* ForeheadConnectViewController.m */; }; | |||||
| 958B4E53263C079500476BAE /* ForeheadScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E1C263C079500476BAE /* ForeheadScanViewController.m */; }; | |||||
| 958B4E54263C079500476BAE /* ToothbrushScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E1E263C079500476BAE /* ToothbrushScanViewController.m */; }; | |||||
| 958B4E55263C079500476BAE /* ToothbrushConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E21263C079500476BAE /* ToothbrushConnectionViewController.m */; }; | |||||
| 958B4E56263C079500476BAE /* WheelMonitorConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E23263C079500476BAE /* WheelMonitorConnectViewController.m */; }; | |||||
| 958B4E57263C079500476BAE /* WheelMonitorScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E25263C079500476BAE /* WheelMonitorScanViewController.m */; }; | |||||
| 958B4E58263C079500476BAE /* RemoteControlConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E2A263C079500476BAE /* RemoteControlConnectViewController.m */; }; | |||||
| 958B4E59263C079500476BAE /* RemoteControlScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E2B263C079500476BAE /* RemoteControlScanViewController.m */; }; | |||||
| 958B4E5A263C079500476BAE /* HeightGuageScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E2D263C079500476BAE /* HeightGuageScanViewController.m */; }; | |||||
| 958B4E5B263C079500476BAE /* HeightGuageConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E30263C079500476BAE /* HeightGuageConnectViewController.m */; }; | |||||
| 958B4E5C263C079500476BAE /* BroadcastScaleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E32263C079500476BAE /* BroadcastScaleViewController.m */; }; | |||||
| 958B4E5D263C079500476BAE /* BodyFatScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E35263C079500476BAE /* BodyFatScaleScanViewController.m */; }; | |||||
| 958B4E5E263C079500476BAE /* BodyFatScaleConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E36263C079500476BAE /* BodyFatScaleConnectViewController.m */; }; | |||||
| 958B4E5F263C079500476BAE /* BloodConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E3B263C079500476BAE /* BloodConnectViewController.m */; }; | |||||
| 958B4E60263C079500476BAE /* BloodScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E3C263C079500476BAE /* BloodScanViewController.m */; }; | |||||
| 958B4E61263C079500476BAE /* BloodSugarScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E40263C079500476BAE /* BloodSugarScanViewController.m */; }; | |||||
| 958B4E62263C079500476BAE /* BloodSugarConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E41263C079500476BAE /* BloodSugarConnectionViewController.m */; }; | |||||
| 952D19A1276DE80000ED3A0C /* AILinkBleSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952D19A0276DE80000ED3A0C /* AILinkBleSDK.framework */; }; | |||||
| 95572623276C38CD003BFBAC /* BloodConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725BC276C38CC003BFBAC /* BloodConnectViewController.m */; }; | |||||
| 95572624276C38CD003BFBAC /* BloodScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725BD276C38CC003BFBAC /* BloodScanViewController.m */; }; | |||||
| 95572625276C38CD003BFBAC /* AiFreshNutritionScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725C0276C38CC003BFBAC /* AiFreshNutritionScaleScanViewController.m */; }; | |||||
| 95572626276C38CD003BFBAC /* AiFreshNutritionScaleConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725C1276C38CC003BFBAC /* AiFreshNutritionScaleConnectionViewController.m */; }; | |||||
| 95572627276C38CD003BFBAC /* BroadcastScaleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725C5276C38CC003BFBAC /* BroadcastScaleViewController.m */; }; | |||||
| 95572628276C38CD003BFBAC /* BloodSugarScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725C9276C38CC003BFBAC /* BloodSugarScanViewController.m */; }; | |||||
| 95572629276C38CD003BFBAC /* BloodSugarConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725CA276C38CC003BFBAC /* BloodSugarConnectionViewController.m */; }; | |||||
| 9557262A276C38CD003BFBAC /* WheelMonitorConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725CD276C38CC003BFBAC /* WheelMonitorConnectViewController.m */; }; | |||||
| 9557262B276C38CD003BFBAC /* WheelMonitorScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725CF276C38CC003BFBAC /* WheelMonitorScanViewController.m */; }; | |||||
| 9557262C276C38CD003BFBAC /* BroadcastNutritionScaleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725D2276C38CC003BFBAC /* BroadcastNutritionScaleViewController.m */; }; | |||||
| 9557262D276C38CD003BFBAC /* ELBfsWifiScanVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725D7276C38CC003BFBAC /* ELBfsWifiScanVC.m */; }; | |||||
| 9557262E276C38CD003BFBAC /* ELBfsWifiConnectVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725D8276C38CC003BFBAC /* ELBfsWifiConnectVC.m */; }; | |||||
| 9557262F276C38CD003BFBAC /* ELBfsWifiConnectTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725D9276C38CC003BFBAC /* ELBfsWifiConnectTableViewCell.m */; }; | |||||
| 95572630276C38CD003BFBAC /* CoffeeScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725DC276C38CC003BFBAC /* CoffeeScaleScanViewController.m */; }; | |||||
| 95572631276C38CD003BFBAC /* CoffeeScaleConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725DF276C38CC003BFBAC /* CoffeeScaleConnectionViewController.m */; }; | |||||
| 95572632276C38CD003BFBAC /* BabyScaleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725E1276C38CC003BFBAC /* BabyScaleViewController.m */; }; | |||||
| 95572633276C38CD003BFBAC /* BabyScaleConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725E4276C38CC003BFBAC /* BabyScaleConnectViewController.m */; }; | |||||
| 95572634276C38CD003BFBAC /* HeightGuageScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725E6276C38CC003BFBAC /* HeightGuageScanViewController.m */; }; | |||||
| 95572635276C38CD003BFBAC /* HeightGuageConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725E9276C38CC003BFBAC /* HeightGuageConnectViewController.m */; }; | |||||
| 95572636276C38CD003BFBAC /* OximeterScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725EC276C38CC003BFBAC /* OximeterScanViewController.m */; }; | |||||
| 95572637276C38CD003BFBAC /* OximeterConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725EE276C38CC003BFBAC /* OximeterConnectionViewController.m */; }; | |||||
| 95572638276C38CD003BFBAC /* NutritionScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725F0276C38CC003BFBAC /* NutritionScaleScanViewController.m */; }; | |||||
| 95572639276C38CD003BFBAC /* NutritionScaleConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725F2276C38CC003BFBAC /* NutritionScaleConnectionViewController.m */; }; | |||||
| 9557263A276C38CD003BFBAC /* FaceMaskConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725F6276C38CD003BFBAC /* FaceMaskConnectionViewController.m */; }; | |||||
| 9557263B276C38CD003BFBAC /* FaceMaskScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725F8276C38CD003BFBAC /* FaceMaskScanViewController.m */; }; | |||||
| 9557263C276C38CD003BFBAC /* ThermometerScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725FA276C38CD003BFBAC /* ThermometerScanViewController.m */; }; | |||||
| 9557263D276C38CD003BFBAC /* ThermometerConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 955725FD276C38CD003BFBAC /* ThermometerConnectViewController.m */; }; | |||||
| 9557263E276C38CD003BFBAC /* EightScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572600276C38CD003BFBAC /* EightScaleScanViewController.m */; }; | |||||
| 9557263F276C38CD003BFBAC /* EightScaleConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572601276C38CD003BFBAC /* EightScaleConnectionViewController.m */; }; | |||||
| 95572640276C38CD003BFBAC /* libHTBodyfat_SDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 95572605276C38CD003BFBAC /* libHTBodyfat_SDK.a */; }; | |||||
| 95572641276C38CD003BFBAC /* ELEightScaleRecordModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572606276C38CD003BFBAC /* ELEightScaleRecordModel.m */; }; | |||||
| 95572642276C38CD003BFBAC /* ELEightScaleAlgorithmTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572608276C38CD003BFBAC /* ELEightScaleAlgorithmTool.m */; }; | |||||
| 95572643276C38CD003BFBAC /* BodyFatScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9557260B276C38CD003BFBAC /* BodyFatScaleScanViewController.m */; }; | |||||
| 95572644276C38CD003BFBAC /* BodyFatScaleConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9557260C276C38CD003BFBAC /* BodyFatScaleConnectViewController.m */; }; | |||||
| 95572645276C38CD003BFBAC /* FoodThermometerScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572610276C38CD003BFBAC /* FoodThermometerScanViewController.m */; }; | |||||
| 95572646276C38CD003BFBAC /* FoodThermometerConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572613276C38CD003BFBAC /* FoodThermometerConnectionViewController.m */; }; | |||||
| 95572647276C38CD003BFBAC /* ForeheadConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572615276C38CD003BFBAC /* ForeheadConnectViewController.m */; }; | |||||
| 95572648276C38CD003BFBAC /* ForeheadScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572618276C38CD003BFBAC /* ForeheadScanViewController.m */; }; | |||||
| 95572649276C38CD003BFBAC /* ToothbrushScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9557261A276C38CD003BFBAC /* ToothbrushScanViewController.m */; }; | |||||
| 9557264A276C38CD003BFBAC /* ToothbrushConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9557261D276C38CD003BFBAC /* ToothbrushConnectionViewController.m */; }; | |||||
| 9557264B276C38CD003BFBAC /* RemoteControlConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572621276C38CD003BFBAC /* RemoteControlConnectViewController.m */; }; | |||||
| 9557264C276C38CD003BFBAC /* RemoteControlScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95572622276C38CD003BFBAC /* RemoteControlScanViewController.m */; }; | |||||
| 958B4EA4263C08E800476BAE /* ELInputAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E69263C08E700476BAE /* ELInputAlertView.m */; }; | 958B4EA4263C08E800476BAE /* ELInputAlertView.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E69263C08E700476BAE /* ELInputAlertView.m */; }; | ||||
| 958B4EA5263C08E800476BAE /* UILabel+WZAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E6A263C08E700476BAE /* UILabel+WZAdd.m */; }; | 958B4EA5263C08E800476BAE /* UILabel+WZAdd.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E6A263C08E700476BAE /* UILabel+WZAdd.m */; }; | ||||
| 958B4EA6263C08E800476BAE /* UIView+Category.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E6B263C08E700476BAE /* UIView+Category.m */; }; | 958B4EA6263C08E800476BAE /* UIView+Category.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E6B263C08E700476BAE /* UIView+Category.m */; }; | ||||
| 958B4EB6263C08E800476BAE /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E96263C08E800476BAE /* MASViewAttribute.m */; }; | 958B4EB6263C08E800476BAE /* MASViewAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E96263C08E800476BAE /* MASViewAttribute.m */; }; | ||||
| 958B4EB7263C08E800476BAE /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 958B4E97263C08E800476BAE /* README.md */; }; | 958B4EB7263C08E800476BAE /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 958B4E97263C08E800476BAE /* README.md */; }; | ||||
| 958B4EB8263C08E800476BAE /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E98263C08E800476BAE /* ViewController.m */; }; | 958B4EB8263C08E800476BAE /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E98263C08E800476BAE /* ViewController.m */; }; | ||||
| 958B4EB9263C08E800476BAE /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E99263C08E800476BAE /* SceneDelegate.m */; }; | |||||
| 958B4EBA263C08E800476BAE /* SubBleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E9B263C08E800476BAE /* SubBleManager.m */; }; | 958B4EBA263C08E800476BAE /* SubBleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E9B263C08E800476BAE /* SubBleManager.m */; }; | ||||
| 958B4EBB263C08E800476BAE /* InheritConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E9D263C08E800476BAE /* InheritConnectViewController.m */; }; | 958B4EBB263C08E800476BAE /* InheritConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E9D263C08E800476BAE /* InheritConnectViewController.m */; }; | ||||
| 958B4EBC263C08E800476BAE /* InheritScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E9E263C08E800476BAE /* InheritScanViewController.m */; }; | 958B4EBC263C08E800476BAE /* InheritScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E9E263C08E800476BAE /* InheritScanViewController.m */; }; | ||||
| /* End PBXContainerItemProxy section */ | /* End PBXContainerItemProxy section */ | ||||
| /* Begin PBXFileReference section */ | /* Begin PBXFileReference section */ | ||||
| 958B4DF6263C079500476BAE /* ELEightScaleRecordModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELEightScaleRecordModel.h; sourceTree = "<group>"; }; | |||||
| 958B4DF7263C079500476BAE /* EightScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EightScaleScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4DF8263C079500476BAE /* EightScaleConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EightScaleConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4DF9263C079500476BAE /* ELEightScaleAlgorithmTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELEightScaleAlgorithmTool.h; sourceTree = "<group>"; }; | |||||
| 958B4DFB263C079500476BAE /* HTBodyfat_SDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTBodyfat_SDK.h; sourceTree = "<group>"; }; | |||||
| 958B4DFC263C079500476BAE /* libHTBodyfat_SDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libHTBodyfat_SDK.a; sourceTree = "<group>"; }; | |||||
| 958B4DFD263C079500476BAE /* ELEightScaleRecordModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELEightScaleRecordModel.m; sourceTree = "<group>"; }; | |||||
| 958B4DFE263C079500476BAE /* EightScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EightScaleScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4DFF263C079500476BAE /* ELEightScaleAlgorithmTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELEightScaleAlgorithmTool.m; sourceTree = "<group>"; }; | |||||
| 958B4E00263C079500476BAE /* EightScaleConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EightScaleConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E02263C079500476BAE /* BabyScaleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BabyScaleViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E03263C079500476BAE /* BabyScaleConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BabyScaleConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E04263C079500476BAE /* BabyScaleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BabyScaleViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E05263C079500476BAE /* BabyScaleConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BabyScaleConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E07263C079500476BAE /* OximeterConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OximeterConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E08263C079500476BAE /* OximeterScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OximeterScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E09263C079500476BAE /* OximeterScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OximeterScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E0A263C079500476BAE /* OximeterConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OximeterConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E0B263C079500476BAE /* AILinkBleSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AILinkBleSDK.framework; sourceTree = "<group>"; }; | |||||
| 958B4E0D263C079500476BAE /* ELBfsWifiConnectVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELBfsWifiConnectVC.h; sourceTree = "<group>"; }; | |||||
| 958B4E0E263C079500476BAE /* ELBfsWifiConnectTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELBfsWifiConnectTableViewCell.h; sourceTree = "<group>"; }; | |||||
| 958B4E0F263C079500476BAE /* ELBfsWifiScanVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELBfsWifiScanVC.m; sourceTree = "<group>"; }; | |||||
| 958B4E10263C079500476BAE /* ELBfsWifiConnectVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELBfsWifiConnectVC.m; sourceTree = "<group>"; }; | |||||
| 958B4E11263C079500476BAE /* ELBfsWifiConnectTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELBfsWifiConnectTableViewCell.m; sourceTree = "<group>"; }; | |||||
| 958B4E12263C079500476BAE /* ELBfsWifiScanVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELBfsWifiScanVC.h; sourceTree = "<group>"; }; | |||||
| 958B4E14263C079500476BAE /* ThermometerScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThermometerScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E15263C079500476BAE /* ThermometerConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E16263C079500476BAE /* ThermometerScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E17263C079500476BAE /* ThermometerConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThermometerConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E19263C079500476BAE /* ForeheadConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ForeheadConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E1A263C079500476BAE /* ForeheadScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ForeheadScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E1B263C079500476BAE /* ForeheadConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ForeheadConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E1C263C079500476BAE /* ForeheadScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ForeheadScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E1E263C079500476BAE /* ToothbrushScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToothbrushScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E1F263C079500476BAE /* ToothbrushConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToothbrushConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E20263C079500476BAE /* ToothbrushScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToothbrushScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E21263C079500476BAE /* ToothbrushConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToothbrushConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E23263C079500476BAE /* WheelMonitorConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WheelMonitorConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E24263C079500476BAE /* WheelMonitorScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WheelMonitorScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E25263C079500476BAE /* WheelMonitorScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WheelMonitorScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E26263C079500476BAE /* WheelMonitorConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WheelMonitorConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E28263C079500476BAE /* RemoteControlScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteControlScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E29263C079500476BAE /* RemoteControlConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteControlConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E2A263C079500476BAE /* RemoteControlConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RemoteControlConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E2B263C079500476BAE /* RemoteControlScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RemoteControlScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E2D263C079500476BAE /* HeightGuageScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HeightGuageScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E2E263C079500476BAE /* HeightGuageConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeightGuageConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E2F263C079500476BAE /* HeightGuageScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeightGuageScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E30263C079500476BAE /* HeightGuageConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HeightGuageConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E32263C079500476BAE /* BroadcastScaleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BroadcastScaleViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E33263C079500476BAE /* BroadcastScaleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BroadcastScaleViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E35263C079500476BAE /* BodyFatScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BodyFatScaleScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E36263C079500476BAE /* BodyFatScaleConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BodyFatScaleConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E37263C079500476BAE /* BodyFatScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BodyFatScaleScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E38263C079500476BAE /* BodyFatScaleConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BodyFatScaleConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E3A263C079500476BAE /* BloodScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloodScanViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E3B263C079500476BAE /* BloodConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BloodConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E3C263C079500476BAE /* BloodScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BloodScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E3D263C079500476BAE /* BloodConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloodConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E3F263C079500476BAE /* BloodSugarConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloodSugarConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 958B4E40263C079500476BAE /* BloodSugarScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BloodSugarScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E41263C079500476BAE /* BloodSugarConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BloodSugarConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E42263C079500476BAE /* BloodSugarScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloodSugarScanViewController.h; sourceTree = "<group>"; }; | |||||
| 952D19A0276DE80000ED3A0C /* AILinkBleSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AILinkBleSDK.framework; sourceTree = "<group>"; }; | |||||
| 955725BB276C38CC003BFBAC /* BloodScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloodScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725BC276C38CC003BFBAC /* BloodConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BloodConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 955725BD276C38CC003BFBAC /* BloodScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BloodScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725BE276C38CC003BFBAC /* BloodConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloodConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 955725C0276C38CC003BFBAC /* AiFreshNutritionScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiFreshNutritionScaleScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725C1276C38CC003BFBAC /* AiFreshNutritionScaleConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiFreshNutritionScaleConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 955725C2276C38CC003BFBAC /* AiFreshNutritionScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiFreshNutritionScaleScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725C3276C38CC003BFBAC /* AiFreshNutritionScaleConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiFreshNutritionScaleConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 955725C5276C38CC003BFBAC /* BroadcastScaleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BroadcastScaleViewController.m; sourceTree = "<group>"; }; | |||||
| 955725C6276C38CC003BFBAC /* BroadcastScaleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BroadcastScaleViewController.h; sourceTree = "<group>"; }; | |||||
| 955725C8276C38CC003BFBAC /* BloodSugarConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloodSugarConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 955725C9276C38CC003BFBAC /* BloodSugarScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BloodSugarScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725CA276C38CC003BFBAC /* BloodSugarConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BloodSugarConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 955725CB276C38CC003BFBAC /* BloodSugarScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BloodSugarScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725CD276C38CC003BFBAC /* WheelMonitorConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WheelMonitorConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 955725CE276C38CC003BFBAC /* WheelMonitorScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WheelMonitorScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725CF276C38CC003BFBAC /* WheelMonitorScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = WheelMonitorScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725D0276C38CC003BFBAC /* WheelMonitorConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WheelMonitorConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 955725D2276C38CC003BFBAC /* BroadcastNutritionScaleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BroadcastNutritionScaleViewController.m; sourceTree = "<group>"; }; | |||||
| 955725D3276C38CC003BFBAC /* BroadcastNutritionScaleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BroadcastNutritionScaleViewController.h; sourceTree = "<group>"; }; | |||||
| 955725D5276C38CC003BFBAC /* ELBfsWifiConnectVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELBfsWifiConnectVC.h; sourceTree = "<group>"; }; | |||||
| 955725D6276C38CC003BFBAC /* ELBfsWifiConnectTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELBfsWifiConnectTableViewCell.h; sourceTree = "<group>"; }; | |||||
| 955725D7276C38CC003BFBAC /* ELBfsWifiScanVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELBfsWifiScanVC.m; sourceTree = "<group>"; }; | |||||
| 955725D8276C38CC003BFBAC /* ELBfsWifiConnectVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELBfsWifiConnectVC.m; sourceTree = "<group>"; }; | |||||
| 955725D9276C38CC003BFBAC /* ELBfsWifiConnectTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELBfsWifiConnectTableViewCell.m; sourceTree = "<group>"; }; | |||||
| 955725DA276C38CC003BFBAC /* ELBfsWifiScanVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELBfsWifiScanVC.h; sourceTree = "<group>"; }; | |||||
| 955725DC276C38CC003BFBAC /* CoffeeScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoffeeScaleScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725DD276C38CC003BFBAC /* CoffeeScaleConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoffeeScaleConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 955725DE276C38CC003BFBAC /* CoffeeScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CoffeeScaleScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725DF276C38CC003BFBAC /* CoffeeScaleConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = CoffeeScaleConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 955725E1276C38CC003BFBAC /* BabyScaleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BabyScaleViewController.m; sourceTree = "<group>"; }; | |||||
| 955725E2276C38CC003BFBAC /* BabyScaleConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BabyScaleConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 955725E3276C38CC003BFBAC /* BabyScaleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BabyScaleViewController.h; sourceTree = "<group>"; }; | |||||
| 955725E4276C38CC003BFBAC /* BabyScaleConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BabyScaleConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 955725E6276C38CC003BFBAC /* HeightGuageScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HeightGuageScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725E7276C38CC003BFBAC /* HeightGuageConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeightGuageConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 955725E8276C38CC003BFBAC /* HeightGuageScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeightGuageScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725E9276C38CC003BFBAC /* HeightGuageConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HeightGuageConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 955725EB276C38CC003BFBAC /* OximeterConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OximeterConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 955725EC276C38CC003BFBAC /* OximeterScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OximeterScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725ED276C38CC003BFBAC /* OximeterScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OximeterScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725EE276C38CC003BFBAC /* OximeterConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = OximeterConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 955725F0276C38CC003BFBAC /* NutritionScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NutritionScaleScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725F1276C38CC003BFBAC /* NutritionScaleConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NutritionScaleConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 955725F2276C38CC003BFBAC /* NutritionScaleConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = NutritionScaleConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 955725F3276C38CC003BFBAC /* NutritionScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NutritionScaleScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725F5276C38CD003BFBAC /* FaceMaskScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FaceMaskScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725F6276C38CD003BFBAC /* FaceMaskConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FaceMaskConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 955725F7276C38CD003BFBAC /* FaceMaskConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FaceMaskConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 955725F8276C38CD003BFBAC /* FaceMaskScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FaceMaskScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725FA276C38CD003BFBAC /* ThermometerScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThermometerScanViewController.m; sourceTree = "<group>"; }; | |||||
| 955725FB276C38CD003BFBAC /* ThermometerConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 955725FC276C38CD003BFBAC /* ThermometerScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerScanViewController.h; sourceTree = "<group>"; }; | |||||
| 955725FD276C38CD003BFBAC /* ThermometerConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThermometerConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 955725FF276C38CD003BFBAC /* ELEightScaleRecordModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELEightScaleRecordModel.h; sourceTree = "<group>"; }; | |||||
| 95572600276C38CD003BFBAC /* EightScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EightScaleScanViewController.m; sourceTree = "<group>"; }; | |||||
| 95572601276C38CD003BFBAC /* EightScaleConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EightScaleConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 95572602276C38CD003BFBAC /* ELEightScaleAlgorithmTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELEightScaleAlgorithmTool.h; sourceTree = "<group>"; }; | |||||
| 95572604276C38CD003BFBAC /* HTBodyfat_SDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTBodyfat_SDK.h; sourceTree = "<group>"; }; | |||||
| 95572605276C38CD003BFBAC /* libHTBodyfat_SDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libHTBodyfat_SDK.a; sourceTree = "<group>"; }; | |||||
| 95572606276C38CD003BFBAC /* ELEightScaleRecordModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELEightScaleRecordModel.m; sourceTree = "<group>"; }; | |||||
| 95572607276C38CD003BFBAC /* EightScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EightScaleScanViewController.h; sourceTree = "<group>"; }; | |||||
| 95572608276C38CD003BFBAC /* ELEightScaleAlgorithmTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELEightScaleAlgorithmTool.m; sourceTree = "<group>"; }; | |||||
| 95572609276C38CD003BFBAC /* EightScaleConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EightScaleConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 9557260B276C38CD003BFBAC /* BodyFatScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BodyFatScaleScanViewController.m; sourceTree = "<group>"; }; | |||||
| 9557260C276C38CD003BFBAC /* BodyFatScaleConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BodyFatScaleConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 9557260D276C38CD003BFBAC /* BodyFatScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BodyFatScaleScanViewController.h; sourceTree = "<group>"; }; | |||||
| 9557260E276C38CD003BFBAC /* BodyFatScaleConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BodyFatScaleConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 95572610276C38CD003BFBAC /* FoodThermometerScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodThermometerScanViewController.m; sourceTree = "<group>"; }; | |||||
| 95572611276C38CD003BFBAC /* FoodThermometerConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodThermometerConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 95572612276C38CD003BFBAC /* FoodThermometerScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FoodThermometerScanViewController.h; sourceTree = "<group>"; }; | |||||
| 95572613276C38CD003BFBAC /* FoodThermometerConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FoodThermometerConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 95572615276C38CD003BFBAC /* ForeheadConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ForeheadConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 95572616276C38CD003BFBAC /* ForeheadScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ForeheadScanViewController.h; sourceTree = "<group>"; }; | |||||
| 95572617276C38CD003BFBAC /* ForeheadConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ForeheadConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 95572618276C38CD003BFBAC /* ForeheadScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ForeheadScanViewController.m; sourceTree = "<group>"; }; | |||||
| 9557261A276C38CD003BFBAC /* ToothbrushScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToothbrushScanViewController.m; sourceTree = "<group>"; }; | |||||
| 9557261B276C38CD003BFBAC /* ToothbrushConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToothbrushConnectionViewController.h; sourceTree = "<group>"; }; | |||||
| 9557261C276C38CD003BFBAC /* ToothbrushScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ToothbrushScanViewController.h; sourceTree = "<group>"; }; | |||||
| 9557261D276C38CD003BFBAC /* ToothbrushConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ToothbrushConnectionViewController.m; sourceTree = "<group>"; }; | |||||
| 9557261F276C38CD003BFBAC /* RemoteControlScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteControlScanViewController.h; sourceTree = "<group>"; }; | |||||
| 95572620276C38CD003BFBAC /* RemoteControlConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RemoteControlConnectViewController.h; sourceTree = "<group>"; }; | |||||
| 95572621276C38CD003BFBAC /* RemoteControlConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RemoteControlConnectViewController.m; sourceTree = "<group>"; }; | |||||
| 95572622276C38CD003BFBAC /* RemoteControlScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RemoteControlScanViewController.m; sourceTree = "<group>"; }; | |||||
| 958B4E68263C08E700476BAE /* UIButton+WZAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+WZAdd.h"; sourceTree = "<group>"; }; | 958B4E68263C08E700476BAE /* UIButton+WZAdd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+WZAdd.h"; sourceTree = "<group>"; }; | ||||
| 958B4E69263C08E700476BAE /* ELInputAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELInputAlertView.m; sourceTree = "<group>"; }; | 958B4E69263C08E700476BAE /* ELInputAlertView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELInputAlertView.m; sourceTree = "<group>"; }; | ||||
| 958B4E6A263C08E700476BAE /* UILabel+WZAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UILabel+WZAdd.m"; sourceTree = "<group>"; }; | 958B4E6A263C08E700476BAE /* UILabel+WZAdd.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UILabel+WZAdd.m"; sourceTree = "<group>"; }; | ||||
| 958B4E96263C08E800476BAE /* MASViewAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewAttribute.m; sourceTree = "<group>"; }; | 958B4E96263C08E800476BAE /* MASViewAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewAttribute.m; sourceTree = "<group>"; }; | ||||
| 958B4E97263C08E800476BAE /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; }; | 958B4E97263C08E800476BAE /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; }; | ||||
| 958B4E98263C08E800476BAE /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; }; | 958B4E98263C08E800476BAE /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = "<group>"; }; | ||||
| 958B4E99263C08E800476BAE /* SceneDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = "<group>"; }; | |||||
| 958B4E9B263C08E800476BAE /* SubBleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SubBleManager.m; sourceTree = "<group>"; }; | 958B4E9B263C08E800476BAE /* SubBleManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SubBleManager.m; sourceTree = "<group>"; }; | ||||
| 958B4E9C263C08E800476BAE /* InheritScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InheritScanViewController.h; sourceTree = "<group>"; }; | 958B4E9C263C08E800476BAE /* InheritScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InheritScanViewController.h; sourceTree = "<group>"; }; | ||||
| 958B4E9D263C08E800476BAE /* InheritConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InheritConnectViewController.m; sourceTree = "<group>"; }; | 958B4E9D263C08E800476BAE /* InheritConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = InheritConnectViewController.m; sourceTree = "<group>"; }; | ||||
| 958B4EA0263C08E800476BAE /* InheritConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InheritConnectViewController.h; sourceTree = "<group>"; }; | 958B4EA0263C08E800476BAE /* InheritConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InheritConnectViewController.h; sourceTree = "<group>"; }; | ||||
| 958B4EA1263C08E800476BAE /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; | 958B4EA1263C08E800476BAE /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; | ||||
| 958B4EA2263C08E800476BAE /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; }; | 958B4EA2263C08E800476BAE /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = "<group>"; }; | ||||
| 958B4EA3263C08E800476BAE /* SceneDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = "<group>"; }; | |||||
| E622E25B243F1CA5003C319D /* AILinkBleSDKDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AILinkBleSDKDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; | E622E25B243F1CA5003C319D /* AILinkBleSDKDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AILinkBleSDKDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; | ||||
| E622E26A243F1CA6003C319D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | E622E26A243F1CA6003C319D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | ||||
| E622E26D243F1CA6003C319D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | E622E26D243F1CA6003C319D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | ||||
| isa = PBXFrameworksBuildPhase; | isa = PBXFrameworksBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 788D913F26A2C4AE0009489E /* libHTBodyfat_SDK.a in Frameworks */, | |||||
| 788D913726A1849C0009489E /* AILinkBleSDK.framework in Frameworks */, | |||||
| 95572640276C38CD003BFBAC /* libHTBodyfat_SDK.a in Frameworks */, | |||||
| 952D19A1276DE80000ED3A0C /* AILinkBleSDK.framework in Frameworks */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| 788D914026A2E5380009489E /* SDK */ = { | 788D914026A2E5380009489E /* SDK */ = { | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E0B263C079500476BAE /* AILinkBleSDK.framework */, | |||||
| 952D19A0276DE80000ED3A0C /* AILinkBleSDK.framework */, | |||||
| ); | ); | ||||
| name = SDK; | name = SDK; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4DF5263C079500476BAE /* 13_EightScale */ = { | |||||
| 955725BA276C38CC003BFBAC /* 05_BloodPressure */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4DFA263C079500476BAE /* HTBodyfat_SDK */, | |||||
| 958B4E00263C079500476BAE /* EightScaleConnectionViewController.h */, | |||||
| 958B4DF8263C079500476BAE /* EightScaleConnectionViewController.m */, | |||||
| 958B4DFE263C079500476BAE /* EightScaleScanViewController.h */, | |||||
| 958B4DF7263C079500476BAE /* EightScaleScanViewController.m */, | |||||
| 958B4DF9263C079500476BAE /* ELEightScaleAlgorithmTool.h */, | |||||
| 958B4DFF263C079500476BAE /* ELEightScaleAlgorithmTool.m */, | |||||
| 958B4DF6263C079500476BAE /* ELEightScaleRecordModel.h */, | |||||
| 958B4DFD263C079500476BAE /* ELEightScaleRecordModel.m */, | |||||
| 955725BB276C38CC003BFBAC /* BloodScanViewController.h */, | |||||
| 955725BC276C38CC003BFBAC /* BloodConnectViewController.m */, | |||||
| 955725BD276C38CC003BFBAC /* BloodScanViewController.m */, | |||||
| 955725BE276C38CC003BFBAC /* BloodConnectViewController.h */, | |||||
| ); | ); | ||||
| path = 13_EightScale; | |||||
| path = 05_BloodPressure; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4DFA263C079500476BAE /* HTBodyfat_SDK */ = { | |||||
| 955725BF276C38CC003BFBAC /* 22_AiFreshNutritionScale */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4DFB263C079500476BAE /* HTBodyfat_SDK.h */, | |||||
| 958B4DFC263C079500476BAE /* libHTBodyfat_SDK.a */, | |||||
| 955725C0276C38CC003BFBAC /* AiFreshNutritionScaleScanViewController.m */, | |||||
| 955725C1276C38CC003BFBAC /* AiFreshNutritionScaleConnectionViewController.m */, | |||||
| 955725C2276C38CC003BFBAC /* AiFreshNutritionScaleScanViewController.h */, | |||||
| 955725C3276C38CC003BFBAC /* AiFreshNutritionScaleConnectionViewController.h */, | |||||
| ); | ); | ||||
| path = HTBodyfat_SDK; | |||||
| path = 22_AiFreshNutritionScale; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E01263C079500476BAE /* 04_BabyScale */ = { | |||||
| 955725C4276C38CC003BFBAC /* 12_BroadcastScale */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E03263C079500476BAE /* BabyScaleConnectViewController.h */, | |||||
| 958B4E05263C079500476BAE /* BabyScaleConnectViewController.m */, | |||||
| 958B4E04263C079500476BAE /* BabyScaleViewController.h */, | |||||
| 958B4E02263C079500476BAE /* BabyScaleViewController.m */, | |||||
| 955725C5276C38CC003BFBAC /* BroadcastScaleViewController.m */, | |||||
| 955725C6276C38CC003BFBAC /* BroadcastScaleViewController.h */, | |||||
| ); | ); | ||||
| path = 04_BabyScale; | |||||
| path = 12_BroadcastScale; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E06263C079500476BAE /* 16_Oximeter */ = { | |||||
| 955725C7276C38CC003BFBAC /* 17_BloodSugar */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E07263C079500476BAE /* OximeterConnectionViewController.h */, | |||||
| 958B4E0A263C079500476BAE /* OximeterConnectionViewController.m */, | |||||
| 958B4E09263C079500476BAE /* OximeterScanViewController.h */, | |||||
| 958B4E08263C079500476BAE /* OximeterScanViewController.m */, | |||||
| 955725C8276C38CC003BFBAC /* BloodSugarConnectionViewController.h */, | |||||
| 955725C9276C38CC003BFBAC /* BloodSugarScanViewController.m */, | |||||
| 955725CA276C38CC003BFBAC /* BloodSugarConnectionViewController.m */, | |||||
| 955725CB276C38CC003BFBAC /* BloodSugarScanViewController.h */, | |||||
| ); | ); | ||||
| path = 16_Oximeter; | |||||
| path = 17_BloodSugar; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| 955725CC276C38CC003BFBAC /* 10_WheelMonitor */ = { | |||||
| isa = PBXGroup; | |||||
| children = ( | |||||
| 955725CD276C38CC003BFBAC /* WheelMonitorConnectViewController.m */, | |||||
| 955725CE276C38CC003BFBAC /* WheelMonitorScanViewController.h */, | |||||
| 955725CF276C38CC003BFBAC /* WheelMonitorScanViewController.m */, | |||||
| 955725D0276C38CC003BFBAC /* WheelMonitorConnectViewController.h */, | |||||
| ); | |||||
| path = 10_WheelMonitor; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| 955725D1276C38CC003BFBAC /* 20_BroadcastNutritionScale */ = { | |||||
| isa = PBXGroup; | |||||
| children = ( | |||||
| 955725D2276C38CC003BFBAC /* BroadcastNutritionScaleViewController.m */, | |||||
| 955725D3276C38CC003BFBAC /* BroadcastNutritionScaleViewController.h */, | |||||
| ); | |||||
| path = 20_BroadcastNutritionScale; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E0C263C079500476BAE /* 15_WifiBleBodyFatScale */ = { | |||||
| 955725D4276C38CC003BFBAC /* 15_WifiBleBodyFatScale */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E0E263C079500476BAE /* ELBfsWifiConnectTableViewCell.h */, | |||||
| 958B4E11263C079500476BAE /* ELBfsWifiConnectTableViewCell.m */, | |||||
| 958B4E0D263C079500476BAE /* ELBfsWifiConnectVC.h */, | |||||
| 958B4E10263C079500476BAE /* ELBfsWifiConnectVC.m */, | |||||
| 958B4E12263C079500476BAE /* ELBfsWifiScanVC.h */, | |||||
| 958B4E0F263C079500476BAE /* ELBfsWifiScanVC.m */, | |||||
| 955725D6276C38CC003BFBAC /* ELBfsWifiConnectTableViewCell.h */, | |||||
| 955725D9276C38CC003BFBAC /* ELBfsWifiConnectTableViewCell.m */, | |||||
| 955725D5276C38CC003BFBAC /* ELBfsWifiConnectVC.h */, | |||||
| 955725D8276C38CC003BFBAC /* ELBfsWifiConnectVC.m */, | |||||
| 955725DA276C38CC003BFBAC /* ELBfsWifiScanVC.h */, | |||||
| 955725D7276C38CC003BFBAC /* ELBfsWifiScanVC.m */, | |||||
| ); | ); | ||||
| path = 15_WifiBleBodyFatScale; | path = 15_WifiBleBodyFatScale; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E13263C079500476BAE /* 09_Thermometer */ = { | |||||
| 955725DB276C38CC003BFBAC /* 18_CoffeeScale */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E15263C079500476BAE /* ThermometerConnectViewController.h */, | |||||
| 958B4E17263C079500476BAE /* ThermometerConnectViewController.m */, | |||||
| 958B4E16263C079500476BAE /* ThermometerScanViewController.h */, | |||||
| 958B4E14263C079500476BAE /* ThermometerScanViewController.m */, | |||||
| 955725DC276C38CC003BFBAC /* CoffeeScaleScanViewController.m */, | |||||
| 955725DD276C38CC003BFBAC /* CoffeeScaleConnectionViewController.h */, | |||||
| 955725DE276C38CC003BFBAC /* CoffeeScaleScanViewController.h */, | |||||
| 955725DF276C38CC003BFBAC /* CoffeeScaleConnectionViewController.m */, | |||||
| ); | ); | ||||
| path = 09_Thermometer; | |||||
| path = 18_CoffeeScale; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E18263C079500476BAE /* 08_Forehead */ = { | |||||
| 955725E0276C38CC003BFBAC /* 04_BabyScale */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E1B263C079500476BAE /* ForeheadConnectViewController.h */, | |||||
| 958B4E19263C079500476BAE /* ForeheadConnectViewController.m */, | |||||
| 958B4E1A263C079500476BAE /* ForeheadScanViewController.h */, | |||||
| 958B4E1C263C079500476BAE /* ForeheadScanViewController.m */, | |||||
| 955725E1276C38CC003BFBAC /* BabyScaleViewController.m */, | |||||
| 955725E2276C38CC003BFBAC /* BabyScaleConnectViewController.h */, | |||||
| 955725E3276C38CC003BFBAC /* BabyScaleViewController.h */, | |||||
| 955725E4276C38CC003BFBAC /* BabyScaleConnectViewController.m */, | |||||
| ); | ); | ||||
| path = 08_Forehead; | |||||
| path = 04_BabyScale; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E1D263C079500476BAE /* 14_WifiBleToothbrush */ = { | |||||
| 955725E5276C38CC003BFBAC /* 06_HeightGuage */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E1F263C079500476BAE /* ToothbrushConnectionViewController.h */, | |||||
| 958B4E21263C079500476BAE /* ToothbrushConnectionViewController.m */, | |||||
| 958B4E20263C079500476BAE /* ToothbrushScanViewController.h */, | |||||
| 958B4E1E263C079500476BAE /* ToothbrushScanViewController.m */, | |||||
| 955725E6276C38CC003BFBAC /* HeightGuageScanViewController.m */, | |||||
| 955725E7276C38CC003BFBAC /* HeightGuageConnectViewController.h */, | |||||
| 955725E8276C38CC003BFBAC /* HeightGuageScanViewController.h */, | |||||
| 955725E9276C38CC003BFBAC /* HeightGuageConnectViewController.m */, | |||||
| ); | ); | ||||
| path = 14_WifiBleToothbrush; | |||||
| path = 06_HeightGuage; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E22263C079500476BAE /* 10_WheelMonitor */ = { | |||||
| 955725EA276C38CC003BFBAC /* 16_Oximeter */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E26263C079500476BAE /* WheelMonitorConnectViewController.h */, | |||||
| 958B4E23263C079500476BAE /* WheelMonitorConnectViewController.m */, | |||||
| 958B4E24263C079500476BAE /* WheelMonitorScanViewController.h */, | |||||
| 958B4E25263C079500476BAE /* WheelMonitorScanViewController.m */, | |||||
| 955725EB276C38CC003BFBAC /* OximeterConnectionViewController.h */, | |||||
| 955725EC276C38CC003BFBAC /* OximeterScanViewController.m */, | |||||
| 955725ED276C38CC003BFBAC /* OximeterScanViewController.h */, | |||||
| 955725EE276C38CC003BFBAC /* OximeterConnectionViewController.m */, | |||||
| ); | ); | ||||
| path = 10_WheelMonitor; | |||||
| path = 16_Oximeter; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E27263C079500476BAE /* 07_RemoteControl */ = { | |||||
| 955725EF276C38CC003BFBAC /* 21_NutritionScale */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E29263C079500476BAE /* RemoteControlConnectViewController.h */, | |||||
| 958B4E2A263C079500476BAE /* RemoteControlConnectViewController.m */, | |||||
| 958B4E28263C079500476BAE /* RemoteControlScanViewController.h */, | |||||
| 958B4E2B263C079500476BAE /* RemoteControlScanViewController.m */, | |||||
| 955725F0276C38CC003BFBAC /* NutritionScaleScanViewController.m */, | |||||
| 955725F1276C38CC003BFBAC /* NutritionScaleConnectionViewController.h */, | |||||
| 955725F2276C38CC003BFBAC /* NutritionScaleConnectionViewController.m */, | |||||
| 955725F3276C38CC003BFBAC /* NutritionScaleScanViewController.h */, | |||||
| ); | ); | ||||
| path = 07_RemoteControl; | |||||
| path = 21_NutritionScale; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E2C263C079500476BAE /* 06_HeightGuage */ = { | |||||
| 955725F4276C38CD003BFBAC /* 23_FaceMask */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E2E263C079500476BAE /* HeightGuageConnectViewController.h */, | |||||
| 958B4E30263C079500476BAE /* HeightGuageConnectViewController.m */, | |||||
| 958B4E2F263C079500476BAE /* HeightGuageScanViewController.h */, | |||||
| 958B4E2D263C079500476BAE /* HeightGuageScanViewController.m */, | |||||
| 955725F5276C38CD003BFBAC /* FaceMaskScanViewController.h */, | |||||
| 955725F6276C38CD003BFBAC /* FaceMaskConnectionViewController.m */, | |||||
| 955725F7276C38CD003BFBAC /* FaceMaskConnectionViewController.h */, | |||||
| 955725F8276C38CD003BFBAC /* FaceMaskScanViewController.m */, | |||||
| ); | ); | ||||
| path = 06_HeightGuage; | |||||
| path = 23_FaceMask; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E31263C079500476BAE /* 12_BroadcastScale */ = { | |||||
| 955725F9276C38CD003BFBAC /* 09_Thermometer */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E33263C079500476BAE /* BroadcastScaleViewController.h */, | |||||
| 958B4E32263C079500476BAE /* BroadcastScaleViewController.m */, | |||||
| 955725FA276C38CD003BFBAC /* ThermometerScanViewController.m */, | |||||
| 955725FB276C38CD003BFBAC /* ThermometerConnectViewController.h */, | |||||
| 955725FC276C38CD003BFBAC /* ThermometerScanViewController.h */, | |||||
| 955725FD276C38CD003BFBAC /* ThermometerConnectViewController.m */, | |||||
| ); | ); | ||||
| path = 12_BroadcastScale; | |||||
| path = 09_Thermometer; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| 955725FE276C38CD003BFBAC /* 13_EightScale */ = { | |||||
| isa = PBXGroup; | |||||
| children = ( | |||||
| 955725FF276C38CD003BFBAC /* ELEightScaleRecordModel.h */, | |||||
| 95572600276C38CD003BFBAC /* EightScaleScanViewController.m */, | |||||
| 95572601276C38CD003BFBAC /* EightScaleConnectionViewController.m */, | |||||
| 95572602276C38CD003BFBAC /* ELEightScaleAlgorithmTool.h */, | |||||
| 95572603276C38CD003BFBAC /* HTBodyfat_SDK */, | |||||
| 95572606276C38CD003BFBAC /* ELEightScaleRecordModel.m */, | |||||
| 95572607276C38CD003BFBAC /* EightScaleScanViewController.h */, | |||||
| 95572608276C38CD003BFBAC /* ELEightScaleAlgorithmTool.m */, | |||||
| 95572609276C38CD003BFBAC /* EightScaleConnectionViewController.h */, | |||||
| ); | |||||
| path = 13_EightScale; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E34263C079500476BAE /* 11_BodyFatScale */ = { | |||||
| 95572603276C38CD003BFBAC /* HTBodyfat_SDK */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E38263C079500476BAE /* BodyFatScaleConnectViewController.h */, | |||||
| 958B4E36263C079500476BAE /* BodyFatScaleConnectViewController.m */, | |||||
| 958B4E37263C079500476BAE /* BodyFatScaleScanViewController.h */, | |||||
| 958B4E35263C079500476BAE /* BodyFatScaleScanViewController.m */, | |||||
| 95572604276C38CD003BFBAC /* HTBodyfat_SDK.h */, | |||||
| 95572605276C38CD003BFBAC /* libHTBodyfat_SDK.a */, | |||||
| ); | |||||
| path = HTBodyfat_SDK; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| 9557260A276C38CD003BFBAC /* 11_BodyFatScale */ = { | |||||
| isa = PBXGroup; | |||||
| children = ( | |||||
| 9557260B276C38CD003BFBAC /* BodyFatScaleScanViewController.m */, | |||||
| 9557260C276C38CD003BFBAC /* BodyFatScaleConnectViewController.m */, | |||||
| 9557260D276C38CD003BFBAC /* BodyFatScaleScanViewController.h */, | |||||
| 9557260E276C38CD003BFBAC /* BodyFatScaleConnectViewController.h */, | |||||
| ); | ); | ||||
| path = 11_BodyFatScale; | path = 11_BodyFatScale; | ||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E39263C079500476BAE /* 05_BloodPressure */ = { | |||||
| 9557260F276C38CD003BFBAC /* 19_FoodThermometer */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E3D263C079500476BAE /* BloodConnectViewController.h */, | |||||
| 958B4E3B263C079500476BAE /* BloodConnectViewController.m */, | |||||
| 958B4E3A263C079500476BAE /* BloodScanViewController.h */, | |||||
| 958B4E3C263C079500476BAE /* BloodScanViewController.m */, | |||||
| 95572610276C38CD003BFBAC /* FoodThermometerScanViewController.m */, | |||||
| 95572611276C38CD003BFBAC /* FoodThermometerConnectionViewController.h */, | |||||
| 95572612276C38CD003BFBAC /* FoodThermometerScanViewController.h */, | |||||
| 95572613276C38CD003BFBAC /* FoodThermometerConnectionViewController.m */, | |||||
| ); | ); | ||||
| path = 05_BloodPressure; | |||||
| path = 19_FoodThermometer; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E3E263C079500476BAE /* 17_BloodSugar */ = { | |||||
| 95572614276C38CD003BFBAC /* 08_Forehead */ = { | |||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 958B4E3F263C079500476BAE /* BloodSugarConnectionViewController.h */, | |||||
| 958B4E41263C079500476BAE /* BloodSugarConnectionViewController.m */, | |||||
| 958B4E42263C079500476BAE /* BloodSugarScanViewController.h */, | |||||
| 958B4E40263C079500476BAE /* BloodSugarScanViewController.m */, | |||||
| 95572615276C38CD003BFBAC /* ForeheadConnectViewController.m */, | |||||
| 95572616276C38CD003BFBAC /* ForeheadScanViewController.h */, | |||||
| 95572617276C38CD003BFBAC /* ForeheadConnectViewController.h */, | |||||
| 95572618276C38CD003BFBAC /* ForeheadScanViewController.m */, | |||||
| ); | ); | ||||
| path = 17_BloodSugar; | |||||
| path = 08_Forehead; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| 95572619276C38CD003BFBAC /* 14_WifiBleToothbrush */ = { | |||||
| isa = PBXGroup; | |||||
| children = ( | |||||
| 9557261A276C38CD003BFBAC /* ToothbrushScanViewController.m */, | |||||
| 9557261B276C38CD003BFBAC /* ToothbrushConnectionViewController.h */, | |||||
| 9557261C276C38CD003BFBAC /* ToothbrushScanViewController.h */, | |||||
| 9557261D276C38CD003BFBAC /* ToothbrushConnectionViewController.m */, | |||||
| ); | |||||
| path = 14_WifiBleToothbrush; | |||||
| sourceTree = "<group>"; | |||||
| }; | |||||
| 9557261E276C38CD003BFBAC /* 07_RemoteControl */ = { | |||||
| isa = PBXGroup; | |||||
| children = ( | |||||
| 9557261F276C38CD003BFBAC /* RemoteControlScanViewController.h */, | |||||
| 95572620276C38CD003BFBAC /* RemoteControlConnectViewController.h */, | |||||
| 95572621276C38CD003BFBAC /* RemoteControlConnectViewController.m */, | |||||
| 95572622276C38CD003BFBAC /* RemoteControlScanViewController.m */, | |||||
| ); | |||||
| path = 07_RemoteControl; | |||||
| sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
| }; | }; | ||||
| 958B4E67263C08E700476BAE /* Tools */ = { | 958B4E67263C08E700476BAE /* Tools */ = { | ||||
| 958B4EA1263C08E800476BAE /* AppDelegate.m */, | 958B4EA1263C08E800476BAE /* AppDelegate.m */, | ||||
| 958B4E9A263C08E800476BAE /* Inherit */, | 958B4E9A263C08E800476BAE /* Inherit */, | ||||
| 958B4E7B263C08E800476BAE /* Masonry */, | 958B4E7B263C08E800476BAE /* Masonry */, | ||||
| 958B4EA3263C08E800476BAE /* SceneDelegate.h */, | |||||
| 958B4E99263C08E800476BAE /* SceneDelegate.m */, | |||||
| 958B4EA2263C08E800476BAE /* ViewController.h */, | 958B4EA2263C08E800476BAE /* ViewController.h */, | ||||
| 958B4E98263C08E800476BAE /* ViewController.m */, | 958B4E98263C08E800476BAE /* ViewController.m */, | ||||
| ); | ); | ||||
| isa = PBXGroup; | isa = PBXGroup; | ||||
| children = ( | children = ( | ||||
| 788D914026A2E5380009489E /* SDK */, | 788D914026A2E5380009489E /* SDK */, | ||||
| 958B4E01263C079500476BAE /* 04_BabyScale */, | |||||
| 958B4E39263C079500476BAE /* 05_BloodPressure */, | |||||
| 958B4E2C263C079500476BAE /* 06_HeightGuage */, | |||||
| 958B4E27263C079500476BAE /* 07_RemoteControl */, | |||||
| 958B4E18263C079500476BAE /* 08_Forehead */, | |||||
| 958B4E13263C079500476BAE /* 09_Thermometer */, | |||||
| 958B4E22263C079500476BAE /* 10_WheelMonitor */, | |||||
| 958B4E34263C079500476BAE /* 11_BodyFatScale */, | |||||
| 958B4E31263C079500476BAE /* 12_BroadcastScale */, | |||||
| 958B4DF5263C079500476BAE /* 13_EightScale */, | |||||
| 958B4E1D263C079500476BAE /* 14_WifiBleToothbrush */, | |||||
| 958B4E0C263C079500476BAE /* 15_WifiBleBodyFatScale */, | |||||
| 958B4E06263C079500476BAE /* 16_Oximeter */, | |||||
| 958B4E3E263C079500476BAE /* 17_BloodSugar */, | |||||
| 955725E0276C38CC003BFBAC /* 04_BabyScale */, | |||||
| 955725BA276C38CC003BFBAC /* 05_BloodPressure */, | |||||
| 955725E5276C38CC003BFBAC /* 06_HeightGuage */, | |||||
| 9557261E276C38CD003BFBAC /* 07_RemoteControl */, | |||||
| 95572614276C38CD003BFBAC /* 08_Forehead */, | |||||
| 955725F9276C38CD003BFBAC /* 09_Thermometer */, | |||||
| 955725CC276C38CC003BFBAC /* 10_WheelMonitor */, | |||||
| 9557260A276C38CD003BFBAC /* 11_BodyFatScale */, | |||||
| 955725C4276C38CC003BFBAC /* 12_BroadcastScale */, | |||||
| 955725FE276C38CD003BFBAC /* 13_EightScale */, | |||||
| 95572619276C38CD003BFBAC /* 14_WifiBleToothbrush */, | |||||
| 955725D4276C38CC003BFBAC /* 15_WifiBleBodyFatScale */, | |||||
| 955725EA276C38CC003BFBAC /* 16_Oximeter */, | |||||
| 955725C7276C38CC003BFBAC /* 17_BloodSugar */, | |||||
| 955725DB276C38CC003BFBAC /* 18_CoffeeScale */, | |||||
| 9557260F276C38CD003BFBAC /* 19_FoodThermometer */, | |||||
| 955725D1276C38CC003BFBAC /* 20_BroadcastNutritionScale */, | |||||
| 955725EF276C38CC003BFBAC /* 21_NutritionScale */, | |||||
| 955725BF276C38CC003BFBAC /* 22_AiFreshNutritionScale */, | |||||
| 955725F4276C38CD003BFBAC /* 23_FaceMask */, | |||||
| 958B4E74263C08E700476BAE /* Others */, | 958B4E74263C08E700476BAE /* Others */, | ||||
| 958B4E67263C08E700476BAE /* Tools */, | 958B4E67263C08E700476BAE /* Tools */, | ||||
| E622E26A243F1CA6003C319D /* Assets.xcassets */, | E622E26A243F1CA6003C319D /* Assets.xcassets */, | ||||
| E622E253243F1CA5003C319D /* Project object */ = { | E622E253243F1CA5003C319D /* Project object */ = { | ||||
| isa = PBXProject; | isa = PBXProject; | ||||
| attributes = { | attributes = { | ||||
| LastUpgradeCheck = 1130; | |||||
| LastUpgradeCheck = 1230; | |||||
| ORGANIZATIONNAME = IOT; | ORGANIZATIONNAME = IOT; | ||||
| TargetAttributes = { | TargetAttributes = { | ||||
| E622E25A243F1CA5003C319D = { | E622E25A243F1CA5003C319D = { | ||||
| isa = PBXSourcesBuildPhase; | isa = PBXSourcesBuildPhase; | ||||
| buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
| files = ( | files = ( | ||||
| 9557264A276C38CD003BFBAC /* ToothbrushConnectionViewController.m in Sources */, | |||||
| 9557263B276C38CD003BFBAC /* FaceMaskScanViewController.m in Sources */, | |||||
| 9557263F276C38CD003BFBAC /* EightScaleConnectionViewController.m in Sources */, | |||||
| 9557262B276C38CD003BFBAC /* WheelMonitorScanViewController.m in Sources */, | |||||
| 95572629276C38CD003BFBAC /* BloodSugarConnectionViewController.m in Sources */, | |||||
| 9557262A276C38CD003BFBAC /* WheelMonitorConnectViewController.m in Sources */, | |||||
| 95572642276C38CD003BFBAC /* ELEightScaleAlgorithmTool.m in Sources */, | |||||
| 95572630276C38CD003BFBAC /* CoffeeScaleScanViewController.m in Sources */, | |||||
| 958B4EAD263C08E800476BAE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, | 958B4EAD263C08E800476BAE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, | ||||
| 9557264B276C38CD003BFBAC /* RemoteControlConnectViewController.m in Sources */, | |||||
| 958B4EAB263C08E800476BAE /* AiLinkSuperViewController.m in Sources */, | 958B4EAB263C08E800476BAE /* AiLinkSuperViewController.m in Sources */, | ||||
| 9557263E276C38CD003BFBAC /* EightScaleScanViewController.m in Sources */, | |||||
| 958B4EB8263C08E800476BAE /* ViewController.m in Sources */, | 958B4EB8263C08E800476BAE /* ViewController.m in Sources */, | ||||
| 958B4E44263C079500476BAE /* EightScaleConnectionViewController.m in Sources */, | |||||
| 958B4EAF263C08E800476BAE /* MASCompositeConstraint.m in Sources */, | 958B4EAF263C08E800476BAE /* MASCompositeConstraint.m in Sources */, | ||||
| 95572626276C38CD003BFBAC /* AiFreshNutritionScaleConnectionViewController.m in Sources */, | |||||
| 9557262F276C38CD003BFBAC /* ELBfsWifiConnectTableViewCell.m in Sources */, | |||||
| 95572623276C38CD003BFBAC /* BloodConnectViewController.m in Sources */, | |||||
| 95572649276C38CD003BFBAC /* ToothbrushScanViewController.m in Sources */, | |||||
| 95572638276C38CD003BFBAC /* NutritionScaleScanViewController.m in Sources */, | |||||
| 958B4EB5263C08E800476BAE /* MASViewConstraint.m in Sources */, | 958B4EB5263C08E800476BAE /* MASViewConstraint.m in Sources */, | ||||
| 958B4E46263C079500476BAE /* ELEightScaleRecordModel.m in Sources */, | |||||
| 95572628276C38CD003BFBAC /* BloodSugarScanViewController.m in Sources */, | |||||
| 9557264C276C38CD003BFBAC /* RemoteControlScanViewController.m in Sources */, | |||||
| 9557262C276C38CD003BFBAC /* BroadcastNutritionScaleViewController.m in Sources */, | |||||
| 95572643276C38CD003BFBAC /* BodyFatScaleScanViewController.m in Sources */, | |||||
| 95572627276C38CD003BFBAC /* BroadcastScaleViewController.m in Sources */, | |||||
| 95572632276C38CD003BFBAC /* BabyScaleViewController.m in Sources */, | |||||
| 9557263C276C38CD003BFBAC /* ThermometerScanViewController.m in Sources */, | |||||
| 95572625276C38CD003BFBAC /* AiFreshNutritionScaleScanViewController.m in Sources */, | |||||
| 95572641276C38CD003BFBAC /* ELEightScaleRecordModel.m in Sources */, | |||||
| 95572634276C38CD003BFBAC /* HeightGuageScanViewController.m in Sources */, | |||||
| 958B4EA7263C08E800476BAE /* UIButton+WZAdd.m in Sources */, | 958B4EA7263C08E800476BAE /* UIButton+WZAdd.m in Sources */, | ||||
| 958B4EA9263C08E800476BAE /* ELSelectView.m in Sources */, | 958B4EA9263C08E800476BAE /* ELSelectView.m in Sources */, | ||||
| 958B4E4F263C079500476BAE /* ELBfsWifiConnectTableViewCell.m in Sources */, | |||||
| 958B4E48263C079500476BAE /* BabyScaleViewController.m in Sources */, | |||||
| 95572635276C38CD003BFBAC /* HeightGuageConnectViewController.m in Sources */, | |||||
| 95572639276C38CD003BFBAC /* NutritionScaleConnectionViewController.m in Sources */, | |||||
| 95572647276C38CD003BFBAC /* ForeheadConnectViewController.m in Sources */, | |||||
| E622E271243F1CA6003C319D /* main.m in Sources */, | E622E271243F1CA6003C319D /* main.m in Sources */, | ||||
| 958B4E5C263C079500476BAE /* BroadcastScaleViewController.m in Sources */, | |||||
| 95572646276C38CD003BFBAC /* FoodThermometerConnectionViewController.m in Sources */, | |||||
| 958B4EB3263C08E800476BAE /* View+MASAdditions.m in Sources */, | 958B4EB3263C08E800476BAE /* View+MASAdditions.m in Sources */, | ||||
| 958B4E60263C079500476BAE /* BloodScanViewController.m in Sources */, | |||||
| 958B4EB1263C08E800476BAE /* MASLayoutConstraint.m in Sources */, | 958B4EB1263C08E800476BAE /* MASLayoutConstraint.m in Sources */, | ||||
| 958B4E59263C079500476BAE /* RemoteControlScanViewController.m in Sources */, | |||||
| 958B4E54263C079500476BAE /* ToothbrushScanViewController.m in Sources */, | |||||
| 958B4E57263C079500476BAE /* WheelMonitorScanViewController.m in Sources */, | |||||
| 958B4E47263C079500476BAE /* ELEightScaleAlgorithmTool.m in Sources */, | |||||
| 958B4E51263C079500476BAE /* ThermometerConnectViewController.m in Sources */, | |||||
| 9557263A276C38CD003BFBAC /* FaceMaskConnectionViewController.m in Sources */, | |||||
| 95572636276C38CD003BFBAC /* OximeterScanViewController.m in Sources */, | |||||
| 958B4EA4263C08E800476BAE /* ELInputAlertView.m in Sources */, | 958B4EA4263C08E800476BAE /* ELInputAlertView.m in Sources */, | ||||
| 958B4E61263C079500476BAE /* BloodSugarScanViewController.m in Sources */, | |||||
| 958B4E5B263C079500476BAE /* HeightGuageConnectViewController.m in Sources */, | |||||
| 958B4EB6263C08E800476BAE /* MASViewAttribute.m in Sources */, | 958B4EB6263C08E800476BAE /* MASViewAttribute.m in Sources */, | ||||
| 958B4E52263C079500476BAE /* ForeheadConnectViewController.m in Sources */, | |||||
| 958B4E55263C079500476BAE /* ToothbrushConnectionViewController.m in Sources */, | |||||
| 958B4E58263C079500476BAE /* RemoteControlConnectViewController.m in Sources */, | |||||
| 958B4E56263C079500476BAE /* WheelMonitorConnectViewController.m in Sources */, | |||||
| 958B4EB9263C08E800476BAE /* SceneDelegate.m in Sources */, | |||||
| 958B4E5E263C079500476BAE /* BodyFatScaleConnectViewController.m in Sources */, | |||||
| 958B4E49263C079500476BAE /* BabyScaleConnectViewController.m in Sources */, | |||||
| 958B4E5A263C079500476BAE /* HeightGuageScanViewController.m in Sources */, | |||||
| 958B4E50263C079500476BAE /* ThermometerScanViewController.m in Sources */, | |||||
| 958B4EBB263C08E800476BAE /* InheritConnectViewController.m in Sources */, | 958B4EBB263C08E800476BAE /* InheritConnectViewController.m in Sources */, | ||||
| 958B4E4B263C079500476BAE /* OximeterConnectionViewController.m in Sources */, | |||||
| 958B4EB4263C08E800476BAE /* MASConstraint.m in Sources */, | 958B4EB4263C08E800476BAE /* MASConstraint.m in Sources */, | ||||
| 958B4EAA263C08E800476BAE /* AilinkSuperConnectViewController.m in Sources */, | 958B4EAA263C08E800476BAE /* AilinkSuperConnectViewController.m in Sources */, | ||||
| 958B4EB0263C08E800476BAE /* MASConstraintMaker.m in Sources */, | 958B4EB0263C08E800476BAE /* MASConstraintMaker.m in Sources */, | ||||
| 958B4E62263C079500476BAE /* BloodSugarConnectionViewController.m in Sources */, | |||||
| 958B4E5D263C079500476BAE /* BodyFatScaleScanViewController.m in Sources */, | |||||
| 958B4EA5263C08E800476BAE /* UILabel+WZAdd.m in Sources */, | 958B4EA5263C08E800476BAE /* UILabel+WZAdd.m in Sources */, | ||||
| 958B4E5F263C079500476BAE /* BloodConnectViewController.m in Sources */, | |||||
| 95572633276C38CD003BFBAC /* BabyScaleConnectViewController.m in Sources */, | |||||
| 95572644276C38CD003BFBAC /* BodyFatScaleConnectViewController.m in Sources */, | |||||
| 958B4EBD263C08E800476BAE /* AppDelegate.m in Sources */, | 958B4EBD263C08E800476BAE /* AppDelegate.m in Sources */, | ||||
| 958B4E43263C079500476BAE /* EightScaleScanViewController.m in Sources */, | |||||
| 958B4E53263C079500476BAE /* ForeheadScanViewController.m in Sources */, | |||||
| 958B4EAE263C08E800476BAE /* ViewController+MASAdditions.m in Sources */, | 958B4EAE263C08E800476BAE /* ViewController+MASAdditions.m in Sources */, | ||||
| 958B4EA8263C08E800476BAE /* CABasicAnimation+ELAnimation.m in Sources */, | 958B4EA8263C08E800476BAE /* CABasicAnimation+ELAnimation.m in Sources */, | ||||
| 958B4E4A263C079500476BAE /* OximeterScanViewController.m in Sources */, | |||||
| 9557263D276C38CD003BFBAC /* ThermometerConnectViewController.m in Sources */, | |||||
| 958B4EBC263C08E800476BAE /* InheritScanViewController.m in Sources */, | 958B4EBC263C08E800476BAE /* InheritScanViewController.m in Sources */, | ||||
| 95572624276C38CD003BFBAC /* BloodScanViewController.m in Sources */, | |||||
| 958B4EB2263C08E800476BAE /* NSArray+MASAdditions.m in Sources */, | 958B4EB2263C08E800476BAE /* NSArray+MASAdditions.m in Sources */, | ||||
| 958B4E4D263C079500476BAE /* ELBfsWifiScanVC.m in Sources */, | |||||
| 9557262D276C38CD003BFBAC /* ELBfsWifiScanVC.m in Sources */, | |||||
| 95572645276C38CD003BFBAC /* FoodThermometerScanViewController.m in Sources */, | |||||
| 958B4EA6263C08E800476BAE /* UIView+Category.m in Sources */, | 958B4EA6263C08E800476BAE /* UIView+Category.m in Sources */, | ||||
| 9557262E276C38CD003BFBAC /* ELBfsWifiConnectVC.m in Sources */, | |||||
| 95572637276C38CD003BFBAC /* OximeterConnectionViewController.m in Sources */, | |||||
| 95572648276C38CD003BFBAC /* ForeheadScanViewController.m in Sources */, | |||||
| 958B4EBA263C08E800476BAE /* SubBleManager.m in Sources */, | 958B4EBA263C08E800476BAE /* SubBleManager.m in Sources */, | ||||
| 958B4E4E263C079500476BAE /* ELBfsWifiConnectVC.m in Sources */, | |||||
| 95572631276C38CD003BFBAC /* CoffeeScaleConnectionViewController.m in Sources */, | |||||
| ); | ); | ||||
| runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
| }; | }; | ||||
| CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||||
| CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||||
| CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||||
| CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | |||||
| CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||||
| CLANG_WARN_STRICT_PROTOTYPES = YES; | CLANG_WARN_STRICT_PROTOTYPES = YES; | ||||
| CLANG_WARN_SUSPICIOUS_MOVE = YES; | CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||||
| GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||||
| GCC_WARN_UNUSED_FUNCTION = YES; | GCC_WARN_UNUSED_FUNCTION = YES; | ||||
| GCC_WARN_UNUSED_VARIABLE = YES; | GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| IPHONEOS_DEPLOYMENT_TARGET = 13.2; | |||||
| IPHONEOS_DEPLOYMENT_TARGET = 12.0; | |||||
| MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; | ||||
| MTL_FAST_MATH = YES; | MTL_FAST_MATH = YES; | ||||
| ONLY_ACTIVE_ARCH = YES; | ONLY_ACTIVE_ARCH = YES; | ||||
| CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||||
| CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||||
| CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||||
| CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; | |||||
| CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||||
| CLANG_WARN_STRICT_PROTOTYPES = YES; | CLANG_WARN_STRICT_PROTOTYPES = YES; | ||||
| CLANG_WARN_SUSPICIOUS_MOVE = YES; | CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||||
| GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||||
| GCC_WARN_UNUSED_FUNCTION = YES; | GCC_WARN_UNUSED_FUNCTION = YES; | ||||
| GCC_WARN_UNUSED_VARIABLE = YES; | GCC_WARN_UNUSED_VARIABLE = YES; | ||||
| IPHONEOS_DEPLOYMENT_TARGET = 13.2; | |||||
| IPHONEOS_DEPLOYMENT_TARGET = 12.0; | |||||
| MTL_ENABLE_DEBUG_INFO = NO; | MTL_ENABLE_DEBUG_INFO = NO; | ||||
| MTL_FAST_MATH = YES; | MTL_FAST_MATH = YES; | ||||
| SDKROOT = iphoneos; | SDKROOT = iphoneos; | ||||
| ); | ); | ||||
| HEADER_SEARCH_PATHS = ""; | HEADER_SEARCH_PATHS = ""; | ||||
| INFOPLIST_FILE = AILinkBleSDKDemo/Info.plist; | INFOPLIST_FILE = AILinkBleSDKDemo/Info.plist; | ||||
| IPHONEOS_DEPLOYMENT_TARGET = 12.0; | |||||
| LD_RUNPATH_SEARCH_PATHS = ( | LD_RUNPATH_SEARCH_PATHS = ( | ||||
| "$(inherited)", | "$(inherited)", | ||||
| "@executable_path/Frameworks", | "@executable_path/Frameworks", | ||||
| "$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | "$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | ||||
| ); | ); | ||||
| MARKETING_VERSION = 1.1.2; | MARKETING_VERSION = 1.1.2; | ||||
| OTHER_LDFLAGS = "-ObjC"; | |||||
| PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | ||||
| PRODUCT_NAME = "$(TARGET_NAME)"; | PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
| TARGETED_DEVICE_FAMILY = "1,2"; | TARGETED_DEVICE_FAMILY = "1,2"; | ||||
| ); | ); | ||||
| HEADER_SEARCH_PATHS = ""; | HEADER_SEARCH_PATHS = ""; | ||||
| INFOPLIST_FILE = AILinkBleSDKDemo/Info.plist; | INFOPLIST_FILE = AILinkBleSDKDemo/Info.plist; | ||||
| IPHONEOS_DEPLOYMENT_TARGET = 12.0; | |||||
| LD_RUNPATH_SEARCH_PATHS = ( | LD_RUNPATH_SEARCH_PATHS = ( | ||||
| "$(inherited)", | "$(inherited)", | ||||
| "@executable_path/Frameworks", | "@executable_path/Frameworks", | ||||
| "$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | "$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | ||||
| ); | ); | ||||
| MARKETING_VERSION = 1.1.2; | MARKETING_VERSION = 1.1.2; | ||||
| OTHER_LDFLAGS = "-ObjC"; | |||||
| PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | ||||
| PRODUCT_NAME = "$(TARGET_NAME)"; | PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
| TARGETED_DEVICE_FAMILY = "1,2"; | TARGETED_DEVICE_FAMILY = "1,2"; |
| #import "BabyScaleConnectViewController.h" | #import "BabyScaleConnectViewController.h" | ||||
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import <AILinkBleSDK/ELBabyScaleBleManager.h> | #import <AILinkBleSDK/ELBabyScaleBleManager.h> | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| @interface BabyScaleConnectViewController ()<ELBluetoothManagerDelegate,BabyScaleBleDelegate> | @interface BabyScaleConnectViewController ()<ELBluetoothManagerDelegate,BabyScaleBleDelegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; |
| #import "BloodConnectViewController.h" | #import "BloodConnectViewController.h" | ||||
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import <AILinkBleSDK/ELBloodBleManager.h> | #import <AILinkBleSDK/ELBloodBleManager.h> | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| @interface BloodConnectViewController ()<ELBluetoothManagerDelegate,ELBloodBleManagerDelegate> | @interface BloodConnectViewController ()<ELBluetoothManagerDelegate,ELBloodBleManagerDelegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; |
| #import "HeightGuageConnectViewController.h" | #import "HeightGuageConnectViewController.h" | ||||
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import <AILinkBleSDK/ELHeightGaugeBleManager.h> | #import <AILinkBleSDK/ELHeightGaugeBleManager.h> | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| @interface HeightGuageConnectViewController ()<ELBluetoothManagerDelegate,ELHeightGaugeBleManagerDelegate> | @interface HeightGuageConnectViewController ()<ELBluetoothManagerDelegate,ELHeightGaugeBleManagerDelegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; |
| #import "RemoteControlConnectViewController.h" | #import "RemoteControlConnectViewController.h" | ||||
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import <AILinkBleSDK/ELRemoteControlBleManager.h> | #import <AILinkBleSDK/ELRemoteControlBleManager.h> | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| @interface RemoteControlConnectViewController ()<ELBluetoothManagerDelegate,ELRemoteControlBleDelegate> | @interface RemoteControlConnectViewController ()<ELBluetoothManagerDelegate,ELRemoteControlBleDelegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; |
| #import "ForeheadConnectViewController.h" | #import "ForeheadConnectViewController.h" | ||||
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import <AILinkBleSDK/ELForeHeadBleManager.h> | #import <AILinkBleSDK/ELForeHeadBleManager.h> | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| @interface ForeheadConnectViewController ()<ELBluetoothManagerDelegate,ELForeheadBleManagerDelegate> | @interface ForeheadConnectViewController ()<ELBluetoothManagerDelegate,ELForeheadBleManagerDelegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; |
| #import "ThermometerConnectViewController.h" | #import "ThermometerConnectViewController.h" | ||||
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import <AILinkBleSDK/ELThermometerBleManager.h> | #import <AILinkBleSDK/ELThermometerBleManager.h> | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| @interface ThermometerConnectViewController ()<ELBluetoothManagerDelegate,ELThermometerBleDelegate> | @interface ThermometerConnectViewController ()<ELBluetoothManagerDelegate,ELThermometerBleDelegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; |
| #import "WheelMonitorConnectViewController.h" | #import "WheelMonitorConnectViewController.h" | ||||
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import <AILinkBleSDK/ELWheelMonitorBleManager.h> | #import <AILinkBleSDK/ELWheelMonitorBleManager.h> | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| @interface WheelMonitorConnectViewController ()<ELBluetoothManagerDelegate,WheelMonitorBleManagerDelegate> | @interface WheelMonitorConnectViewController ()<ELBluetoothManagerDelegate,WheelMonitorBleManagerDelegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; |
| #import <AILinkBleSDK/ELBodyFatScaleBleUserModel.h> | #import <AILinkBleSDK/ELBodyFatScaleBleUserModel.h> | ||||
| #import <AILinkBleSDK/ELBodyFatScaleBleWeightModel.h> | #import <AILinkBleSDK/ELBodyFatScaleBleWeightModel.h> | ||||
| //#import "WiFiSetupViewController.h" | //#import "WiFiSetupViewController.h" | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| #import <AILinkBleSDK/ELBleWifiDetailModel.h> | |||||
| #import <AILinkBleSDK/ELBluetoothManager+BleWifi.h> | |||||
| @interface BodyFatScaleConnectViewController ()<ELBluetoothManagerDelegate,ELBodyFatScaleBleDelegate,ElBleWifiDelegate> | @interface BodyFatScaleConnectViewController ()<ELBluetoothManagerDelegate,ELBodyFatScaleBleDelegate,ElBleWifiDelegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; |
| }else{ | }else{ | ||||
| recordModel.weightControl = weightContrlStr; | recordModel.weightControl = weightContrlStr; | ||||
| } | } | ||||
| recordModel.fatLevel = [NSString stringWithFormat:@"%lu",(unsigned long)[ELBodyIndexAlgorithmModel getfatLevelWithweight:kgWeight andSatndardWeight:bodyResultTwoLegs.htIdealWeightKg]]; | |||||
| recordModel.fatLevel = [NSString stringWithFormat:@"%lu",(unsigned long)[ELBodyIndexAlgorithmModel getfatLevelWithweight:kgWeight andStandardWeight:bodyResultTwoLegs.htIdealWeightKg]]; | |||||
| }else{ | }else{ | ||||
| recordModel.standardWeight = @""; | recordModel.standardWeight = @""; | ||||
| recordModel.weightControl = @""; | recordModel.weightControl = @""; |
| #import <AILinkBleSDK/ELEightScaleBleDataModel.h> | #import <AILinkBleSDK/ELEightScaleBleDataModel.h> | ||||
| #import <AILinkBleSDK/ELEightScaleSDKHeader.h> | #import <AILinkBleSDK/ELEightScaleSDKHeader.h> | ||||
| #import "ELEightScaleAlgorithmTool.h" | #import "ELEightScaleAlgorithmTool.h" | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| @interface EightScaleConnectionViewController ()<ELBluetoothManagerDelegate,EightScaleBleDeletegate> | @interface EightScaleConnectionViewController ()<ELBluetoothManagerDelegate,EightScaleBleDeletegate> | ||||
| @property (nonatomic, strong) UITextView *textView; | @property (nonatomic, strong) UITextView *textView; | ||||
| break; | break; | ||||
| case EightScaleWeightTypeStable: | case EightScaleWeightTypeStable: | ||||
| { | { | ||||
| [self addLog:[NSString stringWithFormat:@"Stable data weight = %d unit = %@ point = %d adc = %ld",weightStruct.weight,AiLinkBleWeightUnitDic[@(weightStruct.unit)],weightStruct.point,weightStruct.weightType]]; | |||||
| [self addLog:[NSString stringWithFormat:@"Unstable data weight = %d unit = %@ point = %d adc = %ld",weightStruct.weight,AiLinkBleWeightUnitDic[@(weightStruct.unit)],weightStruct.point,weightStruct.weightType]]; | |||||
| } | } | ||||
| break; | break; | ||||
| default: | default: |
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import "ELInputAlertView.h" | #import "ELInputAlertView.h" | ||||
| #import "ELSelectView.h" | #import "ELSelectView.h" | ||||
| #import <AILinkBleSDK/ELBluetoothManager+BleWifi.h> | |||||
| static NSString * const authorizeIntervalKey = @"authorizeIntervalKey"; | static NSString * const authorizeIntervalKey = @"authorizeIntervalKey"; | ||||
| - (void)setIsLink:(BOOL)isLink { | - (void)setIsLink:(BOOL)isLink { | ||||
| if (isLink) { | if (isLink) { | ||||
| self.linkLabel.text = @"已连接"; | |||||
| self.linkLabel.text = @"Connected"; | |||||
| } else { | } else { | ||||
| self.linkLabel.text = @""; | self.linkLabel.text = @""; | ||||
| } | } |
| #import <AILinkBleSDK/ELBodyFatScaleBleUserModel.h> | #import <AILinkBleSDK/ELBodyFatScaleBleUserModel.h> | ||||
| #import <AILinkBleSDK/ELBodyFatScaleBleWeightModel.h> | #import <AILinkBleSDK/ELBodyFatScaleBleWeightModel.h> | ||||
| #import "ELBfsWifiConnectTableViewCell.h" | #import "ELBfsWifiConnectTableViewCell.h" | ||||
| #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||||
| #import <AILinkBleSDK/ELBleWifiDetailModel.h> | |||||
| #import <AILinkBleSDK/ELBluetoothManager+BleWifi.h> | |||||
| @interface ELBfsWifiConnectVC ()<ELBluetoothManagerDelegate,ELBodyFatScaleBleDelegate,ElBleWifiDelegate,UITextFieldDelegate,UITableViewDelegate,UITableViewDataSource> | @interface ELBfsWifiConnectVC ()<ELBluetoothManagerDelegate,ELBodyFatScaleBleDelegate,ElBleWifiDelegate,UITextFieldDelegate,UITableViewDelegate,UITableViewDataSource> | ||||
| - (void)viewDidLoad { | - (void)viewDidLoad { | ||||
| [super viewDidLoad]; | [super viewDidLoad]; | ||||
| // self.title = @"Devices"; | // self.title = @"Devices"; | ||||
| [self.view addSubview:self.tableView]; | [self.view addSubview:self.tableView]; |
| #import "OximeterConnectionViewController.h" | #import "OximeterConnectionViewController.h" | ||||
| #import "Masonry.h" | #import "Masonry.h" | ||||
| #import <AILinkBleSDK/ELOximeterBleManager.h> | #import <AILinkBleSDK/ELOximeterBleManager.h> | ||||
| #import <AILinkBleSDK/ELOximeterDeviceModel.h> | |||||
| #import <AILinkBleSDK/ELPeripheralModel.h> | |||||
| #import <AILinkBleSDK/ELOximeterBleModel.h> | #import <AILinkBleSDK/ELOximeterBleModel.h> | ||||
| @interface OximeterConnectionViewController () <ELOximeterBleDelegate, ELBluetoothManagerDelegate> | @interface OximeterConnectionViewController () <ELOximeterBleDelegate, ELBluetoothManagerDelegate> |
| // | |||||
| // CoffeeScaleConnectionViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| @class ELPeripheralModel; | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface CoffeeScaleConnectionViewController : UIViewController | |||||
| @property (nonatomic, strong) ELPeripheralModel *p; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // CoffeeScaleConnectionViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "CoffeeScaleConnectionViewController.h" | |||||
| #import "Masonry.h" | |||||
| #import <AILinkBleSDK/ELCoffeeScaleBleHeader.h> | |||||
| #import <AILinkBleSDK/ELCoffeeScaleBleManager.h> | |||||
| @interface CoffeeScaleConnectionViewController () <CoffeeScaleBleDelegate, ELBluetoothManagerDelegate> | |||||
| @property(nonatomic, strong) UITextView *textView; | |||||
| @property(nonatomic, copy) NSArray<NSNumber *> *units; | |||||
| @property(nonatomic, strong) UIButton *connectButton; | |||||
| @end | |||||
| @implementation CoffeeScaleConnectionViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| self.view.backgroundColor = [UIColor whiteColor]; | |||||
| [ELCoffeeScaleBleManager shareManager].coffeeScaleDelegate = self; | |||||
| [ELCoffeeScaleBleManager shareManager].delegate = self; | |||||
| [[ELCoffeeScaleBleManager shareManager] connectPeripheral:self.p]; | |||||
| [self setupUIView]; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELCoffeeScaleBleManager shareManager] disconnectPeripheral]; | |||||
| } | |||||
| - (void)addLog:(NSString *)log { | |||||
| self.textView.text = [NSString stringWithFormat:@"%@\n\n%@", log, self.textView.text]; | |||||
| } | |||||
| - (void)connectDevice { | |||||
| [[ELCoffeeScaleBleManager shareManager] startScan]; | |||||
| } | |||||
| - (void)setupUIView { | |||||
| self.connectButton = [[UIButton alloc] initWithFrame:CGRectMake((self.view.frame.size.width - 100) / 2, 88, 100, 40)]; | |||||
| [self.connectButton setTitle:@"点击重连" forState:UIControlStateNormal]; | |||||
| [self.connectButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; | |||||
| [self.view addSubview:self.connectButton]; | |||||
| [self.connectButton addTarget:self action:@selector(connectDevice) forControlEvents:UIControlEventTouchUpInside]; | |||||
| self.connectButton.hidden = YES; | |||||
| self.textView = [[UITextView alloc] init]; | |||||
| self.textView.backgroundColor = [UIColor blackColor]; | |||||
| self.textView.text = @"Log"; | |||||
| self.textView.textColor = [UIColor redColor]; | |||||
| [self.view addSubview:self.textView]; | |||||
| [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.left.mas_equalTo(10); | |||||
| make.right.mas_equalTo(-10); | |||||
| make.bottom.offset(-44); | |||||
| // make.height.mas_equalTo(350); | |||||
| make.top.offset(150); | |||||
| }]; | |||||
| } | |||||
| #pragma mark - ble Delegate | |||||
| /// 蓝牙连接状态 | |||||
| /// @param state 连接状态 | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state { | |||||
| switch (state) { | |||||
| case ELBluetoothStateUnavailable: { | |||||
| self.title = @"Please open the bluetooth"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateAvailable: { | |||||
| self.title = @"Bluetooth is open"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateScaning: { | |||||
| self.title = @"Scanning"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateConnectFail: { | |||||
| self.title = @"Connect fail"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidDisconnect: { | |||||
| self.title = @"Disconnected"; | |||||
| self.connectButton.hidden = NO; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidValidationPass: { | |||||
| self.connectButton.hidden = YES; | |||||
| self.title = @"Connected"; | |||||
| //连接成功,获取单位 | |||||
| [[ELCoffeeScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeReadDeviceSupportUnit]; | |||||
| //获取版本号 | |||||
| [[ELCoffeeScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeGetBMVersion]; | |||||
| //同步时间到设备 | |||||
| [[ELCoffeeScaleBleManager shareManager] syncMCUNowDate]; | |||||
| //切换到app 冲煮 模式 | |||||
| [[ELCoffeeScaleBleManager shareManager] sendSwithAppMode:YES subMode:0]; | |||||
| [self addLog:@"切换到app 冲煮 模式"]; | |||||
| //切换到app 称重 模式 | |||||
| // [[ELCoffeeScaleBleManager shareManager] sendSwithAppMode:YES subMode:1]; | |||||
| // [self addLog:@"切换到app 称重 模式"]; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateFailedValidation: { | |||||
| self.title = @"Illegal equipment"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateWillConnect: | |||||
| self.title = @"Connecting"; | |||||
| break; | |||||
| default: | |||||
| break; | |||||
| } | |||||
| } | |||||
| /// 附近的设备 | |||||
| /// @param devices 设备列表 | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| for (ELPeripheralModel *model in devices) { | |||||
| if ([model.macAddress isEqualToString:self.p.macAddress]) { | |||||
| [[ELCoffeeScaleBleManager shareManager] connectPeripheral:model]; | |||||
| } | |||||
| } | |||||
| } | |||||
| //获得支持单位列表 | |||||
| - (void)supportWeightUnits:(NSArray *_Nullable)weightArray { | |||||
| NSLog(@"weightArray: %@", weightArray); | |||||
| [self addLog:@"获得支持单位列表"]; | |||||
| } | |||||
| //正在连接中倒计时 | |||||
| - (void)deviceBleCountDown:(NSInteger)count { | |||||
| NSLog(@"count: %@", @(count)); | |||||
| [self addLog:@"正在连接中倒计时"]; | |||||
| } | |||||
| /** 返回咖啡秤称量的数据模型 */ | |||||
| - (void)coffeeScaleBleReceiveStatusDataModel:(ELCoffeeScaleBleDataModel *_Nonnull)model { | |||||
| NSLog(@"model.weightString: %@", model.weightString); | |||||
| [self addLog:[@"当前重量: " stringByAppendingFormat:@"%@", model.weightString]]; | |||||
| } | |||||
| /** 返回设备电量 */ | |||||
| - (void)coffeeScaleBleRechargeState:(CoffeeChargingType)type powerNumber:(NSInteger)power { | |||||
| NSLog(@"coffeeScaleBleRechargeState() type: %@ power: %@", @(type), @(power)); | |||||
| [self addLog:[@"设备电量: " stringByAppendingFormat:@"type: %@ power: %@", @(type), @(power)]]; | |||||
| } | |||||
| // 计时功能控制 | |||||
| - (void)coffeeScaleBleReceiveTimerControl:(BOOL)countdown duration:(NSUInteger)duration control:(ELCoffeeScaleTimerControl)control { | |||||
| NSLog(@"coffeeScaleBleReceiveTimerControl() countdown: %@ duration: %@ control: %@", @(countdown), @(duration), @(control)); | |||||
| [self addLog:[@"计时功能: " stringByAppendingFormat:@"countdown: %@ duration: %@ control: %@", @(countdown), @(duration), @(control)]]; | |||||
| } | |||||
| @end |
| // | |||||
| // CoffeeScaleScanViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface CoffeeScaleScanViewController : UIViewController | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // CoffeeScaleScanViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "CoffeeScaleScanViewController.h" | |||||
| #import <AILinkBleSDK/ELCoffeeScaleBleManager.h> | |||||
| #import "Masonry.h" | |||||
| #import "CoffeeScaleConnectionViewController.h" | |||||
| @interface CoffeeScaleScanViewController () <UITableViewDelegate, UITableViewDataSource, CoffeeScaleBleDelegate> | |||||
| @property(nonatomic, strong) UITableView *tableView; | |||||
| @property(nonatomic, strong) NSArray<ELPeripheralModel *> *devices; | |||||
| @end | |||||
| @implementation CoffeeScaleScanViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| [self.view addSubview:self.tableView]; | |||||
| [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.top.left.right.bottom.mas_equalTo(0); | |||||
| }]; | |||||
| } | |||||
| - (void)viewWillAppear:(BOOL)animated { | |||||
| [[ELCoffeeScaleBleManager shareManager] startScan]; | |||||
| [ELCoffeeScaleBleManager shareManager].coffeeScaleDelegate = self; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELCoffeeScaleBleManager shareManager] stopScan]; | |||||
| } | |||||
| #pragma mark - CoffeeScaleBleDelegate | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state { | |||||
| NSLog(@"deviceBleReceiveState = %ld", state); | |||||
| } | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| self.devices = devices; | |||||
| [self.tableView reloadData]; | |||||
| } | |||||
| - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | |||||
| return self.devices.count; | |||||
| } | |||||
| - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| return 60; | |||||
| } | |||||
| - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| static NSString *cellId = @"cellid"; | |||||
| UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; | |||||
| if (!cell) { | |||||
| cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellId]; | |||||
| } | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| cell.textLabel.text = [NSString stringWithFormat:@"Name:%@---Mac:%@\nCID:%ld---VID:%ld---PID:%ld", p.peripheral.name, p.macAddress, p.deviceType, p.vendorID, p.productID]; | |||||
| cell.textLabel.numberOfLines = 2; | |||||
| cell.textLabel.textColor = [UIColor blackColor]; | |||||
| return cell; | |||||
| } | |||||
| - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| CoffeeScaleConnectionViewController *vc = [[CoffeeScaleConnectionViewController alloc] init]; | |||||
| vc.p = p; | |||||
| [self.navigationController pushViewController:vc animated:YES]; | |||||
| } | |||||
| - (UITableView *)tableView { | |||||
| if (_tableView == nil) { | |||||
| _tableView = [[UITableView alloc] init]; | |||||
| _tableView.delegate = self; | |||||
| _tableView.dataSource = self; | |||||
| } | |||||
| return _tableView; | |||||
| } | |||||
| @end |
| // | |||||
| // FoodThermometerConnectionViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| @class ELPeripheralModel; | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface FoodThermometerConnectionViewController : UIViewController | |||||
| @property (nonatomic, strong) ELPeripheralModel *p; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // FoodThermometerConnectionViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "FoodThermometerConnectionViewController.h" | |||||
| #import "Masonry.h" | |||||
| #import <AILinkBleSDK/ELFoodThermometerHead.h> | |||||
| #import <AILinkBleSDK/ELFoodThermometerBleManager.h> | |||||
| @interface FoodThermometerConnectionViewController () <FoodThermometerBleDelegate, ELBluetoothManagerDelegate> | |||||
| @property(nonatomic, strong) UITextView *textView; | |||||
| @property(nonatomic, copy) NSArray<NSNumber *> *units; | |||||
| @property(nonatomic, strong) UIButton *connectButton; | |||||
| @end | |||||
| @implementation FoodThermometerConnectionViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| self.view.backgroundColor = [UIColor whiteColor]; | |||||
| [ELFoodThermometerBleManager shareManager].foodThermometerBleDelegate = self; | |||||
| [ELFoodThermometerBleManager shareManager].delegate = self; | |||||
| [[ELFoodThermometerBleManager shareManager] connectPeripheral:self.p]; | |||||
| [self setupUIView]; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELFoodThermometerBleManager shareManager] disconnectPeripheral]; | |||||
| } | |||||
| - (void)addLog:(NSString *)log { | |||||
| self.textView.text = [NSString stringWithFormat:@"%@\n\n%@", log, self.textView.text]; | |||||
| } | |||||
| - (void)connectDevice { | |||||
| [[ELFoodThermometerBleManager shareManager] startScan]; | |||||
| } | |||||
| - (void)setupUIView { | |||||
| self.connectButton = [[UIButton alloc] initWithFrame:CGRectMake((self.view.frame.size.width - 100) / 2, 88, 100, 40)]; | |||||
| [self.connectButton setTitle:@"点击重连" forState:UIControlStateNormal]; | |||||
| [self.connectButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; | |||||
| [self.view addSubview:self.connectButton]; | |||||
| [self.connectButton addTarget:self action:@selector(connectDevice) forControlEvents:UIControlEventTouchUpInside]; | |||||
| self.connectButton.hidden = YES; | |||||
| self.textView = [[UITextView alloc] init]; | |||||
| self.textView.backgroundColor = [UIColor blackColor]; | |||||
| self.textView.text = @"Log"; | |||||
| self.textView.textColor = [UIColor redColor]; | |||||
| [self.view addSubview:self.textView]; | |||||
| [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.left.mas_equalTo(10); | |||||
| make.right.mas_equalTo(-10); | |||||
| make.bottom.offset(-44); | |||||
| // make.height.mas_equalTo(350); | |||||
| make.top.offset(150); | |||||
| }]; | |||||
| } | |||||
| #pragma mark - ble Delegate | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state { | |||||
| switch (state) { | |||||
| case ELBluetoothStateUnavailable: { | |||||
| self.title = @"Please open the bluetooth"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateAvailable: { | |||||
| self.title = @"Bluetooth is open"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateScaning: { | |||||
| self.title = @"Scaning"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateConnectFail: { | |||||
| self.title = @"Connect fail"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidDisconnect: { | |||||
| self.title = @"Disconnected"; | |||||
| self.connectButton.hidden = NO; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidValidationPass: { | |||||
| self.connectButton.hidden = YES; | |||||
| self.title = @"Connected"; | |||||
| //连接成功,获取单位 | |||||
| [[ELFoodThermometerBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeReadDeviceSupportUnit]; | |||||
| //获取版本号 | |||||
| [[ELFoodThermometerBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeGetBMVersion]; | |||||
| //同步时间到设备 | |||||
| [[ELFoodThermometerBleManager shareManager] syncMCUNowDate]; | |||||
| //查询设备状态 | |||||
| [[ELFoodThermometerBleManager shareManager] checkDeviceInfo]; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateFailedValidation: { | |||||
| self.title = @"Illegal equipment"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateWillConnect: | |||||
| self.title = @"Connecting"; | |||||
| break; | |||||
| default: | |||||
| break; | |||||
| } | |||||
| } | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| for (ELPeripheralModel *model in devices) { | |||||
| if ([model.macAddress isEqualToString:self.p.macAddress]) { | |||||
| [[ELFoodThermometerBleManager shareManager] connectPeripheral:model]; | |||||
| } | |||||
| } | |||||
| } | |||||
| //设备返回基础信息 | |||||
| - (void)foodThermometerBasicInfo:(BasicInfo)basicInfo { | |||||
| NSLog(@"foodThermometerBasicInfo() basicInfo.batteryLevel:%@ basicInfo.charging:%@", @(basicInfo.batteryLevel), @(basicInfo.charging)); | |||||
| [self addLog:[@"设备返回基础信息" stringByAppendingFormat:@"basicInfo.batteryLevel:%@ basicInfo.charging:%@", @(basicInfo.batteryLevel), @(basicInfo.charging)]]; | |||||
| } | |||||
| //设备返回数据状态 | |||||
| - (void)foodThermometerProbeStatus:(ProbeStatus)probeStatus { | |||||
| NSLog(@"foodThermometerProbeStatus() probeStatus.index:%@ probeStatus.internalTemperature:%@", @(probeStatus.index), @(probeStatus.internalRawTemperature)); | |||||
| [self addLog:[@"设备返回数据状态" stringByAppendingFormat:@"probeStatus.index:%@ probeStatus.internalTemperature:%@", @(probeStatus.index), @(probeStatus.internalRawTemperature)]]; | |||||
| } | |||||
| //设备设置温度 | |||||
| - (void)foodThermometerSwitchTemperatureUnit:(ELDeviceTemperatureUnit)unit { | |||||
| NSLog(@"foodThermometerSwitchTemperatureUnit() unit: %@", @(unit)); | |||||
| [self addLog:[@"设备设置温度" stringByAppendingFormat:@"unit: %@", @(unit)]]; | |||||
| } | |||||
| @end |
| // | |||||
| // FoodThermometerScanViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface FoodThermometerScanViewController : UIViewController | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // FoodThermometerScanViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "FoodThermometerScanViewController.h" | |||||
| #import <AILinkBleSDK/ELFoodThermometerBleManager.h> | |||||
| #import "Masonry.h" | |||||
| #import "FoodThermometerConnectionViewController.h" | |||||
| @interface FoodThermometerScanViewController () <UITableViewDelegate, UITableViewDataSource, FoodThermometerBleDelegate> | |||||
| @property(nonatomic, strong) UITableView *tableView; | |||||
| @property(nonatomic, strong) NSArray<ELPeripheralModel *> *devices; | |||||
| @end | |||||
| @implementation FoodThermometerScanViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| [self.view addSubview:self.tableView]; | |||||
| [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.top.left.right.bottom.mas_equalTo(0); | |||||
| }]; | |||||
| } | |||||
| - (void)viewWillAppear:(BOOL)animated { | |||||
| [[ELFoodThermometerBleManager shareManager] startScan]; | |||||
| [ELFoodThermometerBleManager shareManager].foodThermometerBleDelegate = self; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELFoodThermometerBleManager shareManager] stopScan]; | |||||
| } | |||||
| #pragma mark - BloodSugarBleDelegate | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state { | |||||
| NSLog(@"deviceBleReceiveState = %ld", state); | |||||
| } | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| self.devices = devices; | |||||
| [self.tableView reloadData]; | |||||
| } | |||||
| - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | |||||
| return self.devices.count; | |||||
| } | |||||
| - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| return 60; | |||||
| } | |||||
| - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| static NSString *cellId = @"cellid"; | |||||
| UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; | |||||
| if (!cell) { | |||||
| cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellId]; | |||||
| } | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| cell.textLabel.text = [NSString stringWithFormat:@"Name:%@---Mac:%@\nCID:%ld---VID:%ld---PID:%ld", p.deviceName, p.macAddress, p.deviceType, p.vendorID, p.productID]; | |||||
| cell.textLabel.numberOfLines = 2; | |||||
| cell.textLabel.textColor = [UIColor blackColor]; | |||||
| return cell; | |||||
| } | |||||
| - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| FoodThermometerConnectionViewController *vc = [[FoodThermometerConnectionViewController alloc] init]; | |||||
| vc.p = p; | |||||
| [self.navigationController pushViewController:vc animated:YES]; | |||||
| } | |||||
| - (UITableView *)tableView { | |||||
| if (_tableView == nil) { | |||||
| _tableView = [[UITableView alloc] init]; | |||||
| _tableView.delegate = self; | |||||
| _tableView.dataSource = self; | |||||
| } | |||||
| return _tableView; | |||||
| } | |||||
| @end |
| // | |||||
| // BroadcastNutritionScaleViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/14. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface BroadcastNutritionScaleViewController : UIViewController | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // BroadcastNutritionScaleViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/14. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "BroadcastNutritionScaleViewController.h" | |||||
| #import <AILinkBleSDK/ELBroadcastNutritionFoodScaleBleManager.h> | |||||
| #import <AILinkBleSDK/ELBroadcastNutritionFoodScaleDataModel.h> | |||||
| #import "Masonry.h" | |||||
| @interface BroadcastNutritionScaleViewController () <BroadcastNutritionFoodScaleBleDelegate> | |||||
| @property(nonatomic, strong) UITextView *textView; | |||||
| @property(nonatomic, strong) UILabel *statusLbl; | |||||
| @end | |||||
| @implementation BroadcastNutritionScaleViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| self.view.backgroundColor = [UIColor whiteColor]; | |||||
| [ELBroadcastNutritionFoodScaleBleManager shareManager].broadcastNutritionFoodScaleBleDelegate = self; | |||||
| [[ELBroadcastNutritionFoodScaleBleManager shareManager] startScan]; | |||||
| [self setupUI]; | |||||
| } | |||||
| - (void)broadcastNutritionFoodScaleBleDataModel:(ELBroadcastNutritionFoodScaleDataModel *_Nonnull)model { | |||||
| static Byte serialNumber = 0xFF; | |||||
| if (serialNumber == model.serialNumber) { | |||||
| return; | |||||
| } | |||||
| serialNumber = model.serialNumber; | |||||
| NSString *testData = [NSString stringWithFormat:@"MAC:%@ cid:%d vid:%d pid:%d weight:%@ weightPoint:%@ weightUnit:%@ sn:%d", | |||||
| model.mac, model.cid - 65535, model.vid, model.pid, @(model.weight), @(model.weightPoint), @(model.weightUnit), model.serialNumber]; | |||||
| [self addLog:testData]; | |||||
| } | |||||
| - (void)broadcastNutritionFoodScaleBleUpdateState:(ELBluetoothState)state { | |||||
| if (state == ELBluetoothStateAvailable) { | |||||
| self.statusLbl.text = @"Connecting"; | |||||
| } else if (state == ELBluetoothStateUnavailable) { | |||||
| self.statusLbl.text = @"Bluetooth is disconnected"; | |||||
| } | |||||
| } | |||||
| - (void)addLog:(NSString *)log { | |||||
| self.textView.text = [NSString stringWithFormat:@"%@\n%@", log, self.textView.text]; | |||||
| } | |||||
| - (void)setupUI { | |||||
| self.textView = [[UITextView alloc] init]; | |||||
| self.textView.backgroundColor = [UIColor blackColor]; | |||||
| self.textView.text = @"Log"; | |||||
| self.textView.textColor = [UIColor redColor]; | |||||
| [self.view addSubview:self.textView]; | |||||
| [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.left.mas_equalTo(10); | |||||
| make.right.bottom.mas_equalTo(-10); | |||||
| make.height.equalTo(self.view).multipliedBy(0.7); | |||||
| }]; | |||||
| // | |||||
| self.statusLbl = [[UILabel alloc] init]; | |||||
| self.statusLbl.text = @"Connecting"; | |||||
| self.statusLbl.adjustsFontSizeToFitWidth = YES; | |||||
| self.statusLbl.font = [UIFont boldSystemFontOfSize:30]; | |||||
| self.statusLbl.textColor = [UIColor redColor]; | |||||
| self.statusLbl.textAlignment = NSTextAlignmentCenter; | |||||
| [self.view addSubview:self.statusLbl]; | |||||
| [self.statusLbl mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.height.mas_equalTo(40); | |||||
| make.left.right.equalTo(self.textView); | |||||
| make.bottom.equalTo(self.textView.mas_top).mas_offset(-20); | |||||
| }]; | |||||
| } | |||||
| - (void)dealloc { | |||||
| [[ELBroadcastNutritionFoodScaleBleManager shareManager] stopScan]; | |||||
| } | |||||
| @end |
| // | |||||
| // NutritionScaleConnectionViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| @class ELPeripheralModel; | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface NutritionScaleConnectionViewController : UIViewController | |||||
| @property (nonatomic, strong) ELPeripheralModel *p; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // NutritionScaleConnectionViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "NutritionScaleConnectionViewController.h" | |||||
| #import "Masonry.h" | |||||
| #import <AILinkBleSDK/ELNutritionScaleBleHeader.h> | |||||
| #import <AILinkBleSDK/ELNutritionScaleBleManager.h> | |||||
| @interface NutritionScaleConnectionViewController () <NutritionScaleBleDelegate, ELBluetoothManagerDelegate> | |||||
| @property(nonatomic, strong) UITextView *textView; | |||||
| @property(nonatomic, copy) NSArray<NSNumber *> *units; | |||||
| @property(nonatomic, strong) UIButton *connectButton; | |||||
| @end | |||||
| @implementation NutritionScaleConnectionViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| self.view.backgroundColor = [UIColor whiteColor]; | |||||
| [ELNutritionScaleBleManager shareManager].nutritionScaleBleDelegate = self; | |||||
| [ELNutritionScaleBleManager shareManager].delegate = self; | |||||
| [[ELNutritionScaleBleManager shareManager] connectPeripheral:self.p]; | |||||
| [self setupUIView]; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELNutritionScaleBleManager shareManager] disconnectPeripheral]; | |||||
| } | |||||
| - (void)addLog:(NSString *)log { | |||||
| self.textView.text = [NSString stringWithFormat:@"%@\n\n%@", log, self.textView.text]; | |||||
| } | |||||
| - (void)connectDevice { | |||||
| [[ELNutritionScaleBleManager shareManager] startScan]; | |||||
| } | |||||
| - (void)setupUIView { | |||||
| self.connectButton = [[UIButton alloc] initWithFrame:CGRectMake((self.view.frame.size.width - 100) / 2, 88, 100, 40)]; | |||||
| [self.connectButton setTitle:@"点击重连" forState:UIControlStateNormal]; | |||||
| [self.connectButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; | |||||
| [self.view addSubview:self.connectButton]; | |||||
| [self.connectButton addTarget:self action:@selector(connectDevice) forControlEvents:UIControlEventTouchUpInside]; | |||||
| self.connectButton.hidden = YES; | |||||
| self.textView = [[UITextView alloc] init]; | |||||
| self.textView.backgroundColor = [UIColor blackColor]; | |||||
| self.textView.text = @"Log"; | |||||
| self.textView.textColor = [UIColor redColor]; | |||||
| [self.view addSubview:self.textView]; | |||||
| [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.left.mas_equalTo(10); | |||||
| make.right.mas_equalTo(-10); | |||||
| make.bottom.offset(-44); | |||||
| // make.height.mas_equalTo(350); | |||||
| make.top.offset(150); | |||||
| }]; | |||||
| } | |||||
| #pragma mark - ble Delegate | |||||
| /// 蓝牙连接状态 | |||||
| /// @param state 连接状态 | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state { | |||||
| switch (state) { | |||||
| case ELBluetoothStateUnavailable: { | |||||
| self.title = @"Please open the bluetooth"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateAvailable: { | |||||
| self.title = @"Bluetooth is open"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateScaning: { | |||||
| self.title = @"Scanning"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateConnectFail: { | |||||
| self.title = @"Connect fail"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidDisconnect: { | |||||
| self.title = @"Disconnected"; | |||||
| self.connectButton.hidden = NO; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidValidationPass: { | |||||
| self.connectButton.hidden = YES; | |||||
| self.title = @"Connected"; | |||||
| //连接成功,获取单位 | |||||
| [[ELNutritionScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeReadDeviceSupportUnit]; | |||||
| //获取版本号 | |||||
| [[ELNutritionScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeGetBMVersion]; | |||||
| //同步时间到设备 | |||||
| [[ELNutritionScaleBleManager shareManager] syncMCUNowDate]; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateFailedValidation: { | |||||
| self.title = @"Illegal equipment"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateWillConnect: | |||||
| self.title = @"Connecting"; | |||||
| break; | |||||
| default: | |||||
| break; | |||||
| } | |||||
| } | |||||
| /// 附近的设备 | |||||
| /// @param devices 设备列表 | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| for (ELPeripheralModel *model in devices) { | |||||
| if ([model.macAddress isEqualToString:self.p.macAddress]) { | |||||
| [[ELNutritionScaleBleManager shareManager] connectPeripheral:model]; | |||||
| } | |||||
| } | |||||
| } | |||||
| //获得支持单位列表 | |||||
| - (void)supportWeightUnits:(NSArray *_Nullable)weightArray { | |||||
| NSLog(@"weightArray: %@", weightArray); | |||||
| [self addLog:@"获得支持单位列表"]; | |||||
| } | |||||
| //称重数据 | |||||
| - (void)nutritionScaleBleDataModel:(ELNutritionScaleDataModel *_Nonnull)model { | |||||
| NSLog(@"%s model:%@", __FUNCTION__, model); | |||||
| NSString *testData = [NSString stringWithFormat:@"weight:%@ weightPoint:%@ weightUnit:%@ sn:%d", @(model.weight), @(model.weightPoint), @(model.weightUnit), model.serialNumber]; | |||||
| [self addLog:testData]; | |||||
| } | |||||
| //超载 | |||||
| - (void)overload:(BOOL)status { | |||||
| [self addLog:[NSString stringWithFormat:@"超载: %d", status]]; | |||||
| } | |||||
| //低电 | |||||
| - (void)lowPower:(BOOL)status { | |||||
| [self addLog:[NSString stringWithFormat:@"低电: %d", status]]; | |||||
| } | |||||
| @end |
| // | |||||
| // NutritionScaleScanViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface NutritionScaleScanViewController : UIViewController | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // NutritionScaleScanViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "NutritionScaleScanViewController.h" | |||||
| #import <AILinkBleSDK/ELNutritionScaleBleManager.h> | |||||
| #import "Masonry.h" | |||||
| #import "NutritionScaleConnectionViewController.h" | |||||
| @interface NutritionScaleScanViewController () <UITableViewDelegate, UITableViewDataSource, NutritionScaleBleDelegate> | |||||
| @property(nonatomic, strong) UITableView *tableView; | |||||
| @property(nonatomic, strong) NSArray<ELPeripheralModel *> *devices; | |||||
| @end | |||||
| @implementation NutritionScaleScanViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| [self.view addSubview:self.tableView]; | |||||
| [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.top.left.right.bottom.mas_equalTo(0); | |||||
| }]; | |||||
| } | |||||
| - (void)viewWillAppear:(BOOL)animated { | |||||
| [[ELNutritionScaleBleManager shareManager] startScan]; | |||||
| [ELNutritionScaleBleManager shareManager].nutritionScaleBleDelegate = self; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELNutritionScaleBleManager shareManager] stopScan]; | |||||
| } | |||||
| #pragma mark - BloodSugarBleDelegate | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state { | |||||
| NSLog(@"deviceBleReceiveState = %ld", state); | |||||
| } | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| self.devices = devices; | |||||
| [self.tableView reloadData]; | |||||
| } | |||||
| - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | |||||
| return self.devices.count; | |||||
| } | |||||
| - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| return 60; | |||||
| } | |||||
| - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| static NSString *cellId = @"cellid"; | |||||
| UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; | |||||
| if (!cell) { | |||||
| cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellId]; | |||||
| } | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| cell.textLabel.text = [NSString stringWithFormat:@"Name:%@---Mac:%@\nCID:%ld---VID:%ld---PID:%ld", p.deviceName, p.macAddress, p.deviceType, p.vendorID, p.productID]; | |||||
| cell.textLabel.numberOfLines = 2; | |||||
| cell.textLabel.textColor = [UIColor blackColor]; | |||||
| return cell; | |||||
| } | |||||
| - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| NutritionScaleConnectionViewController *vc = [[NutritionScaleConnectionViewController alloc] init]; | |||||
| vc.p = p; | |||||
| [self.navigationController pushViewController:vc animated:YES]; | |||||
| } | |||||
| - (UITableView *)tableView { | |||||
| if (_tableView == nil) { | |||||
| _tableView = [[UITableView alloc] init]; | |||||
| _tableView.delegate = self; | |||||
| _tableView.dataSource = self; | |||||
| } | |||||
| return _tableView; | |||||
| } | |||||
| @end |
| // | |||||
| // AiFreshNutritionScaleConnectionViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| @class ELPeripheralModel; | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface AiFreshNutritionScaleConnectionViewController : UIViewController | |||||
| @property (nonatomic, strong) ELPeripheralModel *p; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // AiFreshNutritionScaleConnectionViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "AiFreshNutritionScaleConnectionViewController.h" | |||||
| #import "Masonry.h" | |||||
| #import <AILinkBleSDK/ELAiFreshNutritionScaleBleHeader.h> | |||||
| #import <AILinkBleSDK/ELAiFreshNutritionScaleBleManager.h> | |||||
| @interface AiFreshNutritionScaleConnectionViewController () <AiFreshNutritionScaleBleDelegate, ELBluetoothManagerDelegate> | |||||
| @property(nonatomic, strong) UITextView *textView; | |||||
| @property(nonatomic, copy) NSArray<NSNumber *> *units; | |||||
| @property(nonatomic, strong) UIButton *connectButton; | |||||
| @end | |||||
| @implementation AiFreshNutritionScaleConnectionViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| self.view.backgroundColor = [UIColor whiteColor]; | |||||
| [ELAiFreshNutritionScaleBleManager shareManager].nutritionScaleBleDelegate = self; | |||||
| [ELAiFreshNutritionScaleBleManager shareManager].delegate = self; | |||||
| [[ELAiFreshNutritionScaleBleManager shareManager] connectPeripheral:self.p]; | |||||
| [self setupUIView]; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELAiFreshNutritionScaleBleManager shareManager] disconnectPeripheral]; | |||||
| } | |||||
| - (void)addLog:(NSString *)log { | |||||
| self.textView.text = [NSString stringWithFormat:@"%@\n\n%@", log, self.textView.text]; | |||||
| } | |||||
| - (void)connectDevice { | |||||
| [[ELAiFreshNutritionScaleBleManager shareManager] startScan]; | |||||
| } | |||||
| - (void)setupUIView { | |||||
| self.connectButton = [[UIButton alloc] initWithFrame:CGRectMake((self.view.frame.size.width - 100) / 2, 88, 100, 40)]; | |||||
| [self.connectButton setTitle:@"点击重连" forState:UIControlStateNormal]; | |||||
| [self.connectButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; | |||||
| [self.view addSubview:self.connectButton]; | |||||
| [self.connectButton addTarget:self action:@selector(connectDevice) forControlEvents:UIControlEventTouchUpInside]; | |||||
| self.connectButton.hidden = YES; | |||||
| self.textView = [[UITextView alloc] init]; | |||||
| self.textView.backgroundColor = [UIColor blackColor]; | |||||
| self.textView.text = @"Log"; | |||||
| self.textView.textColor = [UIColor redColor]; | |||||
| [self.view addSubview:self.textView]; | |||||
| [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.left.mas_equalTo(10); | |||||
| make.right.mas_equalTo(-10); | |||||
| make.bottom.offset(-44); | |||||
| // make.height.mas_equalTo(350); | |||||
| make.top.offset(150); | |||||
| }]; | |||||
| } | |||||
| #pragma mark - ble Delegate | |||||
| /// 蓝牙连接状态 | |||||
| /// @param state 连接状态 | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state { | |||||
| switch (state) { | |||||
| case ELBluetoothStateUnavailable: { | |||||
| self.title = @"Please open the bluetooth"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateAvailable: { | |||||
| self.title = @"Bluetooth is open"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateScaning: { | |||||
| self.title = @"Scanning"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateConnectFail: { | |||||
| self.title = @"Connect fail"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidDisconnect: { | |||||
| self.title = @"Disconnected"; | |||||
| self.connectButton.hidden = NO; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidValidationPass: { | |||||
| self.connectButton.hidden = YES; | |||||
| self.title = @"Connected"; | |||||
| //连接成功,获取单位 | |||||
| [[ELAiFreshNutritionScaleBleManager shareManager] sendRequestUnitSupported]; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateFailedValidation: { | |||||
| self.title = @"Illegal equipment"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateWillConnect: | |||||
| self.title = @"Connecting"; | |||||
| break; | |||||
| default: | |||||
| break; | |||||
| } | |||||
| } | |||||
| /// 附近的设备 | |||||
| /// @param devices 设备列表 | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| for (ELPeripheralModel *model in devices) { | |||||
| if ([model.macAddress isEqualToString:self.p.macAddress]) { | |||||
| [[ELAiFreshNutritionScaleBleManager shareManager] connectPeripheral:model]; | |||||
| } | |||||
| } | |||||
| } | |||||
| //获得支持单位列表 | |||||
| - (void)supportWeightUnits:(NSArray *_Nullable)weightArray { | |||||
| NSLog(@"weightArray: %@", weightArray); | |||||
| [self addLog:@"获得支持单位列表"]; | |||||
| } | |||||
| //称重数据 | |||||
| - (void)aiFreshNutritionScaleBleDataModel:(ELAiFreshNutritionScaleDataModel *_Nonnull)model { | |||||
| NSLog(@"%s model:%@", __FUNCTION__, model); | |||||
| NSString *testData = [NSString stringWithFormat:@"weight:%@ weightPoint:%@ weightUnit:%@", @(model.weight), @(model.weightPoint), @(model.weightUnit)]; | |||||
| [self addLog:testData]; | |||||
| } | |||||
| //超载 | |||||
| - (void)overload:(BOOL)status { | |||||
| [self addLog:[NSString stringWithFormat:@"超载: %d", status]]; | |||||
| } | |||||
| //低电 | |||||
| - (void)lowPower:(BOOL)status { | |||||
| [self addLog:[NSString stringWithFormat:@"低电: %d", status]]; | |||||
| } | |||||
| //切换单位 | |||||
| - (void)uintDidChange:(AiFreshNutritionScaleWeightUnit)unit { | |||||
| [self addLog:[NSString stringWithFormat:@"切换单位: %d", unit]]; | |||||
| } | |||||
| //ble version | |||||
| - (void)firmwareVersion:(NSString *)version { | |||||
| NSLog(@"%s version:%@", __FUNCTION__, version); | |||||
| } | |||||
| @end |
| // | |||||
| // AiFreshNutritionScaleScanViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface AiFreshNutritionScaleScanViewController : UIViewController | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // AiFreshNutritionScaleScanViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "AiFreshNutritionScaleScanViewController.h" | |||||
| #import <AILinkBleSDK/ELAiFreshNutritionScaleBleManager.h> | |||||
| #import "Masonry.h" | |||||
| #import "AiFreshNutritionScaleConnectionViewController.h" | |||||
| @interface AiFreshNutritionScaleScanViewController () <UITableViewDelegate, UITableViewDataSource, AiFreshNutritionScaleBleDelegate> | |||||
| @property(nonatomic, strong) UITableView *tableView; | |||||
| @property(nonatomic, strong) NSArray<ELPeripheralModel *> *devices; | |||||
| @end | |||||
| @implementation AiFreshNutritionScaleScanViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| [self.view addSubview:self.tableView]; | |||||
| [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.top.left.right.bottom.mas_equalTo(0); | |||||
| }]; | |||||
| } | |||||
| - (void)viewWillAppear:(BOOL)animated { | |||||
| [[ELAiFreshNutritionScaleBleManager shareManager] startScan]; | |||||
| [ELAiFreshNutritionScaleBleManager shareManager].nutritionScaleBleDelegate = self; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELAiFreshNutritionScaleBleManager shareManager] stopScan]; | |||||
| } | |||||
| #pragma mark - BloodSugarBleDelegate | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state { | |||||
| NSLog(@"deviceBleReceiveState = %ld", state); | |||||
| } | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| self.devices = devices; | |||||
| [self.tableView reloadData]; | |||||
| } | |||||
| - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | |||||
| return self.devices.count; | |||||
| } | |||||
| - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| return 60; | |||||
| } | |||||
| - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| static NSString *cellId = @"cellid"; | |||||
| UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; | |||||
| if (!cell) { | |||||
| cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellId]; | |||||
| } | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| cell.textLabel.text = [NSString stringWithFormat:@"Name:%@---Mac:%@\nCID:%ld---VID:%ld---PID:%ld", p.deviceName, p.macAddress, p.deviceType, p.vendorID, p.productID]; | |||||
| cell.textLabel.numberOfLines = 2; | |||||
| cell.textLabel.textColor = [UIColor blackColor]; | |||||
| return cell; | |||||
| } | |||||
| - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| AiFreshNutritionScaleConnectionViewController *vc = [[AiFreshNutritionScaleConnectionViewController alloc] init]; | |||||
| vc.p = p; | |||||
| [self.navigationController pushViewController:vc animated:YES]; | |||||
| } | |||||
| - (UITableView *)tableView { | |||||
| if (_tableView == nil) { | |||||
| _tableView = [[UITableView alloc] init]; | |||||
| _tableView.delegate = self; | |||||
| _tableView.dataSource = self; | |||||
| } | |||||
| return _tableView; | |||||
| } | |||||
| @end |
| // | |||||
| // FaceMaskConnectionViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| @class ELPeripheralModel; | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface FaceMaskConnectionViewController : UIViewController | |||||
| @property (nonatomic, strong) ELPeripheralModel *p; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // FaceMaskConnectionViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "FaceMaskConnectionViewController.h" | |||||
| #import "Masonry.h" | |||||
| #import <AILinkBleSDK/ELFaceMaskBleHeader.h> | |||||
| #import <AILinkBleSDK/ELFaceMaskBleManager.h> | |||||
| @interface FaceMaskConnectionViewController () <FaceMaskBleDelegate, ELBluetoothManagerDelegate> | |||||
| @property(nonatomic, strong) UITextView *textView; | |||||
| @property(nonatomic, copy) NSArray<NSNumber *> *units; | |||||
| @property(nonatomic, strong) UIButton *connectButton; | |||||
| @end | |||||
| @implementation FaceMaskConnectionViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| self.view.backgroundColor = [UIColor whiteColor]; | |||||
| [ELFaceMaskBleManager shareManager].faceMaskDelegate = self; | |||||
| [ELFaceMaskBleManager shareManager].delegate = self; | |||||
| [[ELFaceMaskBleManager shareManager] connectPeripheral:self.p]; | |||||
| [self setupUIView]; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELFaceMaskBleManager shareManager] disconnectPeripheral]; | |||||
| } | |||||
| - (void)addLog:(NSString *)log { | |||||
| self.textView.text = [NSString stringWithFormat:@"%@\n\n%@", log, self.textView.text]; | |||||
| } | |||||
| - (void)connectDevice { | |||||
| [[ELFaceMaskBleManager shareManager] startScan]; | |||||
| } | |||||
| - (void)setupUIView { | |||||
| self.connectButton = [[UIButton alloc] initWithFrame:CGRectMake((self.view.frame.size.width - 100) / 2, 88, 100, 40)]; | |||||
| [self.connectButton setTitle:@"点击重连" forState:UIControlStateNormal]; | |||||
| [self.connectButton setTitleColor:[UIColor blackColor] forState:UIControlStateNormal]; | |||||
| [self.view addSubview:self.connectButton]; | |||||
| [self.connectButton addTarget:self action:@selector(connectDevice) forControlEvents:UIControlEventTouchUpInside]; | |||||
| self.connectButton.hidden = YES; | |||||
| self.textView = [[UITextView alloc] init]; | |||||
| self.textView.backgroundColor = [UIColor blackColor]; | |||||
| self.textView.text = @"Log"; | |||||
| self.textView.textColor = [UIColor redColor]; | |||||
| [self.view addSubview:self.textView]; | |||||
| [self.textView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.left.mas_equalTo(10); | |||||
| make.right.mas_equalTo(-10); | |||||
| make.bottom.offset(-44); | |||||
| // make.height.mas_equalTo(350); | |||||
| make.top.offset(150); | |||||
| }]; | |||||
| } | |||||
| #pragma mark - ble Delegate | |||||
| /// 蓝牙连接状态 | |||||
| /// @param state 连接状态 | |||||
| - (void)faceMaskBleReceiveState:(ELBluetoothState)state { | |||||
| switch (state) { | |||||
| case ELBluetoothStateUnavailable: { | |||||
| self.title = @"Please open the bluetooth"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateAvailable: { | |||||
| self.title = @"Bluetooth is open"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateScaning: { | |||||
| self.title = @"Scanning"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateConnectFail: { | |||||
| self.title = @"Connect fail"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidDisconnect: { | |||||
| self.title = @"Disconnected"; | |||||
| self.connectButton.hidden = NO; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateDidValidationPass: { | |||||
| self.connectButton.hidden = YES; | |||||
| self.title = @"Connected"; | |||||
| //连接成功,获取单位 | |||||
| [[ELFaceMaskBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeReadDeviceSupportUnit]; | |||||
| //获取版本号 | |||||
| [[ELFaceMaskBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeGetBMVersion]; | |||||
| //同步时间到设备 | |||||
| [[ELFaceMaskBleManager shareManager] syncMCUNowDate]; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateFailedValidation: { | |||||
| self.title = @"Illegal equipment"; | |||||
| } | |||||
| break; | |||||
| case ELBluetoothStateWillConnect: | |||||
| self.title = @"Connecting"; | |||||
| break; | |||||
| default: | |||||
| break; | |||||
| } | |||||
| } | |||||
| /// 附近的设备 | |||||
| /// @param devices 设备列表 | |||||
| - (void)faceMaskBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| for (ELPeripheralModel *model in devices) { | |||||
| if ([model.macAddress isEqualToString:self.p.macAddress]) { | |||||
| [[ELFaceMaskBleManager shareManager] connectPeripheral:model]; | |||||
| } | |||||
| } | |||||
| } | |||||
| - (void)faceMaskBleReceiveStatusDataModel:(ELFaceMaskBleDataModel *_Nonnull)model { | |||||
| NSString *str = [NSString stringWithFormat:@"空气质量指数:%@", @(model.index)]; | |||||
| str = [str stringByAppendingFormat:@" 风扇状态:%@", @(model.fanStatus)]; | |||||
| str = [str stringByAppendingFormat:@" 电池状态:%@", @(model.batteryStatus)]; | |||||
| str = [str stringByAppendingFormat:@" 电池续航:%@", @(model.batteryLife)]; | |||||
| str = [str stringByAppendingFormat:@" 呼吸频率:%@", @(model.breathRate)]; | |||||
| str = [str stringByAppendingFormat:@" 呼吸状态:%@", @(model.breathStatus)]; | |||||
| str = [str stringByAppendingFormat:@" 滤网的总工作时长:%@", @(model.workTime)]; | |||||
| [self addLog:[NSString stringWithFormat:@"ELFaceMaskBleDataModel() %@", str]]; | |||||
| } | |||||
| - (void)faceMaskReplaceSuccess:(BOOL)success { | |||||
| [self addLog:[NSString stringWithFormat:@"faceMaskReplaceSuccess() success:%@", @(success)]]; | |||||
| } | |||||
| - (void)faceMaskSwitchFanResult:(FaceMaskFanControlResult)result { | |||||
| [self addLog:[NSString stringWithFormat:@"faceMaskSwitchFanResult() result:%@", @(result)]]; | |||||
| } | |||||
| - (void)faceMaskPoweroffSuccess:(BOOL)success { | |||||
| [self addLog:[NSString stringWithFormat:@"faceMaskPoweroffSuccess() success:%@", @(success)]]; | |||||
| } | |||||
| @end |
| // | |||||
| // FaceMaskScanViewController.h | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <UIKit/UIKit.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface FaceMaskScanViewController : UIViewController | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // FaceMaskScanViewController.m | |||||
| // AILinkBleSDKSourceCode | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "FaceMaskScanViewController.h" | |||||
| #import <AILinkBleSDK/ELFaceMaskBleManager.h> | |||||
| #import "Masonry.h" | |||||
| #import "FaceMaskConnectionViewController.h" | |||||
| @interface FaceMaskScanViewController () <UITableViewDelegate, UITableViewDataSource, FaceMaskBleDelegate> | |||||
| @property(nonatomic, strong) UITableView *tableView; | |||||
| @property(nonatomic, strong) NSArray<ELPeripheralModel *> *devices; | |||||
| @end | |||||
| @implementation FaceMaskScanViewController | |||||
| - (void)viewDidLoad { | |||||
| [super viewDidLoad]; | |||||
| // Do any additional setup after loading the view. | |||||
| [self.view addSubview:self.tableView]; | |||||
| [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
| make.top.left.right.bottom.mas_equalTo(0); | |||||
| }]; | |||||
| } | |||||
| - (void)viewWillAppear:(BOOL)animated { | |||||
| [[ELFaceMaskBleManager shareManager] startScan]; | |||||
| [ELFaceMaskBleManager shareManager].faceMaskDelegate = self; | |||||
| } | |||||
| - (void)viewWillDisappear:(BOOL)animated { | |||||
| [[ELFaceMaskBleManager shareManager] stopScan]; | |||||
| } | |||||
| #pragma mark - BloodSugarBleDelegate | |||||
| - (void)faceMaskBleReceiveState:(ELBluetoothState)state { | |||||
| NSLog(@"faceMaskBleReceiveState = %ld", state); | |||||
| } | |||||
| - (void)faceMaskBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices { | |||||
| self.devices = devices; | |||||
| [self.tableView reloadData]; | |||||
| } | |||||
| - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { | |||||
| return self.devices.count; | |||||
| } | |||||
| - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| return 60; | |||||
| } | |||||
| - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| static NSString *cellId = @"cellid"; | |||||
| UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; | |||||
| if (!cell) { | |||||
| cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellId]; | |||||
| } | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| cell.textLabel.text = [NSString stringWithFormat:@"Name:%@---Mac:%@\nCID:%ld---VID:%ld---PID:%ld", p.deviceName, p.macAddress, p.deviceType, p.vendorID, p.productID]; | |||||
| cell.textLabel.numberOfLines = 2; | |||||
| cell.textLabel.textColor = [UIColor blackColor]; | |||||
| return cell; | |||||
| } | |||||
| - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | |||||
| ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
| FaceMaskConnectionViewController *vc = [[FaceMaskConnectionViewController alloc] init]; | |||||
| vc.p = p; | |||||
| [self.navigationController pushViewController:vc animated:YES]; | |||||
| } | |||||
| - (UITableView *)tableView { | |||||
| if (_tableView == nil) { | |||||
| _tableView = [[UITableView alloc] init]; | |||||
| _tableView.delegate = self; | |||||
| _tableView.dataSource = self; | |||||
| } | |||||
| return _tableView; | |||||
| } | |||||
| @end |
| // | |||||
| // ELAiFreshNutritionScaleBleHeader.h | |||||
| // Elink | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/2. | |||||
| // Copyright © 2021 iot_iMac. All rights reserved. | |||||
| // | |||||
| #ifndef ELAiFreshNutritionScaleBleHeader_h | |||||
| #define ELAiFreshNutritionScaleBleHeader_h | |||||
| typedef NS_ENUM(NSUInteger, AiFreshNutritionScaleTestStatus) { | |||||
| //Real-time weight(实时重量) | |||||
| AiFreshNutritionScaleTestStatus_RealTime = 0xCE, | |||||
| //Stable weight(稳定重量) | |||||
| AiFreshNutritionScaleTestStatus_Stable = 0xCA, | |||||
| }; | |||||
| /** 营养秤 Weight unit(重量单位)*/ | |||||
| typedef NS_ENUM(NSInteger, AiFreshNutritionScaleWeightUnit) { | |||||
| /** g */ | |||||
| AiFreshNutritionScaleWeightUnit_G = 0 , | |||||
| /** ml */ | |||||
| AiFreshNutritionScaleWeightUnit_ML = 1 , | |||||
| /** lb:oz */ | |||||
| AiFreshNutritionScaleWeightUnit_LB_OZ = 2 , | |||||
| /** oz */ | |||||
| AiFreshNutritionScaleWeightUnit_OZ = 3 , | |||||
| /** kg */ | |||||
| AiFreshNutritionScaleWeightUnit_KG = 4 , | |||||
| /** 斤 */ | |||||
| AiFreshNutritionScaleWeightUnit_JIN = 5 , | |||||
| /** 牛奶 ml */ | |||||
| AiFreshNutritionScaleWeightUnit_MILK_ML = 6 , | |||||
| /** 水 ml */ | |||||
| AiFreshNutritionScaleWeightUnit_WATER_ML = 7 , | |||||
| /** 牛奶 fl.oz */ | |||||
| AiFreshNutritionScaleWeightUnit_MILK_FLOZ = 8 , | |||||
| /** 水 fl.oz */ | |||||
| AiFreshNutritionScaleWeightUnit_WATER_FLOZ = 9 , | |||||
| /** lb */ | |||||
| AiFreshNutritionScaleWeightUnit_LB = 10 , | |||||
| /** Unsupported unit */ | |||||
| AiFreshNutritionScaleWeightUnit_Fail = 0xFF , | |||||
| }; | |||||
| #endif /* ELAiFreshNutritionScaleBleHeader_h */ |
| // | |||||
| // ELAiFreshNutritionScaleBleManager.h | |||||
| // Elink | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/1. | |||||
| // Copyright © 2021 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| #import "ELAiFreshNutritionScaleDataModel.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @protocol AiFreshNutritionScaleBleDelegate <NSObject> | |||||
| @optional | |||||
| /// 蓝牙连接状态 | |||||
| /// @param state 连接状态 | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state; | |||||
| /// 附近的设备 | |||||
| /// @param devices 设备列表 | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *_Nullable)devices; | |||||
| //获得支持单位列表 | |||||
| - (void)supportUnits:(NSArray *_Nonnull)unitArray; | |||||
| //正在连接中倒计时 | |||||
| - (void)deviceBleCountDown:(NSInteger)count; | |||||
| //ble version | |||||
| - (void)firmwareVersion:(NSString *)version; | |||||
| //称重数据 | |||||
| - (void)aiFreshNutritionScaleBleDataModel:(ELAiFreshNutritionScaleDataModel *_Nonnull)model; | |||||
| //超载 | |||||
| - (void)overload:(BOOL)status; | |||||
| //低电 | |||||
| - (void)lowPower:(BOOL)status; | |||||
| //切换单位 | |||||
| - (void)uintDidChange:(AiFreshNutritionScaleWeightUnit)unit; | |||||
| @end | |||||
| @interface ELAiFreshNutritionScaleBleManager : ELBluetoothManager | |||||
| @property(nonatomic, weak) id <AiFreshNutritionScaleBleDelegate> nutritionScaleBleDelegate; | |||||
| + (instancetype)shareManager; | |||||
| @end | |||||
| @interface ELAiFreshNutritionScaleBleManager () | |||||
| - (void)autoScan; | |||||
| - (void)stopAutoScan; | |||||
| - (void)checkStatus; | |||||
| @end | |||||
| @interface ELAiFreshNutritionScaleBleManager (send) | |||||
| //APP 下发归零 | |||||
| - (void)sendMakeZero; | |||||
| //APP 切换单位 | |||||
| - (void)sendUnit:(AiFreshNutritionScaleWeightUnit)unit; | |||||
| //APP 获取设备支持单位列表 | |||||
| - (void)sendRequestUnitSupported; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELAiFreshNutritionScaleDataModel.h | |||||
| // Elink | |||||
| // | |||||
| // Created by LarryZhang on 2021/12/2. | |||||
| // Copyright © 2021 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELAiFreshNutritionScaleBleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELAiFreshNutritionScaleDataModel : NSObject | |||||
| //Measurement status(测量状态) | |||||
| @property (nonatomic, assign) AiFreshNutritionScaleTestStatus testStatus; | |||||
| //weight(重量数据) | |||||
| @property (nonatomic, assign) UInt32 weight; | |||||
| //Weight unit(重量单位) | |||||
| @property(nonatomic, assign) AiFreshNutritionScaleWeightUnit weightUnit; | |||||
| //Weight decimal point(体重小数点) | |||||
| @property(nonatomic, assign) Byte weightPoint; | |||||
| //Weight negative(是否负数) | |||||
| @property(nonatomic, assign, getter=isNegative) BOOL negative; | |||||
| //timestamp(时间戳) | |||||
| @property(nonatomic, assign) long long timestamp; | |||||
| @end | |||||
| NSString *AiFreshNutritionScaleWeightUnitString(AiFreshNutritionScaleWeightUnit unit); | |||||
| NS_ASSUME_NONNULL_END |
| // | // | ||||
| #import "ELBluetoothManager.h" | #import "ELBluetoothManager.h" | ||||
| #import "ELPeripheralModel.h" | |||||
| #import "ELBabyScaleBleWeightModel.h" | #import "ELBabyScaleBleWeightModel.h" | ||||
| #import "ELBabyScaleBleHeightModel.h" | #import "ELBabyScaleBleHeightModel.h" | ||||
| #import "ELBabyScaleBleHeader.h" | #import "ELBabyScaleBleHeader.h" | ||||
| @class ELPeripheralModel; | |||||
| @protocol BabyScaleBleDelegate <NSObject> | @protocol BabyScaleBleDelegate <NSObject> | ||||
| @optional | @optional | ||||
| //Callback Bluetooth status(回调蓝牙状态) | //Callback Bluetooth status(回调蓝牙状态) |
| // | |||||
| // ELBleDisposeDataTool.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2019/4/23. | |||||
| // Copyright © 2019 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELSDKHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELBleDisposeDataTool : NSObject | |||||
| //MARK:校验和 | |||||
| +(BOOL)checksum:(NSData *)data; | |||||
| //MARK: 广播设备校验和 | |||||
| +(BOOL)broadcastChecksum:(NSData *)data; | |||||
| #pragma mark ============ 解析A6数据 ============== | |||||
| /** | |||||
| 解析电池数据 | |||||
| @param data 原始数据 | |||||
| @return 电池充电状态和电量的结构体 | |||||
| */ | |||||
| +(struct ELBatteryStruct)analysisBattery:(NSData *)data; | |||||
| /** | |||||
| 解析CID、VID、PID | |||||
| @param data 原始数据 | |||||
| @return CID,VID,PID的结构体 | |||||
| */ | |||||
| +(struct ELDIDStruct)analysisDid:(NSData *)data; | |||||
| /** | |||||
| 解析模块时间 | |||||
| @param data 原始数据 | |||||
| @return yyyy-MM-dd HH:mm:ss | |||||
| */ | |||||
| +(NSString *)analysisBluetoothDate:(NSData *)data; | |||||
| /** | |||||
| 解析MCU软硬件版本号 | |||||
| @param data 原始数据 | |||||
| @return MCU软硬件版本号 | |||||
| */ | |||||
| +(NSString *)analysisMCUVersion:(NSData *)data; | |||||
| /** | |||||
| 解析BM模块软硬件版本号 | |||||
| @param data 原始数据 | |||||
| @return BM模块软硬件版本号 | |||||
| */ | |||||
| +(NSString *)analysisBMVersion:(NSData *)data; | |||||
| /** | |||||
| 解析MAC地址 | |||||
| @param data 原始数据 | |||||
| @return MAC地址 | |||||
| */ | |||||
| +(NSString *)analysisBluetoothMACAddrress:(NSData *)data; | |||||
| /** | |||||
| 解析模块状态 | |||||
| @param data 原始数据 | |||||
| @return 结构体 | |||||
| */ | |||||
| +(struct ELMCUStateStruct)analysisBluetoothConnectState:(NSData *)data; | |||||
| /** | |||||
| 解析模块通信模式 | |||||
| @param data 原始数据 | |||||
| @return 模式 | |||||
| */ | |||||
| +(ELCommunicationModeType)analysisBluetoothCommunicationMode:(NSData *)data; | |||||
| /** | |||||
| 解析自动睡眠时间 | |||||
| @param data 原始数据 | |||||
| @return 结构体 | |||||
| */ | |||||
| +(struct ELAutoSleepTimeStruct)analysisBluetoothAutoSleepTime:(NSData *)data; | |||||
| /** | |||||
| 解析主从模式数据 | |||||
| @param data 原始数据 | |||||
| @return 模式 | |||||
| 0:从机模式 1:主机模式 | |||||
| */ | |||||
| +(int)analysisBluetoothMCUMode:(NSData *)data; | |||||
| /** | |||||
| 解析UUID | |||||
| @param data 原始数据 | |||||
| @return UUID 的结构体 | |||||
| */ | |||||
| +(struct ELUUIDStruct)analysisBluetoothUUID:(NSData *)data; | |||||
| /** | |||||
| 解析大小端序 | |||||
| @param data 原始数据 | |||||
| @return 大小端序 | |||||
| */ | |||||
| +(int)analysisBluetoothMACAddressType:(NSData *)data; | |||||
| /** | |||||
| 解析串口波特率 | |||||
| @param data 原始数据 | |||||
| @return 波特率 | |||||
| 0:9600 | |||||
| 1:19200 | |||||
| 2:38400 | |||||
| 3:57600 | |||||
| 4:115200 | |||||
| 5:921600 | |||||
| */ | |||||
| +(int)analysisBluetoothSerialPostBaudRate:(NSData *)data; | |||||
| /** | |||||
| 解析发射功率 | |||||
| @param data 原始数据 | |||||
| @return 发射功率:1~10 | |||||
| */ | |||||
| +(int)analysisBluetoothTransmittingPower:(NSData *)data; | |||||
| /** | |||||
| 解析蓝牙连接间隔 | |||||
| @param data 原始数据 | |||||
| @return 连接间隔时间的结构体 | |||||
| */ | |||||
| +(struct ELConnectIntervalStruct)analysisBluetoothConnectInterval:(NSData *)data; | |||||
| /** | |||||
| 解析蓝牙广播间隔时间 | |||||
| @param data 蓝牙发送的原始数据 | |||||
| @return 广播间隔 | |||||
| */ | |||||
| +(int)analysisBluetoothBroadcastInterval:(NSData *)data; | |||||
| /** | |||||
| 解析蓝牙名称 | |||||
| @param data 蓝牙发送的原始数据 | |||||
| @return 蓝牙名称 | |||||
| */ | |||||
| +(NSString *)analysisBluetoothName:(NSData *)data; | |||||
| /** | |||||
| 解析设备支持的体重数组 | |||||
| @param data 蓝牙发送的原始数据 | |||||
| @return 体重单位数组,内容为ELDeviceWeightUnit枚举 | |||||
| */ | |||||
| + (NSArray<NSNumber *> *)analysisBluetoothSupportWeightUnitArray:(NSData *)data; | |||||
| /** | |||||
| 解析设备支持的身高数组 | |||||
| @param data 蓝牙发送的原始数据 | |||||
| @return 身高单位数组,内容为ELDeviceHeightUnit枚举 | |||||
| */ | |||||
| + (NSArray<NSNumber *> *)analysisBluetoothSupportHeightUnitArray:(NSData *)data; | |||||
| /** | |||||
| 解析设备支持的温度数组 | |||||
| @param data 蓝牙发送的原始数据 | |||||
| @return 温度单位数组,内容为ELDeviceTemperatureUnit枚举 | |||||
| */ | |||||
| + (NSArray<NSNumber *> *)analysisBluetoothSupportTemperatureUnitArray:(NSData *)data; | |||||
| /** | |||||
| 解析设备支持的血压数组 | |||||
| */ | |||||
| + (NSArray<NSNumber *> *)analysisBluetoothSupportBloodPressureUnitArray:(NSData *)data; | |||||
| /** | |||||
| 解析设备支持的血压数组 | |||||
| @param data 蓝牙发送的原始数据 | |||||
| @return 血压单位数组,内容为ELDeviceTemperatureUnit枚举 | |||||
| */ | |||||
| + (NSArray<NSNumber *> *)analysisBluetoothSupportPressureUnitArray:(NSData *)data; | |||||
| /// 解析设备支持的血糖仪单位 | |||||
| /// @param data 蓝牙发送的原始数据 | |||||
| + (NSArray<NSNumber *> *)analysisBluetoothSupportBloodSugarUnitArray:(NSData *)data; | |||||
| /// 解析设备支持的体积单位 | |||||
| /// @param data 蓝牙发送的原始数据 | |||||
| + (NSArray<NSNumber *> *)analysisBluetoothSupportVolumUnitArray:(NSData *)data; | |||||
| /// 解析设备支持的营养秤单位 | |||||
| /// @param data 蓝牙发送的原始数据 | |||||
| + (NSArray<NSNumber *> *)analysisBluetoothSupportNutritionUnitArray:(NSData *)data; | |||||
| /** | |||||
| 解析蓝牙接收密钥的结果 | |||||
| @param data 原数据 | |||||
| @return YES:成功,NO失败 | |||||
| */ | |||||
| +(BOOL)analysisBluetoothReceiveKeyState:(NSData *)data; | |||||
| /** | |||||
| 解析设备基本信息 | |||||
| @param data 原数据 | |||||
| @return 设备基本信息 | |||||
| */ | |||||
| +(NSData *)analysisBluetoothReceiveBasicInfoData:(NSData *)data; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| #import "ELBloodBleDataModel.h" | #import "ELBloodBleDataModel.h" | ||||
| @class ELPeripheralModel; | |||||
| typedef NS_ENUM(NSUInteger, ELBloodBleDataType) { | typedef NS_ENUM(NSUInteger, ELBloodBleDataType) { | ||||
| ELBloodBleDataTypeStableData = 0x01, //Stable data(稳定数据) | ELBloodBleDataTypeStableData = 0x01, //Stable data(稳定数据) | ||||
| ELBloodBleDataTypeRealTimeData = 0x02, //Real-time data(实时数据) | ELBloodBleDataTypeRealTimeData = 0x02, //Real-time data(实时数据) |
| // | |||||
| // ELBluetoothManager+BleWifi.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by steven wu on 2021/8/6. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| #import "ELBleWifiDetailModel.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELBluetoothManager (BleWifi) | |||||
| #pragma mark ============ Bluetooth WIFI calling method(蓝牙WIFI 设置命令) ============== | |||||
| /** | |||||
| WIFI initiate connection and disconnect(WIFI 发起连接、断开连接) | |||||
| @param connect YES: initiate connection NO: disconnect(YES:发起连接 NO:断开连接) | |||||
| */ | |||||
| -(void)bleWifiSetupWifiConnect:(BOOL)connect; | |||||
| /** | |||||
| Set WIFI access URL(设置WIFI访问URL) | |||||
| @param url url(Not more than 56chars(不超过56chars)) | |||||
| */ | |||||
| -(void)bleWifiSetWifiURL:(NSString *)url; | |||||
| /** | |||||
| Set Wifi access port number(设置Wifi访问端口号) | |||||
| @param port 端口号 | |||||
| */ | |||||
| -(void)bleWifiSetPort:(int)port; | |||||
| /** | |||||
| Set DTIM interval(设置DTIM间隔) | |||||
| @param interval 间隔 | |||||
| */ | |||||
| -(void)bleWifiSetDTIMInterval:(int)interval; | |||||
| /** | |||||
| Set WIFI password(设置WIFI密码) | |||||
| @param pwd WIFI password (8 ~ 56 chars)(WIFI密码(8~56 个chars)) | |||||
| */ | |||||
| -(void)bleWifiSetWifiPwd:(NSString *)pwd; | |||||
| /** | |||||
| Set up connected WIFI(设置连接的WIFI) | |||||
| @param macData wifi MAC (little endian)(wifi的MAC(小端序)) | |||||
| */ | |||||
| -(void)bleWifiSetConnectWifiMac:(NSData *)macData; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELBluetoothManagerProtocol.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by steven wu on 2021/8/6. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| @class ELBleWifiDetailModel; | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| //MARK:Bluetooth Wifi protocol(蓝牙Wifi协议) | |||||
| @protocol ElBleWifiDelegate <NSObject> | |||||
| @optional | |||||
| /** | |||||
| Callback Wifi details(回调Wifi详情) | |||||
| @param model 模型 | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiDetailModel:(ELBleWifiDetailModel *_Nonnull)model; | |||||
| /** | |||||
| Scan nearby wifi results(扫描附近wifi结果) | |||||
| @param count Number of nearby wifi(附近wifi数量) | |||||
| */ | |||||
| -(void)bleWifiReceiveScanedWifiCount:(int)count; | |||||
| /** | |||||
| Callback Wifi MAC address(回调Wifi MAC地址) | |||||
| @param macData mac | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiMacData:(NSData *_Nullable)macData; | |||||
| /** | |||||
| Callback WIFI password(回调WIFI密码) | |||||
| @param pwd password(密码) | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiPwd:(NSString *_Nonnull)pwd; | |||||
| /** | |||||
| Get DTIM interval (unit: ms)(获取DTIM间隔(单位:ms)) | |||||
| @param interval Interval (unit: ms)(间隔(单位:ms)) | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiDTIMInterval:(NSInteger)interval; | |||||
| /** | |||||
| Returns the visited URL(返回访问的url) | |||||
| @param url url | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiAccessURL:(NSString *_Nonnull)url; | |||||
| /** | |||||
| Call back wifi port number(回调wifi的端口号) | |||||
| @param port 端口号 | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiPort:(int)port; | |||||
| /** | |||||
| Set or query the callback of the instruction execution result(设置指令蓝牙WIFI响应回调方法) | |||||
| 只支持蓝牙Wifi部分枚举 | |||||
| @param type Type of setting (设置的类型) | |||||
| @param result Set result(设置的结果) | |||||
| */ | |||||
| -(void)bleWifiReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result; | |||||
| /** | |||||
| 获取会话码(deviceId) | |||||
| @param code (deviceId) deviceId(0 means no:为0时表示不存在) | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiSNCode:(int)code; | |||||
| /** 返回wifi名称 */ | |||||
| - (void)bleWifiName:(NSString *)wifiName; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELBluetoothManager+Settings.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by steven wu on 2021/8/6. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELBluetoothManager (Settings) | |||||
| #pragma mark ============ A6 Set or query instructions(设置或查询指令) ============== | |||||
| /** | |||||
| Set the Bluetooth name(设置蓝牙名称) | |||||
| @param name Name, less than 14 bytes(名称,小于14个byte) | |||||
| */ | |||||
| -(void)setBluetoothName:(NSString * _Nonnull)name; | |||||
| /** | |||||
| Set the broadcast interval(设置广播间隔时间) | |||||
| @param interval 20~2000 | |||||
| */ | |||||
| -(void)setBroadcastInterval:(int)interval; | |||||
| /** | |||||
| Set the connection interval 10(设置连接间隔) | |||||
| @param interval The interval range is 20~2000ms.(interval范围是20~2000ms) | |||||
| @param timeout The timeout range is 1000~6000ms(timeout范围是1000~6000ms) | |||||
| @param latency The latency range is 0~4(latency范围是0〜4) | |||||
| */ | |||||
| -(void)setConnectedInterval:(int)interval timeout:(int)timeout Latency:(int)latency; | |||||
| /** | |||||
| Set the transmit power(设置发射功率) | |||||
| @param power The range of power is 0~10(power的范围是0~10) | |||||
| */ | |||||
| -(void)setTransmittingPower:(int)power; | |||||
| /** | |||||
| Set the serial port baud rate(设置串口波特率) | |||||
| @param rate The range of rate is 0~5(rate的范围是0~5) | |||||
| 0:9600 | |||||
| 1:19200 | |||||
| 2:38400 | |||||
| 3:57600 | |||||
| 4:115200 | |||||
| 5:921600 | |||||
| */ | |||||
| -(void)setSerialPortbaudRate:(int)rate; | |||||
| /** | |||||
| Set the MCU software and hardware version number(设置MCU软硬件版本号) | |||||
| @param hardware 硬件 | |||||
| @param software 软件 | |||||
| 如果是:S1.1,S11.1,S111.1, ..... | |||||
| 请传:11,111,1111, .... | |||||
| @param type Manufacturer's own definition(厂家自己定义) | |||||
| @param year 年 | |||||
| @param month 月 | |||||
| @param day 日 | |||||
| */ | |||||
| -(void)setMCUVersion:(unsigned int)hardware software:(unsigned int)software mcuType:(unsigned int)type year:(unsigned int)year month:(unsigned int)month day:(unsigned int)day; | |||||
| /** | |||||
| Set the big endian or little endian of the Mac address in the broadcast manufacturer's custom data.(设置广播厂家自定义数据中Mac地址的大端序或小端序) | |||||
| @param type type | |||||
| 0:Little endian (default)(小端序 (默认)) | |||||
| 1:Big endian(大端序) | |||||
| */ | |||||
| -(void)setSetMACAddressType:(int)type; | |||||
| /** | |||||
| Set up the module's service and feature services(设置模块的服务和特征服务) | |||||
| @param serverUUIDData server | |||||
| @param charateristicUUIDData charateristic | |||||
| @param type UUID length: | |||||
| 0 : 16 bytes(default) | |||||
| 1:2 bytes | |||||
| */ | |||||
| -(void)setBluetoothServerUUID:(NSData *)serverUUIDData charateristicUUID:(NSData *)charateristicUUIDData UUIDType:(int)type; | |||||
| /** | |||||
| Set the master-slave mode of the module(设置模块的主从模式) | |||||
| @param type Value: | |||||
| 0:Slave mode (default)(从机模式(默认)) | |||||
| 1:Host mode(主机模式) | |||||
| */ | |||||
| -(void)setMCUModel:(int)type; | |||||
| /** | |||||
| Set the module's automatic sleep time without connection(设置模块无连接的自动休眠时间) | |||||
| @param open Automatic sleep flag(自动睡眠标志位): | |||||
| 0:Do not turn on automatic sleep(不开启自动休眠) | |||||
| 1:Turn on auto sleep, the module is not connected(开启自动休眠,模块没有连接) | |||||
| @param time Automatic sleep time (ms)(自动睡眠时间(ms)) | |||||
| @param radio Whether to enable low frequency broadcast after sleep: (unit: ms)(睡眠后是否开启低频广播:(单位:ms)) | |||||
| 0:Not open(不开启) | |||||
| 1:Open(开启) | |||||
| @param interval 低频广播间隔时间,20~2000ms | |||||
| */ | |||||
| -(void)setAutoSleepTimeIsOpen:(BOOL)open autoSleepTime:(unsigned int)time isRadio:(BOOL)radio radioInterval:(int)interval; | |||||
| /** | |||||
| Set to sleep(设置进入睡眠) | |||||
| @param radio Whether to enable low frequency broadcast after sleep: (in ms)(睡眠后是否开启低频广播:(单位 ms)) | |||||
| 0:Not open(不开启) | |||||
| 1:Open(开启) | |||||
| @param interval 低频广播间隔时间,20~2000ms | |||||
| */ | |||||
| -(void)setGotoSleepIsRadio:(BOOL)radio interval:(int)interval; | |||||
| /** | |||||
| Set module wake up(设置模块唤醒) | |||||
| */ | |||||
| -(void)setMCUWakeUp; | |||||
| /** | |||||
| Setting CID, VID, PID(设置CID、VID、PID) | |||||
| @param setC Whether to set the CID(是否设置CID) | |||||
| @param setV Whether to set the VID(是否设置VID) | |||||
| @param setP Whether to set the PID(是否设置PID) | |||||
| @param cid Product Type ID: Less than 65536(产品类型ID:小于65536) | |||||
| @param vid Manufacturer ID: less than 65536(厂家ID:小于65536) | |||||
| @param pid Product ID: Less than 65536(产品ID:小于65536) | |||||
| */ | |||||
| -(void)setC_V_P_IDWithIsSetCID:(BOOL)setC isSetVID:(BOOL)setV isSetPID:(BOOL)setP CID:(unsigned int)cid VID:(unsigned int)vid PID:(unsigned int)pid; | |||||
| /** | |||||
| Set module communication mode | |||||
| 设置模块通信模式 | |||||
| @param mode communication mode(通信模式) | |||||
| */ | |||||
| -(void)setCommunicationMode:(ELCommunicationModeType)mode; | |||||
| /** | |||||
| Set module restart | |||||
| 设置模块重启 | |||||
| */ | |||||
| -(void)setMCURestart; | |||||
| /** | |||||
| Set factory reset | |||||
| 设置恢复出厂设置 | |||||
| */ | |||||
| -(void)setFactoryDataReset; | |||||
| /** | |||||
| Set the Bluetooth connection status(设置蓝牙连接状态) | |||||
| @param disconnect Active disconnect flag(主动断开连接标志位) | |||||
| 1:Disconnect immediately(立刻断开连接) | |||||
| 0:Not disconnected(不断开连接) | |||||
| */ | |||||
| -(void)setDisconnected:(BOOL)disconnect; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELBluetoothManagerProtocol.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by steven wu on 2021/8/6. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| //MARK: Broadcast Equipment Protocol(广播设备协议) | |||||
| @protocol ELBleBroadcastDelegate <NSObject> | |||||
| @optional | |||||
| /// Callback broadcast device data(回调广播设备数据) | |||||
| /// @param cid cid | |||||
| /// @param vid vid | |||||
| /// @param pid pid | |||||
| /// @param mac mac地址 | |||||
| /// @param data Custom data(自定义数据) | |||||
| -(void)bleBroadcastWithCid:(int)cid vid:(int)vid pid:(int)pid mac:(NSString *_Nonnull)mac data:(NSData *_Nonnull)data; | |||||
| @end | |||||
| //MARK:蓝牙通用协议 | |||||
| @protocol ELBluetoothManagerDelegate <NSObject> | |||||
| @optional | |||||
| //Callback Bluetooth status(回调蓝牙状态) | |||||
| -(void)bluetoothManagerUpdateBleState:(ELBluetoothState)state; | |||||
| //Callback to scanned device(回调扫描到的设备) | |||||
| -(void)bluetoothManagerScanedPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | |||||
| //Special devices that can be bound in the callback, such as door locks(回调中扫描到的可以绑定的特殊设备,如门锁) | |||||
| -(void)bluetoothManagerScanedCanBindSpecialPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | |||||
| //Call back the scanned broadcast device(回调扫描到的广播设备) | |||||
| -(void)bluetoothManagerScanedBroadcastPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | |||||
| //Callback decrypted transparent data (A7 decrypted payload data)(回调解密后的数据(A7解密后payload数据)) | |||||
| -(void)bluetoothManagerReceiveData:(NSData *_Nonnull)data deviceType:(ELSupportDeviceType)type; | |||||
| /** | |||||
| Callback transparent transmission data(回调透传数据) | |||||
| @param data Transparent data transmission (this data cannot start with A6 or A7)(透传数据(此数据不能以A6或A7开头)) | |||||
| */ | |||||
| -(void)bluetoothManagerReceivePassData:(NSData *_Nullable)data; | |||||
| /** 回调已经连接到系统的设备 */ | |||||
| //- (void)bluetoothManagerLinkedSysPeripheral:(NSArray *_Nonnull)peripherals; | |||||
| #pragma mark ============ A6 Set or query the callback of the instruction execution result(设置或查询指令执行结果的回调) ============== | |||||
| /** | |||||
| Set or query the callback of the instruction execution result(设置指令蓝牙响应回调方法(握手指令除外)) | |||||
| @param type Type of setting (设置的类型) | |||||
| @param result Set result(设置的结果) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result; | |||||
| /** | |||||
| Query module status callback(查询模块状态的回调) | |||||
| @param stateStrct 结构体 | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMCUConnectedState:(struct ELMCUStateStruct)stateStrct; | |||||
| /** | |||||
| Query the callback of the communication mode(查询通信模式的回调) | |||||
| @param type communication mode(通信模式) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveCommunicationMode:(ELCommunicationModeType)type; | |||||
| /** | |||||
| Query the callback of automatic sleep time(查询自动睡眠时间的回调) | |||||
| @param sleetStrct Automatic sleep time(自动睡眠时间) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveAutoSleepTime:(struct ELAutoSleepTimeStruct)sleetStrct; | |||||
| /** | |||||
| Query master-slave mode callback(查询主从模式回调) | |||||
| @param mode 模式 | |||||
| 0:Slave mode(从机模式) | |||||
| 1:Host mode(主机模式) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMCUMode:(int)mode; | |||||
| /** | |||||
| Query the callback of UUID information(查询UUID信息的回调) | |||||
| @param uuid ELUUIDStruct | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveUUID:(struct ELUUIDStruct)uuid; | |||||
| /** | |||||
| Query the callback of the MAC address size endian(查询MAC地址大小端序的回调) | |||||
| @param type 类型 | |||||
| 0:Little endian(小端序) | |||||
| 1:Big endian (大端序) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMacAddressType:(int)type; | |||||
| /** | |||||
| Query the callback of the Bluetooth serial port baud rate(查询蓝牙串口波特率的回调) | |||||
| @param rate Serial port baud rate(串口波特率) | |||||
| 0:9600 | |||||
| 1:19200 | |||||
| 2:38400 | |||||
| 3:57600 | |||||
| 4:115200 | |||||
| 5:921600 | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveSerialPostBaudRate:(int)rate; | |||||
| /** | |||||
| Query the callback of Bluetooth transmit power(查询蓝牙发射功率的回调) | |||||
| @param dbm Transmit power(发射功率) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveTransmittingPower:(int)dbm; | |||||
| /** | |||||
| Query the callback of the Bluetooth connection interval(查询蓝牙连接间隔的回调) | |||||
| @param intervalStrct connection interval | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveConnectInterval:(struct ELConnectIntervalStruct)intervalStrct; | |||||
| /** | |||||
| Query the callback of the Bluetooth name(查询蓝牙名称的回调) | |||||
| @param name Bluetooth name(蓝牙名称) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiceName:(NSString *_Nullable)name; | |||||
| /** | |||||
| Query the callback of the Bluetooth broadcast interval(查询蓝牙广播间隔的回调) | |||||
| @param interval broadcast interval(广播间隔) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveBroadcastInterval:(int)interval; | |||||
| /** | |||||
| Query the callback of the Bluetooth MAC address(查询蓝牙MAC地址的回调) | |||||
| @param macAddress MAC | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMACAddress:(NSString *_Nonnull)macAddress; | |||||
| /** | |||||
| Query the callback of the software and hardware version number of the BM module(查询BM模块软硬件版本号的回调) | |||||
| @param bmVersion BM module software and hardware version number(BM模块软硬件版本号) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveBMVersion:(NSString *_Nonnull)bmVersion; | |||||
| /** | |||||
| Query the callback of the MCU software and hardware version number(查询MCU软硬件版本号的回调) | |||||
| @param mcuVersion Callback of MCU software and hardware version number(MCU软硬件版本号的回调) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMCUVersion:(NSString *_Nonnull)mcuVersion; | |||||
| /** | |||||
| Query the callback of Bluetooth time(查询蓝牙时间的回调) | |||||
| @param date yyyy-MM-dd HH:mm:ss | |||||
| @param effective Time is invalid(时间有无效) | |||||
| 0:effective(系统时间无效) | |||||
| 1:invalid(系统时间有效) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveBluetoothDate:(NSString * _Nonnull)date effective:(BOOL)effective; | |||||
| /** | |||||
| Query CID, VID, PID callback(查询CID,VID,PID的回调) | |||||
| @param did CID,VID,PID | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveDID:(struct ELDIDStruct)did; | |||||
| /** | |||||
| Query the callback of the battery status(查询电池状态的回调) | |||||
| @param battery Structure of battery charge status and charge percentage(电池充电状态和电量百分比的结构体) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveBattery:(struct ELBatteryStruct)battery; | |||||
| /** | |||||
| * Query the callback of the device support unit(查询设备支持单位的回调) | |||||
| */ | |||||
| - (void)bluetoothManagerBackDeviceSupportUnitWithWeight:(NSArray<NSNumber *> *_Nullable)weightArray | |||||
| Height:(NSArray<NSNumber *> *_Nullable)heightArray | |||||
| Temperature:(NSArray<NSNumber *> *_Nullable)temperatureArray | |||||
| BloodPressure:(NSArray<NSNumber *> *_Nullable)bloodPressureArray | |||||
| Pressure:(NSArray<NSNumber *> *_Nullable)pressureArray; | |||||
| - (void)bluetoothManagerBackDeviceSupportUnitWithWeight:(NSArray<NSNumber *> *_Nullable)weightArray | |||||
| Height:(NSArray<NSNumber *> *_Nullable)heightArray | |||||
| Temperature:(NSArray<NSNumber *> *_Nullable)temperatureArray | |||||
| BloodPressure:(NSArray<NSNumber *> *_Nullable)bloodPressureArray | |||||
| Pressure:(NSArray<NSNumber *> *_Nullable)pressureArray | |||||
| Volume:(NSArray<NSNumber *> *_Nullable)volumeArray; | |||||
| /// Blood glucose units supported by callback supported devices(回调支持的设备支持的血糖单位) | |||||
| /// @param bloodSugarUnitArray Blood glucose unit array(血糖单位数组) | |||||
| -(void)bluetoothManagerReceiveSupportBloodSugarUnitArray:(NSArray<NSNumber *>* _Nullable)bloodSugarUnitArray; | |||||
| /** | |||||
| Set the result of the decoding key(设置解码密钥的结果) | |||||
| @param result 结果 | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveSetKeyResult:(BOOL)result; | |||||
| /// Device authorization result(设备授权结果) | |||||
| /// @param result 结果 | |||||
| -(void)bluetoothManagerReceiveDeviceAuthorizeResult:(ELBluetoothDeviceAuthorizeResult)result; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| #import "ELPeripheralModel.h" | #import "ELPeripheralModel.h" | ||||
| #import "ELSDKHeader.h" | #import "ELSDKHeader.h" | ||||
| #import "ELBlePublicTool.h" | #import "ELBlePublicTool.h" | ||||
| #import "ELBleWifiDetailModel.h" | |||||
| //MARK: Broadcast Equipment Protocol(广播设备协议) | |||||
| @protocol ELBleBroadcastDelegate <NSObject> | |||||
| @optional | |||||
| /// Callback broadcast device data(回调广播设备数据) | |||||
| /// @param cid cid | |||||
| /// @param vid vid | |||||
| /// @param pid pid | |||||
| /// @param mac mac地址 | |||||
| /// @param data Custom data(自定义数据) | |||||
| -(void)bleBroadcastWithCid:(int)cid vid:(int)vid pid:(int)pid mac:(NSString *_Nonnull)mac data:(NSData *_Nonnull)data; | |||||
| @end | |||||
| //MARK:Bluetooth Wifi protocol(蓝牙Wifi协议) | |||||
| @protocol ElBleWifiDelegate <NSObject> | |||||
| @optional | |||||
| /** | |||||
| Callback Wifi details(回调Wifi详情) | |||||
| @param model 模型 | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiDetailModel:(ELBleWifiDetailModel *_Nonnull)model; | |||||
| /** | |||||
| Scan nearby wifi results(扫描附近wifi结果) | |||||
| @param count Number of nearby wifi(附近wifi数量) | |||||
| */ | |||||
| -(void)bleWifiReceiveScanedWifiCount:(int)count; | |||||
| /** | |||||
| Callback Wifi MAC address(回调Wifi MAC地址) | |||||
| @param macData mac | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiMacData:(NSData *_Nullable)macData; | |||||
| /** | |||||
| Callback WIFI password(回调WIFI密码) | |||||
| @param pwd password(密码) | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiPwd:(NSString *_Nonnull)pwd; | |||||
| /** | |||||
| Get DTIM interval (unit: ms)(获取DTIM间隔(单位:ms)) | |||||
| @param interval Interval (unit: ms)(间隔(单位:ms)) | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiDTIMInterval:(NSInteger)interval; | |||||
| /** | |||||
| Returns the visited URL(返回访问的url) | |||||
| @param url url | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiAccessURL:(NSString *_Nonnull)url; | |||||
| /** | |||||
| Call back wifi port number(回调wifi的端口号) | |||||
| @param port 端口号 | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiPort:(int)port; | |||||
| /** | |||||
| Set or query the callback of the instruction execution result(设置指令蓝牙WIFI响应回调方法) | |||||
| 只支持蓝牙Wifi部分枚举 | |||||
| @param type Type of setting (设置的类型) | |||||
| @param result Set result(设置的结果) | |||||
| */ | |||||
| -(void)bleWifiReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result; | |||||
| /** | |||||
| 获取会话码(deviceId) | |||||
| @param code (deviceId) deviceId(0 means no:为0时表示不存在) | |||||
| */ | |||||
| -(void)bleWifiReceiveWifiSNCode:(int)code; | |||||
| @end | |||||
| //MARK:蓝牙通用协议 | |||||
| @protocol ELBluetoothManagerDelegate <NSObject> | |||||
| @optional | |||||
| //Callback Bluetooth status(回调蓝牙状态) | |||||
| -(void)bluetoothManagerUpdateBleState:(ELBluetoothState)state; | |||||
| //Callback to scanned device(回调扫描到的设备) | |||||
| -(void)bluetoothManagerScanedPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | |||||
| //Special devices that can be bound in the callback, such as door locks(回调中扫描到的可以绑定的特殊设备,如门锁) | |||||
| -(void)bluetoothManagerScanedCanBindSpecialPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | |||||
| //Call back the scanned broadcast device(回调扫描到的广播设备) | |||||
| -(void)bluetoothManagerScanedBroadcastPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | |||||
| //Callback decrypted transparent data (A7 decrypted payload data)(回调解密后的数据(A7解密后payload数据)) | |||||
| -(void)bluetoothManagerReceiveData:(NSData *_Nonnull)data deviceType:(ELSupportDeviceType)type; | |||||
| /** | |||||
| Callback transparent transmission data(回调透传数据) | |||||
| @param data Transparent data transmission (this data cannot start with A6 or A7)(透传数据(此数据不能以A6或A7开头)) | |||||
| */ | |||||
| -(void)bluetoothManagerReceivePassData:(NSData *_Nullable)data; | |||||
| /** 回调已经连接到系统的设备 */ | |||||
| //- (void)bluetoothManagerLinkedSysPeripheral:(NSArray *_Nonnull)peripherals; | |||||
| #pragma mark ============ A6 Set or query the callback of the instruction execution result(设置或查询指令执行结果的回调) ============== | |||||
| /** | |||||
| Set or query the callback of the instruction execution result(设置指令蓝牙响应回调方法(握手指令除外)) | |||||
| @param type Type of setting (设置的类型) | |||||
| @param result Set result(设置的结果) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result; | |||||
| /** | |||||
| Query module status callback(查询模块状态的回调) | |||||
| @param stateStrct 结构体 | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMCUConnectedState:(struct ELMCUStateStruct)stateStrct; | |||||
| /** | |||||
| Query the callback of the communication mode(查询通信模式的回调) | |||||
| @param type communication mode(通信模式) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveCommunicationMode:(ELCommunicationModeType)type; | |||||
| /** | |||||
| Query the callback of automatic sleep time(查询自动睡眠时间的回调) | |||||
| @param sleetStrct Automatic sleep time(自动睡眠时间) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveAutoSleepTime:(struct ELAutoSleepTimeStruct)sleetStrct; | |||||
| /** | |||||
| Query master-slave mode callback(查询主从模式回调) | |||||
| @param mode 模式 | |||||
| 0:Slave mode(从机模式) | |||||
| 1:Host mode(主机模式) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMCUMode:(int)mode; | |||||
| /** | |||||
| Query the callback of UUID information(查询UUID信息的回调) | |||||
| @param uuid ELUUIDStruct | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveUUID:(struct ELUUIDStruct)uuid; | |||||
| /** | |||||
| Query the callback of the MAC address size endian(查询MAC地址大小端序的回调) | |||||
| @param type 类型 | |||||
| 0:Little endian(小端序) | |||||
| 1:Big endian (大端序) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMacAddressType:(int)type; | |||||
| /** | |||||
| Query the callback of the Bluetooth serial port baud rate(查询蓝牙串口波特率的回调) | |||||
| @param rate Serial port baud rate(串口波特率) | |||||
| 0:9600 | |||||
| 1:19200 | |||||
| 2:38400 | |||||
| 3:57600 | |||||
| 4:115200 | |||||
| 5:921600 | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveSerialPostBaudRate:(int)rate; | |||||
| /** | |||||
| Query the callback of Bluetooth transmit power(查询蓝牙发射功率的回调) | |||||
| @param dbm Transmit power(发射功率) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveTransmittingPower:(int)dbm; | |||||
| /** | |||||
| Query the callback of the Bluetooth connection interval(查询蓝牙连接间隔的回调) | |||||
| @param intervalStrct connection interval | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveConnectInterval:(struct ELConnectIntervalStruct)intervalStrct; | |||||
| /** | |||||
| Query the callback of the Bluetooth name(查询蓝牙名称的回调) | |||||
| @param name Bluetooth name(蓝牙名称) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiceName:(NSString *_Nullable)name; | |||||
| /** | |||||
| Query the callback of the Bluetooth broadcast interval(查询蓝牙广播间隔的回调) | |||||
| @param interval broadcast interval(广播间隔) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveBroadcastInterval:(int)interval; | |||||
| /** | |||||
| Query the callback of the Bluetooth MAC address(查询蓝牙MAC地址的回调) | |||||
| @param macAddress MAC | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMACAddress:(NSString *_Nonnull)macAddress; | |||||
| /** | |||||
| Query the callback of the software and hardware version number of the BM module(查询BM模块软硬件版本号的回调) | |||||
| @param bmVersion BM module software and hardware version number(BM模块软硬件版本号) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveBMVersion:(NSString *_Nonnull)bmVersion; | |||||
| /** | |||||
| Query the callback of the MCU software and hardware version number(查询MCU软硬件版本号的回调) | |||||
| @param mcuVersion Callback of MCU software and hardware version number(MCU软硬件版本号的回调) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveMCUVersion:(NSString *_Nonnull)mcuVersion; | |||||
| /** | |||||
| Query the callback of Bluetooth time(查询蓝牙时间的回调) | |||||
| @param date yyyy-MM-dd HH:mm:ss | |||||
| @param effective Time is invalid(时间有无效) | |||||
| 0:effective(系统时间无效) | |||||
| 1:invalid(系统时间有效) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveBluetoothDate:(NSString * _Nonnull)date effective:(BOOL)effective; | |||||
| /** | |||||
| Query CID, VID, PID callback(查询CID,VID,PID的回调) | |||||
| @param did CID,VID,PID | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveDID:(struct ELDIDStruct)did; | |||||
| /** | |||||
| Query the callback of the battery status(查询电池状态的回调) | |||||
| @param battery Structure of battery charge status and charge percentage(电池充电状态和电量百分比的结构体) | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveBattery:(struct ELBatteryStruct)battery; | |||||
| /** | |||||
| * Query the callback of the device support unit(查询设备支持单位的回调) | |||||
| */ | |||||
| - (void)bluetoothManagerBackDeviceSupportUnitWithWeight:(NSArray<NSNumber *> *_Nullable)weightArray | |||||
| Height:(NSArray<NSNumber *> *_Nullable)heightArray | |||||
| Temperature:(NSArray<NSNumber *> *_Nullable)temperatureArray | |||||
| BloodPressure:(NSArray<NSNumber *> *_Nullable)bloodPressureArray | |||||
| Pressure:(NSArray<NSNumber *> *_Nullable)pressureArray; | |||||
| /// Blood glucose units supported by callback supported devices(回调支持的设备支持的血糖单位) | |||||
| /// @param bloodSugarUnitArray Blood glucose unit array(血糖单位数组) | |||||
| -(void)bluetoothManagerReceiveSupportBloodSugarUnitArray:(NSArray<NSNumber *>* _Nullable)bloodSugarUnitArray; | |||||
| /** | |||||
| Set the result of the decoding key(设置解码密钥的结果) | |||||
| @param result 结果 | |||||
| */ | |||||
| -(void)bluetoothManagerReceiveSetKeyResult:(BOOL)result; | |||||
| /// Device authorization result(设备授权结果) | |||||
| /// @param result 结果 | |||||
| -(void)bluetoothManagerReceiveDeviceAuthorizeResult:(ELBluetoothDeviceAuthorizeResult)result; | |||||
| @end | |||||
| #import "ELBluetoothManager+Settings_Callback.h" | |||||
| #import "ELBluetoothManager+BleWifi_Callback.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
| //Disconnect device(断开设备) | //Disconnect device(断开设备) | ||||
| -(void)disconnectPeripheral; | -(void)disconnectPeripheral; | ||||
| /** | |||||
| Get Bluetooth information(获取蓝牙信息) | |||||
| @param type ELInetGetCmdType (ELInetGetCmdTypeGetHandshake除外) | |||||
| */ | |||||
| -(void)getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdType)type; | |||||
| /** | |||||
| Sync the current time of phone to BLE(设置手机本地时间给蓝牙模块,只在蓝牙体脂秤等需要蓝牙模块保存历史记录时才调用) | |||||
| @param enable | |||||
| NO: In addition to the ability to turn off the time function, you can save part of the current (default)(除能,关闭时间功能,可省部分电流(默认)) | |||||
| YES:Enable, turn on the timer function timer(使能,开启计时功能定时器) | |||||
| */ | |||||
| -(void)syncBleNowDate:(BOOL)enable; | |||||
| ///仅WIFI秤调用,同步世界时间(0时区)到wifi-ble模块 | |||||
| -(void)syncBleGMTNowDate:(BOOL)enable; | |||||
| ///同步手机本地时间给mcu,每次连接成功后会自动调用 | |||||
| -(void)syncMCUNowDate; | |||||
| #pragma mark ============ 发送指令的3种方法 ============== | #pragma mark ============ 发送指令的3种方法 ============== | ||||
| /** | /** | ||||
| Shortcut method to send A6 data to BLE(发送A6数据给BLE的快捷方法) | Shortcut method to send A6 data to BLE(发送A6数据给BLE的快捷方法) | ||||
| */ | */ | ||||
| -(void)sendCmdToMCUWithA7PayloadData:(NSData *)data deviceType:(ELSupportDeviceType)type; | -(void)sendCmdToMCUWithA7PayloadData:(NSData *)data deviceType:(ELSupportDeviceType)type; | ||||
| -(void)immediatelySendCmdToMCUWithA7PayloadData:(NSData *)data deviceType:(ELSupportDeviceType)type; | |||||
| /** | /** | ||||
| General method of sending data (support data transparent transmission)(发送数据通用方法(支持数据透传)) | General method of sending data (support data transparent transmission)(发送数据通用方法(支持数据透传)) | ||||
| */ | */ | ||||
| -(void)sendData:(NSData *)data; | -(void)sendData:(NSData *)data; | ||||
| #pragma mark ============ Please rewrite the following methods in the subclass(请在子类重写以下方法) BEGIN============== | #pragma mark ============ Please rewrite the following methods in the subclass(请在子类重写以下方法) BEGIN============== | ||||
| -(void)bluetoothUpdateState:(ELBluetoothState)state; | -(void)bluetoothUpdateState:(ELBluetoothState)state; | ||||
| /** 滑板车专用,返回设备消息推送内容 */ | /** 滑板车专用,返回设备消息推送内容 */ | ||||
| - (void)bluetoothManagerScooterMessageWithUUID:(NSString *)uuid data:(NSData *)data; | - (void)bluetoothManagerScooterMessageWithUUID:(NSString *)uuid data:(NSData *)data; | ||||
| /** 返回滑板车软件版本号 */ | |||||
| - (void)bluetoothManagerScooterSoftwareRevision:(NSString *)version; | |||||
| //Broadcast equipment dedicated(广播设备专用) | //Broadcast equipment dedicated(广播设备专用) | ||||
| /// Broadcast device data | /// Broadcast device data | ||||
| #pragma mark ============ A6 Set or query instructions(设置或查询指令) ============== | |||||
| /** | |||||
| Get Bluetooth information(获取蓝牙信息) | |||||
| @param type ELInetGetCmdType (ELInetGetCmdTypeGetHandshake除外) | |||||
| */ | |||||
| -(void)getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdType)type; | |||||
| /** | |||||
| Set the Bluetooth name(设置蓝牙名称) | |||||
| @param name Name, less than 14 bytes(名称,小于14个byte) | |||||
| */ | |||||
| -(void)setBluetoothName:(NSString * _Nonnull)name; | |||||
| /** | |||||
| Set the broadcast interval(设置广播间隔时间) | |||||
| @param interval 20~2000 | |||||
| */ | |||||
| -(void)setBroadcastInterval:(int)interval; | |||||
| /** | |||||
| Set the connection interval 10(设置连接间隔) | |||||
| @param interval The interval range is 20~2000ms.(interval范围是20~2000ms) | |||||
| @param timeout The timeout range is 1000~6000ms(timeout范围是1000~6000ms) | |||||
| @param latency The latency range is 0~4(latency范围是0〜4) | |||||
| */ | |||||
| -(void)setConnectedInterval:(int)interval timeout:(int)timeout Latency:(int)latency; | |||||
| /** | |||||
| Set the transmit power(设置发射功率) | |||||
| @param power The range of power is 0~10(power的范围是0~10) | |||||
| */ | |||||
| -(void)setTransmittingPower:(int)power; | |||||
| /** | |||||
| Set the serial port baud rate(设置串口波特率) | |||||
| @param rate The range of rate is 0~5(rate的范围是0~5) | |||||
| 0:9600 | |||||
| 1:19200 | |||||
| 2:38400 | |||||
| 3:57600 | |||||
| 4:115200 | |||||
| 5:921600 | |||||
| */ | |||||
| -(void)setSerialPortbaudRate:(int)rate; | |||||
| /** | |||||
| Set the MCU software and hardware version number(设置MCU软硬件版本号) | |||||
| @param hardware 硬件 | |||||
| @param software 软件 | |||||
| 如果是:S1.1,S11.1,S111.1, ..... | |||||
| 请传:11,111,1111, .... | |||||
| @param type Manufacturer's own definition(厂家自己定义) | |||||
| @param year 年 | |||||
| @param month 月 | |||||
| @param day 日 | |||||
| */ | |||||
| -(void)setMCUVersion:(unsigned int)hardware software:(unsigned int)software mcuType:(unsigned int)type year:(unsigned int)year month:(unsigned int)month day:(unsigned int)day; | |||||
| /** | |||||
| Set the big endian or little endian of the Mac address in the broadcast manufacturer's custom data.(设置广播厂家自定义数据中Mac地址的大端序或小端序) | |||||
| @param type type | |||||
| 0:Little endian (default)(小端序 (默认)) | |||||
| 1:Big endian(大端序) | |||||
| */ | |||||
| -(void)setSetMACAddressType:(int)type; | |||||
| /** | |||||
| Set up the module's service and feature services(设置模块的服务和特征服务) | |||||
| @param serverUUIDData server | |||||
| @param charateristicUUIDData charateristic | |||||
| @param type UUID length: | |||||
| 0 : 16 bytes(default) | |||||
| 1:2 bytes | |||||
| */ | |||||
| -(void)setBluetoothServerUUID:(NSData *)serverUUIDData charateristicUUID:(NSData *)charateristicUUIDData UUIDType:(int)type; | |||||
| /** | |||||
| Set the master-slave mode of the module(设置模块的主从模式) | |||||
| @param type Value: | |||||
| 0:Slave mode (default)(从机模式(默认)) | |||||
| 1:Host mode(主机模式) | |||||
| */ | |||||
| -(void)setMCUModel:(int)type; | |||||
| /** | |||||
| Set the module's automatic sleep time without connection(设置模块无连接的自动休眠时间) | |||||
| @param open Automatic sleep flag(自动睡眠标志位): | |||||
| 0:Do not turn on automatic sleep(不开启自动休眠) | |||||
| 1:Turn on auto sleep, the module is not connected(开启自动休眠,模块没有连接) | |||||
| @param time Automatic sleep time (ms)(自动睡眠时间(ms)) | |||||
| @param radio Whether to enable low frequency broadcast after sleep: (unit: ms)(睡眠后是否开启低频广播:(单位:ms)) | |||||
| 0:Not open(不开启) | |||||
| 1:Open(开启) | |||||
| @param interval 低频广播间隔时间,20~2000ms | |||||
| */ | |||||
| -(void)setAutoSleepTimeIsOpen:(BOOL)open autoSleepTime:(unsigned int)time isRadio:(BOOL)radio radioInterval:(int)interval; | |||||
| /** | |||||
| Set to sleep(设置进入睡眠) | |||||
| @param radio Whether to enable low frequency broadcast after sleep: (in ms)(睡眠后是否开启低频广播:(单位 ms)) | |||||
| 0:Not open(不开启) | |||||
| 1:Open(开启) | |||||
| @param interval 低频广播间隔时间,20~2000ms | |||||
| */ | |||||
| -(void)setGotoSleepIsRadio:(BOOL)radio interval:(int)interval; | |||||
| /** | |||||
| Set module wake up(设置模块唤醒) | |||||
| */ | |||||
| -(void)setMCUWakeUp; | |||||
| /** | |||||
| Set the current time of the system(设置系统当前时间) | |||||
| @param enable | |||||
| NO: In addition to the ability to turn off the time function, you can save part of the current (default)(除能,关闭时间功能,可省部分电流(默认)) | |||||
| YES:Enable, turn on the timer function timer(使能,开启计时功能定时器) | |||||
| */ | |||||
| -(void)setMCUNowDateWithEnable:(BOOL)enable; | |||||
| //同步系统时间到mcu | |||||
| -(void)syncMCUNowDate; | |||||
| /** | |||||
| Setting CID, VID, PID(设置CID、VID、PID) | |||||
| @param setC Whether to set the CID(是否设置CID) | |||||
| @param setV Whether to set the VID(是否设置VID) | |||||
| @param setP Whether to set the PID(是否设置PID) | |||||
| @param cid Product Type ID: Less than 65536(产品类型ID:小于65536) | |||||
| @param vid Manufacturer ID: less than 65536(厂家ID:小于65536) | |||||
| @param pid Product ID: Less than 65536(产品ID:小于65536) | |||||
| */ | |||||
| -(void)setC_V_P_IDWithIsSetCID:(BOOL)setC isSetVID:(BOOL)setV isSetPID:(BOOL)setP CID:(unsigned int)cid VID:(unsigned int)vid PID:(unsigned int)pid; | |||||
| /** | |||||
| Set module communication mode | |||||
| 设置模块通信模式 | |||||
| @param mode communication mode(通信模式) | |||||
| */ | |||||
| -(void)setCommunicationMode:(ELCommunicationModeType)mode; | |||||
| /** | |||||
| Set module restart | |||||
| 设置模块重启 | |||||
| */ | |||||
| -(void)setMCURestart; | |||||
| /** | |||||
| Set factory reset | |||||
| 设置恢复出厂设置 | |||||
| */ | |||||
| -(void)setFactoryDataReset; | |||||
| /** | |||||
| Set the Bluetooth connection status(设置蓝牙连接状态) | |||||
| @param disconnect Active disconnect flag(主动断开连接标志位) | |||||
| 1:Disconnect immediately(立刻断开连接) | |||||
| 0:Not disconnected(不断开连接) | |||||
| */ | |||||
| -(void)setDisconnected:(BOOL)disconnect; | |||||
| /** | |||||
| Send decoding key(发送解码密钥) | |||||
| @param data The length of the decoding key is 19, the first 16 are keys, and the last 3 are random texts. You need to save this value on the app and MCU to generate a one-time password. (解码密钥的长度为19,前16个为密钥,后3个为随机文,需要在app端和MCU端保存这个值,用于生成一次性密码) | |||||
| */ | |||||
| - (void)setKeyWithData:(NSData *)data; | |||||
| /// Request device authorization(请求设备授权) | |||||
| /// @param interval 时间截 | |||||
| -(void)requestDeviceAuthorization:(NSInteger)interval; | |||||
| #pragma mark ============ Bluetooth WIFI calling method(蓝牙WIFI调用方法) ============== | |||||
| /** | |||||
| WIFI initiate connection and disconnect(WIFI 发起连接、断开连接) | |||||
| @param connect YES: initiate connection NO: disconnect(YES:发起连接 NO:断开连接) | |||||
| */ | |||||
| -(void)bleWifiSetupWifiConnect:(BOOL)connect; | |||||
| /** | |||||
| Set WIFI access URL(设置WIFI访问URL) | |||||
| @param url url(Not more than 56chars(不超过56chars)) | |||||
| */ | |||||
| -(void)bleWifiSetWifiURL:(NSString *)url; | |||||
| /** | |||||
| Set Wifi access port number(设置Wifi访问端口号) | |||||
| @param port 端口号 | |||||
| */ | |||||
| -(void)bleWifiSetPort:(int)port; | |||||
| /** | |||||
| Set DTIM interval(设置DTIM间隔) | |||||
| @param interval 间隔 | |||||
| */ | |||||
| -(void)bleWifiSetDTIMInterval:(int)interval; | |||||
| /** | |||||
| Set WIFI password(设置WIFI密码) | |||||
| @param pwd WIFI password (8 ~ 56 chars)(WIFI密码(8~56 个chars)) | |||||
| */ | |||||
| -(void)bleWifiSetWifiPwd:(NSString *)pwd; | |||||
| /** | |||||
| Set up connected WIFI(设置连接的WIFI) | |||||
| @param macData wifi MAC (little endian)(wifi的MAC(小端序)) | |||||
| */ | |||||
| -(void)bleWifiSetConnectWifiMac:(NSData *)macData; | |||||
| @end | @end | ||||
| NS_ASSUME_NONNULL_END | NS_ASSUME_NONNULL_END |
| ELBodyFatScaleBleDataA6SubType_BleBackHistoryWithMCUAlgorithm = 0x06 , | ELBodyFatScaleBleDataA6SubType_BleBackHistoryWithMCUAlgorithm = 0x06 , | ||||
| /** ble发给app无体脂数据的历史记录,app需要根据vip/pid确定使用哪种算法来计算8项体脂数据 */ | /** ble发给app无体脂数据的历史记录,app需要根据vip/pid确定使用哪种算法来计算8项体脂数据 */ | ||||
| ELBodyFatScaleBleDataA6SubType_BleBackHistoryWithAppAlgorithm = 0x07, | ELBodyFatScaleBleDataA6SubType_BleBackHistoryWithAppAlgorithm = 0x07, | ||||
| /** App设置访问的IP地址 */ | |||||
| ELBodyFatScaleBleDataA6SubType_AppSetDevIpAddress = 0x8B , | |||||
| /** App获取访问的IP地址 */ | |||||
| ELBodyFatScaleBleDataA6SubType_AppGetDevIpAddress = 0x8C , | |||||
| /** App设置访问的端口号 */ | |||||
| ELBodyFatScaleBleDataA6SubType_AppSetDevPortNumber = 0x8D , | |||||
| /** App获取访问的端口号 */ | |||||
| ELBodyFatScaleBleDataA6SubType_AppGetDevPortNumber = 0x8E , | |||||
| /** App设置访问的路径 */ | |||||
| ELBodyFatScaleBleDataA6SubType_AppSetDevPath = 0x96 , | |||||
| /** App获取访问的路径 */ | |||||
| ELBodyFatScaleBleDataA6SubType_AppGetDevPath = 0x97 , | |||||
| }; | }; | ||||
| // Copyright © 2019 iot_iMac. All rights reserved. | // Copyright © 2019 iot_iMac. All rights reserved. | ||||
| // | // | ||||
| #import "ELBluetoothManager.h" | |||||
| #import <AILinkBleSDK/ELBluetoothManager.h> | |||||
| #import "ELBodyFatScaleBleHeader.h" | #import "ELBodyFatScaleBleHeader.h" | ||||
| @class ELBodyFatScaleBleUserModel,ELBodyFatScaleBleWeightModel,ELPeripheralModel; | |||||
| @class ELBodyFatScaleBleUserModel,ELBodyFatScaleBleWeightModel,ELBodyFatScaleDeviceModel; | |||||
| NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
| @protocol ELBodyFatScaleBleDelegate <NSObject> | @protocol ELBodyFatScaleBleDelegate <NSObject> | ||||
| - (void)bodyFatScaleManagerUpdateState:(ELBluetoothState )state; | - (void)bodyFatScaleManagerUpdateState:(ELBluetoothState )state; | ||||
| /**Callback all body fat scales detected( 回调扫描到的所有体脂秤 )*/ | /**Callback all body fat scales detected( 回调扫描到的所有体脂秤 )*/ | ||||
| - (void)bodyFatScaleManagerScanDevices:(NSArray<ELPeripheralModel *> *)scaleDevices; | |||||
| - (void)bodyFatScaleManagerScanDevices:(NSArray<ELBodyFatScaleDeviceModel *> *)scaleDevices; | |||||
| //MARK:回调A7指令数据 | //MARK:回调A7指令数据 | ||||
| /** | /** |
| @property (nonatomic, assign) NSUInteger heartRate; | @property (nonatomic, assign) NSUInteger heartRate; | ||||
| ///Algorithm ID(算法ID) | ///Algorithm ID(算法ID) | ||||
| @property (nonatomic, assign) NSUInteger algNum; | @property (nonatomic, assign) NSUInteger algNum; | ||||
| ///BMI, need / 10,When this value is 0, you need to calculate it yourself. BMI=Weight(kg)/Height(m)^2 | |||||
| ///BMI,需要除以10, 如果蓝牙返回这个值为0,需要开发者自己计算 BMI=Weight(kg)/Height(m)^2 | |||||
| @property (nonatomic, assign) NSUInteger bmi; | |||||
| @end | @end | ||||
| /// 获取肥胖等级 | /// 获取肥胖等级 | ||||
| /// @param weight 体重(KG) | /// @param weight 体重(KG) | ||||
| /// @param standardWeight 标准体重(KG) | /// @param standardWeight 标准体重(KG) | ||||
| + (AILinkFatLevelType)getfatLevelWithweight:(double)weight andSatndardWeight:(double)standardWeight; | |||||
| + (AILinkFatLevelType)getfatLevelWithweight:(double)weight andStandardWeight:(double)standardWeight; | |||||
| @end | @end | ||||
| NS_ASSUME_NONNULL_END | NS_ASSUME_NONNULL_END |
| @property (nonatomic, assign) BroadcastHeightGuage_TestState testState; | @property (nonatomic, assign) BroadcastHeightGuage_TestState testState; | ||||
| /** 身高数据 */ | /** 身高数据 */ | ||||
| @property (nonatomic, assign) float height; | |||||
| @property (nonatomic, assign) NSUInteger height; | |||||
| /** 身高小数点位 */ | /** 身高小数点位 */ | ||||
| @property (nonatomic, assign) NSUInteger heightPoint; | @property (nonatomic, assign) NSUInteger heightPoint; | ||||
| @property (nonatomic, assign) ELDeviceHeightUnit heightUnit; | @property (nonatomic, assign) ELDeviceHeightUnit heightUnit; | ||||
| /** 体重数据 */ | /** 体重数据 */ | ||||
| @property (nonatomic, assign) float weight; | |||||
| @property (nonatomic, assign) NSInteger weight; | |||||
| /** 体重小数点位 */ | /** 体重小数点位 */ | ||||
| @property (nonatomic, assign) NSUInteger weightPoint; | @property (nonatomic, assign) NSUInteger weightPoint; |
| // Copyright © 2021 IOT. All rights reserved. | // Copyright © 2021 IOT. All rights reserved. | ||||
| // | // | ||||
| #import "ELBluetoothManager.h" | |||||
| #import <AILinkBleSDK/ELBluetoothManager.h> | |||||
| #import "ELBroadcastHeightGaugeBleDataModel.h" | #import "ELBroadcastHeightGaugeBleDataModel.h" | ||||
| NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
| - (void)broadcastHeightGaugeUpdateState:(ELBluetoothState)state; | - (void)broadcastHeightGaugeUpdateState:(ELBluetoothState)state; | ||||
| /** Call back all height gauge devices(回调所有身高仪设备) */ | /** Call back all height gauge devices(回调所有身高仪设备) */ | ||||
| //- (void)broadcastHeightGaugeScanDevices:(NSArray<ELPeripheralModel *> *)heightGaugeDevices; | |||||
| - (void)broadcastHeightGaugeScanDevices:(NSArray<ELPeripheralModel *> *)heightGaugeDevices; | |||||
| /** 回调身高数据 */ | /** 回调身高数据 */ | ||||
| - (void)broadcastHeightGaugeDeviceDataModel:(ELBroadcastHeightGaugeBleDataModel *)model; | - (void)broadcastHeightGaugeDeviceDataModel:(ELBroadcastHeightGaugeBleDataModel *)model; |
| // | |||||
| // ELBroadcastNutritionFoodScaleBleHeader.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/8/21. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #ifndef ELBroadcastNutritionFoodScaleBleHeader_h | |||||
| #define ELBroadcastNutritionFoodScaleBleHeader_h | |||||
| #import "ELSDKHeader.h" | |||||
| typedef NS_ENUM(NSUInteger, BroadcastNutritionFoodScaleStatus) { | |||||
| //Real-time weight(实时重量) | |||||
| BroadcastNutritionFoodScaleStatus_RealTime = 0, | |||||
| //Stable weight(稳定重量) | |||||
| BroadcastNutritionFoodScaleStatus_Stable = 1, | |||||
| //error (测量异常) | |||||
| BroadcastNutritionFoodScaleStatus_Error = 2, | |||||
| }; | |||||
| /** 广播营养秤 Weight unit(重量单位)*/ | |||||
| typedef NS_ENUM(NSInteger, BroadcastNutritionFoodScaleWeightUnit) { | |||||
| /** g */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_G = 0 , | |||||
| /** ml */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_ML = 1 , | |||||
| /** lb:oz */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_LB_OZ = 2 , | |||||
| /** oz */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_OZ = 3 , | |||||
| /** kg */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_KG = 4 , | |||||
| /** 斤 */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_JIN = 5 , | |||||
| /** 牛奶 ml */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_MILK_ML = 6 , | |||||
| /** 水 ml */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_WATER_ML = 7 , | |||||
| /** 牛奶 fl.oz */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_MILK_FLOZ = 8 , | |||||
| /** 水 fl.oz */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_WATER_FLOZ = 9 , | |||||
| /** lb */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_LB = 10 , | |||||
| /** Unsupported unit */ | |||||
| BroadcastNutritionFoodScaleWeightUnit_Fail = 0xFF , | |||||
| }; | |||||
| typedef NS_ENUM(NSUInteger, BroadcastNutritionFoodScaleErrorStatus) { | |||||
| //Low Power(1:电量过低,无法测试 0:正常) | |||||
| BroadcastNutritionFoodScaleErrorStatus_Low_Power_mask = 1 << 0, | |||||
| //Over Range(1: 超重 0:正常) | |||||
| BroadcastNutritionFoodScaleErrorStatus_Over_Range_mask = 1 << 1, | |||||
| }; | |||||
| #endif /* ELBroadcastNutritionFoodScaleBleHeader_h */ |
| // | |||||
| // ELBroadcastNutritionFoodScaleBleManager.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/8/21. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| #import "ELBroadcastNutritionFoodScaleDataModel.h" | |||||
| @protocol BroadcastNutritionFoodScaleBleDelegate <NSObject> | |||||
| @optional | |||||
| //Bluetooth connection status(蓝牙连接状态) | |||||
| - (void)broadcastNutritionFoodScaleBleUpdateState:(ELBluetoothState)state; | |||||
| // | |||||
| - (void)broadcastNutritionFoodScaleBleDataModel:(ELBroadcastNutritionFoodScaleDataModel *_Nonnull)model; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELBroadcastNutritionFoodScaleBleManager : ELBluetoothManager | |||||
| @property(nonatomic, weak) id <BroadcastNutritionFoodScaleBleDelegate> broadcastNutritionFoodScaleBleDelegate; | |||||
| + (instancetype)shareManager; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELBroadcastNutritionFoodScaleDataModel.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/8/21. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELBroadcastNutritionFoodScaleBleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELBroadcastNutritionFoodScaleDataModel : NSObject | |||||
| @property(nonatomic, assign) int cid; | |||||
| @property(nonatomic, assign) int vid; | |||||
| @property(nonatomic, assign) int pid; | |||||
| @property(nonatomic, copy) NSString *mac; | |||||
| //Data serial number(数据流水号) | |||||
| @property(nonatomic, assign) Byte serialNumber; | |||||
| //Measurement status(测量状态) | |||||
| @property (nonatomic, assign) BroadcastNutritionFoodScaleStatus testStatus; | |||||
| //weight(重量数据) | |||||
| @property (nonatomic, assign) UInt32 weight; | |||||
| //Weight unit(重量单位) | |||||
| @property(nonatomic, assign) BroadcastNutritionFoodScaleWeightUnit weightUnit; | |||||
| //Weight decimal point(体重小数点) | |||||
| @property(nonatomic, assign) Byte weightPoint; | |||||
| //Weight negative(是否负数) | |||||
| @property(nonatomic, assign, getter=isNegative) BOOL negative; | |||||
| //Power(电量 0~100%) | |||||
| @property(nonatomic, assign) Byte power; | |||||
| //Error(异常标志) | |||||
| @property(nonatomic, assign) BroadcastNutritionFoodScaleErrorStatus errorStatus; | |||||
| //timestamp(时间戳) | |||||
| @property(nonatomic, assign) long long timestamp; | |||||
| @end | |||||
| NSString *BroadcastNutritionFoodScaleWeightUnitString(BroadcastNutritionFoodScaleWeightUnit unit); | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELCM02_BatteryBleModel.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/9/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELCM02_BleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| /** 电池信息蓝牙数据模型 */ | |||||
| @interface ELCM02_BatteryBleModel : NSObject | |||||
| /** 电池温度,摄氏度 */ | |||||
| @property (nonatomic, assign) float tem; | |||||
| /** 电流状态 */ | |||||
| @property (nonatomic, assign) enum CM02_BatteryElectricCurrent_Type state; | |||||
| /** 电流 A 正数位放电电流,负数为充电电流 */ | |||||
| @property (nonatomic, assign) float electricCurrent; | |||||
| /** 电压 V */ | |||||
| @property (nonatomic, assign) float voltage; | |||||
| /** 电池总容量 mAh */ | |||||
| @property (nonatomic, assign) NSInteger capacitance; | |||||
| /** 电池充放电次数 */ | |||||
| @property (nonatomic, assign) NSInteger chargeTimes; | |||||
| + (instancetype)instanceWithBleData:(NSData *)data; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELCM02_BleHeader.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/9/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #ifndef ELCM02_BleHeader_h | |||||
| #define ELCM02_BleHeader_h | |||||
| /** 蓝牙协议type定义 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_BleDataType) { | |||||
| /** 查询设备支持功能 */ | |||||
| CM02_BleDataType_SupportFunction = 0x00 , | |||||
| /** 心跳数据交互 */ | |||||
| CM02_BleDataType_Heartbeat = 0x01 , | |||||
| /** 设置控制器状态 */ | |||||
| CM02_BleDataType_SetControl = 0x02 , | |||||
| /** 清除BM模块参数 */ | |||||
| CM02_BleDataType_ClearBMParam = 0x03 , | |||||
| /** 设置模式档位速度 */ | |||||
| CM02_BleDataType_SetupGear = 0x04 , | |||||
| /** 设置灯光 */ | |||||
| CM02_BleDataType_SetupLight = 0x05 , | |||||
| /** 设置解锁车密码 */ | |||||
| CM02_BleDataType_SetupPassworld = 0x06 , | |||||
| /** 锁车及解锁 */ | |||||
| CM02_BleDataType_LockOrUnlock = 0x07 , | |||||
| /** 售后密码查询 */ | |||||
| CM02_BleDataType_AfterSalesPassword = 0x08 , | |||||
| /** 查询单次行驶里程时间 */ | |||||
| CM02_BleDataType_SingleMileage = 0x0C , | |||||
| /** 查询总里程 */ | |||||
| CM02_BleDataType_TotalMileage = 0x0D , | |||||
| /** 查询电池信息 */ | |||||
| CM02_BleDataType_Battery = 0x0E , | |||||
| /** 查询控制器厂商代码及编号 */ | |||||
| CM02_BleDataType_ControlVersion = 0x10 , | |||||
| /** 查询仪表固件版本 */ | |||||
| CM02_BleDataType_DashboardVersion = 0x11 , | |||||
| }; | |||||
| /** 开机状态 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_PoweronState_Type) { | |||||
| /** 开机状态 */ | |||||
| CM02_PoweronState_Type_Poweron = 0 , | |||||
| /** 准备关机 */ | |||||
| CM02_PoweronState_Type_ReadyShutDown , | |||||
| }; | |||||
| /** 公里制单位 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_Unit_Type) { | |||||
| /** 公里制 */ | |||||
| CM02_Unit_Type_Kilometer = 0 , | |||||
| /** 英里制 */ | |||||
| CM02_Unit_Type_Mile = 1 , | |||||
| }; | |||||
| /** 模式 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_Mode) { | |||||
| CM02_Mode_None = 0 , | |||||
| }; | |||||
| /** 密码是否正确枚举定义 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_PasswordCorrect_Type) { | |||||
| /** 密码正确 */ | |||||
| CM02_PasswordCorrect_Type_Correct = 0 , | |||||
| /** 密码错误 */ | |||||
| CM02_PasswordCorrect_Type_Wrong = 1 , | |||||
| }; | |||||
| /** 开锁相关的功能枚举定义 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_LockState_Type) { | |||||
| /** 解锁 */ | |||||
| CM02_LockState_Type_UnLock = 0 , | |||||
| /** 上锁 */ | |||||
| CM02_LockState_Type_Lock = 1 , | |||||
| /** 验证密码 */ | |||||
| CM02_LockState_Type_VerifyPassword = 2 , | |||||
| }; | |||||
| /** 结果枚举定义 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_Result_Type) { | |||||
| /** 成功 */ | |||||
| CM02_Result_Type_Success = 0 , | |||||
| /** 失败 */ | |||||
| CM02_Result_Type_Faild , | |||||
| /** 不支持 */ | |||||
| CM02_Result_Type_NotSupport , | |||||
| }; | |||||
| /** 电池电流枚举定义 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_BatteryElectricCurrent_Type) { | |||||
| /** 实时电流 */ | |||||
| CM02_BatteryElectricCurrent_Type_Real = 0 , | |||||
| /** 电流限流 */ | |||||
| CM02_BatteryElectricCurrent_Type_Limit = 1 , | |||||
| }; | |||||
| /** 设备类型 */ | |||||
| typedef NS_ENUM(NSInteger, CM02_DeviceType) { | |||||
| /** 仪表桥接:表示BM模块作为核心板,搭配客户的底板,作为仪表功能 */ | |||||
| CM02_DeviceType_InstrumentBridge = 0 , | |||||
| /** BLE透传:表示BM模块只提供BLE功能,作为透传模块,和客户的仪表通过uart连接,做透传功能 */ | |||||
| CM02_DeviceType_BlePassThrough = 1 , | |||||
| }; | |||||
| #endif /* ELCM02_BleHeader_h */ |
| // | |||||
| // ELCM02_BleManager.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/9/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| #import "ELCM02_HeartbeatBleModel.h" | |||||
| #import "ELCM02_BatteryBleModel.h" | |||||
| #import "ELCM02_BleSupportFunctionModel.h" | |||||
| #import "ELCM02_BleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @protocol CM02_BleDelegate <NSObject> | |||||
| @optional | |||||
| - (void)CM02ManagerUpdateState:(enum ELBluetoothState)state; | |||||
| - (void)CM02ManagerScanDevices:(NSArray<ELPeripheralModel *> *_Nullable)CM02Devices; | |||||
| /** 返回设备支持的功能 */ | |||||
| - (void)CM02ManagerBackSupportFunctionModel:(ELCM02_BleSupportFunctionModel *)model; | |||||
| /** CM02返回设备心跳数据 */ | |||||
| - (void)CM02ManagerBackHeartbeatModel:(ELCM02_HeartbeatBleModel *)model; | |||||
| /** CM02回复修改密码结果 */ | |||||
| - (void)CM02ManagerBackUpdatePasswordResult:(enum CM02_Result_Type)result; | |||||
| /** CM02回复解锁和开锁状态 */ | |||||
| - (void)CM02ManagerBackLockState:(enum CM02_LockState_Type)lock passwordResult:(enum CM02_PasswordCorrect_Type)result; | |||||
| /** CM02回复售后密码 */ | |||||
| - (void)CM02ManagerBackAfterSalesPassword:(NSString *)afterSalesPassword; | |||||
| /** CM02回复单次行程和对应时间 */ | |||||
| - (void)CM02ManagerBackSingleMileage:(float)kmMileage time:(NSInteger)second; | |||||
| /** CM02回复总里程信息 */ | |||||
| - (void)CM02ManagerBackTotalMileage:(float)kmMileage; | |||||
| /** CM02回复电池信息 */ | |||||
| - (void)CM02ManagerBackBatteryBleModel:(ELCM02_BatteryBleModel *)model; | |||||
| /** CM02回复控制器编号,硬件版本号和软件版本号 */ | |||||
| - (void)CM02ManagerBackControlCode:(NSString *)code hardwareVersion:(NSString *)hardwareVersion softwareVersion:(NSString *)softwareVersion; | |||||
| /** CM02回复仪表编号,硬件版本和软件版本号 */ | |||||
| - (void)CM02ManagerBackDashboardCode:(NSString *)code hardwareVersion:(NSString *)hardwareVersion softwareVersion:(NSString *)softwareVersion; | |||||
| @end | |||||
| @interface ELCM02_BleManager : ELBluetoothManager | |||||
| @property (nonatomic, weak) id<CM02_BleDelegate> CM02Delegate; | |||||
| + (ELCM02_BleManager *)shareManager; | |||||
| ///** 查询接收端类型及支持的功能 */ | |||||
| - (void)getDeviceBaseInformation; | |||||
| /** 切换单位 */ | |||||
| - (void)changeUnit:(enum CM02_Unit_Type)unit; | |||||
| /** 定速巡航开关 */ | |||||
| - (void)setCruiseSwitch:(BOOL)state; | |||||
| /** 是否为非零速度启动 */ | |||||
| - (void)setSpeedStart:(BOOL)state; | |||||
| /** 恢复出厂设置 */ | |||||
| - (void)resetDevice; | |||||
| /** 清除除里程和时间外的其它控制器及仪表参数 */ | |||||
| - (void)clearOtherCacheData; | |||||
| /** 清除总里程 */ | |||||
| - (void)clearTotalMileage; | |||||
| /** 清除单次里程时间(设备一开机就会记录骑行时间和里程,当需要记录这些时间和里程的时候需要清除一下当次时间,重新开始记录) */ | |||||
| - (void)clearSingleTime; | |||||
| /** 设置档位(1-7) */ | |||||
| - (void)setGear:(NSInteger)gear; | |||||
| /** 开关灯 */ | |||||
| - (void)setLightState:(BOOL)state; | |||||
| /** 修改密码 */ | |||||
| - (void)updatePasswordWithOldPassword:(NSString *)oldPassword newPassword:(NSString *)newPassword; | |||||
| /** 解锁或者锁车(锁车无需传密码) */ | |||||
| - (void)setLockState:(enum CM02_LockState_Type)lock password:(NSString *)password; | |||||
| /** 查询售后密码 */ | |||||
| - (void)getAfterSalesPassword; | |||||
| /** 查询单次行驶里程和时间 */ | |||||
| - (void)getNowSingleMileageInformation; | |||||
| /** 查询总里程 */ | |||||
| - (void)getTotalMileageInformation; | |||||
| /** 查询电池信息 */ | |||||
| - (void)getBatteryInformation; | |||||
| /** 查询控制器厂商代码及编号 */ | |||||
| - (void)getControlVersion; | |||||
| /** 查询仪表盘固件版本 */ | |||||
| - (void)getDashboardVersion; | |||||
| #pragma mark - 断开设备清除缓存信息 | |||||
| - (void)cleanData; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELCM02_BleSupportFunctionModel.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/9/22. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELCM02_BleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| /** CM02设备支持功能对象模型 */ | |||||
| @interface ELCM02_BleSupportFunctionModel : NSObject | |||||
| /** 设备类型 */ | |||||
| @property (nonatomic, assign) enum CM02_DeviceType deviceType; | |||||
| /** 是否支持自动背光 */ | |||||
| @property (nonatomic, assign) BOOL autoLight; | |||||
| /** 是否支持手动背光 */ | |||||
| @property (nonatomic, assign) BOOL manualLight; | |||||
| /** 支持的档位个数 */ | |||||
| @property (nonatomic, assign) NSInteger gearNum; | |||||
| /** 是否支持助力模式 */ | |||||
| @property (nonatomic, assign) BOOL helpMode; | |||||
| /** 定速巡航开关 */ | |||||
| @property (nonatomic, assign) BOOL cruiseControl; | |||||
| /** 是否支持零启动和非零启动切换 */ | |||||
| @property (nonatomic, assign) BOOL speedStartChange; | |||||
| /** 控制器厂商代码编号 */ | |||||
| @property (nonatomic, assign) BOOL controlCodeNum; | |||||
| /** 电池信息 */ | |||||
| @property (nonatomic, assign) BOOL batteryInformation; | |||||
| /** 电池厂商代码编号 */ | |||||
| @property (nonatomic, assign) BOOL batteryCodeNum; | |||||
| /** 右转灯开关 */ | |||||
| @property (nonatomic, assign) BOOL rightLightSwitch; | |||||
| /** 左转灯开关 */ | |||||
| @property (nonatomic, assign) BOOL leftLightSwitch; | |||||
| /** 氛围灯开关 */ | |||||
| @property (nonatomic, assign) BOOL ambientLightSwitch; | |||||
| /** 日行灯开关 */ | |||||
| @property (nonatomic, assign) BOOL daytimeRunningLightSwitch; | |||||
| /** 刹车灯开关 */ | |||||
| @property (nonatomic, assign) BOOL brakeLightSwitch; | |||||
| /** 前车灯开关 */ | |||||
| @property (nonatomic, assign) BOOL frontLightSwitch; | |||||
| + (instancetype)instanceWithBleData:(NSData *)data; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELCM02_HeartbeatBleModel.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/9/13. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELCM02_BleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| /** CM02设备心跳包数据模型 */ | |||||
| @interface ELCM02_HeartbeatBleModel : NSObject | |||||
| /** 是否正在充电 */ | |||||
| @property (nonatomic, assign) BOOL charging; | |||||
| /** 电池电量 */ | |||||
| @property (nonatomic, assign) NSUInteger power; | |||||
| /** 车辆速度 */ | |||||
| @property (nonatomic, assign) float speed; | |||||
| /** 开机状态 */ | |||||
| @property (nonatomic, assign) enum CM02_PoweronState_Type poweronState; | |||||
| /** 是否为推行模式,否则为正常行驶 */ | |||||
| @property (nonatomic, assign) BOOL pursueMode; | |||||
| /** 是否为巡航状态 */ | |||||
| @property (nonatomic, assign) BOOL cruiseState; | |||||
| /** 单位 */ | |||||
| @property (nonatomic, assign) enum CM02_Unit_Type unit; | |||||
| /** 是否为助力模式 */ | |||||
| @property (nonatomic, assign) BOOL helpMode; | |||||
| /** 巡航功能开关状态 */ | |||||
| @property (nonatomic, assign) BOOL cruiseSwitchState; | |||||
| /** 是否为非零速度启动 */ | |||||
| @property (nonatomic, assign) BOOL speedStart; | |||||
| /** 车辆是否被锁 */ | |||||
| @property (nonatomic, assign) BOOL isLocked; | |||||
| /** 模式 */ | |||||
| @property (nonatomic, assign) enum CM02_Mode mode; | |||||
| /** 档位(1-7) */ | |||||
| @property (nonatomic, assign) NSInteger gear; | |||||
| /** 转把是否有效 */ | |||||
| @property (nonatomic, assign) BOOL turnHandleEffective; | |||||
| /** 电子刹车是否再刹车 */ | |||||
| @property (nonatomic, assign) BOOL electronicBrakeState; | |||||
| /** 机械刹车是否再刹车 */ | |||||
| @property (nonatomic, assign) BOOL mechanicalBrakeState; | |||||
| /** 电机是否再运行 */ | |||||
| @property (nonatomic, assign) BOOL motorState; | |||||
| /** 右转向灯是否开启 */ | |||||
| @property (nonatomic, assign) BOOL rightLightState; | |||||
| /** 左转向灯是否开启 */ | |||||
| @property (nonatomic, assign) BOOL leftLightState; | |||||
| /** 氛围灯是否开启 */ | |||||
| @property (nonatomic, assign) BOOL atmosphereLightState; | |||||
| /** 日行灯是否开启 */ | |||||
| @property (nonatomic, assign) BOOL daytimeRunningLightState; | |||||
| /** 刹车灯是否开启 */ | |||||
| @property (nonatomic, assign) BOOL brakeLightState; | |||||
| /** 前车灯开关 */ | |||||
| @property (nonatomic, assign) BOOL lightState; | |||||
| /** 电池是否有故障 */ | |||||
| @property (nonatomic, assign) BOOL batteryState; | |||||
| /** 控制器是否有故障 */ | |||||
| @property (nonatomic, assign) BOOL controlState; | |||||
| /** 电机相线或者MOS管短路是否有故障 */ | |||||
| @property (nonatomic, assign) BOOL MOSState; | |||||
| /** 电机霍尔是否有故障 */ | |||||
| @property (nonatomic, assign) BOOL hallState; | |||||
| /** 刹车是否有故障 */ | |||||
| @property (nonatomic, assign) BOOL brakeState; | |||||
| /** 转把是否有故障 */ | |||||
| @property (nonatomic, assign) BOOL turnHandleState; | |||||
| /** 通讯是否有故障 */ | |||||
| @property (nonatomic, assign) BOOL communicationsState; | |||||
| /** 单次行驶里程距离,使用当前单位 */ | |||||
| @property (nonatomic, assign) float distance; | |||||
| /** 单次行驶时间,秒 */ | |||||
| @property (nonatomic, assign) NSInteger drivingTime; | |||||
| /** 升级状态 */ | |||||
| @property (nonatomic, assign) BOOL upgradeStatus; | |||||
| + (instancetype)instanceWithBleData:(NSData *)data; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELCoffeeScaleBleDataModel.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/9/30. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import <UIKit/UIKit.h> | |||||
| #import "ELCoffeeScaleBleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELCoffeeScaleBleDataModel : NSObject | |||||
| /** 是否为稳定数据 */ | |||||
| @property (nonatomic, assign) BOOL stableData; | |||||
| /** 质量单位 */ | |||||
| @property (nonatomic, assign) ELDeviceWeightUnit weightUnit; | |||||
| /** 质量值 */ | |||||
| @property (nonatomic, copy) NSString *weightString; | |||||
| /** 质量值 */ | |||||
| @property (nonatomic, assign) CGFloat weightValue; | |||||
| /** 温度单位 */ | |||||
| @property (nonatomic, assign) ELDeviceTemperatureUnit temUnit; | |||||
| /** 温度值 */ | |||||
| @property (nonatomic, assign) CGFloat tem; | |||||
| /** 时间戳 */ | |||||
| @property (nonatomic, assign) NSTimeInterval timestamp; | |||||
| //质量正负标识 | |||||
| @property (nonatomic, assign) BOOL rawWeightNegative; | |||||
| //质量小数点位 | |||||
| @property (nonatomic, assign) NSInteger rawWeightPoint; | |||||
| //质量 | |||||
| @property (nonatomic, assign) NSInteger rawWeight; | |||||
| //异常状态 0无异常 1超重 | |||||
| @property (nonatomic, assign) NSInteger error; | |||||
| + (instancetype)dataWithPayloadData:(NSData *)data; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELCoffeeScaleBleHeader.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/9/30. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #ifndef ELCoffeeScaleBleHeader_h | |||||
| #define ELCoffeeScaleBleHeader_h | |||||
| #import "ELSDKHeader.h" | |||||
| /** 咖啡秤电池充电状态枚举定义 */ | |||||
| typedef NS_ENUM(NSInteger, CoffeeChargingType) { | |||||
| /** 没有充电 */ | |||||
| CoffeeChargingType_NoCharging = 0 , | |||||
| /** 充电中 */ | |||||
| CoffeeChargingType_Charging , | |||||
| /** 充满电 */ | |||||
| CoffeeChargingType_FullyCharged , | |||||
| /** 充电异常 */ | |||||
| CoffeeChargingType_AbnormalCharging , | |||||
| }; | |||||
| /** 咖啡秤设置结果枚举定义 */ | |||||
| typedef NS_ENUM(NSInteger, CoffeeSetResultType) { | |||||
| /** 成功 */ | |||||
| CoffeeSetResultType_Success = 0 , | |||||
| /** 失败 */ | |||||
| CoffeeSetResultType_Failure = 1 , | |||||
| /** 不支持 */ | |||||
| CoffeeSetResultType_NotSupport = 2 , | |||||
| }; | |||||
| typedef NS_ENUM(NSUInteger, ELCoffeeScaleTimerControl) { | |||||
| ELCoffeeScaleTimerControl_count = 0x01,//计时 | |||||
| ELCoffeeScaleTimerControl_pause = 0x02,//暂停 | |||||
| ELCoffeeScaleTimerControl_reset = 0x03,//重置 | |||||
| }; | |||||
| #endif /* ELCoffeeScaleBleHeader_h */ |
| // | |||||
| // ELCoffeeScaleBleManager.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/9/30. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| #import "ELCoffeeScaleBleHeader.h" | |||||
| #import "ELCoffeeScaleBleDataModel.h" | |||||
| @protocol CoffeeScaleBleDelegate <NSObject> | |||||
| @optional | |||||
| /// 蓝牙连接状态 | |||||
| /// @param state 连接状态 | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state; | |||||
| /// 附近的设备 | |||||
| /// @param devices 设备列表 | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *_Nullable)devices; | |||||
| //获得支持单位列表 | |||||
| - (void)supportWeightUnits:(NSArray *_Nullable)weightArray; | |||||
| //正在连接中倒计时 | |||||
| - (void)deviceBleCountDown:(NSInteger)count; | |||||
| /** 返回咖啡秤称量的数据模型 */ | |||||
| - (void)coffeeScaleBleReceiveStatusDataModel:(ELCoffeeScaleBleDataModel *_Nonnull)model; | |||||
| /** 返回设备电量 */ | |||||
| - (void)coffeeScaleBleRechargeState:(CoffeeChargingType)type powerNumber:(NSInteger)power; | |||||
| /** 返回报警设置指令设置结果 */ | |||||
| - (void)coffeeScaleAlarmSystemState:(CoffeeSetResultType)state; | |||||
| /** 返回计时设置指令设置结果 */ | |||||
| - (void)coffeeScaleBleReceiveSupportCountTime:(CoffeeSetResultType)state; | |||||
| //计时功能控制 | |||||
| - (void)coffeeScaleBleReceiveTimerControl:(BOOL)countdown duration:(NSUInteger)duration control:(ELCoffeeScaleTimerControl)control; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELCoffeeScaleBleManager : ELBluetoothManager | |||||
| @property (nonatomic, weak) id<CoffeeScaleBleDelegate> coffeeScaleDelegate; | |||||
| + (instancetype)shareManager; | |||||
| - (void)autoScan; | |||||
| - (void)stopAutoScan; | |||||
| - (void)checkStatus; | |||||
| //APP 下发归零 | |||||
| - (void)sendMakeZero; //A7 00 24 LEN *02 *01 SUM 7A | |||||
| //APP 下发单位设置 | |||||
| - (void)sendWeightUnit:(ELDeviceWeightUnit)unit; //A7 00 24 LEN *04 *[00~06] SUM 7A | |||||
| - (void)sendTemperatureUnit:(ELDeviceTemperatureUnit)unit; //A7 00 24 LEN *06 *[00~01] SUM 7A | |||||
| - (void)sendBeepOn:(BOOL)on; | |||||
| //APP 下发自动关机设置 | |||||
| - (void)sendPowerOffDuration:(NSInteger)duration; //A7 00 24 LEN *08 [*00 *00 ~ *FF *FE] SUM 7A | |||||
| /** APP 设置报警指令 | |||||
| * @param state : 开关 | |||||
| * @param duration : 报警持续时间值,单位s | |||||
| */ | |||||
| - (void)sendAlarmInstructionWithState:(BOOL)state duration:(NSInteger)duration; | |||||
| /** 停止报警指令 */ | |||||
| - (void)sendStopAlarmInstruction; | |||||
| //APP 下发计时控制 control:1计时2暂停3重置 countdown:YES倒计时NO正计时 | |||||
| - (void)sendTimeControlDuration:(NSInteger)duration control:(ELCoffeeScaleTimerControl)control countdown:(BOOL)countdown; //A7 00 24 *0A *[00~01] [*00 *00 ~ *FF *FE] *[00~03] SUM 7A | |||||
| //退出冲煮或称重:(appMode:0 subMode:1) 冲煮:(appMode:1 subMode:0) 称重:(appMode:1 subMode:1) | |||||
| - (void)sendSwithAppMode:(BOOL)appMode subMode:(Byte)subMode; //A7 00 24 LEN *11 *[00~01] *[00~01] SUM 7A | |||||
| @end | |||||
| @interface ELCoffeeScaleBleManager () | |||||
| @property (nonatomic, assign) NSInteger supportTimer;//0 未检测 1 支持 2 不支持 | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELEightScaleBleBfrDataModel.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/8/25. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELEightScaleSDKHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| /** 秤端计算的体脂数据 */ | |||||
| @interface ELEightScaleBleBfrDataModel : NSObject | |||||
| @property (nonatomic, assign) float BMI; | |||||
| /** 全身体脂率 % */ | |||||
| @property (nonatomic, assign) float bodyBfr; | |||||
| /** 全身肌肉率 % */ | |||||
| @property (nonatomic, assign) float bodyRom; | |||||
| /** 左上肢脂肪量 kg */ | |||||
| @property (nonatomic, assign) float leftHandFatMass; | |||||
| /** 右上肢脂肪量 kg */ | |||||
| @property (nonatomic, assign) float rightHandFatMass; | |||||
| /** 躯干脂肪量 kg */ | |||||
| @property (nonatomic, assign) float bodyFatMass; | |||||
| /** 左下肢脂肪量 kg */ | |||||
| @property (nonatomic, assign) float leftFootFatMass; | |||||
| /** 右下肢脂肪量 kg */ | |||||
| @property (nonatomic, assign) float rightFootFatMass; | |||||
| /** 左上肢肌肉量 kg */ | |||||
| @property (nonatomic, assign) float leftHandMuscleMass; | |||||
| /** 右上肢肌肉量 kg */ | |||||
| @property (nonatomic, assign) float rightHandMuscleMass; | |||||
| /** 躯干肌肉量 kg */ | |||||
| @property (nonatomic, assign) float bodyMuscleMass; | |||||
| /** 左下肢肌肉量 kg */ | |||||
| @property (nonatomic, assign) float leftFootMuscleMass; | |||||
| /** 右下肢肌肉量 kg */ | |||||
| @property (nonatomic, assign) float rightFootMuscleMass; | |||||
| /** 身体水分 % */ | |||||
| @property (nonatomic, assign) float bodyWater; | |||||
| /** 骨重 kg */ | |||||
| @property (nonatomic, assign) float BoneMass; | |||||
| /** 基础代谢率 kcal */ | |||||
| @property (nonatomic, assign) int BMR; | |||||
| /** 蛋白率 % */ | |||||
| @property (nonatomic, assign) float ProteinRate; | |||||
| /** 内脏脂肪指数 */ | |||||
| @property (nonatomic, assign) int uvi; | |||||
| /** 皮下脂肪 % */ | |||||
| @property (nonatomic, assign) float sfr; | |||||
| /** 身高 cm */ | |||||
| @property (nonatomic, assign) int height; | |||||
| /** 身体年龄 */ | |||||
| @property (nonatomic, assign) int bodyAge; | |||||
| @end | |||||
| /** 八电极需要用户数据对象模型 */ | |||||
| @interface ELEightScaleBleUserModel : NSObject | |||||
| /** 用户特征 */ | |||||
| @property (nonatomic, assign) enum EightScaleRole role; | |||||
| /** 当前用户所属好身材用户编号 */ | |||||
| @property (nonatomic, assign) int number; | |||||
| /** 性别 1男,0女 */ | |||||
| @property (nonatomic, assign) int gender; | |||||
| /** 年龄 */ | |||||
| @property (nonatomic, assign) int age; | |||||
| /** 身高 cm */ | |||||
| @property (nonatomic, assign) int height; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| #import "ELBluetoothManager.h" | #import "ELBluetoothManager.h" | ||||
| #import "ELEightScaleSDKHeader.h" | #import "ELEightScaleSDKHeader.h" | ||||
| #import "ELEightScaleBleDataModel.h" | #import "ELEightScaleBleDataModel.h" | ||||
| #import "ELEightScaleBleBfrDataModel.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
| /// Switch weight unit result(切换体重单位结果) | /// Switch weight unit result(切换体重单位结果) | ||||
| /// @param result 结果 | /// @param result 结果 | ||||
| -(void)eightScaleBleReceiveSwitchWeightUnitResult:(EightScaleSwitchUnitResult)result; | -(void)eightScaleBleReceiveSwitchWeightUnitResult:(EightScaleSwitchUnitResult)result; | ||||
| ///MCU上报身高数据 | |||||
| - (void)eightScaleBleReportHeightDataWithHeight:(NSInteger)height unit:(ELDeviceHeightUnit)unit testStatus:(enum EightScaleTestStatus)status; | |||||
| ///MCU请求用户信息 | |||||
| - (void)eightScaleBleGetUserData; | |||||
| ///MCU返回设备测量信息(测量完成的时候才会回调该方法) | |||||
| - (void)eightScaleBleReportTestData:(ELEightScaleBleDataModel *)dataModle bfrData:(ELEightScaleBleBfrDataModel *)bfrDataModle; | |||||
| /** MCU返回操作结果 */ | |||||
| - (void)eightScaleBleReportOperationWithType:(enum EightScaleOperationType)type unitResult:(enum EightScaleSwitchUnitResult)result; | |||||
| /** 设备上发错误码 */ | |||||
| - (void)eightScaleBleReportErrorCode:(enum EightScaleErrorCodeType)type; | |||||
| @end | @end | ||||
| @interface ELEightScaleBleManager : ELBluetoothManager | @interface ELEightScaleBleManager : ELBluetoothManager | ||||
| /// Switch temperature unit(切换温度单位) | /// Switch temperature unit(切换温度单位) | ||||
| /// @param unit Temperature unit(温度单位) | /// @param unit Temperature unit(温度单位) | ||||
| -(void)eightScaleSwitchTempUnit:(ELDeviceTemperatureUnit)unit; | -(void)eightScaleSwitchTempUnit:(ELDeviceTemperatureUnit)unit; | ||||
| /** 设置用户信息 */ | |||||
| - (void)eightScaleSendUserDataWithUserModel:(ELEightScaleBleUserModel *)model; | |||||
| /** 回复测量完成 */ | |||||
| - (void)eightScaleSendEndTest; | |||||
| /** 下发操作指令 */ | |||||
| - (void)eightScaleSendOperationWithType:(enum EightScaleOperationType)type unit:(NSInteger)unit; | |||||
| @end | @end | ||||
| NS_ASSUME_NONNULL_END | NS_ASSUME_NONNULL_END |
| //测阻抗成功,带上阻抗数据,并使用APP算法(APP 会根据byte7的算法标识进行计算) | //测阻抗成功,带上阻抗数据,并使用APP算法(APP 会根据byte7的算法标识进行计算) | ||||
| EightScaleAdcTestStepSuccess = 0x03, | EightScaleAdcTestStepSuccess = 0x03, | ||||
| EightScaleAdcTestStepTestEnd = 0x04,//End of impedance measurement.(测阻抗结束。) | EightScaleAdcTestStepTestEnd = 0x04,//End of impedance measurement.(测阻抗结束。) | ||||
| EightScaleAdcBfrTestStepSuccess = 0x05, //阻抗测量成功,并使用 MCU 端算法。体脂算法 ID=0。 | |||||
| }; | }; | ||||
| // 阻抗类型 | // 阻抗类型 | ||||
| typedef NS_ENUM(NSUInteger, EightScaleAdcType) { | typedef NS_ENUM(NSUInteger, EightScaleAdcType) { | ||||
| EightScaleTestStatusError = 3,//Error(测量出错) | EightScaleTestStatusError = 3,//Error(测量出错) | ||||
| }; | }; | ||||
| /** 八电极设备mcuhead枚举定义 */ | |||||
| typedef NS_ENUM(NSUInteger, EightScale_MCU_HeadType) { | |||||
| /** 上报称重状态 */ | |||||
| EightScale_MCU_HeadType_ReportWeightData = 0x01 , | |||||
| /** 上报阻抗数据 */ | |||||
| EightScale_MCU_HeadType_ReportADC = 0x02 , | |||||
| /** 上报心率数据 */ | |||||
| EightScale_MCU_HeadType_ReportHeartRate = 0x03 , | |||||
| /** 发送温度数据 */ | |||||
| EightScale_MCU_HeadType_ReportTem = 0x04 , | |||||
| /** 上报身高数据 */ | |||||
| EightScale_MCU_HeadType_ReportHeightData = 0x05 , | |||||
| /** 请求用户信息 */ | |||||
| EightScale_MCU_HeadType_RequestUserData = 0x08 , | |||||
| /** 发送体脂数据 */ | |||||
| EightScale_MCU_HeadType_ReportBodyFatData = 0x09 , | |||||
| /** 发送测量完成 */ | |||||
| EightScale_MCU_HeadType_ReportCompleted = 0x0F , | |||||
| /** 下发操作指令 */ | |||||
| EightScale_MCU_HeadType_SendOperation = 0x81 , | |||||
| /** 回复操作结果 */ | |||||
| EightScale_MCU_HeadType_ReportOperation = 0x82 , | |||||
| /** 回复测量完成 */ | |||||
| EightScale_MCU_HeadType_SendCompleted = 0x84 , | |||||
| /** 设备上发错误码 */ | |||||
| EightScale_MCU_HeadType_ReportErrorCode = 0xFF , | |||||
| }; | |||||
| //Character(角色) 同四电极体脂秤枚举 | |||||
| typedef NS_ENUM(NSUInteger, EightScaleRole) { | |||||
| EightScaleRole_Ordinary = 0x00,//Ordinary(普通人) | |||||
| EightScaleRole_Athlete = 0x01,//Athlete(业余运动员) | |||||
| EightScaleRole_AthletePro = 0x02,//AthletePro(专业运动员) | |||||
| EightScaleRole_Pregnancy = 0x03,//Pregnancy(孕妇) | |||||
| }; | |||||
| ///app下发指令操作枚举定义 | |||||
| typedef NS_ENUM(NSUInteger, EightScaleOperationType) { | |||||
| /** 校准 */ | |||||
| EightScaleOperationType_Calibration = 0x01 , | |||||
| /** 温度单位切换 */ | |||||
| EightScaleOperationType_UpdateTemUnit , | |||||
| /** 重量单位切换 */ | |||||
| EightScaleOperationType_UpdateWeightUnit , | |||||
| /** 身高单位切换 */ | |||||
| EightScaleOperationType_UpdateHeightUnit , | |||||
| }; | |||||
| ///设备上发错误码 | |||||
| typedef NS_ENUM(NSUInteger, EightScaleErrorCodeType) { | |||||
| /** 超重 */ | |||||
| EightScaleErrorCodeType_Overweight = 0x01 , | |||||
| } ; | |||||
| #endif /* ELEightScaleSDKHeader_h */ | #endif /* ELEightScaleSDKHeader_h */ |
| // | |||||
| // ELEncryptTool.h | |||||
| // AILinkSDK | |||||
| // | |||||
| // Created by iot_user on 2019/5/7. | |||||
| // Copyright © 2019 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELSDKHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELEncryptTool : NSObject | |||||
| /** | |||||
| app与ble握手的数据 | |||||
| @return:app与ble握手的数据 | |||||
| */ | |||||
| +(NSData *)handshake; | |||||
| /** | |||||
| 将蓝牙发送的请求握手数据的3〜18位数据加密后再得到符合条件的数据发送给蓝牙 | |||||
| @param receiveData 蓝牙发送的请求握手数据的3〜18位数据 | |||||
| @return 送给蓝牙的握手验证数据 | |||||
| */ | |||||
| +(NSData *)blueToothHandshakeWithData:(NSData *)receiveData; | |||||
| /** | |||||
| 加密验证方法1 | |||||
| @param handshake 3-18位置的数据 | |||||
| @return:加密后的数据 | |||||
| */ | |||||
| + (NSData *)encryptTEA:(NSData * _Nonnull)handshake; | |||||
| /** | |||||
| TEA加密 | |||||
| @param v 要加密的数据 | |||||
| @param k 密钥 | |||||
| */ | |||||
| + (void)encrypt_tea:(uint32_t *)v key:(uint32_t *)k; | |||||
| /** | |||||
| 加密验证方法2 | |||||
| @param macXOR mac地址对应的数据,传ELPeripheralModel的macXOR | |||||
| @param deviceTypeXOR 设备类型对应的数据,传ELPeripheralModel的deviceTypeXOR | |||||
| @param dataXOR 要加密的数据 | |||||
| @return 加密后的数据 | |||||
| */ | |||||
| + (NSData *)encryptXOR:(NSData *)macXOR deviceTypeXOR:(NSData *)deviceTypeXOR withXORData:(NSData *)dataXOR; | |||||
| /// 对广播设备数据进行加密 | |||||
| /// @param handshake 原始数据 | |||||
| /// @param cid cid | |||||
| /// @param vid vid | |||||
| /// @param pid pid | |||||
| + (NSData *)broadcastDecryptTEA:(NSData * _Nonnull)handshake cid:(Byte)cid vid:(Byte)vid pid:(Byte)pid; | |||||
| ///对跳绳数据进行加密 | |||||
| + (NSData *)skipEncryptTEA:(NSData *_Nonnull)baseData; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELFaceMaskBleDataModel.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/9/30. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELFaceMaskBleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELFaceMaskBleDataModel : NSObject | |||||
| @property (nonatomic, assign) int index;//空气质量指数,大端序 无效则该值为 65535 | |||||
| /* | |||||
| 风扇状态 | |||||
| 0:关闭状态 | |||||
| 1:1 档状态 | |||||
| 2:2 档状态 | |||||
| */ | |||||
| @property (nonatomic, assign) FaceMaskFanStatus fanStatus; | |||||
| //电池电量,单位 % 0-100 | |||||
| @property (nonatomic, assign) int battery; | |||||
| /* | |||||
| 电池状态 | |||||
| 1:充电 | |||||
| 2:非充电 如该值无效则为 0xFF | |||||
| */ | |||||
| @property (nonatomic, assign) FaceMaskBatteryStatus batteryStatus; | |||||
| //电池续航 大端序。单位:分钟 无效则该值为 65535 | |||||
| @property (nonatomic, assign) int batteryLife; | |||||
| //呼吸频率 单位,次/min | |||||
| @property (nonatomic, assign) int breathRate; | |||||
| /* | |||||
| 呼吸状态 | |||||
| 1:呼气 | |||||
| 2:吸气 无效则该值为 0xFF | |||||
| */ | |||||
| @property (nonatomic, assign) FaceMaskBreathStatus breathStatus; | |||||
| //滤网的总工作时长 大端序,单位:min | |||||
| @property (nonatomic, assign) int workTime; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELFaceMaskBleHeader.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/9/30. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #ifndef ELFaceMaskBleHeader_h | |||||
| #define ELFaceMaskBleHeader_h | |||||
| #import "ELSDKHeader.h" | |||||
| /* | |||||
| 风扇状态 | |||||
| 0:关闭状态 | |||||
| 1:1 档状态 | |||||
| 2:2 档状态 | |||||
| */ | |||||
| typedef NS_ENUM(NSUInteger, FaceMaskFanStatus) { | |||||
| FaceMaskFanStatusClose = 0x00, | |||||
| FaceMaskFanStatusFirstGear = 0x01, | |||||
| FaceMaskFanStatusSecondGear = 0x02, | |||||
| }; | |||||
| /* | |||||
| 电池状态 | |||||
| 1:充电 | |||||
| 2:非充电 | |||||
| 如该值无效则为 0xFF | |||||
| */ | |||||
| typedef NS_ENUM(NSUInteger, FaceMaskBatteryStatus) { | |||||
| FaceMaskBatteryStatusRecharge = 1, | |||||
| FaceMaskBatteryStatusNoRecharge = 2, | |||||
| FaceMaskBatteryStatusInvalid = 0xFF, | |||||
| }; | |||||
| /* | |||||
| 呼吸状态 | |||||
| 1:呼气 | |||||
| 2:吸气 无效则该值为 0xFF | |||||
| */ | |||||
| typedef NS_ENUM(NSUInteger, FaceMaskBreathStatus) { | |||||
| FaceMaskBreathStatusExhale = 1, | |||||
| FaceMaskBreathStatusInhale = 2, | |||||
| FaceMaskBreathStatusInvalid = 0xFF, | |||||
| }; | |||||
| /* | |||||
| 风扇控制结果 | |||||
| 0x00:成功 0x01:失败,电量不足 0x02:不支持 0x03:失败,风扇已坏 | |||||
| */ | |||||
| typedef NS_ENUM(NSUInteger, FaceMaskFanControlResult) { | |||||
| FaceMaskFanControlResultSuccess = 0, | |||||
| FaceMaskFanControlResultFailed = 1, | |||||
| FaceMaskFanControlResultUnsupported = 2, | |||||
| FaceMaskFanControlResultFault = 3, | |||||
| }; | |||||
| #endif /* ELFaceMaskBleHeader_h */ |
| // | |||||
| // ELFaceMaskBleManager.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/9/30. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| #import "ELFaceMaskBleHeader.h" | |||||
| #import "ELFaceMaskBleDataModel.h" | |||||
| @protocol FaceMaskBleDelegate <NSObject> | |||||
| @optional | |||||
| /// 蓝牙连接状态 | |||||
| /// @param state 连接状态 | |||||
| - (void)faceMaskBleReceiveState:(ELBluetoothState)state; | |||||
| /// 附近的设备 | |||||
| /// @param devices 设备列表 | |||||
| - (void)faceMaskBleReceiveDevices:(NSArray<ELPeripheralModel *> *_Nullable)devices; | |||||
| - (void)faceMaskBleReceiveStatusDataModel:(ELFaceMaskBleDataModel *_Nonnull)model; | |||||
| - (void)faceMaskReplaceSuccess:(BOOL)success; | |||||
| - (void)faceMaskSwitchFanResult:(FaceMaskFanControlResult)result; | |||||
| - (void)faceMaskPoweroffSuccess:(BOOL)success; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELFaceMaskBleManager : ELBluetoothManager | |||||
| @property (nonatomic, weak) id<FaceMaskBleDelegate> faceMaskDelegate; | |||||
| @property (nonatomic, assign) FaceMaskFanStatus fanStatus; | |||||
| @property (nonatomic, assign) NSInteger filterWorkTime; | |||||
| @property (nonatomic, assign) int battery; | |||||
| + (instancetype)shareManager; | |||||
| //APP 获取设备状态 | |||||
| - (void)queryFaceMaskStatusData; | |||||
| //APP 下发更换滤网指令 | |||||
| - (void)replaceFilter; | |||||
| //APP 下发风扇控制指令 | |||||
| - (void)switchFanStatus:(FaceMaskFanStatus)status; | |||||
| //APP 下发关机指令 | |||||
| - (void)powerOff; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELFoodThermometerBleManager.h | |||||
| // Elink | |||||
| // | |||||
| // Created by LarryZhang on 2021/4/23. | |||||
| // Copyright © 2021 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| #import "ELFoodThermometerHead.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @protocol FoodThermometerBleDelegate <NSObject> | |||||
| @optional | |||||
| //Bluetooth status callback(回调蓝牙状态) | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state; | |||||
| //Callback FoodThermometer device list(回调设备列表) | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *)devices; | |||||
| //设备返回基础信息 | |||||
| - (void)foodThermometerBasicInfo:(BasicInfo)basicInfo; | |||||
| //设备返回数据状态 | |||||
| - (void)foodThermometerProbeStatus:(ProbeStatus)probeStatus; | |||||
| //设备设置温度 | |||||
| - (void)foodThermometerSwitchTemperatureUnit:(ELDeviceTemperatureUnit)unit; | |||||
| @end | |||||
| @interface ELFoodThermometerBleManager : ELBluetoothManager | |||||
| @property(nonatomic, weak) id <FoodThermometerBleDelegate> foodThermometerBleDelegate; | |||||
| + (instancetype)shareManager; | |||||
| - (void)autoScan; | |||||
| - (void)stopAutoScan; | |||||
| - (void)checkStatus; | |||||
| @end | |||||
| //发送数据给设备 | |||||
| @interface ELFoodThermometerBleManager (cmd) | |||||
| //获取基础信息 A7 01 | |||||
| - (void)checkDeviceInfo; | |||||
| //切换温度单位 A7 04 | |||||
| - (void)switchTemperatureUnit:(ELDeviceTemperatureUnit)unit; | |||||
| //取消报警 A7 06 | |||||
| - (void)cancelAlarm:(NSUInteger)probeIndex; | |||||
| //设置目标温度 A7 08 | |||||
| - (void)setTarget:(NSUInteger)probeIndex temperature:(NSInteger)temperature unit:(ELDeviceTemperatureUnit)unit; | |||||
| //设置定时时长 A7 0A | |||||
| - (void)setTarget:(NSUInteger)probeIndex duration:(NSUInteger)duration; | |||||
| //启动关闭设备探针 A7 12 | |||||
| - (void)setProbe:(NSUInteger)probeIndex start:(BOOL)start; | |||||
| //下发时间 A7 10 | |||||
| - (void)sendCurrentTime; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELFoodThermometerHead.h | |||||
| // Elink | |||||
| // | |||||
| // Created by LarryZhang on 2021/4/23. | |||||
| // Copyright © 2021 iot_iMac. All rights reserved. | |||||
| // | |||||
| #ifndef ELFoodThermometerHead_h | |||||
| #define ELFoodThermometerHead_h | |||||
| #import "ELSDKHeader.h" | |||||
| typedef NS_ENUM(NSUInteger, FoodThermometerProtocol) {//cmd:命令 sta:状态 ack:应答 | |||||
| FoodThermometerProtocol_AppGetBasicInfo_cmd_A701 = 0x01, //APP-获取设备基础信息 | |||||
| FoodThermometerProtocol_DeviceBasicInfo_sta_A702 = 0x02, //MCU-上发设备基础信息 | |||||
| FoodThermometerProtocol_DeviceDataInfo_sta_A703 = 0x03, //MCU-上发数据状态 | |||||
| FoodThermometerProtocol_AppSetUnit_cmd_A704 = 0x04, //APP-切换单位 | |||||
| FoodThermometerProtocol_DeviceSetUnit_ack_A705 = 0x05, //MCU-切换单位ack | |||||
| FoodThermometerProtocol_AppDeviceSetAlarm_cmd_A706 = 0x06, //APP-MCU-同步取消报警 | |||||
| FoodThermometerProtocol_AppDeviceSetAlarm_ack_A707 = 0x07, //APP-MCU-同步取消报警ack | |||||
| FoodThermometerProtocol_AppSetTempPre_cmd_A708 = 0x08, //APP-设置目标温度 | |||||
| FoodThermometerProtocol_DeviceSetUnit_ack_A709 = 0x09, //MCU-设置目标温度ack | |||||
| FoodThermometerProtocol_AppSetDuration_cmd_A70A = 0x0A, //APP-设置定时时间时长 | |||||
| FoodThermometerProtocol_DeviceSetDuration_ack_A70B = 0x0B, //MCU-设置定时时间时长ack | |||||
| FoodThermometerProtocol_AppDeviceSetPower_cmd_A70C = 0x0C, //APP-MCU-开始结束指令 | |||||
| FoodThermometerProtocol_AppDeviceSetPower_ack_A70D = 0x0D, //APP-MCU-开始结束指令ack | |||||
| FoodThermometerProtocol_AppSetDateTime_cmd_A710 = 0x10, //APP-下发时间 | |||||
| FoodThermometerProtocol_DeviceSetDateTime_ack_A711 = 0x11, //MCU-下发时间ack | |||||
| FoodThermometerProtocol_AppDeviceSetStart_cmd_A712 = 0x12, //APP-MCU-启动关闭设备探针 | |||||
| FoodThermometerProtocol_AppDeviceSetStart_ack_A713 = 0x13, //APP-MCU-启动关闭设备探针 | |||||
| }; | |||||
| //A7 02 | |||||
| //MCU 上发基础信息 | |||||
| typedef struct { | |||||
| //探针总数量 | |||||
| Byte probeCount; | |||||
| //电池充电状态 | |||||
| Byte charging; | |||||
| //电量(若无电量检测功能,则该值为0xFF) | |||||
| Byte batteryLevel; | |||||
| //当前温度 | |||||
| Byte curTemperatureUnit; | |||||
| //异常报警类型 | |||||
| Byte alarmType; | |||||
| //设备支持烧烤模式 | |||||
| Byte mode; | |||||
| //设备支持报警模式 | |||||
| Byte alarmMode; | |||||
| } BasicInfo; | |||||
| //A7 03 | |||||
| //MCU上发数据状态 | |||||
| typedef struct { | |||||
| Byte index;//探针编号 1~8 | |||||
| Byte working;//探针是否插入设备状态 | |||||
| UInt16 internalRawTemperature;//实时温度 | |||||
| UInt16 ambientRawTemperature;//环境温度 | |||||
| UInt16 targetRawTemperature;//目标温度 | |||||
| Byte inserting;//探针状态是否已插入肉内 | |||||
| Byte started;//探针状态是否已启动报警功能,关联app Start | |||||
| Byte mode;//模式0:烤架。1:烤箱 | |||||
| UInt16 duration;//定时时间(大端序,单位min。若无,则该值为0xFFFF) | |||||
| Byte alarmType;//报警类型 0:无报警 1:温度达到报警 2:定时达到报警 | |||||
| } ProbeStatus; | |||||
| #endif /* ELFoodThermometerHead_h */ |
| ForeheadBleDataTypeFailCode = 0xFF, //Report an error message(上报错误信息) | ForeheadBleDataTypeFailCode = 0xFF, //Report an error message(上报错误信息) | ||||
| }; | }; | ||||
| @class ELPeripheralModel; | |||||
| @protocol ELForeheadBleManagerDelegate <NSObject> | @protocol ELForeheadBleManagerDelegate <NSObject> | ||||
| @optional | @optional | ||||
| // | |||||
| // ELHeightBodyFatScaleBleWeightBodyModel.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/3/25. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| /** 体脂数据对象模型 */ | |||||
| @interface ELHeightBodyFatScaleBleWeightBodyModel : NSObject | |||||
| ///Body fat rate, need / 10(体脂率,需要/10) | |||||
| @property (nonatomic, assign) NSUInteger bfr; | |||||
| ///Subcutaneous fat rate, need / 10(皮下脂肪率,需要/10) | |||||
| @property (nonatomic, assign) NSUInteger sfr; | |||||
| ///Visceral fat rate with an accuracy of 1(内脏脂肪率,精度为1) | |||||
| @property (nonatomic, assign) NSUInteger uvi; | |||||
| ///Muscle rate, need / 10(肌肉率,需要/10) | |||||
| @property (nonatomic, assign) NSUInteger rom; | |||||
| ///Basal metabolic rate with an accuracy of 1(基础代谢率,精度为1) | |||||
| @property (nonatomic, assign) NSUInteger bmr; | |||||
| ///Body age with an accuracy of 1(身体年龄,精度为1) | |||||
| @property (nonatomic, assign) NSUInteger bodyAge; | |||||
| ///Bone quality, need / 10(骨骼质量,需要/10) | |||||
| @property (nonatomic, assign) NSUInteger bm; | |||||
| ///Water content, need / 10(水含量,需要/10) | |||||
| @property (nonatomic, assign) NSUInteger vwc; | |||||
| ///Protein rate, need / 10(蛋白率,需要/10) | |||||
| @property (nonatomic, assign) NSUInteger pp; | |||||
| ///BMI 需要/10 | |||||
| @property (nonatomic, assign) NSUInteger BMI; | |||||
| ///Heart rate with an accuracy of 1(心率,精度为1) | |||||
| @property (nonatomic, assign) NSUInteger heartRate; | |||||
| ///肥胖等级 | |||||
| @property (nonatomic, assign) NSUInteger obesityGrade; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| HeightGaugeBleDataTypeFailCode = 0xFF, //error code | HeightGaugeBleDataTypeFailCode = 0xFF, //error code | ||||
| }; | }; | ||||
| @class ELPeripheralModel; | |||||
| @protocol ELHeightGaugeBleManagerDelegate <NSObject> | @protocol ELHeightGaugeBleManagerDelegate <NSObject> | ||||
| @optional | @optional | ||||
| // | |||||
| // ELHygrothermographBleHeader.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/5/8. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #ifndef ELHygrothermographBleHeader_h | |||||
| #define ELHygrothermographBleHeader_h | |||||
| /** 温湿度计 ble head type 枚举定义 */ | |||||
| typedef NS_ENUM (NSInteger, Hygrothermograph_BleHeadType) { | |||||
| /** App获取设备状态 */ | |||||
| Hygrothermograph_BleHeadType_App_GetDevState = 0x01 , | |||||
| /** 设备定时返回设备状态 */ | |||||
| Hygrothermograph_BleHeadType_MCU_ReturnDevState = 0x02 , | |||||
| /** App设备变化阀值 */ | |||||
| Hygrothermograph_BleHeadType_App_SetDevThreshold = 0x03 , | |||||
| /** 设备定时返回阀值 */ | |||||
| Hygrothermograph_BleHeadType_MCU_ReturnDevThreshold = 0x04 , | |||||
| /** App读取设备的历史数据 */ | |||||
| Hygrothermograph_BleHeadType_App_GetDevRecordData = 0x05 , | |||||
| /** 设备返回历史数据 */ | |||||
| Hygrothermograph_BleHeadType_MCU_ReturnRecordData = 0x06 , | |||||
| /** 设置采样频率和保存频率 */ | |||||
| Hygrothermograph_BleHeadType_APP_SetSamplingFrequency = 0x07 , | |||||
| /** 设备返回采样频率和保存频率 */ | |||||
| Hygrothermograph_BleHeadType_MCU_ReturnSamplingFrequency = 0x08 , | |||||
| /** App返回收到历史数据反馈 */ | |||||
| Hygrothermograph_BleHeadType_App_DataFeedback = 0x09 , | |||||
| }; | |||||
| #endif /* ELHygrothermographBleHeader_h */ |
| // | |||||
| // ELHygrothermographBleManager.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/5/7. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <AILinkBleSDK/ELBluetoothManager.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @class ELHygrothermographBleRecordData; | |||||
| @protocol ELHygrothermographBleDelegate <NSObject> | |||||
| @optional | |||||
| /** 返回设备的连接状态 */ | |||||
| - (void)hygrothermographManagerUpdateState:(ELBluetoothState)state; | |||||
| /** 回调扫描到的温湿度计 */ | |||||
| - (void)hygrothermographManagerScanDevices:(NSArray<ELPeripheralModel *> *)scanDevices; | |||||
| /** 设备返回当前状态 | |||||
| * @param power : 电量 0~100 | |||||
| * @parm time : 设备开机时间 | |||||
| * @param tem : 温度,单位摄氏度 | |||||
| * @param hum : 湿度,单位% | |||||
| */ | |||||
| - (void)hygrothermographManagerReturnDevStatePower:(NSInteger)power bootTime:(long long)time tem:(float)tem hum:(float)hum; | |||||
| /** 设备返回阀值 | |||||
| * @param tem : 温度阀值,单位摄氏度 | |||||
| * @param hum : 湿度阀值,单位% | |||||
| */ | |||||
| - (void)hygrothermographManagerReturnThresholdTemThreshold:(float)tem humThreshold:(float)hum; | |||||
| /** 设备返回历史记录数据 | |||||
| * @param list : 历史记录列表 | |||||
| * @param allNumber : 历史记录总数量 | |||||
| * @param getNumber : 已发数量 | |||||
| */ | |||||
| - (void)hygrothermographManagerReturnRecordDataList:(NSArray<ELHygrothermographBleRecordData *> *)list allListNumber:(long long)allNumber getListNumber:(long long)getNumber; | |||||
| /** 返回设备采样频率和保存频率 */ | |||||
| - (void)hygrothermographManagerReturnSamplingFrequency:(NSInteger)sampling saveFrequency:(NSInteger)save timeInterval:(NSInteger)timeInterval; | |||||
| @end | |||||
| @interface ELHygrothermographBleManager : ELBluetoothManager | |||||
| @property (nonatomic, weak) id<ELHygrothermographBleDelegate> hygrothermographDelegate; | |||||
| + (ELHygrothermographBleManager *)shareManager; | |||||
| /** 获取设备状态信息 */ | |||||
| - (void)getDevState; | |||||
| /** 设置阀值 | |||||
| * @param tem 区间为 0.1 ~ 10摄氏度 (超过区间就设置为临界值) | |||||
| * @param hum 区间为 0.1 ~ 10 %(同上) | |||||
| */ | |||||
| - (void)setDevThresholdWithTem:(float)tem hum:(float)hum; | |||||
| /** 读取设备历史记录 | |||||
| * 因为设备保存的历史数据过多,APP 不需每次多获取全部历史。 所以 APP 可以根据自身上一次获取到的开机时间,获取新的历 史数据。 例如:APP 首次连接设备获取数据时,则该值为 0. 如果首次已经获取到了开机时间的 100s 时,再次获取时,该值 应该为 100 | |||||
| */ | |||||
| - (void)getDevRecordDataWithDevTime:(long long)devTime; | |||||
| /** 设置采样频率和保存频率 */ | |||||
| - (void)setSamplingFrequency:(NSInteger)sampling saveFrequency:(NSInteger)save timeInterval:(NSInteger)timeInterval; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELHygrothermographBleRecordData.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/5/8. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| /** 温湿度计历史记录对象模型 */ | |||||
| @interface ELHygrothermographBleRecordData : NSObject | |||||
| /** 开机时间 */ | |||||
| @property (nonatomic, assign) long long bootTime; | |||||
| /** 温度 摄氏度 */ | |||||
| @property (nonatomic, assign) float tem; | |||||
| /** 湿度 % */ | |||||
| @property (nonatomic, assign) float hum; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELNutritionScaleBleHeader.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/8/21. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #ifndef ELNutritionScaleBleHeader_h | |||||
| #define ELNutritionScaleBleHeader_h | |||||
| #import "ELSDKHeader.h" | |||||
| typedef NS_ENUM(NSUInteger, NutritionScaleTestStatus) { | |||||
| //Real-time weight(实时重量) | |||||
| NutritionScaleTestStatus_RealTime = 1, | |||||
| //Stable weight(稳定重量) | |||||
| NutritionScaleTestStatus_Stable = 2, | |||||
| }; | |||||
| /** 营养秤 Weight unit(重量单位)*/ | |||||
| typedef NS_ENUM(NSInteger, NutritionScaleWeightUnit) { | |||||
| /** g */ | |||||
| NutritionScaleWeightUnit_G = 0 , | |||||
| /** ml */ | |||||
| NutritionScaleWeightUnit_ML = 1 , | |||||
| /** lb:oz */ | |||||
| NutritionScaleWeightUnit_LB_OZ = 2 , | |||||
| /** oz */ | |||||
| NutritionScaleWeightUnit_OZ = 3 , | |||||
| /** kg */ | |||||
| NutritionScaleWeightUnit_KG = 4 , | |||||
| /** 斤 */ | |||||
| NutritionScaleWeightUnit_JIN = 5 , | |||||
| /** 牛奶 ml */ | |||||
| NutritionScaleWeightUnit_MILK_ML = 6 , | |||||
| /** 水 ml */ | |||||
| NutritionScaleWeightUnit_WATER_ML = 7 , | |||||
| /** 牛奶 fl.oz */ | |||||
| NutritionScaleWeightUnit_MILK_FLOZ = 8 , | |||||
| /** 水 fl.oz */ | |||||
| NutritionScaleWeightUnit_WATER_FLOZ = 9 , | |||||
| /** lb */ | |||||
| NutritionScaleWeightUnit_LB = 10 , | |||||
| /** Unsupported unit */ | |||||
| NutritionScaleWeightUnit_Fail = 0xFF , | |||||
| }; | |||||
| typedef NS_ENUM(NSUInteger, NutritionScaleErrorStatus) { | |||||
| //Over Range(1: 超重 0:正常) | |||||
| NutritionScaleErrorStatus_Over_Range_mask = 1 << 0, | |||||
| //Low Power(1:电量过低,无法测试 0:正常) | |||||
| NutritionScaleErrorStatus_Low_Power_mask = 1 << 1, | |||||
| }; | |||||
| #endif /* ELNutritionScaleBleHeader_h */ |
| // | |||||
| // ELNutritionScaleBleManager.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/8/21. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import "ELBluetoothManager.h" | |||||
| #import "ELNutritionScaleDataModel.h" | |||||
| @protocol NutritionScaleBleDelegate <NSObject> | |||||
| @optional | |||||
| /// 蓝牙连接状态 | |||||
| /// @param state 连接状态 | |||||
| - (void)deviceBleReceiveState:(ELBluetoothState)state; | |||||
| /// 附近的设备 | |||||
| /// @param devices 设备列表 | |||||
| - (void)deviceBleReceiveDevices:(NSArray<ELPeripheralModel *> *_Nullable)devices; | |||||
| //获得支持单位列表 | |||||
| - (void)supportUnits:(NSArray *_Nonnull)unitArray; | |||||
| //正在连接中倒计时 | |||||
| - (void)deviceBleCountDown:(NSInteger)count; | |||||
| //称重数据 | |||||
| - (void)nutritionScaleBleDataModel:(ELNutritionScaleDataModel *_Nonnull)model; | |||||
| //超载 | |||||
| - (void)overload:(BOOL)status; | |||||
| //低电 | |||||
| - (void)lowPower:(BOOL)status; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELNutritionScaleBleManager : ELBluetoothManager | |||||
| @property(nonatomic, weak) id <NutritionScaleBleDelegate> nutritionScaleBleDelegate; | |||||
| + (instancetype)shareManager; | |||||
| @end | |||||
| @interface ELNutritionScaleBleManager () | |||||
| - (void)autoScan; | |||||
| - (void)stopAutoScan; | |||||
| - (void)checkStatus; | |||||
| @end | |||||
| @interface ELNutritionScaleBleManager (send) | |||||
| //APP 下发归零 | |||||
| - (void)sendMakeZero; | |||||
| //APP 切换单位 | |||||
| - (void)sendUnit:(NutritionScaleWeightUnit)unit; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELNutritionScaleDataModel.h | |||||
| // Elink | |||||
| // | |||||
| // Created by iot_user on 2020/8/21. | |||||
| // Copyright © 2020 iot_iMac. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELNutritionScaleBleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @interface ELNutritionScaleDataModel : NSObject | |||||
| //Data serial number(数据流水号) | |||||
| @property(nonatomic, assign) Byte serialNumber; | |||||
| //Measurement status(测量状态) | |||||
| @property (nonatomic, assign) NutritionScaleTestStatus testStatus; | |||||
| //weight(重量数据) | |||||
| @property (nonatomic, assign) UInt32 weight; | |||||
| //Weight unit(重量单位) | |||||
| @property(nonatomic, assign) NutritionScaleWeightUnit weightUnit; | |||||
| //Weight decimal point(体重小数点) | |||||
| @property(nonatomic, assign) Byte weightPoint; | |||||
| //Weight negative(是否负数) | |||||
| @property(nonatomic, assign, getter=isNegative) BOOL negative; | |||||
| //timestamp(时间戳) | |||||
| @property(nonatomic, assign) long long timestamp; | |||||
| @end | |||||
| NSString *NutritionScaleWeightUnitString(NutritionScaleWeightUnit unit); | |||||
| NS_ASSUME_NONNULL_END |
| #import <AILinkBleSDK/ELBluetoothManager.h> | #import <AILinkBleSDK/ELBluetoothManager.h> | ||||
| #import "ELOximeterBleModel.h" | #import "ELOximeterBleModel.h" | ||||
| @class ELPeripheralModel; | |||||
| #import "ELOximeterDeviceModel.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
| - (void)oximeterManagerBleState:(ELBluetoothState)state; | - (void)oximeterManagerBleState:(ELBluetoothState)state; | ||||
| /** 回调搜索到的血氧仪设备 */ | /** 回调搜索到的血氧仪设备 */ | ||||
| - (void)oximeterManagerScanDevices:(NSArray<ELPeripheralModel *> *)devices; | |||||
| - (void)oximeterManagerScanDevices:(NSArray<ELOximeterDeviceModel *> *)devices; | |||||
| /** mcu上报设置信息 */ | /** mcu上报设置信息 */ | ||||
| - (void)oximeterManagerSetupState:(ELOximeterBleModel *)bleModel markType:(enum OximeterTestMarkType)markType; | - (void)oximeterManagerSetupState:(ELOximeterBleModel *)bleModel markType:(enum OximeterTestMarkType)markType; | ||||
| /** 设备上报错误码 */ | /** 设备上报错误码 */ | ||||
| - (void)oximeterManagerUploadErrorCode:(enum OximeterErrorCodeType)codeType; | - (void)oximeterManagerUploadErrorCode:(enum OximeterErrorCodeType)codeType; | ||||
| ///返回原始数据 | |||||
| - (void)oximeterManagerBleBackManufactureData:(NSData *)data; | |||||
| @end | @end | ||||
| @interface ELOximeterBleManager : ELBluetoothManager | @interface ELOximeterBleManager : ELBluetoothManager |
| PID | PID | ||||
| */ | */ | ||||
| @property (nonatomic, assign) NSInteger productID; | @property (nonatomic, assign) NSInteger productID; | ||||
| @property (nonatomic, copy) NSString *deviceName; | @property (nonatomic, copy) NSString *deviceName; | ||||
| @property (nonatomic, copy) NSString *macAddress; | @property (nonatomic, copy) NSString *macAddress; | ||||
| #import <Foundation/Foundation.h> | #import <Foundation/Foundation.h> | ||||
| #import "ELRemoteControlBleHeader.h" | #import "ELRemoteControlBleHeader.h" | ||||
| #import "ELBluetoothManager.h" | #import "ELBluetoothManager.h" | ||||
| #import "ELRemoteControlDeviceModel.h" | |||||
| @class ELPeripheralModel; | |||||
| NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
| - (void)remoteControlManagerUpdateState:(ELBluetoothState )state; | - (void)remoteControlManagerUpdateState:(ELBluetoothState )state; | ||||
| /** 回调所有遥控器设备 */ | /** 回调所有遥控器设备 */ | ||||
| - (void)remoteControlManagerScanDevices:(NSArray<ELPeripheralModel *> *)deviceList; | |||||
| - (void)remoteControlManagerScanDevices:(NSArray<ELRemoteControlDeviceModel *> *)deviceList; | |||||
| @end | @end | ||||
| #pragma mark ============End 蓝牙Wifi ============== | #pragma mark ============End 蓝牙Wifi ============== | ||||
| ELInetGetCmdTypeRequestAuthorize = 0x7F, //Request device authorization (请求设备授权) | ELInetGetCmdTypeRequestAuthorize = 0x7F, //Request device authorization (请求设备授权) | ||||
| ELInetGetCmdTypeToothbrushA6Data = 0xC0, //A6 data for toothbrush(牙刷专用A6数据,详情请见协议的2级指令)(See the second order for details) | ELInetGetCmdTypeToothbrushA6Data = 0xC0, //A6 data for toothbrush(牙刷专用A6数据,详情请见协议的2级指令)(See the second order for details) | ||||
| ELInetGetDevOfflineHistory = 0xF1, //获取离线历史记录 | |||||
| }; | }; | ||||
| //Instruction type set by Inet(Inet设置的指令类型) | //Instruction type set by Inet(Inet设置的指令类型) | ||||
| typedef NS_ENUM(NSUInteger, ELInetSetCmdType) { | typedef NS_ENUM(NSUInteger, ELInetSetCmdType) { | ||||
| ELInetSetCmdTypeSetAutoSleepTime = 0x17, //Set the module's automatic sleep time without connection(设置模块无连接的自动休眠时间) | ELInetSetCmdTypeSetAutoSleepTime = 0x17, //Set the module's automatic sleep time without connection(设置模块无连接的自动休眠时间) | ||||
| ELInetSetCmdTypeSetGotoSleep = 0x19, //Set to sleep(设置进入睡眠) | ELInetSetCmdTypeSetGotoSleep = 0x19, //Set to sleep(设置进入睡眠) | ||||
| ELInetSetCmdTypeSetMCUWakeUp = 0x1A, //Set module wake up(设置模块唤醒) | ELInetSetCmdTypeSetMCUWakeUp = 0x1A, //Set module wake up(设置模块唤醒) | ||||
| ELInetSetCmdTypeSetMCUNowDate = 0x1B, //Set the current time of the system(设置系统当前时间) | |||||
| ELInetSetCmdTypeSyncBleNowDate = 0x1B, //Set the current time of the system(设置手机时间给蓝牙模块Type:1B、1C) | |||||
| ELInetSetCmdTypeSetC_V_P_ID = 0x1D, //Set CID, VID, PID(设置CID、VID、PID) | ELInetSetCmdTypeSetC_V_P_ID = 0x1D, //Set CID, VID, PID(设置CID、VID、PID) | ||||
| ELInetSetCmdTypeSetCommunicationMode = 0x1F, //Set module serial port mode, I2C mode, SPI mode(设置模块串口模式、I2C模式、SPI模式) | ELInetSetCmdTypeSetCommunicationMode = 0x1F, //Set module serial port mode, I2C mode, SPI mode(设置模块串口模式、I2C模式、SPI模式) | ||||
| ELInetSetCmdTypeSetMCURestart = 0x21, //Set module restart(设置模块重启) | ELInetSetCmdTypeSetMCURestart = 0x21, //Set module restart(设置模块重启) | ||||
| ELInetSetCmdTypeSetHandshake = 0x23, //Encrypted handshake data returned by Bluetooth(蓝牙返回的加密的握手数据) | ELInetSetCmdTypeSetHandshake = 0x23, //Encrypted handshake data returned by Bluetooth(蓝牙返回的加密的握手数据) | ||||
| ELInetSetCmdTypeSetKey = 0x31, //APP sends the decoding key(APP下发解码秘钥) | ELInetSetCmdTypeSetKey = 0x31, //APP sends the decoding key(APP下发解码秘钥) | ||||
| ELInetSetCmdTypeSetSmartLockA6Data = 0x34, //Door lock 0x34 represents the A6 protocol (see the second level command for details)(门锁0x34代表A6协议(具体见二级指令)) | ELInetSetCmdTypeSetSmartLockA6Data = 0x34, //Door lock 0x34 represents the A6 protocol (see the second level command for details)(门锁0x34代表A6协议(具体见二级指令)) | ||||
| ELInetSetCmdTypeSyncMCUNowDate = 0x37, //Sync the current time of the system(设置系统当前时间) | |||||
| ELInetSetCmdTypeSyncMCUNowDate = 0x37, //Sync the current time of the system(设置手机时间给MCU) | |||||
| #pragma mark ============ 蓝牙Wifi ============== | #pragma mark ============ 蓝牙Wifi ============== | ||||
| ELInetSetCmdTypeBleWifiSetWifiMac = 0x84, //设置WIFI Mac地址 | ELInetSetCmdTypeBleWifiSetWifiMac = 0x84, //设置WIFI Mac地址 | ||||
| ELInetSetCmdTypeBleWifiSetWifiPwd = 0x86, //设置WIFI 密码 | ELInetSetCmdTypeBleWifiSetWifiPwd = 0x86, //设置WIFI 密码 | ||||
| ELSupportDeviceTypeCoffeeScale = 0x0024 , //咖啡秤 | ELSupportDeviceTypeCoffeeScale = 0x0024 , //咖啡秤 | ||||
| ELSupportDeviceTypeElectricScooter= 0x0025 , //滑板车 | |||||
| ELSupportDeviceTypeHeightBodyFatScale = 0x0026 , //身高体脂秤 | ELSupportDeviceTypeHeightBodyFatScale = 0x0026 , //身高体脂秤 | ||||
| ELSupportDeviceTypeFoodThermometer = 0x002B, //Food Thermometer(食品温度计) | |||||
| ELSupportDeviceTypeBLEToothbrush = 0x002D, //Bluetooth toothbrush(蓝牙牙刷) | ELSupportDeviceTypeBLEToothbrush = 0x002D, //Bluetooth toothbrush(蓝牙牙刷) | ||||
| ELSupportDeviceTypeHygrothermograph = 0x002E , //温湿度计 | ELSupportDeviceTypeHygrothermograph = 0x002E , //温湿度计 | ||||
| ELSupportDeviceTypeSkip = 0x002F , //跳绳 | ELSupportDeviceTypeSkip = 0x002F , //跳绳 | ||||
| ELSupportDeviceTypeBLE_BfrEightScale = 0x0032, //MCU会计算体脂信息的八电极蓝牙秤 | |||||
| ELSupportDeviceTypeElectricScooter= 0x0033 , //滑板车 | |||||
| ELSupportDeviceTypeNutritionScale = 0x0034 , //营养秤(蓝牙连接) | |||||
| ELSupportDeviceTypeAiFreshNutritionScale = 0x0037 , //好营养营养秤(蓝牙连接) | |||||
| ELSupportDeviceTypeBroadcastScale = (0xffff +0x01) , //655536 Broadcast body fat scale(AILink广播体脂秤) | ELSupportDeviceTypeBroadcastScale = (0xffff +0x01) , //655536 Broadcast body fat scale(AILink广播体脂秤) | ||||
| ELSupportDeviceTypeBroadcastHeightGauge = (0xffff + 0x03) , //65538 广播身高仪 | ELSupportDeviceTypeBroadcastHeightGauge = (0xffff + 0x03) , //65538 广播身高仪 | ||||
| ELSupportDeviceTypeBroadcastScale_Lingyang = (0xffff +0x16) , //65557 凌阳广播体脂秤 | ELSupportDeviceTypeBroadcastScale_Lingyang = (0xffff +0x16) , //65557 凌阳广播体脂秤 | ||||
| ELSupportDeviceTypeBroadcastNutritionFoodScale = (0xffff + 0x04) , //65539 广播营养秤 | |||||
| }; | }; | ||||
| //Communication mode(通信模式) | //Communication mode(通信模式) | ||||
| }; | }; | ||||
| //WiFi连接状态 | //WiFi连接状态 | ||||
| typedef NS_ENUM(NSUInteger, BleWiFiConnectState) { | typedef NS_ENUM(NSUInteger, BleWiFiConnectState) { | ||||
| BleWiFiConnectStateNoWiFi = 0,//0:没有连接,0: No connection | |||||
| BleWiFiConnectStateNoWiFi = 0,//0:没配网,没有连接,0: No connection | |||||
| BleWiFiConnectStateConnectFail = 1 ,//1:尝试连接热点,但是失败1: Attempt to connect to the hotspot, but failed | BleWiFiConnectStateConnectFail = 1 ,//1:尝试连接热点,但是失败1: Attempt to connect to the hotspot, but failed | ||||
| BleWiFiConnectStateNoNetwork = 2 ,//2:连接热点,热点无网络,2: Connected to the hotspot, the hotspot has no network | BleWiFiConnectStateNoNetwork = 2 ,//2:连接热点,热点无网络,2: Connected to the hotspot, the hotspot has no network | ||||
| BleWiFiConnectStateSuccess = 3 ,//3:连接热点,热点有网络,3: Connected to the hotspot, the hotspot has a network | BleWiFiConnectStateSuccess = 3 ,//3:连接热点,热点有网络,3: Connected to the hotspot, the hotspot has a network | ||||
| ELDeviceUnitType_Pressure = 5 , | ELDeviceUnitType_Pressure = 5 , | ||||
| /**Blood sugar(血糖单位)*/ | /**Blood sugar(血糖单位)*/ | ||||
| ELDeviceUnitType_BloodSugar = 6 , | ELDeviceUnitType_BloodSugar = 6 , | ||||
| /**体积(体积单位)*/ | |||||
| ELDeviceUnitType_Volume = 7 , | |||||
| /**营养秤专用单位*/ | |||||
| ELDeviceUnitType_Nutrition = 8 , | |||||
| }; | }; | ||||
| #define AiLinkBleWeightUnit_KG_Str @"kg" | #define AiLinkBleWeightUnit_KG_Str @"kg" | ||||
| #define AiLinkBleWeightUnit_ST_LB_Str @"st:lb" | #define AiLinkBleWeightUnit_ST_LB_Str @"st:lb" | ||||
| #define AiLinkBleWeightUnit_G_Str @"g" | #define AiLinkBleWeightUnit_G_Str @"g" | ||||
| #define AiLinkBleWeightUnit_LB_Str @"lb" | #define AiLinkBleWeightUnit_LB_Str @"lb" | ||||
| #define AiLinkBleWeightUnit_ML_Str @"ml" | |||||
| #define AiLinkBleWeightUnit_FL_OZ_Str @"fl.oz" | |||||
| #define AiLinkBleWeightUnit_CC_Str @"cc" | |||||
| #define AiLinkBleWeightUnit_L_Str @"l" | |||||
| #define AiLinkBleWeightUnit_GAL_Str @"gal" | |||||
| #define AiLinkBleWeightUnitStrDic(key) [@{AiLinkBleWeightUnit_KG_Str:@(ELDeviceWeightUnit_KG),AiLinkBleWeightUnit_Jin_Str:@(ELDeviceWeightUnit_JIN),AiLinkBleWeightUnit_LB_OZ_Str:@(ELDeviceWeightUnit_LB_OZ),AiLinkBleWeightUnit_OZ_Str:@(ELDeviceWeightUnit_OZ),AiLinkBleWeightUnit_ST_LB_Str:@(ELDeviceWeightUnit_ST_LB),AiLinkBleWeightUnit_G_Str:@(ELDeviceWeightUnit_G),AiLinkBleWeightUnit_LB_Str:@(ELDeviceWeightUnit_LB)}[key] integerValue] | #define AiLinkBleWeightUnitStrDic(key) [@{AiLinkBleWeightUnit_KG_Str:@(ELDeviceWeightUnit_KG),AiLinkBleWeightUnit_Jin_Str:@(ELDeviceWeightUnit_JIN),AiLinkBleWeightUnit_LB_OZ_Str:@(ELDeviceWeightUnit_LB_OZ),AiLinkBleWeightUnit_OZ_Str:@(ELDeviceWeightUnit_OZ),AiLinkBleWeightUnit_ST_LB_Str:@(ELDeviceWeightUnit_ST_LB),AiLinkBleWeightUnit_G_Str:@(ELDeviceWeightUnit_G),AiLinkBleWeightUnit_LB_Str:@(ELDeviceWeightUnit_LB)}[key] integerValue] | ||||
| #define AiLinkBleWeightUnitDic @{@(ELDeviceWeightUnit_KG):AiLinkBleWeightUnit_KG_Str,@(ELDeviceWeightUnit_JIN):AiLinkBleWeightUnit_Jin_Str,@(ELDeviceWeightUnit_LB_OZ):AiLinkBleWeightUnit_LB_OZ_Str,@(ELDeviceWeightUnit_OZ):AiLinkBleWeightUnit_OZ_Str,@(ELDeviceWeightUnit_ST_LB):AiLinkBleWeightUnit_ST_LB_Str,@(ELDeviceWeightUnit_G):AiLinkBleWeightUnit_G_Str,@(ELDeviceWeightUnit_LB):AiLinkBleWeightUnit_LB_Str} | |||||
| //#define AiLinkBleWeightUnitDic @{@(ELDeviceWeightUnit_KG):AiLinkBleWeightUnit_KG_Str,@(ELDeviceWeightUnit_JIN):AiLinkBleWeightUnit_Jin_Str,@(ELDeviceWeightUnit_LB_OZ):AiLinkBleWeightUnit_LB_OZ_Str,@(ELDeviceWeightUnit_OZ):AiLinkBleWeightUnit_OZ_Str,@(ELDeviceWeightUnit_ST_LB):AiLinkBleWeightUnit_ST_LB_Str,@(ELDeviceWeightUnit_G):AiLinkBleWeightUnit_G_Str,@(ELDeviceWeightUnit_LB):AiLinkBleWeightUnit_LB_Str} | |||||
| #define AiLinkBleWeightUnitDic @{@(ELDeviceWeightUnit_KG):AiLinkBleWeightUnit_KG_Str,@(ELDeviceWeightUnit_JIN):AiLinkBleWeightUnit_Jin_Str,@(ELDeviceWeightUnit_LB_OZ):AiLinkBleWeightUnit_LB_OZ_Str,@(ELDeviceWeightUnit_OZ):AiLinkBleWeightUnit_OZ_Str,@(ELDeviceWeightUnit_ST_LB):AiLinkBleWeightUnit_ST_LB_Str,@(ELDeviceWeightUnit_G):AiLinkBleWeightUnit_G_Str,@(ELDeviceWeightUnit_LB):AiLinkBleWeightUnit_LB_Str, @(ELDeviceWeightUnit_ML):AiLinkBleWeightUnit_ML_Str, @(ELDeviceWeightUnit_FLOZ):AiLinkBleWeightUnit_FL_OZ_Str, @(ELDeviceWeightUnit_CC):AiLinkBleWeightUnit_CC_Str, @(ELDeviceWeightUnit_L):AiLinkBleWeightUnit_L_Str, @(ELDeviceWeightUnit_GAL):AiLinkBleWeightUnit_GAL_Str} | |||||
| /** AiLink Weight unit(体重单位)*/ | /** AiLink Weight unit(体重单位)*/ | ||||
| typedef NS_ENUM(NSInteger, ELDeviceWeightUnit) { | typedef NS_ENUM(NSInteger, ELDeviceWeightUnit) { | ||||
| /** kg */ | /** kg */ | ||||
| ELDeviceWeightUnit_G = 0x05 , | ELDeviceWeightUnit_G = 0x05 , | ||||
| /** lb */ | /** lb */ | ||||
| ELDeviceWeightUnit_LB = 0x06 , | ELDeviceWeightUnit_LB = 0x06 , | ||||
| //体积 咖啡秤有ml单位 所以协议增加体积部分 | |||||
| /** ml */ | |||||
| ELDeviceWeightUnit_ML = 0x10 , | |||||
| /** fl.oz */ | |||||
| ELDeviceWeightUnit_FLOZ = 0x20 , | |||||
| /** cc */ | |||||
| ELDeviceWeightUnit_CC = 0x30 , | |||||
| /** l */ | |||||
| ELDeviceWeightUnit_L = 0x40 , | |||||
| /** gal */ | |||||
| ELDeviceWeightUnit_GAL = 0x50 , | |||||
| /** Unsupported unit */ | /** Unsupported unit */ | ||||
| ELDeviceWeightUnit_Fail = 0xFF , | ELDeviceWeightUnit_Fail = 0xFF , | ||||
| }; | }; | ||||
| #define AiLinkBleVolumeUnit_mlStr @"ml" | |||||
| #define AiLinkBleVolumeUnit_flozStr @"fl.oz" | |||||
| #define AiLinkBleVolumeUnit_ccStr @"cc" | |||||
| #define AiLinkBleVolumeUnit_lStr @"l" | |||||
| #define AiLinkBleVolumeUnit_galStr @"gal" | |||||
| #define AiLinkBleVolumeUnitDic @{@(ELDeviceVolumeUnit_ML):AiLinkBleVolumeUnit_mlStr, @(ELDeviceVolumeUnit_FLOZ):AiLinkBleVolumeUnit_flozStr, @(ELDeviceVolumeUnit_CC):AiLinkBleVolumeUnit_ccStr, @(ELDeviceVolumeUnit_L):AiLinkBleVolumeUnit_lStr, @(ELDeviceVolumeUnit_GAL):AiLinkBleVolumeUnit_galStr} | |||||
| /** AiLink Temperature unit(温度单位)*/ | |||||
| typedef NS_ENUM(NSInteger, ELDeviceVolumeUnit) { | |||||
| /** ml */ | |||||
| ELDeviceVolumeUnit_ML = 0x00 , | |||||
| /** fl.oz */ | |||||
| ELDeviceVolumeUnit_FLOZ = 0x01 , | |||||
| /** cc */ | |||||
| ELDeviceVolumeUnit_CC = 0x02 , | |||||
| /** l */ | |||||
| ELDeviceVolumeUnit_L = 0x03 , | |||||
| /** gal */ | |||||
| ELDeviceVolumeUnit_GAL = 0x04 , | |||||
| /** Unsupported unit */ | |||||
| ELDeviceVolumeUnit_Fail = 0xFF , | |||||
| }; | |||||
| /** AiLink Nutrition unit(营养秤专用单位)*/ | |||||
| typedef NS_ENUM(NSInteger, ELDeviceNutritionUnit) { | |||||
| /** g */ | |||||
| ELDeviceNutritionUnit_G = 0x00 , | |||||
| /** ml */ | |||||
| ELDeviceNutritionUnit_ML = 0x01 , | |||||
| /** lb.oz */ | |||||
| ELDeviceNutritionUnit_LBOZ = 0x02 , | |||||
| /** oz */ | |||||
| ELDeviceNutritionUnit_OZ = 0x03 , | |||||
| /** kg */ | |||||
| ELDeviceNutritionUnit_KG = 0x04 , | |||||
| /** jin */ | |||||
| ELDeviceNutritionUnit_JIN = 0x05 , | |||||
| /** 牛奶ml */ | |||||
| ELDeviceNutritionUnit_MILK_ML = 0x06 , | |||||
| /** 水ml */ | |||||
| ELDeviceNutritionUnit_WATER_ML = 0x07 , | |||||
| /** 牛奶floz */ | |||||
| ELDeviceNutritionUnit_MILK_FLOZ = 0x08 , | |||||
| /** 水floz */ | |||||
| ELDeviceNutritionUnit_WATER_FLOZ = 0x09 , | |||||
| /** lb. */ | |||||
| ELDeviceNutritionUnit_LB = 0x0A , | |||||
| /** Unsupported unit */ | |||||
| ELDeviceNutritionUnit_Fail = 0xFF , | |||||
| }; | |||||
| #pragma mark ============ 枚举 ============== | #pragma mark ============ 枚举 ============== | ||||
| typedef NS_ENUM(NSUInteger, ELBluetoothState) { | typedef NS_ENUM(NSUInteger, ELBluetoothState) { | ||||
| ELBluetoothStateUnavailable, //Bluetooth is not available(蓝牙不可用) | ELBluetoothStateUnavailable, //Bluetooth is not available(蓝牙不可用) | ||||
| ELBluetoothStateDidDisconnect, //Disconnect(断开连接) | ELBluetoothStateDidDisconnect, //Disconnect(断开连接) | ||||
| ELBluetoothStateDidValidationPass, //approved(通过验证) | ELBluetoothStateDidValidationPass, //approved(通过验证) | ||||
| ELBluetoothStateFailedValidation, //Failed verification(未通过验证) | ELBluetoothStateFailedValidation, //Failed verification(未通过验证) | ||||
| ELBluetoothStateUnauthorized = 0XFF , //No Bluetooth permission (没有蓝牙权限) | |||||
| }; | }; | ||||
| //sex(性别) | //sex(性别) |
| // | |||||
| // ELSkipBleDataModel.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/6/17. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <Foundation/Foundation.h> | |||||
| #import "ELSkipBleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| /** 跳绳基础的数据模型 */ | |||||
| @interface ELSkipBleDataModel : NSObject | |||||
| /** 模式 */ | |||||
| @property (nonatomic, assign) enum Skip_UseModeType modeType; | |||||
| /** 倒计时跳绳或倒计数跳绳模式下的倒计时或倒计数 */ | |||||
| @property (nonatomic, assign) NSUInteger countdownNum; | |||||
| /** 运动时间 */ | |||||
| @property (nonatomic, assign) NSUInteger sportTime; | |||||
| /** 跳绳个数 */ | |||||
| @property (nonatomic, assign) NSUInteger sportNum; | |||||
| @end | |||||
| /** 绊绳数据对象模型 */ | |||||
| @interface ELSkipBleTripRopeModel : NSObject | |||||
| /** 本次连跳的累计时间 */ | |||||
| @property (nonatomic, assign) long long tripTime; | |||||
| /** 本次连跳的累计个数 */ | |||||
| @property (nonatomic, assign) NSUInteger tripJump; | |||||
| @end | |||||
| /** 跳绳记录数据模型 */ | |||||
| @interface ELSkipHistoryDataModel : NSObject | |||||
| /** 开始时间戳 */ | |||||
| @property (nonatomic, assign) long long startTime; | |||||
| /** 跳绳基础数据模型 */ | |||||
| @property (nonatomic, strong) ELSkipBleDataModel *dataModel; | |||||
| /** 平均频次(次/分) */ | |||||
| @property (nonatomic, assign) NSUInteger avgRate; | |||||
| /** 最快频次(次/分) */ | |||||
| @property (nonatomic, assign) NSUInteger maxRate; | |||||
| /** 绊绳数据列表 */ | |||||
| @property (nonatomic, copy) NSArray<ELSkipBleTripRopeModel *> *tripRopeList; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | |||||
| // ELSkipBleHeader.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/6/16. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #ifndef ELSkipBleHeader_h | |||||
| #define ELSkipBleHeader_h | |||||
| /** 跳绳 ble head type 枚举定义 */ | |||||
| typedef NS_ENUM (NSInteger, Skip_BleHeadType) { | |||||
| /** 同步时间戳 */ | |||||
| Skip_BleHeadType_SyncTimestamp = 0x00 , | |||||
| /** 启动/结束自由跳绳模式 */ | |||||
| Skip_BleHeadType_StartFreeMode = 0x01 , | |||||
| /** 启动/结束倒计时跳绳模式 */ | |||||
| Skip_BleHeadType_StartCountdownTimeMode = 0x02 , | |||||
| /** 启动/结束倒计数跳绳模式 */ | |||||
| Skip_BleHeadType_StartCountdownNumMode = 0x03 , | |||||
| /** 修改默认倒计时 */ | |||||
| Skip_BleHeadType_UpdateCountdownTime = 0x04 , | |||||
| /** 修改默认倒计数 */ | |||||
| Skip_BleHeadType_UpdateCountdownNum = 0x05 , | |||||
| /** 实时跳绳数据上报 */ | |||||
| Skip_BleHeadType_RealtimeDataReporting = 0x10 , | |||||
| /** 跳绳结束,结果数据上报 */ | |||||
| Skip_BleHeadType_EndRopeUploadData = 0x20 , | |||||
| /** 绑定设备 */ | |||||
| Skip_BleHeadType_BindDevice = 0xB0 , | |||||
| /** 请求获取离线记录 */ | |||||
| Skip_BleHeadType_GetOfflineHistory = 0xF1 , | |||||
| }; | |||||
| /** 跳绳回复结果枚举定义 */ | |||||
| typedef NS_ENUM (NSInteger, Skip_ResultType) { | |||||
| /** 成功 */ | |||||
| Skip_ResultType_Success = 0x00 , | |||||
| /** 失败 */ | |||||
| Skip_ResultType_Fail = 0x01 , | |||||
| /** 不支持 */ | |||||
| Skip_ResultType_NotSupport = 0x02 , | |||||
| }; | |||||
| /** 启动/结束跳绳命令枚举 */ | |||||
| typedef NS_ENUM (NSInteger, Skip_UseDevCommandType) { | |||||
| /** 结束(本次跳绳数据上报) */ | |||||
| Skip_UseDevCommandType_End = 0x00 , | |||||
| /** 启动 */ | |||||
| Skip_UseDevCommandType_Start = 0x01 , | |||||
| /** 重新开始 */ | |||||
| Skip_UseDevCommandType_Restart = 0x02 , | |||||
| }; | |||||
| /** 跳绳使用状态枚举定义 */ | |||||
| typedef NS_ENUM(NSInteger, Skip_ReadyStateType) { | |||||
| /** 跳绳准备阶段 */ | |||||
| Skip_ReadyStateType_NotStarted = 0 , | |||||
| /** 正在跳绳阶段 */ | |||||
| Skip_ReadyStateType_Sporting , | |||||
| /** 跳绳完成阶段 */ | |||||
| Skip_ReadyStateType_End , | |||||
| }; | |||||
| /** 跳绳模式枚举定义 */ | |||||
| typedef NS_ENUM(NSInteger, Skip_UseModeType) { | |||||
| /** 自由模式 */ | |||||
| Skip_UseModeType_Free = 1 , | |||||
| /** 倒计时模式 */ | |||||
| Skip_UseModeType_CountdownTime , | |||||
| /** 倒计数模式 */ | |||||
| Skip_UseModeType_CountdownNum , | |||||
| }; | |||||
| /** 绑定设备类型定义 */ | |||||
| typedef NS_ENUM(NSInteger, Skip_BindDeviceType) { | |||||
| /** 直接绑定 */ | |||||
| Skip_BindDeviceType_DirectBinding = 0x00 , | |||||
| /** 按键绑定 */ | |||||
| Skip_BindDeviceType_KeyBinding = 0x01 , | |||||
| }; | |||||
| #endif /* ELSkipBleHeader_h */ |
| // | |||||
| // ELSkipBleManager.h | |||||
| // AILinkBleSDK | |||||
| // | |||||
| // Created by cliCk on 2021/6/16. | |||||
| // Copyright © 2021 IOT. All rights reserved. | |||||
| // | |||||
| #import <AILinkBleSDK/ELBluetoothManager.h> | |||||
| #import "ELSkipBleHeader.h" | |||||
| NS_ASSUME_NONNULL_BEGIN | |||||
| @class ELSkipBleDataModel; | |||||
| @class ELSkipHistoryDataModel; | |||||
| @protocol ELSkipBleDelegate <NSObject> | |||||
| //@optional | |||||
| /** 返回设备的连接状态 */ | |||||
| - (void)skipManagerUpdateState:(ELBluetoothState)state; | |||||
| /** 回调扫描到的设备 */ | |||||
| - (void)skipManagerScanDevices:(NSArray<ELPeripheralModel *> *)scanDevices; | |||||
| /** 返回命令结果 */ | |||||
| - (void)skipManagerResult:(enum Skip_ResultType)result bleHeaderType:(enum Skip_BleHeadType)type; | |||||
| /** 实时跳绳数据上报 | |||||
| * @param readyState : 跳绳状态 | |||||
| * @param model : 运动数据模型 | |||||
| * @param power : 当前电量百分比 | |||||
| */ | |||||
| - (void)skipManagerRealtimeDataWithState:(enum Skip_ReadyStateType)readyState skipModel:(ELSkipBleDataModel *)model power:(NSUInteger)power; | |||||
| /** 跳绳结束,上报数据 | |||||
| * @param model : 跳绳记录数据模型 | |||||
| */ | |||||
| - (void)skipManagerSportEndReportDataWithHistoryModel:(ELSkipHistoryDataModel *)model; | |||||
| /** 上报离线历史记录 | |||||
| * @param modelList : 记录模型列表 | |||||
| */ | |||||
| - (void)skipManagerReportOfflineHistoryWithHistoryModelList:(NSArray<ELSkipHistoryDataModel *> *)modelList; | |||||
| @end | |||||
| @interface ELSkipBleManager : ELBluetoothManager | |||||
| @property (nonatomic, weak) id<ELSkipBleDelegate> skipDelegate; | |||||
| + (ELSkipBleManager *)shareManager; | |||||
| /** 绑定设备,该功能与硬件没有实际的交互用途,只用户处理app绑定设备时的逻辑处理 */ | |||||
| - (void)bindDeviceWithType:(enum Skip_BindDeviceType)type; | |||||
| /** 同步时间戳 */ | |||||
| - (void)syncDevTimeStamp:(NSInteger)timestamp; | |||||
| /** 启动/结束自由跳绳 */ | |||||
| - (void)sendFreeModeWithType:(enum Skip_UseDevCommandType)type; | |||||
| /** 启动/结束倒计时跳绳 */ | |||||
| - (void)sendCountdownTimeModeWithType:(enum Skip_UseDevCommandType)type; | |||||
| /** 修改默认倒计时 */ | |||||
| - (void)updateCountdownTimeWithNum:(NSUInteger)num; | |||||
| /** 启动/结束倒计数跳绳 */ | |||||
| - (void)sendCountDownNumWithType:(enum Skip_UseDevCommandType)type; | |||||
| /** 修改默认倒计数 */ | |||||
| - (void)updateCountdownNumWithNum:(NSUInteger)num; | |||||
| /** 请求接收离线历史记录 */ | |||||
| - (void)getOfflineHistory; | |||||
| /** 清空离线历史记录 */ | |||||
| - (void)clearOfflineHistory; | |||||
| @end | |||||
| NS_ASSUME_NONNULL_END |
| // | // | ||||
| #import "ELBluetoothManager.h" | #import "ELBluetoothManager.h" | ||||
| #import "ELThermometerDeviceModel.h" | |||||
| #import "ELThermometerBleModel.h" | #import "ELThermometerBleModel.h" | ||||
| NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
| ThermometerBleErrorCode_Failure , | ThermometerBleErrorCode_Failure , | ||||
| }; | }; | ||||
| @class ELPeripheralModel; | |||||
| @protocol ELThermometerBleDelegate <NSObject> | @protocol ELThermometerBleDelegate <NSObject> | ||||
| @optional | @optional | ||||
| - (void)thermometerManagerUpdateState:(ELBluetoothState )state; | - (void)thermometerManagerUpdateState:(ELBluetoothState )state; | ||||
| /** Call back all thermometer devices(回调所有体温计设备) */ | /** Call back all thermometer devices(回调所有体温计设备) */ | ||||
| - (void)thermometerManagerScanDevices:(NSArray<ELPeripheralModel *> *)thermometerDevices; | |||||
| - (void)thermometerManagerScanDevices:(NSArray<ELThermometerDeviceModel *> *)thermometerDevices; | |||||
| /** Callback temperature data(回调温度数据) */ | /** Callback temperature data(回调温度数据) */ | ||||
| - (void)thermometerManagerReceiveModel:(ELThermometerBleModel *)model; | - (void)thermometerManagerReceiveModel:(ELThermometerBleModel *)model; |
| @optional | @optional | ||||
| //Bluetooth status callback(回调蓝牙状态) | //Bluetooth status callback(回调蓝牙状态) | ||||
| -(void)toothbrushReceiveState:(ELBluetoothState)state; | |||||
| - (void)toothbrushReceiveState:(ELBluetoothState)state; | |||||
| //Callback toothbrush device list(回调牙刷设备列表) | //Callback toothbrush device list(回调牙刷设备列表) | ||||
| -(void)toothbrushReceiveDevices:(NSArray<ELPeripheralModel *> *)devices; | |||||
| - (void)toothbrushReceiveDevices:(NSArray<ELPeripheralModel *> *)devices; | |||||
| /// Callback gear information(回调档位信息) | /// Callback gear information(回调档位信息) | ||||
| /// @param oneGear First gear(一档档位) | /// @param oneGear First gear(一档档位) | ||||
| /// @param twoGear Second gear(二档档位) | /// @param twoGear Second gear(二档档位) | ||||
| -(void)toothbrushReceiveOneGear:(NSArray<NSNumber *> *)oneGear twoGear:(NSArray<NSNumber *> *)twoGear; | |||||
| - (void)toothbrushReceiveOneGear:(NSArray<NSNumber *> *)oneGear twoGear:(NSArray<NSNumber *> *)twoGear; | |||||
| /// Set work gear result(设置工作档位结果) | /// Set work gear result(设置工作档位结果) | ||||
| /// @param result 结果 | /// @param result 结果 | ||||
| -(void)toothbrushReceiveSetWorkGearResult:(ELSetBluetoothResponseType)result; | |||||
| - (void)toothbrushReceiveSetWorkGearResult:(ELSetBluetoothResponseType)result; | |||||
| //Call back current working gear information(回调当前工作档位信息) | //Call back current working gear information(回调当前工作档位信息) | ||||
| -(void)toothbrushReceiveWorkGear:(ToothbrushWorkGear)workGear; | |||||
| - (void)toothbrushReceiveWorkGear:(ToothbrushWorkGear)workGear; | |||||
| /// Call back trial results(回调试用结果) | /// Call back trial results(回调试用结果) | ||||
| /// @param result 结果 | /// @param result 结果 | ||||
| -(void)toothbrushReceiveTryResult:(ToothbrushSetResult)result; | |||||
| - (void)toothbrushReceiveTryResult:(ToothbrushSetResult)result; | |||||
| /// Report work phase(上报工作阶段) | /// Report work phase(上报工作阶段) | ||||
| /// @param workPhase Work stage information(工作阶段信息) | /// @param workPhase Work stage information(工作阶段信息) | ||||
| -(void)toothbrushReceiveWorkPhase:(ToothBrushWorkPhase)workPhase; | |||||
| - (void)toothbrushReceiveWorkPhase:(ToothBrushWorkPhase)workPhase; | |||||
| /// Recall the data of manually set gear(回调手动设置档位的数据) | /// Recall the data of manually set gear(回调手动设置档位的数据) | ||||
| /// @param custom data(数据) | /// @param custom data(数据) | ||||
| -(void)toothbrushReceiveCustomData:(ToothbrushCustomData)custom; | |||||
| - (void)toothbrushReceiveCustomData:(ToothbrushCustomData)custom; | |||||
| /// Callback switch toothbrush result(回调开关牙刷结果) | /// Callback switch toothbrush result(回调开关牙刷结果) | ||||
| /// @param result 结果 | /// @param result 结果 | ||||
| -(void)toothbrushReceiveSwitchResult:(ToothbrushSetResult)result; | |||||
| - (void)toothbrushReceiveSwitchResult:(ToothbrushSetResult)result; | |||||
| /// Callback three-axis direction(回调三轴方向) | /// Callback three-axis direction(回调三轴方向) | ||||
| /// @param direction 方向 | /// @param direction 方向 | ||||
| -(void)toothbrushReceiveTriaxialDirection:(ToothbrushTriaxialDirection)direction; | |||||
| - (void)toothbrushReceiveTriaxialDirection:(ToothbrushTriaxialDirection)direction; | |||||
| /// Recall three-axis data(回调三轴数据) | /// Recall three-axis data(回调三轴数据) | ||||
| /// @param success 是否成功 | /// @param success 是否成功 | ||||
| /// @param x x轴数据 | /// @param x x轴数据 | ||||
| /// @param y y轴数据 | /// @param y y轴数据 | ||||
| /// @param z z轴数据 | /// @param z z轴数据 | ||||
| -(void)toothbrushReceiveTriaxialData:(BOOL)success triaxialX:(int)x triaxialY:(int)y triaxialZ:(int)z; | |||||
| - (void)toothbrushReceiveTriaxialData:(BOOL)success triaxialX:(int)x triaxialY:(int)y triaxialZ:(int)z; | |||||
| /// Default value of second gear(二档档位默认值) | /// Default value of second gear(二档档位默认值) | ||||
| /// @param gear Second gear(二档档位) | /// @param gear Second gear(二档档位) | ||||
| -(void)toothbrushReceiveTwoGearDefault:(ToothbrushGearType)gear; | |||||
| - (void)toothbrushReceiveTwoGearDefault:(ToothbrushGearType)gear; | |||||
| /// Set the second gear default gear result(设置二档默认档位结果) | /// Set the second gear default gear result(设置二档默认档位结果) | ||||
| /// @param result 结果 | /// @param result 结果 | ||||
| -(void)toothbrushReceiveSettingTwoGearDefaultResult:(ELSetBluetoothResponseType)result; | |||||
| - (void)toothbrushReceiveSettingTwoGearDefaultResult:(ELSetBluetoothResponseType)result; | |||||
| /// Call back brushing data(回调刷牙数据) | /// Call back brushing data(回调刷牙数据) | ||||
| /// @param data 刷牙数据 | /// @param data 刷牙数据 | ||||
| -(void)toothbrushtReceiveToothbrushData:(ToothbrushData)data; | |||||
| - (void)toothbrushtReceiveToothbrushData:(ToothbrushData)data; | |||||
| /// Call back brushing offline data(回调刷牙数据) | |||||
| /// @param data 刷牙离线数据 | |||||
| - (void)toothbrushtReceiveToothbrushOfflineData:(ToothbrushOfflineData)data; | |||||
| - (void)toothbrushtReceiveToothbrushOfflineDataCount:(unsigned char)count result:(unsigned char)result; | |||||
| /** MCU replies to the result of setting the ip address (MCU回复设置ip地址结果 ) | |||||
| * @param result : 1:成功,0:失败,2:不支持 | |||||
| */ | |||||
| - (void)toothbrushManagerCallBackSetIPAddressResult:(NSInteger)result; | |||||
| @end | @end | ||||
| @interface ELToothbrushBleManager : ELBluetoothManager | @interface ELToothbrushBleManager : ELBluetoothManager | ||||
| //Current working mode(当前工作模式) | //Current working mode(当前工作模式) | ||||
| @property (nonatomic, assign) ToothbrushGearType currentMode; | |||||
| @property(nonatomic, assign) ToothbrushGearType currentMode; | |||||
| //Current default working hours(当前默认工作时长) | //Current default working hours(当前默认工作时长) | ||||
| @property (nonatomic, assign) NSInteger currentWorkTime; | |||||
| @property(nonatomic, assign) NSInteger currentWorkTime; | |||||
| //Current gear(当前档位) | //Current gear(当前档位) | ||||
| @property (nonatomic, assign) ToothSupportGearType currentGear; | |||||
| @property(nonatomic, assign) ToothSupportGearType currentGear; | |||||
| @property (nonatomic, weak) id<ToothbrushDelegate> toothbrushDelegate; | |||||
| @property(nonatomic, weak) id <ToothbrushDelegate> toothbrushDelegate; | |||||
| +(instancetype)shareManager; | |||||
| + (instancetype)shareManager; | |||||
| //Get supported gear(获取支持的档位) | //Get supported gear(获取支持的档位) | ||||
| -(void)getGear; | |||||
| - (void)getGear; | |||||
| /// Set brushing mode(设置刷牙模式) | /// Set brushing mode(设置刷牙模式) | ||||
| /// @param gearType Brushing mode(刷牙模式) | /// @param gearType Brushing mode(刷牙模式) | ||||
| /// @param interval Brushing time (0: do not modify the working time, before keeping)(刷牙时间(0:不修改工作时长,保留之前)) | /// @param interval Brushing time (0: do not modify the working time, before keeping)(刷牙时间(0:不修改工作时长,保留之前)) | ||||
| /// @param supportType Which gear is it(是哪个档位) | /// @param supportType Which gear is it(是哪个档位) | ||||
| -(void)setWorkGear:(ToothbrushGearType)gearType interval:(int)interval supportGearType:(ToothSupportGearType)supportType; | |||||
| - (void)setWorkGear:(ToothbrushGearType)gearType interval:(int)interval supportGearType:(ToothSupportGearType)supportType; | |||||
| - (void)setWorkGear:(ToothbrushGearType)gearType interval:(int)interval supportGearType:(ToothSupportGearType)supportType withCid:(ELSupportDeviceType)cid; | |||||
| /// Get the current working gear(获取当前工作的档位) | /// Get the current working gear(获取当前工作的档位) | ||||
| -(void)getWorkGear; | |||||
| - (void)getWorkGear; | |||||
| - (void)getWorkGearWithCid:(ELSupportDeviceType)cid; | |||||
| /// try out(试用) | /// try out(试用) | ||||
| /// @param gear Gear (ToothbrushGearTypeStop means stop trial)(档位(ToothbrushGearTypeStop 表示停止试用)) | |||||
| /// @param gear Gear (ToothbrushGearTypeStop_00 means stop trial)(档位(ToothbrushGearTypeStop_00 表示停止试用)) | |||||
| /// @param supportType Which gear(第几档) | /// @param supportType Which gear(第几档) | ||||
| /// @param frequency 频率 | /// @param frequency 频率 | ||||
| /// @param duty 占空比 | /// @param duty 占空比 | ||||
| -(void)tryGear:(ToothbrushGearType)gear supportType:(ToothSupportGearType)supportType frequency:(int)frequency duty:(int)duty; | |||||
| - (void)tryGear:(ToothbrushGearType)gear supportType:(ToothSupportGearType)supportType frequency:(int)frequency duty:(int)duty; | |||||
| - (void)tryGear:(ToothbrushGearType)gear supportType:(ToothSupportGearType)supportType frequency:(int)frequency duty:(int)duty withCid:(ELSupportDeviceType)cid; | |||||
| /// Get the current work stage(获取当前工作阶段) | /// Get the current work stage(获取当前工作阶段) | ||||
| -(void)getWorkPhase; | |||||
| - (void)getWorkPhase; | |||||
| - (void)getWorkPhaseWithCid:(ELSupportDeviceType)cid; | |||||
| /// Set manual setting gear(设置手动设置档位) | /// Set manual setting gear(设置手动设置档位) | ||||
| /// @param frequency 频率 | /// @param frequency 频率 | ||||
| /// @param duty 占空比 | /// @param duty 占空比 | ||||
| /// @param interval 时间 | /// @param interval 时间 | ||||
| -(void)setCustomGearData:(int)frequency duty:(int)duty interval:(int)interval; | |||||
| - (void)setCustomGearData:(int)frequency duty:(int)duty interval:(int)interval; | |||||
| - (void)setCustomGearData:(int)frequency duty:(int)duty interval:(int)interval withCid:(ELSupportDeviceType)cid; | |||||
| /// Get manual profile data(获取手动设置档数据) | /// Get manual profile data(获取手动设置档数据) | ||||
| -(void)getCustomGear; | |||||
| - (void)getCustomGear; | |||||
| - (void)getCustomGearWithCid:(ELSupportDeviceType)cid; | |||||
| /// Switch toothbrush(开关牙刷) | /// Switch toothbrush(开关牙刷) | ||||
| -(void)switchToothbrush; | |||||
| - (void)switchToothbrush; | |||||
| - (void)switchToothbrushWithCid:(ELSupportDeviceType)cid; | |||||
| //Get three axis direction(获取三轴方向) | //Get three axis direction(获取三轴方向) | ||||
| -(void)getTriaxialDirection; | |||||
| - (void)getTriaxialDirection; | |||||
| //APP 获取离线历史记录条数 二级指令 0x11 | |||||
| - (void)getOfflineDataCount; | |||||
| //APP 请求接收离线历史记录 二级指令 0x12 | |||||
| - (void)getOfflineDataStart; | |||||
| //APP 取消接收离线历史记录 二级指令 0x13 | |||||
| - (void)getOfflineDataCancel; | |||||
| //APP 请求清空离线历史记录 二级指令 0x14 | |||||
| - (void)getOfflineDataClear; | |||||
| //Get three-axis data(获取三轴数据) | //Get three-axis data(获取三轴数据) | ||||
| -(void)getTriaxialData; | |||||
| - (void)getTriaxialData; | |||||
| //Set the second gear default gear(设置二档默认档位) | //Set the second gear default gear(设置二档默认档位) | ||||
| -(void)setTwoGearDefaultGear:(ToothbrushGearType)gear; | |||||
| - (void)setTwoGearDefaultGear:(ToothbrushGearType)gear; | |||||
| - (void)setTwoGearDefaultGear:(ToothbrushGearType)gear withCid:(ELSupportDeviceType)cid; | |||||
| //Get the second gear default gear(获取二档默认档位) | //Get the second gear default gear(获取二档默认档位) | ||||
| -(void)getTwoGearDefualt; | |||||
| - (void)getTwoGearDefualt; | |||||
| - (void)getTwoGearDefualtWithCid:(ELSupportDeviceType)cid; | - (void)getTwoGearDefualtWithCid:(ELSupportDeviceType)cid; | ||||
| //Report the results of receiving brushing data(上报刷牙数据接收结果) | //Report the results of receiving brushing data(上报刷牙数据接收结果) | ||||
| -(void)reportReceiveResultOfToothbrushData:(BOOL)result; | |||||
| - (void)reportReceiveResultOfToothbrushData:(BOOL)result; | |||||
| - (void)reportReceiveResultOfToothbrushData:(BOOL)result withCid:(ELSupportDeviceType)cid; | |||||
| ///清除wifi记录指令 | ///清除wifi记录指令 | ||||
| - (void)bleWifiCleanWifiRecord; | - (void)bleWifiCleanWifiRecord; | ||||
| ///获取设备连接的wifi名称 | ///获取设备连接的wifi名称 | ||||
| - (void)getBleLinkWifiName; | - (void)getBleLinkWifiName; | ||||
| /// Request device authorization(请求设备授权) | |||||
| /// @param interval 时间截 | |||||
| -(void)requestDeviceAuthorization:(NSInteger)interval; | |||||
| /** 设置设备的IP地址,端口号和访问路径 */ | |||||
| - (void)setDevAccessIpAddress:(NSString *)address portNumber:(NSUInteger)portNum path:(NSString *)path; | |||||
| @end | @end | ||||
| NS_ASSUME_NONNULL_END | NS_ASSUME_NONNULL_END |