/* Begin PBXBuildFile section */ | /* Begin PBXBuildFile section */ | ||||
78DC38C729278F790080E0D9 /* libBhBodyComposition120.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78DC38C529278F790080E0D9 /* libBhBodyComposition120.a */; }; | 78DC38C729278F790080E0D9 /* libBhBodyComposition120.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 78DC38C529278F790080E0D9 /* libBhBodyComposition120.a */; }; | ||||
78DC4DE32990FB2E006C6911 /* ELDemoScanVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78DC4DDE2990FB2E006C6911 /* ELDemoScanVC.xib */; }; | |||||
78DC4DE42990FB2E006C6911 /* ELDemoDeviceModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DC4DDF2990FB2E006C6911 /* ELDemoDeviceModel.m */; }; | |||||
78DC4DE52990FB2E006C6911 /* ELDemoScanVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DC4DE02990FB2E006C6911 /* ELDemoScanVC.m */; }; | |||||
78DC4DF12990FB40006C6911 /* ELDemoView.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DC4DE82990FB40006C6911 /* ELDemoView.m */; }; | |||||
78DC4DF22990FB40006C6911 /* ELDeviceTypeCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DC4DE92990FB40006C6911 /* ELDeviceTypeCell.m */; }; | |||||
78DC4DF32990FB40006C6911 /* ELDemoButton.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DC4DEA2990FB40006C6911 /* ELDemoButton.m */; }; | |||||
78DC4DF42990FB40006C6911 /* ELDeviceTypeCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78DC4DEC2990FB40006C6911 /* ELDeviceTypeCell.xib */; }; | |||||
78DC4DF52990FB40006C6911 /* ELDeviceScanCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DC4DED2990FB40006C6911 /* ELDeviceScanCell.m */; }; | |||||
78DC4DF62990FB40006C6911 /* ELDeviceScanCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78DC4DF02990FB40006C6911 /* ELDeviceScanCell.xib */; }; | |||||
78DC4DFB2990FC10006C6911 /* HeightBodyFatScaleVC.m in Sources */ = {isa = PBXBuildFile; fileRef = 78DC4DF82990FC10006C6911 /* HeightBodyFatScaleVC.m */; }; | |||||
78DC4DFC2990FC10006C6911 /* HeightBodyFatScaleVC.xib in Resources */ = {isa = PBXBuildFile; fileRef = 78DC4DF92990FC10006C6911 /* HeightBodyFatScaleVC.xib */; }; | |||||
952D19A1276DE80000ED3A0C /* AILinkBleSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952D19A0276DE80000ED3A0C /* AILinkBleSDK.framework */; }; | 952D19A1276DE80000ED3A0C /* AILinkBleSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 952D19A0276DE80000ED3A0C /* AILinkBleSDK.framework */; }; | ||||
95565B792786EA3B000265EA /* SkipConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95565B752786EA3B000265EA /* SkipConnectionViewController.m */; }; | 95565B792786EA3B000265EA /* SkipConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95565B752786EA3B000265EA /* SkipConnectionViewController.m */; }; | ||||
95565B7A2786EA3B000265EA /* SkipScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95565B782786EA3B000265EA /* SkipScanViewController.m */; }; | 95565B7A2786EA3B000265EA /* SkipScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95565B782786EA3B000265EA /* SkipScanViewController.m */; }; | ||||
958B4EA9263C08E800476BAE /* ELSelectView.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E73263C08E700476BAE /* ELSelectView.m */; }; | 958B4EA9263C08E800476BAE /* ELSelectView.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E73263C08E700476BAE /* ELSelectView.m */; }; | ||||
958B4EAA263C08E800476BAE /* AilinkSuperConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E77263C08E700476BAE /* AilinkSuperConnectViewController.m */; }; | 958B4EAA263C08E800476BAE /* AilinkSuperConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E77263C08E700476BAE /* AilinkSuperConnectViewController.m */; }; | ||||
958B4EAB263C08E800476BAE /* AiLinkSuperViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E7A263C08E800476BAE /* AiLinkSuperViewController.m */; }; | 958B4EAB263C08E800476BAE /* AiLinkSuperViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E7A263C08E800476BAE /* AiLinkSuperViewController.m */; }; | ||||
958B4EAC263C08E800476BAE /* LICENSE in Resources */ = {isa = PBXBuildFile; fileRef = 958B4E7C263C08E800476BAE /* LICENSE */; }; | |||||
958B4EAD263C08E800476BAE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E7F263C08E800476BAE /* NSLayoutConstraint+MASDebugAdditions.m */; }; | 958B4EAD263C08E800476BAE /* NSLayoutConstraint+MASDebugAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E7F263C08E800476BAE /* NSLayoutConstraint+MASDebugAdditions.m */; }; | ||||
958B4EAE263C08E800476BAE /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E88263C08E800476BAE /* ViewController+MASAdditions.m */; }; | 958B4EAE263C08E800476BAE /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E88263C08E800476BAE /* ViewController+MASAdditions.m */; }; | ||||
958B4EAF263C08E800476BAE /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E8C263C08E800476BAE /* MASCompositeConstraint.m */; }; | 958B4EAF263C08E800476BAE /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E8C263C08E800476BAE /* MASCompositeConstraint.m */; }; | ||||
958B4EB4263C08E800476BAE /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E93263C08E800476BAE /* MASConstraint.m */; }; | 958B4EB4263C08E800476BAE /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E93263C08E800476BAE /* MASConstraint.m */; }; | ||||
958B4EB5263C08E800476BAE /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E95263C08E800476BAE /* MASViewConstraint.m */; }; | 958B4EB5263C08E800476BAE /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E95263C08E800476BAE /* MASViewConstraint.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 */; }; | |||||
958B4EB8263C08E800476BAE /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E98263C08E800476BAE /* ViewController.m */; }; | 958B4EB8263C08E800476BAE /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E98263C08E800476BAE /* ViewController.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 */; }; | ||||
78DC38C429278F790080E0D9 /* BhBodyCompositionAllBody50KHz.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BhBodyCompositionAllBody50KHz.h; sourceTree = "<group>"; }; | 78DC38C429278F790080E0D9 /* BhBodyCompositionAllBody50KHz.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BhBodyCompositionAllBody50KHz.h; sourceTree = "<group>"; }; | ||||
78DC38C529278F790080E0D9 /* libBhBodyComposition120.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libBhBodyComposition120.a; sourceTree = "<group>"; }; | 78DC38C529278F790080E0D9 /* libBhBodyComposition120.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libBhBodyComposition120.a; sourceTree = "<group>"; }; | ||||
78DC38C629278F790080E0D9 /* BhBodyCompositionEnum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BhBodyCompositionEnum.h; sourceTree = "<group>"; }; | 78DC38C629278F790080E0D9 /* BhBodyCompositionEnum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BhBodyCompositionEnum.h; sourceTree = "<group>"; }; | ||||
78DC4DDE2990FB2E006C6911 /* ELDemoScanVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELDemoScanVC.xib; sourceTree = "<group>"; }; | |||||
78DC4DDF2990FB2E006C6911 /* ELDemoDeviceModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELDemoDeviceModel.m; sourceTree = "<group>"; }; | |||||
78DC4DE02990FB2E006C6911 /* ELDemoScanVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELDemoScanVC.m; sourceTree = "<group>"; }; | |||||
78DC4DE12990FB2E006C6911 /* ELDemoScanVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELDemoScanVC.h; sourceTree = "<group>"; }; | |||||
78DC4DE22990FB2E006C6911 /* ELDemoDeviceModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELDemoDeviceModel.h; sourceTree = "<group>"; }; | |||||
78DC4DE72990FB40006C6911 /* ELDeviceScanCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELDeviceScanCell.h; sourceTree = "<group>"; }; | |||||
78DC4DE82990FB40006C6911 /* ELDemoView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELDemoView.m; sourceTree = "<group>"; }; | |||||
78DC4DE92990FB40006C6911 /* ELDeviceTypeCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELDeviceTypeCell.m; sourceTree = "<group>"; }; | |||||
78DC4DEA2990FB40006C6911 /* ELDemoButton.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELDemoButton.m; sourceTree = "<group>"; }; | |||||
78DC4DEB2990FB40006C6911 /* ELDemoView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELDemoView.h; sourceTree = "<group>"; }; | |||||
78DC4DEC2990FB40006C6911 /* ELDeviceTypeCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELDeviceTypeCell.xib; sourceTree = "<group>"; }; | |||||
78DC4DED2990FB40006C6911 /* ELDeviceScanCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELDeviceScanCell.m; sourceTree = "<group>"; }; | |||||
78DC4DEE2990FB40006C6911 /* ELDeviceTypeCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELDeviceTypeCell.h; sourceTree = "<group>"; }; | |||||
78DC4DEF2990FB40006C6911 /* ELDemoButton.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELDemoButton.h; sourceTree = "<group>"; }; | |||||
78DC4DF02990FB40006C6911 /* ELDeviceScanCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = ELDeviceScanCell.xib; sourceTree = "<group>"; }; | |||||
78DC4DF82990FC10006C6911 /* HeightBodyFatScaleVC.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = HeightBodyFatScaleVC.m; sourceTree = "<group>"; }; | |||||
78DC4DF92990FC10006C6911 /* HeightBodyFatScaleVC.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = HeightBodyFatScaleVC.xib; sourceTree = "<group>"; }; | |||||
78DC4DFA2990FC10006C6911 /* HeightBodyFatScaleVC.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HeightBodyFatScaleVC.h; sourceTree = "<group>"; }; | |||||
952D19A0276DE80000ED3A0C /* AILinkBleSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AILinkBleSDK.framework; sourceTree = "<group>"; }; | 952D19A0276DE80000ED3A0C /* AILinkBleSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AILinkBleSDK.framework; sourceTree = "<group>"; }; | ||||
95565B752786EA3B000265EA /* SkipConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SkipConnectionViewController.m; sourceTree = "<group>"; }; | 95565B752786EA3B000265EA /* SkipConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SkipConnectionViewController.m; sourceTree = "<group>"; }; | ||||
95565B762786EA3B000265EA /* SkipScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkipScanViewController.h; sourceTree = "<group>"; }; | 95565B762786EA3B000265EA /* SkipScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SkipScanViewController.h; sourceTree = "<group>"; }; | ||||
958B4E78263C08E700476BAE /* AiLinkSuperViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiLinkSuperViewController.h; sourceTree = "<group>"; }; | 958B4E78263C08E700476BAE /* AiLinkSuperViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AiLinkSuperViewController.h; sourceTree = "<group>"; }; | ||||
958B4E79263C08E800476BAE /* AilinkSuperConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AilinkSuperConnectViewController.h; sourceTree = "<group>"; }; | 958B4E79263C08E800476BAE /* AilinkSuperConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AilinkSuperConnectViewController.h; sourceTree = "<group>"; }; | ||||
958B4E7A263C08E800476BAE /* AiLinkSuperViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiLinkSuperViewController.m; sourceTree = "<group>"; }; | 958B4E7A263C08E800476BAE /* AiLinkSuperViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AiLinkSuperViewController.m; sourceTree = "<group>"; }; | ||||
958B4E7C263C08E800476BAE /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; | |||||
958B4E7E263C08E800476BAE /* MASCompositeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASCompositeConstraint.h; sourceTree = "<group>"; }; | 958B4E7E263C08E800476BAE /* MASCompositeConstraint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MASCompositeConstraint.h; sourceTree = "<group>"; }; | ||||
958B4E7F263C08E800476BAE /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = "<group>"; }; | 958B4E7F263C08E800476BAE /* NSLayoutConstraint+MASDebugAdditions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSLayoutConstraint+MASDebugAdditions.m"; sourceTree = "<group>"; }; | ||||
958B4E80263C08E800476BAE /* MASConstraint+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASConstraint+Private.h"; sourceTree = "<group>"; }; | 958B4E80263C08E800476BAE /* MASConstraint+Private.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MASConstraint+Private.h"; sourceTree = "<group>"; }; | ||||
958B4E94263C08E800476BAE /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ViewController+MASAdditions.h"; sourceTree = "<group>"; }; | 958B4E94263C08E800476BAE /* ViewController+MASAdditions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "ViewController+MASAdditions.h"; sourceTree = "<group>"; }; | ||||
958B4E95263C08E800476BAE /* MASViewConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewConstraint.m; sourceTree = "<group>"; }; | 958B4E95263C08E800476BAE /* MASViewConstraint.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MASViewConstraint.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>"; }; | |||||
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>"; }; | ||||
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>"; }; | ||||
path = BhBodyComposition120; | path = BhBodyComposition120; | ||||
sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
}; | }; | ||||
78DC4DE62990FB40006C6911 /* View */ = { | |||||
isa = PBXGroup; | |||||
children = ( | |||||
78DC4DE72990FB40006C6911 /* ELDeviceScanCell.h */, | |||||
78DC4DED2990FB40006C6911 /* ELDeviceScanCell.m */, | |||||
78DC4DF02990FB40006C6911 /* ELDeviceScanCell.xib */, | |||||
78DC4DEE2990FB40006C6911 /* ELDeviceTypeCell.h */, | |||||
78DC4DE92990FB40006C6911 /* ELDeviceTypeCell.m */, | |||||
78DC4DEC2990FB40006C6911 /* ELDeviceTypeCell.xib */, | |||||
78DC4DEF2990FB40006C6911 /* ELDemoButton.h */, | |||||
78DC4DEA2990FB40006C6911 /* ELDemoButton.m */, | |||||
78DC4DEB2990FB40006C6911 /* ELDemoView.h */, | |||||
78DC4DE82990FB40006C6911 /* ELDemoView.m */, | |||||
); | |||||
path = View; | |||||
sourceTree = "<group>"; | |||||
}; | |||||
78DC4DF72990FC10006C6911 /* 25_HeightBodyFatScale */ = { | |||||
isa = PBXGroup; | |||||
children = ( | |||||
78DC4DFA2990FC10006C6911 /* HeightBodyFatScaleVC.h */, | |||||
78DC4DF82990FC10006C6911 /* HeightBodyFatScaleVC.m */, | |||||
78DC4DF92990FC10006C6911 /* HeightBodyFatScaleVC.xib */, | |||||
); | |||||
name = 25_HeightBodyFatScale; | |||||
path = AILinkBleSDKDemo/25_HeightBodyFatScale; | |||||
sourceTree = SOURCE_ROOT; | |||||
}; | |||||
95565B742786EA3B000265EA /* 24_Skip */ = { | 95565B742786EA3B000265EA /* 24_Skip */ = { | ||||
isa = PBXGroup; | isa = PBXGroup; | ||||
children = ( | children = ( | ||||
958B4E74263C08E700476BAE /* Others */ = { | 958B4E74263C08E700476BAE /* Others */ = { | ||||
isa = PBXGroup; | isa = PBXGroup; | ||||
children = ( | children = ( | ||||
78DC4DE62990FB40006C6911 /* View */, | |||||
958B4E76263C08E700476BAE /* AiLinkSuper */, | 958B4E76263C08E700476BAE /* AiLinkSuper */, | ||||
958B4E75263C08E700476BAE /* AppDelegate.h */, | 958B4E75263C08E700476BAE /* AppDelegate.h */, | ||||
958B4EA1263C08E800476BAE /* AppDelegate.m */, | 958B4EA1263C08E800476BAE /* AppDelegate.m */, | ||||
958B4E7B263C08E800476BAE /* Masonry */, | 958B4E7B263C08E800476BAE /* Masonry */, | ||||
958B4EA2263C08E800476BAE /* ViewController.h */, | 958B4EA2263C08E800476BAE /* ViewController.h */, | ||||
958B4E98263C08E800476BAE /* ViewController.m */, | 958B4E98263C08E800476BAE /* ViewController.m */, | ||||
78DC4DE22990FB2E006C6911 /* ELDemoDeviceModel.h */, | |||||
78DC4DDF2990FB2E006C6911 /* ELDemoDeviceModel.m */, | |||||
78DC4DE12990FB2E006C6911 /* ELDemoScanVC.h */, | |||||
78DC4DE02990FB2E006C6911 /* ELDemoScanVC.m */, | |||||
78DC4DDE2990FB2E006C6911 /* ELDemoScanVC.xib */, | |||||
); | ); | ||||
path = Others; | path = Others; | ||||
sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
958B4E7B263C08E800476BAE /* Masonry */ = { | 958B4E7B263C08E800476BAE /* Masonry */ = { | ||||
isa = PBXGroup; | isa = PBXGroup; | ||||
children = ( | children = ( | ||||
958B4E7C263C08E800476BAE /* LICENSE */, | |||||
958B4E7D263C08E800476BAE /* Masonry */, | 958B4E7D263C08E800476BAE /* Masonry */, | ||||
958B4E97263C08E800476BAE /* README.md */, | |||||
); | ); | ||||
path = Masonry; | path = Masonry; | ||||
sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
955725BF276C38CC003BFBAC /* 22_AiFreshNutritionScale */, | 955725BF276C38CC003BFBAC /* 22_AiFreshNutritionScale */, | ||||
955725F4276C38CD003BFBAC /* 23_FaceMask */, | 955725F4276C38CD003BFBAC /* 23_FaceMask */, | ||||
95565B742786EA3B000265EA /* 24_Skip */, | 95565B742786EA3B000265EA /* 24_Skip */, | ||||
78DC4DF72990FC10006C6911 /* 25_HeightBodyFatScale */, | |||||
958B4E74263C08E700476BAE /* Others */, | 958B4E74263C08E700476BAE /* Others */, | ||||
958B4E67263C08E700476BAE /* Tools */, | 958B4E67263C08E700476BAE /* Tools */, | ||||
E622E26A243F1CA6003C319D /* Assets.xcassets */, | E622E26A243F1CA6003C319D /* Assets.xcassets */, | ||||
isa = PBXResourcesBuildPhase; | isa = PBXResourcesBuildPhase; | ||||
buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
files = ( | files = ( | ||||
78DC4DF42990FB40006C6911 /* ELDeviceTypeCell.xib in Resources */, | |||||
E622E287243F1D41003C319D /* Main.storyboard in Resources */, | E622E287243F1D41003C319D /* Main.storyboard in Resources */, | ||||
78DC4DE32990FB2E006C6911 /* ELDemoScanVC.xib in Resources */, | |||||
E622E26E243F1CA6003C319D /* LaunchScreen.storyboard in Resources */, | E622E26E243F1CA6003C319D /* LaunchScreen.storyboard in Resources */, | ||||
958B4EB7263C08E800476BAE /* README.md in Resources */, | |||||
958B4EAC263C08E800476BAE /* LICENSE in Resources */, | |||||
E622E26B243F1CA6003C319D /* Assets.xcassets in Resources */, | E622E26B243F1CA6003C319D /* Assets.xcassets in Resources */, | ||||
78DC4DF62990FB40006C6911 /* ELDeviceScanCell.xib in Resources */, | |||||
78DC4DFC2990FC10006C6911 /* HeightBodyFatScaleVC.xib in Resources */, | |||||
); | ); | ||||
runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
}; | }; | ||||
files = ( | files = ( | ||||
9557264A276C38CD003BFBAC /* ToothbrushConnectionViewController.m in Sources */, | 9557264A276C38CD003BFBAC /* ToothbrushConnectionViewController.m in Sources */, | ||||
95565B7A2786EA3B000265EA /* SkipScanViewController.m in Sources */, | 95565B7A2786EA3B000265EA /* SkipScanViewController.m in Sources */, | ||||
78DC4DFB2990FC10006C6911 /* HeightBodyFatScaleVC.m in Sources */, | |||||
9557263B276C38CD003BFBAC /* FaceMaskScanViewController.m in Sources */, | 9557263B276C38CD003BFBAC /* FaceMaskScanViewController.m in Sources */, | ||||
9557263F276C38CD003BFBAC /* EightScaleConnectionViewController.m in Sources */, | 9557263F276C38CD003BFBAC /* EightScaleConnectionViewController.m in Sources */, | ||||
9557262B276C38CD003BFBAC /* WheelMonitorScanViewController.m in Sources */, | 9557262B276C38CD003BFBAC /* WheelMonitorScanViewController.m in Sources */, | ||||
95572629276C38CD003BFBAC /* BloodSugarConnectionViewController.m in Sources */, | 95572629276C38CD003BFBAC /* BloodSugarConnectionViewController.m in Sources */, | ||||
78DC4DE52990FB2E006C6911 /* ELDemoScanVC.m in Sources */, | |||||
9557262A276C38CD003BFBAC /* WheelMonitorConnectViewController.m in Sources */, | 9557262A276C38CD003BFBAC /* WheelMonitorConnectViewController.m in Sources */, | ||||
95572642276C38CD003BFBAC /* ELEightScaleAlgorithmTool.m in Sources */, | 95572642276C38CD003BFBAC /* ELEightScaleAlgorithmTool.m in Sources */, | ||||
95572630276C38CD003BFBAC /* CoffeeScaleScanViewController.m in Sources */, | 95572630276C38CD003BFBAC /* CoffeeScaleScanViewController.m in Sources */, | ||||
9557263E276C38CD003BFBAC /* EightScaleScanViewController.m in Sources */, | 9557263E276C38CD003BFBAC /* EightScaleScanViewController.m in Sources */, | ||||
958B4EB8263C08E800476BAE /* ViewController.m in Sources */, | 958B4EB8263C08E800476BAE /* ViewController.m in Sources */, | ||||
958B4EAF263C08E800476BAE /* MASCompositeConstraint.m in Sources */, | 958B4EAF263C08E800476BAE /* MASCompositeConstraint.m in Sources */, | ||||
78DC4DF22990FB40006C6911 /* ELDeviceTypeCell.m in Sources */, | |||||
78DC4DF52990FB40006C6911 /* ELDeviceScanCell.m in Sources */, | |||||
78DC4DF12990FB40006C6911 /* ELDemoView.m in Sources */, | |||||
95572626276C38CD003BFBAC /* AiFreshNutritionScaleConnectionViewController.m in Sources */, | 95572626276C38CD003BFBAC /* AiFreshNutritionScaleConnectionViewController.m in Sources */, | ||||
9557262F276C38CD003BFBAC /* ELBfsWifiConnectTableViewCell.m in Sources */, | 9557262F276C38CD003BFBAC /* ELBfsWifiConnectTableViewCell.m in Sources */, | ||||
95572623276C38CD003BFBAC /* BloodConnectViewController.m in Sources */, | 95572623276C38CD003BFBAC /* BloodConnectViewController.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 */, | ||||
78DC4DF32990FB40006C6911 /* ELDemoButton.m in Sources */, | |||||
958B4EA5263C08E800476BAE /* UILabel+WZAdd.m in Sources */, | 958B4EA5263C08E800476BAE /* UILabel+WZAdd.m in Sources */, | ||||
95572633276C38CD003BFBAC /* BabyScaleConnectViewController.m in Sources */, | 95572633276C38CD003BFBAC /* BabyScaleConnectViewController.m in Sources */, | ||||
95572644276C38CD003BFBAC /* BodyFatScaleConnectViewController.m in Sources */, | 95572644276C38CD003BFBAC /* BodyFatScaleConnectViewController.m in Sources */, | ||||
9557262E276C38CD003BFBAC /* ELBfsWifiConnectVC.m in Sources */, | 9557262E276C38CD003BFBAC /* ELBfsWifiConnectVC.m in Sources */, | ||||
95572637276C38CD003BFBAC /* OximeterConnectionViewController.m in Sources */, | 95572637276C38CD003BFBAC /* OximeterConnectionViewController.m in Sources */, | ||||
95572648276C38CD003BFBAC /* ForeheadScanViewController.m in Sources */, | 95572648276C38CD003BFBAC /* ForeheadScanViewController.m in Sources */, | ||||
78DC4DE42990FB2E006C6911 /* ELDemoDeviceModel.m in Sources */, | |||||
958B4EBA263C08E800476BAE /* SubBleManager.m in Sources */, | 958B4EBA263C08E800476BAE /* SubBleManager.m in Sources */, | ||||
95572631276C38CD003BFBAC /* CoffeeScaleConnectionViewController.m in Sources */, | 95572631276C38CD003BFBAC /* CoffeeScaleConnectionViewController.m in Sources */, | ||||
); | ); | ||||
buildSettings = { | buildSettings = { | ||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||
CODE_SIGN_STYLE = Automatic; | CODE_SIGN_STYLE = Automatic; | ||||
CURRENT_PROJECT_VERSION = 20221221; | |||||
CURRENT_PROJECT_VERSION = 20230206; | |||||
DEVELOPMENT_TEAM = YEU77XR292; | DEVELOPMENT_TEAM = YEU77XR292; | ||||
FRAMEWORK_SEARCH_PATHS = ( | FRAMEWORK_SEARCH_PATHS = ( | ||||
"$(inherited)", | "$(inherited)", | ||||
"$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | "$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | ||||
"$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/BhBodyComposition120", | "$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/BhBodyComposition120", | ||||
); | ); | ||||
MARKETING_VERSION = 1.5.6; | |||||
MARKETING_VERSION = 1.5.9; | |||||
OTHER_LDFLAGS = "-ObjC"; | OTHER_LDFLAGS = "-ObjC"; | ||||
PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | ||||
PRODUCT_NAME = "$(TARGET_NAME)"; | PRODUCT_NAME = "$(TARGET_NAME)"; | ||||
buildSettings = { | buildSettings = { | ||||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||||
CODE_SIGN_STYLE = Automatic; | CODE_SIGN_STYLE = Automatic; | ||||
CURRENT_PROJECT_VERSION = 20221221; | |||||
CURRENT_PROJECT_VERSION = 20230206; | |||||
DEVELOPMENT_TEAM = YEU77XR292; | DEVELOPMENT_TEAM = YEU77XR292; | ||||
FRAMEWORK_SEARCH_PATHS = ( | FRAMEWORK_SEARCH_PATHS = ( | ||||
"$(inherited)", | "$(inherited)", | ||||
"$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | "$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | ||||
"$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/BhBodyComposition120", | "$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/BhBodyComposition120", | ||||
); | ); | ||||
MARKETING_VERSION = 1.5.6; | |||||
MARKETING_VERSION = 1.5.9; | |||||
OTHER_LDFLAGS = "-ObjC"; | OTHER_LDFLAGS = "-ObjC"; | ||||
PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | ||||
PRODUCT_NAME = "$(TARGET_NAME)"; | PRODUCT_NAME = "$(TARGET_NAME)"; |
#import <AILinkBleSDK/ELBodyFatScaleBleWeightModel.h> | #import <AILinkBleSDK/ELBodyFatScaleBleWeightModel.h> | ||||
#import <AILinkBleSDK/ELBluetoothManager+Settings.h> | #import <AILinkBleSDK/ELBluetoothManager+Settings.h> | ||||
#import <AILinkBleSDK/AlgorithmSDK.h> | |||||
#import <AILinkBleSDK/OEMAlgorithmSDK.h> | |||||
#import <AILinkBleSDK/ELUnitConvertTool.h> | #import <AILinkBleSDK/ELUnitConvertTool.h> | ||||
@interface BodyFatScaleConnectViewController () <ELBluetoothManagerDelegate, ELBodyFatScaleBleDelegate> | @interface BodyFatScaleConnectViewController () <ELBluetoothManagerDelegate, ELBodyFatScaleBleDelegate> | ||||
NSString *weightKg = [ELUnitConvertTool getWeightShowStrWithTargetUnit:ELDeviceWeightUnit_KG bleWeightInt:weightModel.weight bleWeightUnit:weightModel.weightUnit bleWeightPoint:weightModel.weightPoint]; | NSString *weightKg = [ELUnitConvertTool getWeightShowStrWithTargetUnit:ELDeviceWeightUnit_KG bleWeightInt:weightModel.weight bleWeightUnit:weightModel.weightUnit bleWeightPoint:weightModel.weightPoint]; | ||||
AlgorithmModel *algorithmModel = [AlgorithmSDK getBodyfatWithWeight:weightKg.floatValue adc:(int) weightModel.adc sex:user.sex age:(int) user.age height:(int) user.height]; | |||||
OEMAlgorithmModel *algorithmModel = [OEMAlgorithmSDK getBodyfatWithWeight:weightKg.floatValue adc:(int) weightModel.adc sex:user.sex age:(int) user.age height:(int) user.height]; | |||||
NSLog(@"algorithmModel:%@", algorithmModel); | NSLog(@"algorithmModel:%@", algorithmModel); | ||||
} | } | ||||
#import "BroadcastScaleViewController.h" | #import "BroadcastScaleViewController.h" | ||||
#import <AILinkBleSDK/ELBroadcastScaleBleManager.h> | #import <AILinkBleSDK/ELBroadcastScaleBleManager.h> | ||||
#import <AILinkBleSDK/AlgorithmSDK.h> | |||||
#import <AILinkBleSDK/OEMAlgorithmSDK.h> | |||||
#import <AILinkBleSDK/ELBodyFatScaleBleUserModel.h> | #import <AILinkBleSDK/ELBodyFatScaleBleUserModel.h> | ||||
#import <AILinkBleSDK/ELWeightAlgorithmusModel.h> | #import <AILinkBleSDK/ELWeightAlgorithmusModel.h> | ||||
#import "Masonry.h" | #import "Masonry.h" | ||||
self.statusLbl.text = @"Test end"; | self.statusLbl.text = @"Test end"; | ||||
ELBodyFatScaleBleUserModel *user = self.getOneUser; | ELBodyFatScaleBleUserModel *user = self.getOneUser; | ||||
NSString *weightKg = [ELWeightAlgorithmusModel getKgWithWeightShowStr:model.weight weightUnit:model.weightUnit weightPoint:model.weightPoint]; | NSString *weightKg = [ELWeightAlgorithmusModel getKgWithWeightShowStr:model.weight weightUnit:model.weightUnit weightPoint:model.weightPoint]; | ||||
AlgorithmModel *agModel = [AlgorithmSDK getBodyfatWithWeight:weightKg.floatValue adc:(int) model.adc sex:user.sex age:(int) user.age height:(int) user.height]; | |||||
OEMAlgorithmModel *agModel = [OEMAlgorithmSDK getBodyfatWithWeight:weightKg.floatValue adc:(int) model.adc sex:user.sex age:(int) user.age height:(int) user.height]; | |||||
NSLog(@"agModel:%@", agModel); | NSLog(@"agModel:%@", agModel); | ||||
break; | break; |
// | |||||
// HeightBodyFatScaleVC.h | |||||
// AILinkBleSDK_Example | |||||
// | |||||
// Created by LarryZhang on 2023/2/4. | |||||
// Copyright © 2023 zhengzida. All rights reserved. | |||||
// | |||||
#import <UIKit/UIKit.h> | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@class ELAILinkPeripheral; | |||||
@interface HeightBodyFatScaleVC : UIViewController | |||||
@property (nonatomic, strong) ELAILinkPeripheral *per; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// HeightBodyFatScaleVC.m | |||||
// AILinkBleSDK_Example | |||||
// | |||||
// Created by LarryZhang on 2023/2/4. | |||||
// Copyright © 2023 zhengzida. All rights reserved. | |||||
// | |||||
#import "HeightBodyFatScaleVC.h" | |||||
#import <AILinkBleSDK/ELHeightBodyFatScaleBleManager.h> | |||||
#import <AILinkBleSDK/ELAILinkBleManager.h> | |||||
#import "ELDemoButton.h" | |||||
@interface HeightBodyFatScaleVC () <ELHeightBodyFatScaleBleDelegate> | |||||
@property (weak, nonatomic) IBOutlet UILabel *bleStatusLabel; | |||||
//work mode | |||||
@property (weak, nonatomic) IBOutlet ELDemoButton *weightModeButton; | |||||
@property (weak, nonatomic) IBOutlet ELDemoButton *weightHeightModeButton; | |||||
@property (weak, nonatomic) IBOutlet ELDemoButton *weightHeightFatModeButton; | |||||
@property (weak, nonatomic) IBOutlet ELDemoButton *withBabyModeButton; | |||||
//Weight | |||||
@property (weak, nonatomic) IBOutlet UILabel *weightValueLabel; | |||||
//Height | |||||
@property (weak, nonatomic) IBOutlet UILabel *heightValueLabel; | |||||
//Setting | |||||
@property (weak, nonatomic) IBOutlet ELDemoButton *voiceSettingButton; | |||||
@property (weak, nonatomic) IBOutlet ELDemoButton *uintSettingButton; | |||||
//workMode | |||||
@property (nonatomic, assign) HeightBodyFatScale_WorkModeType workMode; | |||||
//voice on/of | |||||
@property (nonatomic, assign) BOOL voiceOn; | |||||
//unit | |||||
@property (nonatomic, assign) ELDeviceWeightUnit weightUnit; | |||||
@property (nonatomic, assign) ELDeviceHeightUnit heightUnit; | |||||
//report | |||||
@property (weak, nonatomic) IBOutlet UILabel *reportValueLabel; | |||||
//baby mode value | |||||
@property (weak, nonatomic) IBOutlet UILabel *babyWeightValueLabel; | |||||
@property (weak, nonatomic) IBOutlet UILabel *adultWeightValueLabel; | |||||
@property (weak, nonatomic) IBOutlet UILabel *babyAdultWeightValueLabel; | |||||
/** 抱婴模式下的测量状态下标 */ | |||||
@property (nonatomic, assign) NSInteger babyModeIndex; | |||||
@end | |||||
@implementation HeightBodyFatScaleVC | |||||
- (void)viewDidLoad { | |||||
[super viewDidLoad]; | |||||
// Do any additional setup after loading the view from its nib. | |||||
self.weightUnit = ELDeviceWeightUnit_KG; | |||||
self.heightUnit = ELDeviceHeightUnit_CM; | |||||
[self uiSetUnit]; | |||||
self.babyModeIndex = 0; | |||||
[self bleScan]; | |||||
} | |||||
- (void)dealloc { | |||||
[ELHeightBodyFatScaleBleManager shareManager].heightBodyFatScaleDelegate = nil; | |||||
[[ELHeightBodyFatScaleBleManager shareManager] disconnectPeripheral]; | |||||
} | |||||
- (void)bleScan { | |||||
//创建蓝牙 | |||||
[ELHeightBodyFatScaleBleManager shareManager].heightBodyFatScaleDelegate = self; | |||||
[[ELHeightBodyFatScaleBleManager shareManager] startScan]; | |||||
} | |||||
//发送用户信息 | |||||
- (void)sendUserData { | |||||
//// 0 female、1 male & 178(cm) | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendUserDataWithGender:1 age:20 heightInCm:178]; | |||||
} | |||||
#pragma mark -UI | |||||
- (void)uiSetWorkMode:(HeightBodyFatScale_WorkModeType)mode { | |||||
self.weightModeButton.lighted = NO; | |||||
self.weightHeightModeButton.lighted = NO; | |||||
self.weightHeightFatModeButton.lighted = NO; | |||||
self.withBabyModeButton.lighted = NO; | |||||
if (mode == HeightBodyFatScale_WorkModeType_WeightMode) { | |||||
self.weightModeButton.lighted = YES; | |||||
} else if (mode == HeightBodyFatScale_WorkModeType_WeightHeightMode) { | |||||
self.weightHeightModeButton.lighted = YES; | |||||
} else if (mode == HeightBodyFatScale_WorkModeType_HeightBodyFatMode) { | |||||
self.weightHeightFatModeButton.lighted = YES; | |||||
} else if (mode == HeightBodyFatScale_WorkModeType_BabyMode) { | |||||
self.withBabyModeButton.lighted = YES; | |||||
} | |||||
} | |||||
- (void)uiSetVoiceOn:(BOOL)voiceOn { | |||||
self.voiceSettingButton.lighted = voiceOn; | |||||
if (voiceOn) { | |||||
[self.voiceSettingButton setTitle:@"Voice: On" forState:UIControlStateNormal]; | |||||
} else { | |||||
[self.voiceSettingButton setTitle:@"Voice: Off" forState:UIControlStateNormal]; | |||||
} | |||||
} | |||||
- (void)uiSetUnit { | |||||
if (self.weightUnit == ELDeviceWeightUnit_KG) { | |||||
[self.uintSettingButton setTitle:[NSString stringWithFormat:@"Unit: kg & cm"] forState:UIControlStateNormal]; | |||||
} else { | |||||
[self.uintSettingButton setTitle:[NSString stringWithFormat:@"Unit: lb & ft"] forState:UIControlStateNormal]; | |||||
} | |||||
} | |||||
#pragma mark -Setter Getter | |||||
- (void)setWorkMode:(HeightBodyFatScale_WorkModeType)workMode { | |||||
_workMode = workMode; | |||||
[self uiSetWorkMode:workMode]; | |||||
} | |||||
- (void)setVoiceOn:(BOOL)voiceOn { | |||||
_voiceOn = voiceOn; | |||||
[self uiSetVoiceOn:voiceOn]; | |||||
} | |||||
#pragma mark -Actions | |||||
- (IBAction)weightButtonAction:(id)sender { | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendDeviceWorkMode:HeightBodyFatScale_WorkModeType_WeightMode]; | |||||
self.workMode = HeightBodyFatScale_WorkModeType_WeightMode; | |||||
} | |||||
- (IBAction)weightHeightButtonAction:(id)sender { | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendDeviceWorkMode:HeightBodyFatScale_WorkModeType_WeightHeightMode]; | |||||
self.workMode = HeightBodyFatScale_WorkModeType_WeightHeightMode; | |||||
} | |||||
- (IBAction)weightHeightFatButtonAction:(id)sender { | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendDeviceWorkMode:HeightBodyFatScale_WorkModeType_HeightBodyFatMode]; | |||||
self.workMode = HeightBodyFatScale_WorkModeType_HeightBodyFatMode; | |||||
} | |||||
- (IBAction)withBabyButtonAction:(id)sender { | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendDeviceWorkMode:HeightBodyFatScale_WorkModeType_BabyMode]; | |||||
self.workMode = HeightBodyFatScale_WorkModeType_BabyMode; | |||||
} | |||||
- (IBAction)voiceSettingButtonAction:(id)sender { | |||||
BOOL voiceOn = !self.voiceOn; | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendVoiceSetting:voiceOn]; | |||||
self.voiceOn = voiceOn; | |||||
} | |||||
- (IBAction)unitSettingButtonAction:(id)sender { | |||||
if (self.weightUnit == ELDeviceWeightUnit_KG) { | |||||
self.weightUnit = ELDeviceWeightUnit_LB; | |||||
self.heightUnit = ELDeviceHeightUnit_FT_IN; | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendUnitWithHeightUnit:ELDeviceHeightUnit_FT_IN weightUnit:ELDeviceWeightUnit_LB]; | |||||
} else { | |||||
self.weightUnit = ELDeviceWeightUnit_KG; | |||||
self.heightUnit = ELDeviceHeightUnit_CM; | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendUnitWithHeightUnit:ELDeviceHeightUnit_CM weightUnit:ELDeviceWeightUnit_KG]; | |||||
} | |||||
[self uiSetUnit]; | |||||
} | |||||
#pragma mark - util | |||||
+ (NSString *)getWeightStringWithWeight:(NSInteger)weight unit:(ELDeviceWeightUnit)unit point:(NSInteger)point { | |||||
NSString *formatStr = [NSString stringWithFormat:@"%%.%luf",(unsigned long)point]; | |||||
switch (unit) { | |||||
case ELDeviceWeightUnit_KG: { | |||||
double kgNumber = (double)weight/pow(10, point); | |||||
NSString *weightString = [NSString stringWithFormat:formatStr,kgNumber]; | |||||
return weightString; | |||||
} | |||||
case ELDeviceWeightUnit_JIN: { | |||||
double jinNumber = (double)weight/pow(10, point); | |||||
NSString *jinString = [NSString stringWithFormat:formatStr,jinNumber]; | |||||
return jinString; | |||||
} | |||||
case ELDeviceWeightUnit_LB_OZ: { | |||||
//返回小单位oz | |||||
double ozNumber = (double)weight/pow(10, point); | |||||
NSInteger lbNumber = ozNumber / 16; | |||||
NSString *ozString = [NSString stringWithFormat:formatStr,(ozNumber-lbNumber*16)]; | |||||
return [NSString stringWithFormat:@"%zd:%@",lbNumber,ozString]; | |||||
} | |||||
case ELDeviceWeightUnit_OZ: { | |||||
double ozNumber = (double)weight/pow(10, point); | |||||
NSString *ozString = [NSString stringWithFormat:formatStr,ozNumber]; | |||||
return ozString; | |||||
} | |||||
case ELDeviceWeightUnit_ST_LB: { | |||||
//返回小单位lb | |||||
double lbNumber = (double)weight/pow(10, point); | |||||
NSInteger stNumber = lbNumber/14; | |||||
NSString *lbString = [NSString stringWithFormat:formatStr,(lbNumber-stNumber*14)]; | |||||
return [NSString stringWithFormat:@"%zd:%@",stNumber,lbString]; | |||||
} | |||||
case ELDeviceWeightUnit_G: { | |||||
double gNunber = (double)weight/pow(10, point); | |||||
NSString *gString = [NSString stringWithFormat:formatStr,gNunber]; | |||||
return gString; | |||||
} | |||||
case ELDeviceWeightUnit_LB: { | |||||
double lbNumber = (double)weight/pow(10, point); | |||||
NSString *lbString = [NSString stringWithFormat:formatStr,lbNumber]; | |||||
return lbString; | |||||
} | |||||
default: { | |||||
//不支持的单位 | |||||
return @""; | |||||
} | |||||
} | |||||
return @""; | |||||
} | |||||
+ (NSString *)getHeightStringWithHeight:(NSInteger)height unit:(ELDeviceHeightUnit)unit point:(NSInteger)point { | |||||
NSString *formatStr = [NSString stringWithFormat:@"%%.%luf", (unsigned long)point]; | |||||
switch (unit) { | |||||
case ELDeviceHeightUnit_CM: { | |||||
double cmNumber = (double)height/pow(10, point); | |||||
NSString *cmString = [NSString stringWithFormat:formatStr,cmNumber]; | |||||
return cmString; | |||||
} | |||||
case ELDeviceHeightUnit_Inch: { | |||||
double inchNumber = (double)height/pow(10, point); | |||||
NSString *inchString = [NSString stringWithFormat:formatStr,inchNumber]; | |||||
return inchString; | |||||
} | |||||
case ELDeviceHeightUnit_FT_IN: { | |||||
//返回小单位inch | |||||
double inchNumber = (double)height/pow(10, point); | |||||
NSInteger ftNumber = inchNumber/12; | |||||
NSString *inchString = [NSString stringWithFormat:formatStr, (inchNumber-ftNumber*12)]; | |||||
return [NSString stringWithFormat:@"%zd′%@″", ftNumber, inchString]; | |||||
} | |||||
case ELDeviceHeightUnit_M: { | |||||
double mNumber = (double)height/pow(10, point); | |||||
NSString *mString = [NSString stringWithFormat:formatStr, mNumber]; | |||||
return mString; | |||||
} | |||||
default: { | |||||
//不支持的单位 | |||||
return @""; | |||||
} | |||||
} | |||||
return @""; | |||||
} | |||||
@end | |||||
@implementation HeightBodyFatScaleVC (ble) | |||||
#pragma mark - ble Delegate | |||||
///返回设备连接状态 | |||||
- (void)heightBodyFatScaleManagerUpdateState:(ELBluetoothState)state { | |||||
NSLog(@"heightBodyFatScaleManagerUpdateState() state:%@", @(state)); | |||||
if (state == ELBluetoothStateDidValidationPass) { | |||||
//获取设备状态 | |||||
[[ELHeightBodyFatScaleBleManager shareManager] getWorkState]; | |||||
//设置用户信息 | |||||
[self sendUserData]; | |||||
} | |||||
if (state == ELBluetoothStateScaning) { | |||||
self.bleStatusLabel.text = @"BLE connecting"; | |||||
} else if (state == ELBluetoothStateConnectFail) { | |||||
self.bleStatusLabel.text = @"BLE failed"; | |||||
} else if (state == ELBluetoothStateDidValidationPass) { | |||||
self.bleStatusLabel.text = @"BLE connected"; | |||||
} else if (state == ELBluetoothStateDidDisconnect) { | |||||
self.bleStatusLabel.text = @"BLE did disconnect"; | |||||
} | |||||
} | |||||
///回调扫描到的身高体脂秤 | |||||
- (void)heightBodyFatScaleManagerScanDevices:(NSArray<ELPeripheralModel *> *)scanDevices { | |||||
for (ELPeripheralModel *model in scanDevices) { | |||||
if ([model.macAddress isEqualToString:self.per.macAddressString]) { | |||||
[[ELHeightBodyFatScaleBleManager shareManager] stopScan]; | |||||
[[ELHeightBodyFatScaleBleManager shareManager] connectPeripheral:model]; | |||||
} | |||||
} | |||||
} | |||||
///回调用户信息设置结果 | |||||
- (void)heightBodyFatScaleManagerSetUserDataResult:(HeightBodyFatScale_SetupResult)result { | |||||
if (result == HeightBodyFatScale_SetupResult_Failure) { | |||||
//重新设置 | |||||
[self sendUserData]; | |||||
} | |||||
} | |||||
///MCU主动请求用户信息 | |||||
- (void)heightBodyFatScaleManagerRequestUserData { | |||||
//设置用户信息 | |||||
[self sendUserData]; | |||||
} | |||||
///MCU设置单位 | |||||
- (void)heightBodyFatScaleManagerMCUSetHeightUnit:(ELDeviceHeightUnit)heightUnit weightUnit:(ELDeviceWeightUnit)weightUnit { | |||||
NSLog(@"weightUnit: %@", @(weightUnit)); | |||||
NSLog(@"heightUnit: %@", @(heightUnit)); | |||||
self.weightUnit = weightUnit; | |||||
self.heightUnit = heightUnit; | |||||
[self uiSetUnit]; | |||||
} | |||||
///MCU回复单位设置结果 | |||||
- (void)heightBodyFatScaleManagerReportUnitResult:(HeightBodyFatScale_SetupResult)result { | |||||
} | |||||
///MCU回复工作模式设置结果 | |||||
- (void)heightBodyFatScaleManagerWorkModeResult:(HeightBodyFatScale_SetupResult)result { | |||||
} | |||||
#pragma mark MCU回复设备状态 | |||||
- (void)heightBodyFatScaleManagerReportDevStateWithWorkMode:(HeightBodyFatScale_WorkModeType)mode power:(NSInteger)power charging:(BOOL)charging weightUnit:(ELDeviceWeightUnit)weightUnit height:(ELDeviceHeightUnit)heightUnit voiceState:(BOOL)voice { | |||||
self.workMode = mode; | |||||
self.voiceOn = voice; | |||||
self.weightUnit = weightUnit; | |||||
self.heightUnit = heightUnit; | |||||
[self uiSetUnit]; | |||||
//防止连接设备后设备已经在测量而导致测量失败的问题,新协议设置模式之后会让设备重新进行测量数据 | |||||
[[ELHeightBodyFatScaleBleManager shareManager] sendDeviceWorkMode:mode]; | |||||
NSLog(@"heightBodyFatScaleManagerReportDevStateWithWorkMode() workMode: %@", @(mode)); | |||||
NSLog(@"heightBodyFatScaleManagerReportDevStateWithWorkMode() power: %@", @(power)); | |||||
NSLog(@"heightBodyFatScaleManagerReportDevStateWithWorkMode() charging: %@", @(charging)); | |||||
NSLog(@"heightBodyFatScaleManagerReportDevStateWithWorkMode() weightUnit: %@", @(weightUnit)); | |||||
NSLog(@"heightBodyFatScaleManagerReportDevStateWithWorkMode() heightUnit: %@", @(heightUnit)); | |||||
NSLog(@"heightBodyFatScaleManagerReportDevStateWithWorkMode() voiceState: %@", @(voice)); | |||||
} | |||||
#pragma mark 身高体脂模式 | |||||
///MCU上报称重状态 | |||||
- (void)heightBodyFatScaleManagerReportWeighingState:(HeightBodyFatScale_WeightStableType)stable weightNumber:(NSInteger)weight weightPoint:(NSInteger)point unit:(ELDeviceWeightUnit)unit { | |||||
NSString *unitString = AiLinkBleWeightUnitDic[@(unit)]; | |||||
NSString *dataString = [self.class getWeightStringWithWeight:weight unit:unit point:point]; | |||||
self.weightValueLabel.text = [NSString stringWithFormat:@"%@ %@", dataString, unitString]; | |||||
NSLog(@"heightBodyFatScaleManagerReportWeighingState() stable: %@", @(stable)); | |||||
NSLog(@"heightBodyFatScaleManagerReportWeighingState() weight: %@", @(weight)); | |||||
NSLog(@"heightBodyFatScaleManagerReportWeighingState() point: %@", @(point)); | |||||
NSLog(@"heightBodyFatScaleManagerReportWeighingState() point: %@", @(unit)); | |||||
} | |||||
///MCU上报阻抗数据 | |||||
- (void)heightBodyFatScaleManagerReportAdcDataWithImpedanceState:(HeightBodyFatScale_AdcStateType)state aisle:(HeightBodyFatScale_AdcAisleType)aisle adc:(NSInteger)adc algorithmId:(NSInteger)algorithmId { | |||||
if (state == HeightBodyFatScale_AdcStateType_Over) { | |||||
NSLog(@"adc: %@", @(adc)); | |||||
NSLog(@"algorithmId: %@", @(algorithmId)); | |||||
} | |||||
} | |||||
///MCU上报心率数据 | |||||
- (void)heightBodyFatScaleManagerReportHeartRateDataWithState:(HeightBodyFatScale_HeartRateStateType)state bpm:(NSInteger)bpm { | |||||
if (state == HeightBodyFatScale_HeartRateStateType_Success) { | |||||
NSLog(@"HeartRate bpm: %@", @(bpm)); | |||||
} | |||||
} | |||||
///MCU上报温度数据 | |||||
- (void)heightBodyFatScaleManagerReportTemDataWithNegative:(BOOL)negative tem:(NSInteger)tem point:(NSInteger)point unit:(ELDeviceTemperatureUnit)unit { | |||||
NSLog(@"negative: %@", @(negative)); | |||||
NSLog(@"tem: %@", @(tem)); | |||||
NSLog(@"point: %@", @(point)); | |||||
NSLog(@"unit: %@", @(unit)); | |||||
} | |||||
///MCU上报身高数据 | |||||
- (void)heightBodyFatScaleManagerReportHeightDataWithHeight:(NSInteger)height unit:(ELDeviceHeightUnit)unit point:(NSInteger)point { | |||||
NSString *unitString = AiLinkBleHeightUnitDic[@(unit)]; | |||||
NSString *dataString = [self.class getHeightStringWithHeight:height unit:unit point:point]; | |||||
self.heightValueLabel.text = [NSString stringWithFormat:@"%@ %@", dataString, unitString]; | |||||
NSLog(@"height: %@", @(height)); | |||||
NSLog(@"unit: %@", @(unit)); | |||||
NSLog(@"point: %@", @(point)); | |||||
} | |||||
/// MCU上报体脂数据 | |||||
- (void)heightBodyFatScaleManagerReportBodyFatDataWithDataModel:(ELHeightBodyFatScaleBleWeightBodyModel *)model { | |||||
NSLog(@"model: %@", model); | |||||
self.reportValueLabel.text = [NSString stringWithFormat:@"%@", model]; | |||||
} | |||||
#pragma mark 抱婴模式 | |||||
- (void)heightBodyFatScaleManagerReportBabyModetWithWeighingState:(HeightBodyFatScale_WeightStableType)stable adultWeight:(NSInteger)adultWeight allWeight:(NSInteger)allWeight babyWeight:(NSInteger)babyWeight point:(NSInteger)point unit:(ELDeviceWeightUnit)unit { | |||||
NSLog(@"workMode: HeightBodyFatScale_WorkModeType_BabyMode"); | |||||
// self.workMode = HeightBodyFatScale_WorkModeType_BabyMode; | |||||
// [self uiSetWorkMode:self.workMode]; | |||||
NSLog(@"stable: %@", @(stable)); | |||||
NSLog(@"unit: %@", @(unit)); | |||||
NSLog(@"point: %@", @(point)); | |||||
NSString *unitString = AiLinkBleWeightUnitDic[@(unit)]; | |||||
if (babyWeight > 0) { | |||||
NSLog(@"babyWeight: %@", @(babyWeight)); | |||||
NSString *dataString = [self.class getWeightStringWithWeight:babyWeight unit:unit point:point]; | |||||
self.babyWeightValueLabel.text = [NSString stringWithFormat:@"%@ %@", dataString, unitString]; | |||||
} else if (allWeight > 0) { | |||||
NSLog(@"allWeight: %@", @(allWeight)); | |||||
NSString *dataString = [self.class getWeightStringWithWeight:allWeight unit:unit point:point]; | |||||
self.babyAdultWeightValueLabel.text = [NSString stringWithFormat:@"%@ %@", dataString, unitString]; | |||||
} else { | |||||
NSLog(@"adultWeight: %@", @(adultWeight)); | |||||
NSString *dataString = [self.class getWeightStringWithWeight:adultWeight unit:unit point:point]; | |||||
self.adultWeightValueLabel.text = [NSString stringWithFormat:@"%@ %@", dataString, unitString]; | |||||
} | |||||
if (self.babyModeIndex == 0) { | |||||
NSLog(@"course_adult, 正在测量成人体重…"); | |||||
} else if (self.babyModeIndex == 1) { | |||||
NSLog(@"course_withbaby, 请抱着宝宝重新上秤…"); | |||||
} | |||||
if (stable == HeightBodyFatScale_WeightStableType_Stable) { | |||||
if (self.babyModeIndex == 0) { | |||||
self.babyModeIndex = 1; | |||||
NSLog(@"course_withbaby, 请抱着宝宝重新上秤…"); | |||||
} | |||||
} | |||||
if (stable == HeightBodyFatScale_WeightStableType_Stable && babyWeight > 0) { | |||||
// TODO: save data (babyWeight unit:unit point:point) | |||||
} | |||||
} | |||||
#pragma mark 体重模式 | |||||
- (void)heightBodyFatScaleManagerReportWeightModeWithWeighingState:(HeightBodyFatScale_WeightStableType)stable weightNumber:(NSInteger)weight point:(NSInteger)point unit:(ELDeviceWeightUnit)unit { | |||||
NSString *unitString = AiLinkBleWeightUnitDic[@(unit)]; | |||||
NSString *dataString = [self.class getWeightStringWithWeight:weight unit:unit point:point]; | |||||
self.weightValueLabel.text = [NSString stringWithFormat:@"%@ %@", dataString, unitString]; | |||||
NSLog(@"workMode: HeightBodyFatScale_WorkModeType_WeightMode"); | |||||
// self.workMode = HeightBodyFatScale_WorkModeType_WeightMode; | |||||
// [self uiSetWorkMode:self.workMode]; | |||||
NSLog(@"stable: %@", @(stable)); | |||||
NSLog(@"weight: %@", @(weight)); | |||||
NSLog(@"unit: %@", @(unit)); | |||||
NSLog(@"point: %@", @(point)); | |||||
if (stable == HeightBodyFatScale_WeightStableType_Stable) { | |||||
// TODO: save data (weight unit:unit point:point) | |||||
} | |||||
} | |||||
#pragma mark 体重身高模式 | |||||
//MCU上报体重数据 | |||||
- (void)heightBodyFatScaleManagerReportWeightHeightModeWithWeighingState:(HeightBodyFatScale_WeightStableType)stable weightNumber:(NSInteger)weight point:(NSInteger)point unit:(ELDeviceWeightUnit)unit { | |||||
NSString *unitString = AiLinkBleWeightUnitDic[@(unit)]; | |||||
NSString *dataString = [self.class getWeightStringWithWeight:weight unit:unit point:point]; | |||||
self.weightValueLabel.text = [NSString stringWithFormat:@"%@ %@", dataString, unitString]; | |||||
NSLog(@"workMode: HeightBodyFatScale_WorkModeType_WeightHeightMode"); | |||||
// self.workMode = HeightBodyFatScale_WorkModeType_WeightHeightMode; | |||||
// [self uiSetWorkMode:self.workMode]; | |||||
NSLog(@"stable: %@", @(stable)); | |||||
NSLog(@"weight: %@", @(weight)); | |||||
NSLog(@"unit: %@", @(unit)); | |||||
NSLog(@"point: %@", @(point)); | |||||
if (stable == HeightBodyFatScale_WeightStableType_Stable) { | |||||
// TODO: save data (weight unit:unit point:point) | |||||
} | |||||
} | |||||
//MCU上报身高数据 | |||||
- (void)heightBodyFatScaleManagerReportWeightHeightMOdeWithHeightNumber:(NSInteger)height point:(NSInteger)point unit:(ELDeviceHeightUnit)unit { | |||||
NSString *unitString = AiLinkBleHeightUnitDic[@(unit)]; | |||||
NSString *dataString = [self.class getHeightStringWithHeight:height unit:unit point:point]; | |||||
self.heightValueLabel.text = [NSString stringWithFormat:@"%@ %@", dataString, unitString]; | |||||
NSLog(@"workMode: HeightBodyFatScale_WorkModeType_WeightHeightMode"); | |||||
// self.workMode = HeightBodyFatScale_WorkModeType_WeightHeightMode; | |||||
// [self uiSetWorkMode:self.workMode]; | |||||
NSLog(@"height: %@", @(height)); | |||||
NSLog(@"unit: %@", @(unit)); | |||||
NSLog(@"point: %@", @(point)); | |||||
} | |||||
#pragma mark 测量完成 | |||||
- (void)heightBodyFatScaleManagerSendCompletedWithWorkMode:(HeightBodyFatScale_WorkModeType)type { | |||||
NSLog(@"heightBodyFatScaleManagerSendCompletedWithWorkMode() WorkMode type: %@", @(type)); | |||||
} | |||||
@end | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="20037" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES"> | |||||
<device id="retina6_1" orientation="portrait" appearance="light"/> | |||||
<dependencies> | |||||
<deployment identifier="iOS"/> | |||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="20020"/> | |||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/> | |||||
<capability name="System colors in document resources" minToolsVersion="11.0"/> | |||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/> | |||||
</dependencies> | |||||
<objects> | |||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="HeightBodyFatScaleVC"> | |||||
<connections> | |||||
<outlet property="adultWeightValueLabel" destination="u3v-vO-dqd" id="ig3-Fh-TAG"/> | |||||
<outlet property="babyAdultWeightValueLabel" destination="2FI-2z-OEW" id="tIy-gU-Smh"/> | |||||
<outlet property="babyWeightValueLabel" destination="Zpe-Jl-39q" id="MRW-C4-rtq"/> | |||||
<outlet property="bleStatusLabel" destination="VwK-CG-OF6" id="EY5-XX-CAi"/> | |||||
<outlet property="heightValueLabel" destination="Auj-GH-y0k" id="lPG-eF-P8L"/> | |||||
<outlet property="reportValueLabel" destination="5li-di-lta" id="sQC-Xc-DrU"/> | |||||
<outlet property="uintSettingButton" destination="q79-PN-YaZ" id="DuB-RK-F7B"/> | |||||
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/> | |||||
<outlet property="voiceSettingButton" destination="vfp-vj-4pr" id="LiH-jU-6Bj"/> | |||||
<outlet property="weightHeightFatModeButton" destination="umD-P1-8r2" id="EJJ-sE-ccm"/> | |||||
<outlet property="weightHeightModeButton" destination="gba-oY-NSY" id="rob-lq-znf"/> | |||||
<outlet property="weightModeButton" destination="DmJ-ys-rUq" id="UkO-K0-QxF"/> | |||||
<outlet property="weightValueLabel" destination="jav-d9-3Eh" id="kVc-R7-A2P"/> | |||||
<outlet property="withBabyModeButton" destination="axP-ca-LyH" id="5bm-ge-ys6"/> | |||||
</connections> | |||||
</placeholder> | |||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/> | |||||
<view clearsContextBeforeDrawing="NO" contentMode="scaleToFill" id="i5M-Pr-FkT"> | |||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/> | |||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="bleStatus" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VwK-CG-OF6"> | |||||
<rect key="frame" x="171" y="52" width="72" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="LMh-nY-EEc" userLabel="Work Mode View" customClass="ELDemoView"> | |||||
<rect key="frame" x="20" y="80.5" width="374" height="80"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Work Mode:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="OQf-uF-nLJ"> | |||||
<rect key="frame" x="20" y="4" width="92" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="h0z-rU-3gF"> | |||||
<rect key="frame" x="4" y="32.5" width="366" height="43.5"/> | |||||
<subviews> | |||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="DmJ-ys-rUq" customClass="ELDemoButton"> | |||||
<rect key="frame" x="0.0" y="0.0" width="88.5" height="43.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="12"/> | |||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> | |||||
<state key="normal" title="Weight"/> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="4"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="mainColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
<connections> | |||||
<action selector="weightButtonAction:" destination="-1" eventType="touchUpInside" id="dFK-Db-qlx"/> | |||||
</connections> | |||||
</button> | |||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="gba-oY-NSY" customClass="ELDemoButton"> | |||||
<rect key="frame" x="92.5" y="0.0" width="88.5" height="43.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="12"/> | |||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> | |||||
<state key="normal" title="W&Height"/> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="4"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="mainColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
<connections> | |||||
<action selector="weightHeightButtonAction:" destination="-1" eventType="touchUpInside" id="7gS-2X-vjI"/> | |||||
</connections> | |||||
</button> | |||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="umD-P1-8r2" customClass="ELDemoButton"> | |||||
<rect key="frame" x="185" y="0.0" width="88.5" height="43.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="12"/> | |||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> | |||||
<state key="normal" title="W&H&Fat"/> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="4"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="mainColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
<connections> | |||||
<action selector="weightHeightFatButtonAction:" destination="-1" eventType="touchUpInside" id="loa-ir-1dZ"/> | |||||
</connections> | |||||
</button> | |||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="axP-ca-LyH" customClass="ELDemoButton"> | |||||
<rect key="frame" x="277.5" y="0.0" width="88.5" height="43.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="12"/> | |||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> | |||||
<state key="normal" title="with Baby"/> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="4"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="mainColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
<connections> | |||||
<action selector="withBabyButtonAction:" destination="-1" eventType="touchUpInside" id="7lN-bs-u6M"/> | |||||
</connections> | |||||
</button> | |||||
</subviews> | |||||
</stackView> | |||||
</subviews> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstItem="h0z-rU-3gF" firstAttribute="top" secondItem="OQf-uF-nLJ" secondAttribute="bottom" constant="8" symbolic="YES" id="dDN-p8-t78"/> | |||||
<constraint firstAttribute="bottom" secondItem="h0z-rU-3gF" secondAttribute="bottom" constant="4" id="f1t-J0-EMI"/> | |||||
<constraint firstItem="OQf-uF-nLJ" firstAttribute="top" secondItem="LMh-nY-EEc" secondAttribute="top" constant="4" id="fqu-aQ-0ve"/> | |||||
<constraint firstItem="h0z-rU-3gF" firstAttribute="leading" secondItem="LMh-nY-EEc" secondAttribute="leading" constant="4" id="hbU-Dx-r83"/> | |||||
<constraint firstAttribute="trailing" secondItem="h0z-rU-3gF" secondAttribute="trailing" constant="4" id="ihd-BD-rq0"/> | |||||
<constraint firstAttribute="height" constant="80" id="pF9-re-K2A"/> | |||||
<constraint firstItem="OQf-uF-nLJ" firstAttribute="leading" secondItem="LMh-nY-EEc" secondAttribute="leading" constant="20" symbolic="YES" id="s7c-P6-Vz5"/> | |||||
</constraints> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="opaqueSeparatorColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="8"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
</view> | |||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="M8G-k4-tkc"> | |||||
<rect key="frame" x="20" y="168.5" width="374" height="52"/> | |||||
<subviews> | |||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="jJX-xT-Zlf" userLabel="Weight View" customClass="ELDemoView"> | |||||
<rect key="frame" x="0.0" y="0.0" width="184.5" height="52"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Weight:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="uDK-Jb-t10"> | |||||
<rect key="frame" x="20" y="4" width="58.5" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Weight Value" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="jav-d9-3Eh"> | |||||
<rect key="frame" x="42.5" y="27.5" width="100" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
</subviews> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstAttribute="bottom" secondItem="jav-d9-3Eh" secondAttribute="bottom" constant="4" id="M03-8v-Bkb"/> | |||||
<constraint firstItem="jav-d9-3Eh" firstAttribute="centerX" secondItem="jJX-xT-Zlf" secondAttribute="centerX" id="Nq6-nc-I8E"/> | |||||
<constraint firstItem="uDK-Jb-t10" firstAttribute="leading" secondItem="jJX-xT-Zlf" secondAttribute="leading" constant="20" symbolic="YES" id="ghx-v9-7DN"/> | |||||
<constraint firstItem="uDK-Jb-t10" firstAttribute="top" secondItem="jJX-xT-Zlf" secondAttribute="top" constant="4" id="xBa-h2-wyy"/> | |||||
</constraints> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="8"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="opaqueSeparatorColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
</view> | |||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="grH-Sv-Gjr" userLabel="Height View" customClass="ELDemoView"> | |||||
<rect key="frame" x="189.5" y="0.0" width="184.5" height="52"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Height:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="B2x-Br-bpS"> | |||||
<rect key="frame" x="20" y="4" width="55.5" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Height Value" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Auj-GH-y0k"> | |||||
<rect key="frame" x="44" y="27.5" width="97" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
</subviews> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstItem="B2x-Br-bpS" firstAttribute="top" secondItem="grH-Sv-Gjr" secondAttribute="top" constant="4" id="DIe-ZX-DJe"/> | |||||
<constraint firstItem="Auj-GH-y0k" firstAttribute="centerX" secondItem="grH-Sv-Gjr" secondAttribute="centerX" id="F8Q-Gg-7Zy"/> | |||||
<constraint firstAttribute="bottom" secondItem="Auj-GH-y0k" secondAttribute="bottom" constant="4" id="buO-Ef-jVP"/> | |||||
<constraint firstItem="B2x-Br-bpS" firstAttribute="leading" secondItem="grH-Sv-Gjr" secondAttribute="leading" constant="20" symbolic="YES" id="ea8-5v-nvs"/> | |||||
</constraints> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="8"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="opaqueSeparatorColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
</view> | |||||
</subviews> | |||||
<constraints> | |||||
<constraint firstAttribute="height" constant="52" id="MeQ-bs-1w3"/> | |||||
</constraints> | |||||
</stackView> | |||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="NtG-dN-oCt" userLabel="Setting: View" customClass="ELDemoView"> | |||||
<rect key="frame" x="20" y="228.5" width="374" height="80"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Setting:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="CF7-fb-MzT"> | |||||
<rect key="frame" x="20" y="4" width="59" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="9We-yb-bQP"> | |||||
<rect key="frame" x="4" y="32.5" width="366" height="43.5"/> | |||||
<subviews> | |||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="vfp-vj-4pr" customClass="ELDemoButton"> | |||||
<rect key="frame" x="0.0" y="0.0" width="181" height="43.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="12"/> | |||||
<color key="tintColor" systemColor="systemCyanColor"/> | |||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> | |||||
<state key="normal" title="Voice: Off"/> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="4"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="mainColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
<connections> | |||||
<action selector="voiceSettingButtonAction:" destination="-1" eventType="touchUpInside" id="kan-fo-enK"/> | |||||
</connections> | |||||
</button> | |||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="q79-PN-YaZ" customClass="ELDemoButton"> | |||||
<rect key="frame" x="185" y="0.0" width="181" height="43.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="12"/> | |||||
<color key="tintColor" systemColor="systemCyanColor"/> | |||||
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/> | |||||
<state key="normal" title="Unit: kg & cm"/> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="4"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="mainColor"> | |||||
<color key="value" systemColor="systemCyanColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
<connections> | |||||
<action selector="unitSettingButtonAction:" destination="-1" eventType="touchUpInside" id="aBr-IU-tbs"/> | |||||
</connections> | |||||
</button> | |||||
</subviews> | |||||
</stackView> | |||||
</subviews> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstItem="CF7-fb-MzT" firstAttribute="top" secondItem="NtG-dN-oCt" secondAttribute="top" constant="4" id="62z-Wq-xeK"/> | |||||
<constraint firstItem="CF7-fb-MzT" firstAttribute="leading" secondItem="NtG-dN-oCt" secondAttribute="leading" constant="20" symbolic="YES" id="BC6-Qy-w2C"/> | |||||
<constraint firstAttribute="trailing" secondItem="9We-yb-bQP" secondAttribute="trailing" constant="4" id="JB5-sj-SIh"/> | |||||
<constraint firstItem="9We-yb-bQP" firstAttribute="top" secondItem="CF7-fb-MzT" secondAttribute="bottom" constant="8" symbolic="YES" id="e8j-U2-gzu"/> | |||||
<constraint firstAttribute="height" constant="80" id="hsJ-nd-hSs"/> | |||||
<constraint firstItem="9We-yb-bQP" firstAttribute="leading" secondItem="NtG-dN-oCt" secondAttribute="leading" constant="4" id="qhL-Cj-qul"/> | |||||
<constraint firstAttribute="bottom" secondItem="9We-yb-bQP" secondAttribute="bottom" constant="4" id="tMJ-NL-MG2"/> | |||||
</constraints> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="opaqueSeparatorColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="8"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
</view> | |||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="5lj-Lv-y5P" userLabel="Report View" customClass="ELDemoView"> | |||||
<rect key="frame" x="20" y="316.5" width="374" height="88"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Report:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PD0-wf-hRS"> | |||||
<rect key="frame" x="20" y="4" width="56" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Report Value" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="5li-di-lta"> | |||||
<rect key="frame" x="20" y="32.5" width="334" height="17"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="14"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
</subviews> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstItem="PD0-wf-hRS" firstAttribute="top" secondItem="5lj-Lv-y5P" secondAttribute="top" constant="4" id="6gm-py-NhL"/> | |||||
<constraint firstAttribute="height" constant="88" id="DMY-bP-uBl"/> | |||||
<constraint firstItem="5li-di-lta" firstAttribute="top" secondItem="PD0-wf-hRS" secondAttribute="bottom" constant="8" symbolic="YES" id="LTk-Kn-Yad"/> | |||||
<constraint firstItem="5li-di-lta" firstAttribute="leading" secondItem="5lj-Lv-y5P" secondAttribute="leading" constant="20" symbolic="YES" id="Zm0-hm-fHn"/> | |||||
<constraint firstAttribute="trailing" secondItem="5li-di-lta" secondAttribute="trailing" constant="20" symbolic="YES" id="izL-dM-RyF"/> | |||||
<constraint firstItem="PD0-wf-hRS" firstAttribute="leading" secondItem="5lj-Lv-y5P" secondAttribute="leading" constant="20" symbolic="YES" id="oOX-6o-06C"/> | |||||
</constraints> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="8"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="opaqueSeparatorColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
</view> | |||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="hRo-Zb-30S"> | |||||
<rect key="frame" x="20" y="412.5" width="374" height="52"/> | |||||
<subviews> | |||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="BpG-kb-3yx" userLabel="Weight View" customClass="ELDemoView"> | |||||
<rect key="frame" x="0.0" y="0.0" width="122" height="52"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Baby Weight:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Gnk-GY-QZs"> | |||||
<rect key="frame" x="10.5" y="4" width="101" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Value" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Zpe-Jl-39q"> | |||||
<rect key="frame" x="40" y="27.5" width="42" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
</subviews> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstItem="Gnk-GY-QZs" firstAttribute="centerX" secondItem="BpG-kb-3yx" secondAttribute="centerX" id="Ehr-59-bMX"/> | |||||
<constraint firstItem="Gnk-GY-QZs" firstAttribute="top" secondItem="BpG-kb-3yx" secondAttribute="top" constant="4" id="dBR-Sz-KO4"/> | |||||
<constraint firstAttribute="bottom" secondItem="Zpe-Jl-39q" secondAttribute="bottom" constant="4" id="dvS-tt-pAu"/> | |||||
<constraint firstItem="Zpe-Jl-39q" firstAttribute="centerX" secondItem="BpG-kb-3yx" secondAttribute="centerX" id="mbA-Yr-Xfs"/> | |||||
</constraints> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="8"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="opaqueSeparatorColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
</view> | |||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="EDD-ng-Z3Q" userLabel="Weight View" customClass="ELDemoView"> | |||||
<rect key="frame" x="126" y="0.0" width="122" height="52"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Adult Weight:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="lfM-0G-tDv"> | |||||
<rect key="frame" x="10" y="4" width="102.5" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Value" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="u3v-vO-dqd"> | |||||
<rect key="frame" x="40" y="27.5" width="42" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
</subviews> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstItem="u3v-vO-dqd" firstAttribute="centerX" secondItem="EDD-ng-Z3Q" secondAttribute="centerX" id="QqR-cm-o1g"/> | |||||
<constraint firstAttribute="bottom" secondItem="u3v-vO-dqd" secondAttribute="bottom" constant="4" id="asH-WR-aiT"/> | |||||
<constraint firstItem="lfM-0G-tDv" firstAttribute="centerX" secondItem="EDD-ng-Z3Q" secondAttribute="centerX" id="gpf-xv-vkd"/> | |||||
<constraint firstItem="lfM-0G-tDv" firstAttribute="top" secondItem="EDD-ng-Z3Q" secondAttribute="top" constant="4" id="pHe-tc-Zpc"/> | |||||
</constraints> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="8"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="opaqueSeparatorColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
</view> | |||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="0fi-ZR-USg" userLabel="Weight View" customClass="ELDemoView"> | |||||
<rect key="frame" x="252" y="0.0" width="122" height="52"/> | |||||
<subviews> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="B&A Weight:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NOE-NJ-hRd"> | |||||
<rect key="frame" x="13" y="4" width="96" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Value" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="2FI-2z-OEW"> | |||||
<rect key="frame" x="40" y="27.5" width="42" height="20.5"/> | |||||
<fontDescription key="fontDescription" type="system" pointSize="17"/> | |||||
<nil key="textColor"/> | |||||
<nil key="highlightedColor"/> | |||||
</label> | |||||
</subviews> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstItem="2FI-2z-OEW" firstAttribute="centerX" secondItem="0fi-ZR-USg" secondAttribute="centerX" id="IrI-UD-6kP"/> | |||||
<constraint firstItem="NOE-NJ-hRd" firstAttribute="centerX" secondItem="0fi-ZR-USg" secondAttribute="centerX" id="cjx-bH-nYd"/> | |||||
<constraint firstItem="NOE-NJ-hRd" firstAttribute="top" secondItem="0fi-ZR-USg" secondAttribute="top" constant="4" id="geL-PR-Yna"/> | |||||
<constraint firstAttribute="bottom" secondItem="2FI-2z-OEW" secondAttribute="bottom" constant="4" id="pBk-wb-oLb"/> | |||||
</constraints> | |||||
<userDefinedRuntimeAttributes> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="cornerRadius"> | |||||
<real key="value" value="8"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="number" keyPath="borderWidth"> | |||||
<real key="value" value="1"/> | |||||
</userDefinedRuntimeAttribute> | |||||
<userDefinedRuntimeAttribute type="color" keyPath="borderColor"> | |||||
<color key="value" systemColor="opaqueSeparatorColor"/> | |||||
</userDefinedRuntimeAttribute> | |||||
</userDefinedRuntimeAttributes> | |||||
</view> | |||||
</subviews> | |||||
<constraints> | |||||
<constraint firstAttribute="height" constant="52" id="nyY-Lq-92G"/> | |||||
</constraints> | |||||
</stackView> | |||||
</subviews> | |||||
<viewLayoutGuide key="safeArea" id="Q5M-cg-NOt"/> | |||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/> | |||||
<constraints> | |||||
<constraint firstItem="M8G-k4-tkc" firstAttribute="leading" secondItem="Q5M-cg-NOt" secondAttribute="leading" constant="20" id="1Ec-DK-5pb"/> | |||||
<constraint firstItem="NtG-dN-oCt" firstAttribute="leading" secondItem="Q5M-cg-NOt" secondAttribute="leading" constant="20" id="41W-Q4-r7n"/> | |||||
<constraint firstItem="hRo-Zb-30S" firstAttribute="top" secondItem="5lj-Lv-y5P" secondAttribute="bottom" constant="8" symbolic="YES" id="7pi-4J-5ln"/> | |||||
<constraint firstItem="VwK-CG-OF6" firstAttribute="top" secondItem="Q5M-cg-NOt" secondAttribute="top" constant="8" id="E4P-7k-NF0"/> | |||||
<constraint firstItem="Q5M-cg-NOt" firstAttribute="trailing" secondItem="LMh-nY-EEc" secondAttribute="trailing" constant="20" id="Jnh-uM-jfJ"/> | |||||
<constraint firstItem="M8G-k4-tkc" firstAttribute="top" secondItem="LMh-nY-EEc" secondAttribute="bottom" constant="8" symbolic="YES" id="OEv-ag-BQI"/> | |||||
<constraint firstItem="NtG-dN-oCt" firstAttribute="top" secondItem="M8G-k4-tkc" secondAttribute="bottom" constant="8" symbolic="YES" id="OPF-VT-FRU"/> | |||||
<constraint firstItem="VwK-CG-OF6" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="VR9-ll-PVV"/> | |||||
<constraint firstItem="Q5M-cg-NOt" firstAttribute="trailing" secondItem="hRo-Zb-30S" secondAttribute="trailing" constant="20" id="VhM-X7-t71"/> | |||||
<constraint firstItem="Q5M-cg-NOt" firstAttribute="trailing" secondItem="5lj-Lv-y5P" secondAttribute="trailing" constant="20" id="bcl-Yy-ThR"/> | |||||
<constraint firstItem="LMh-nY-EEc" firstAttribute="leading" secondItem="Q5M-cg-NOt" secondAttribute="leading" constant="20" id="icc-Pk-lJg"/> | |||||
<constraint firstItem="5lj-Lv-y5P" firstAttribute="leading" secondItem="Q5M-cg-NOt" secondAttribute="leading" constant="20" id="iyn-ru-cdB"/> | |||||
<constraint firstItem="Q5M-cg-NOt" firstAttribute="trailing" secondItem="M8G-k4-tkc" secondAttribute="trailing" constant="20" id="kp8-CQ-Zz3"/> | |||||
<constraint firstItem="5lj-Lv-y5P" firstAttribute="top" secondItem="NtG-dN-oCt" secondAttribute="bottom" constant="8" symbolic="YES" id="odd-oI-bdF"/> | |||||
<constraint firstItem="LMh-nY-EEc" firstAttribute="top" secondItem="VwK-CG-OF6" secondAttribute="bottom" constant="8" symbolic="YES" id="ohZ-Pd-rfa"/> | |||||
<constraint firstItem="Q5M-cg-NOt" firstAttribute="trailing" secondItem="NtG-dN-oCt" secondAttribute="trailing" constant="20" id="yDP-Dv-MBc"/> | |||||
<constraint firstItem="hRo-Zb-30S" firstAttribute="leading" secondItem="Q5M-cg-NOt" secondAttribute="leading" constant="20" id="yi6-d9-kFQ"/> | |||||
</constraints> | |||||
<point key="canvasLocation" x="97.101449275362327" y="20.758928571428569"/> | |||||
</view> | |||||
</objects> | |||||
<designables> | |||||
<designable name="DmJ-ys-rUq"> | |||||
<size key="intrinsicContentSize" width="40" height="27"/> | |||||
</designable> | |||||
<designable name="axP-ca-LyH"> | |||||
<size key="intrinsicContentSize" width="56" height="27"/> | |||||
</designable> | |||||
<designable name="gba-oY-NSY"> | |||||
<size key="intrinsicContentSize" width="58" height="27"/> | |||||
</designable> | |||||
<designable name="q79-PN-YaZ"> | |||||
<size key="intrinsicContentSize" width="77" height="27"/> | |||||
</designable> | |||||
<designable name="umD-P1-8r2"> | |||||
<size key="intrinsicContentSize" width="55" height="27"/> | |||||
</designable> | |||||
<designable name="vfp-vj-4pr"> | |||||
<size key="intrinsicContentSize" width="57" height="27"/> | |||||
</designable> | |||||
</designables> | |||||
<resources> | |||||
<systemColor name="opaqueSeparatorColor"> | |||||
<color red="0.77647058823529413" green="0.77647058823529413" blue="0.78431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |||||
</systemColor> | |||||
<systemColor name="systemBackgroundColor"> | |||||
<color white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/> | |||||
</systemColor> | |||||
<systemColor name="systemCyanColor"> | |||||
<color red="0.19607843137254902" green="0.67843137254901964" blue="0.90196078431372551" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | |||||
</systemColor> | |||||
</resources> | |||||
</document> |
#import "ELAILinkBleManager+MeatProbe.h" | #import "ELAILinkBleManager+MeatProbe.h" | ||||
#import "ELMeatProbeBleModel.h" | #import "ELMeatProbeBleModel.h" | ||||
#import "ELMeatProbeBleTool.h" | #import "ELMeatProbeBleTool.h" | ||||
#import "ELAILinkBleManager+NoiseMeter.h" | |||||
#import "ELNoiseMeterBleFunctionModel.h" | |||||
#import "ELNoiseMeterBleHeader.h" | |||||
#import "ELNoiseMeterBleParser.h" | |||||
#import "ELNoiseMeterBleSettingModel.h" | |||||
#import "ELNoiseMeterBleStatusModel.h" | |||||
#import "ELVictorLuxMeterBleModel.h" | #import "ELVictorLuxMeterBleModel.h" | ||||
#import "ELVictorLuxMeterBleTool.h" | #import "ELVictorLuxMeterBleTool.h" | ||||
#import "ELAiFreshNutritionScaleBleHeader.h" | #import "ELAiFreshNutritionScaleBleHeader.h" | ||||
#import "ELBloodBleSDKHeader.h" | #import "ELBloodBleSDKHeader.h" | ||||
#import "ELBloodSugarBleHeader.h" | #import "ELBloodSugarBleHeader.h" | ||||
#import "ELBloodSugarBleManager.h" | #import "ELBloodSugarBleManager.h" | ||||
#import "AlgorithmSDK.h" | |||||
#import "BfsCalculateSDK.h" | |||||
#import "OEMAlgorithmSDK.h" | |||||
#import "OEMBfsCalculateSDK.h" | |||||
#import "ELBodyFatScaleBleHeader.h" | #import "ELBodyFatScaleBleHeader.h" | ||||
#import "ELBodyFatScaleBleManager.h" | #import "ELBodyFatScaleBleManager.h" | ||||
#import "ELBodyFatScaleBleUserModel.h" | #import "ELBodyFatScaleBleUserModel.h" | ||||
#import "ELCoffeeScaleBleHeader.h" | #import "ELCoffeeScaleBleHeader.h" | ||||
#import "ELCoffeeScaleBleManager.h" | #import "ELCoffeeScaleBleManager.h" | ||||
#import "ELBlePublicTool.h" | #import "ELBlePublicTool.h" | ||||
#import "ELBleWifiDetailModel.h" | |||||
#import "ELBluetoothManager+BleWifi.h" | #import "ELBluetoothManager+BleWifi.h" | ||||
#import "ELBluetoothManager+BleWifi_Callback.h" | #import "ELBluetoothManager+BleWifi_Callback.h" | ||||
#import "ELBluetoothManager+Settings.h" | #import "ELBluetoothManager+Settings.h" | ||||
#import "ELWheelMonitorBleManager.h" | #import "ELWheelMonitorBleManager.h" | ||||
#import "ELWheelMonitorBleModel.h" | #import "ELWheelMonitorBleModel.h" | ||||
#import "ELBleDisposeDataTool.h" | #import "ELBleDisposeDataTool.h" | ||||
#import "ELBleWifiDetailModel.h" | |||||
#import "ELSDKHeader.h" | #import "ELSDKHeader.h" | ||||
FOUNDATION_EXPORT double AILinkBleSDKVersionNumber; | FOUNDATION_EXPORT double AILinkBleSDKVersionNumber; |
// | // | ||||
#import "ELAILinkBleManager.h" | #import "ELAILinkBleManager.h" | ||||
#import "ELAirDetectorBleHeader.h" | |||||
#import "ELTLVModel.h" | #import "ELTLVModel.h" | ||||
#import "ELAirDetectorBleHeader.h" | |||||
#import "ELAirDetectorBleParser.h" | #import "ELAirDetectorBleParser.h" | ||||
//typedef NS_ENUM(NSUInteger, ELAirDetectorTLVType); | |||||
//typedef NS_ENUM(NSUInteger, ELAirDetectorBleCMD); | |||||
NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
@interface ELAILinkBleManager (AirDetector) | @interface ELAILinkBleManager (AirDetector) | ||||
- (NSData *)xxx; | |||||
//APP获取设备功能列表 //0x01 CMD:获取设备支持的功能列表 | //APP获取设备功能列表 //0x01 CMD:获取设备支持的功能列表 | ||||
- (void)airDetectorRequestDeviceFunctions; | - (void)airDetectorRequestDeviceFunctions; | ||||
- (NSData *)airDetectorRequestDeviceFunctionsPacketWithMac:(NSData *)mac withCid:(UInt16)cid; | |||||
//APP获取设备状态 //0x03 CMD:获取设备状态 | //APP获取设备状态 //0x03 CMD:获取设备状态 | ||||
- (void)airDetectorRequestDeviceStatus; | - (void)airDetectorRequestDeviceStatus; | ||||
- (NSData *)airDetectorRequestDeviceStatusPacketWithMac:(NSData *)mac withCid:(UInt16)cid; | |||||
//APP设置/获取参数 //0x05 CMD:设置/获取参数功能 | //APP设置/获取参数 //0x05 CMD:设置/获取参数功能 | ||||
- (void)airDetectorRequestDeviceSettings; | - (void)airDetectorRequestDeviceSettings; | ||||
- (NSData *)airDetectorRequestDeviceSettingsPacketWithMac:(NSData *)mac withCid:(UInt16)cid; | |||||
- (void)airDetectorSendDeviceSettings:(NSArray<ELTLVModel *> *)tlvs; | - (void)airDetectorSendDeviceSettings:(NSArray<ELTLVModel *> *)tlvs; | ||||
- (NSData *)airDetectorSendDeviceSettingsData:(NSArray<ELTLVModel *> *)tlvs; | |||||
//APP与模块心跳 //0x07 CMD:定时心跳包 | //APP与模块心跳 //0x07 CMD:定时心跳包 | ||||
- (void)airDetectorSendHeartbeat; | - (void)airDetectorSendHeartbeat; | ||||
- (NSData *)airDetectorSendHeartbeatPacketWithMac:(NSData *)mac withCid:(UInt16)cid; | |||||
@end | @end | ||||
@interface ELAILinkBleManager (tlv) | |||||
@interface ELAILinkBleManager (AirDetectorTLV) | |||||
//0x01:甲醛 | //0x01:甲醛 | ||||
+ (ELTLVModel *)tlvHCHOAlarmOn:(BOOL)on value:(NSInteger)value; | + (ELTLVModel *)tlvHCHOAlarmOn:(BOOL)on value:(NSInteger)value; |
// | |||||
// ELAILinkBleManager+NoiseMeter.h | |||||
// AILinkBleSDK | |||||
// | |||||
// Created by LarryZhang on 2022/12/21. | |||||
// | |||||
#import "ELAILinkBleManager.h" | |||||
#import "ELTLVModel.h" | |||||
#import "ELNoiseMeterBleHeader.h" | |||||
#import "ELNoiseMeterBleParser.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELAILinkBleManager (NoiseMeter) | |||||
//APP获取设备功能列表 //0x01 CMD:APP获取设备功能列表 | |||||
- (void)noiseMeterRequestDeviceFunctions; | |||||
//APP获取设备状态 //0x03 CMD:APP获取设备状态 | |||||
- (void)noiseMeterRequestDeviceStatus; | |||||
//APP设置/获取参数 //0x05 CMD:APP设置/获取参数 | |||||
- (void)noiseMeterRequestDeviceSettings; | |||||
- (void)noiseMeterSendDeviceSettings:(NSArray<ELTLVModel *> *)tlvs; | |||||
@end | |||||
@interface ELAILinkBleManager (NoiseMeterTLV) | |||||
//0x01:频率计权A/C | |||||
+ (ELTLVModel *)tlvFrequencyWeightingA; | |||||
+ (ELTLVModel *)tlvFrequencyWeightingC; | |||||
//0x03:测量等级及范围 | |||||
+ (ELTLVModel *)tlvMeasurementLevelSwitchUp; | |||||
+ (ELTLVModel *)tlvMeasurementLevelSwitchDown; | |||||
//0x04:Max/Min模式 | |||||
+ (ELTLVModel *)tlvMaxMinModelNormal; | |||||
+ (ELTLVModel *)tlvMaxMinModelMin; | |||||
+ (ELTLVModel *)tlvMaxMinModelMax; | |||||
//0x05:时间加权(Fast/Slow) | |||||
+ (ELTLVModel *)tlvTimeWeightedFast; | |||||
+ (ELTLVModel *)tlvTimeWeightedSlow; | |||||
//0x06:数值保持(hold) | |||||
+ (ELTLVModel *)tlvValueHoldNormal; | |||||
+ (ELTLVModel *)tlvValueHoldWithValue:(UInt16)value; | |||||
//0x07:报警 | |||||
+ (ELTLVModel *)tlvAlarmOff; | |||||
+ (ELTLVModel *)tlvAlarmStop; //关闭当前报警(关闭当前报警,指当前触发了报警,之后可手动关闭当次报警,但是并不会关闭报警功能.) | |||||
+ (ELTLVModel *)tlvAlarmOn:(NSInteger)alarmValue; | |||||
//0x08:背光 | |||||
+ (ELTLVModel *)tlvBacklightOn; | |||||
+ (ELTLVModel *)tlvBacklightOff; | |||||
//0x0A:历史 | |||||
+ (ELTLVModel *)tlvRequestHistoryWithTimestamp:(UInt32)timestamp; | |||||
+ (ELTLVModel *)tlvReleaseHistory; | |||||
//0x0C:设备绑定 | |||||
+ (ELTLVModel *)tlvDeviceBindingRequest; | |||||
+ (ELTLVModel *)tlvDeviceBindingCancel; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
@class ELAILinkPeripheral; | @class ELAILinkPeripheral; | ||||
@class ELBleWifiDetailModel; | |||||
@protocol ELAILinkBleManagerDelegate <NSObject> | |||||
@optional | |||||
//扫描 | |||||
- (void)managerDidUpdateState:(CBCentralManager *)central; | |||||
- (void)managerScanState:(BOOL)scanning; | |||||
- (void)managerDidDiscoverPeripheral:(ELAILinkPeripheral *)peripheral; | |||||
- (void)managerDidDiscoverMorePeripheral:(NSDictionary<NSUUID *, ELAILinkPeripheral *> *)peripherals; | |||||
//连接 | |||||
- (void)managerDidConnectPeripheral:(CBPeripheral *)peripheral; | |||||
- (void)managerDidFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error; | |||||
- (void)managerDidDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error; | |||||
- (void)managerDidUpdateConnect:(NELBleManagerConnectState)state; | |||||
//服务 & 特征 | |||||
- (void)peripheralDidDiscoverServices:(NSArray<CBService *> *)services; | |||||
- (void)peripheralDidDiscoverCharacteristicsForService:(NSArray<CBCharacteristic *> *)characteristics; | |||||
- (void)peripheralDidUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic; | |||||
- (void)peripheralDidUpdateValueForCharacteristic:(CBCharacteristic *)characteristic; | |||||
- (void)didWriteValueForCharacteristic:(CBCharacteristic *)characteristic; | |||||
- (void)peripheralDidReadRSSI:(nonnull NSNumber *)RSSI; | |||||
@optional | |||||
//A7数据 payload | |||||
- (void)aiLinkBleReceiveA7Data:(NSData *)payload; | |||||
//A6数据 packet | |||||
- (void)aiLinkBleReceiveA6Data:(NSData *)packet; | |||||
@end | |||||
@protocol ELAILinkBleWifiDelegate; | |||||
@protocol ELAILinkBleManagerDelegate; | |||||
@interface ELAILinkBleManager : NSObject | @interface ELAILinkBleManager : NSObject | ||||
//不是必须使用单例 | |||||
+ (instancetype)sharedManager; | |||||
@property(nonatomic, assign, readonly, getter=isScanning) BOOL scanning; | @property(nonatomic, assign, readonly, getter=isScanning) BOOL scanning; | ||||
@property(nonatomic, assign, readonly) CBCentralManager *central; | @property(nonatomic, assign, readonly) CBCentralManager *central; | ||||
@property (nonatomic, weak) id<ELAILinkBleManagerDelegate> delegate DEPRECATED_MSG_ATTRIBUTE("use 'ailinkDelegate' only"); | @property (nonatomic, weak) id<ELAILinkBleManagerDelegate> delegate DEPRECATED_MSG_ATTRIBUTE("use 'ailinkDelegate' only"); | ||||
//不是必须使用单例 | |||||
+ (instancetype)sharedManager; | |||||
@property (nonatomic, strong) CBPeripheral *peripheral; | @property (nonatomic, strong) CBPeripheral *peripheral; | ||||
@property (nonatomic, weak) id<ELAILinkBleManagerDelegate> ailinkDelegate; | @property (nonatomic, weak) id<ELAILinkBleManagerDelegate> ailinkDelegate; | ||||
//Bluetooth wifi proxy(蓝牙wifi代理) | |||||
@property (nonatomic, weak) id<ELAILinkBleWifiDelegate> bleWifiDelegate; | |||||
//模块版本号 | //模块版本号 | ||||
@property (nonatomic, copy) NSString *bmVersion; | @property (nonatomic, copy) NSString *bmVersion; | ||||
@property (nonatomic, copy) NSString *bmVersionPro; | @property (nonatomic, copy) NSString *bmVersionPro; | ||||
@end | @end | ||||
#pragma mark - scan | |||||
@interface ELAILinkBleManager (scan) | @interface ELAILinkBleManager (scan) | ||||
- (void)scanAll; | - (void)scanAll; | ||||
//NELBleManager | //NELBleManager | ||||
- (void)stopScan; | - (void)stopScan; | ||||
@end | @end | ||||
#pragma mark - connect | |||||
@interface ELAILinkBleManager (connect) | @interface ELAILinkBleManager (connect) | ||||
- (void)connectPeripheral:(CBPeripheral *)peripheral; | - (void)connectPeripheral:(CBPeripheral *)peripheral; | ||||
- (void)disconnectPeripheral; | - (void)disconnectPeripheral; | ||||
- (void)connectAILinkPeripheral:(ELAILinkPeripheral * _Nonnull)ailinkPeripheral; | - (void)connectAILinkPeripheral:(ELAILinkPeripheral * _Nonnull)ailinkPeripheral; | ||||
- (ELAILinkPeripheral * _Nullable)currentAILinkPeripheral; | - (ELAILinkPeripheral * _Nullable)currentAILinkPeripheral; | ||||
@end | @end | ||||
#pragma mark - send | |||||
@interface ELAILinkBleManager (send) | @interface ELAILinkBleManager (send) | ||||
- (void)sendA7Payload:(NSData *)payload; | - (void)sendA7Payload:(NSData *)payload; | ||||
- (void)sendA6Payload:(NSData *)payload; | - (void)sendA6Payload:(NSData *)payload; | ||||
//base method of 'sendA7Payload' & 'sendA6Payload' | |||||
/// base method of 'sendA7Payload' & 'sendA6Payload' | |||||
- (void)sendCmd:(NSData *)cmdData; | - (void)sendCmd:(NSData *)cmdData; | ||||
////最大发送payload长度 | |||||
//最大发送payload长度 | |||||
//- (NSUInteger)maximumWritePayloadLength; | //- (NSUInteger)maximumWritePayloadLength; | ||||
////OTA最大发送payload长度 | |||||
//OTA最大发送payload长度 | |||||
//- (NSUInteger)maximumWriteOTAPayloadLength; | //- (NSUInteger)maximumWriteOTAPayloadLength; | ||||
//发送队列发送周期 | //发送队列发送周期 | ||||
@end | @end | ||||
#pragma mark - Special | |||||
@interface ELAILinkBleManager (Special) | |||||
- (void)processA7Data:(NSMutableData *)rawData withMac:(NSData *)mac withCid:(UInt16)cid; | |||||
- (void)processA6Data:(NSMutableData *)rawData; | |||||
- (NSData * _Nullable)makePacketA7Payload:(NSData *)payload withMac:(NSData *)mac withCid:(UInt16)cid; | |||||
- (NSData * _Nullable)makePacketA6Payload:(NSData *)payload; | |||||
@end | |||||
#pragma mark - A6Method | |||||
@interface ELAILinkBleManager (A6Method) | @interface ELAILinkBleManager (A6Method) | ||||
/** | |||||
Get Bluetooth information(获取蓝牙信息) | |||||
@param type ELInetGetCmdType (ELInetGetCmdTypeGetHandshake除外) | |||||
*/ | |||||
- (void)getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdType)type; | |||||
/** | /** | ||||
Sync the current time of phone to BLE(设置手机本地时间给蓝牙模块,只在蓝牙体脂秤等需要蓝牙模块保存历史记录时才调用) | Sync the current time of phone to BLE(设置手机本地时间给蓝牙模块,只在蓝牙体脂秤等需要蓝牙模块保存历史记录时才调用) | ||||
@param enable | @param enable | ||||
///同步手机本地时间给mcu,每次连接成功后会自动调用 | ///同步手机本地时间给mcu,每次连接成功后会自动调用 | ||||
- (void)syncMCUNowDate; | - (void)syncMCUNowDate; | ||||
///查询mqtt链接状态 CMD=0xC5 | |||||
- (void)checkMqttState; | |||||
@end | @end | ||||
#pragma mark - BleWifi | |||||
@interface ELAILinkBleManager (BleWifi) | |||||
//============ 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 | |||||
#pragma mark - ELAILinkBleManagerDelegate | |||||
@protocol ELAILinkBleManagerDelegate <NSObject> | |||||
@optional | |||||
//扫描 | |||||
- (void)managerDidUpdateState:(CBCentralManager *)central; | |||||
- (void)managerScanState:(BOOL)scanning; | |||||
- (void)managerDidDiscoverPeripheral:(ELAILinkPeripheral *)peripheral; | |||||
- (void)managerDidDiscoverMorePeripheral:(NSDictionary<NSUUID *, ELAILinkPeripheral *> *)peripherals; | |||||
//连接 | |||||
- (void)managerDidConnectPeripheral:(CBPeripheral *)peripheral; | |||||
- (void)managerDidFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error; | |||||
- (void)managerDidDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error; | |||||
- (void)managerDidUpdateConnect:(NELBleManagerConnectState)state; | |||||
//服务 & 特征 | |||||
- (void)peripheralDidDiscoverServices:(NSArray<CBService *> *)services; | |||||
- (void)peripheralDidDiscoverCharacteristicsForService:(NSArray<CBCharacteristic *> *)characteristics; | |||||
- (void)peripheralDidUpdateNotificationStateForCharacteristic:(CBCharacteristic *)characteristic; | |||||
- (void)peripheralDidUpdateValueForCharacteristic:(CBCharacteristic *)characteristic; | |||||
- (void)didWriteValueForCharacteristic:(CBCharacteristic *)characteristic; | |||||
- (void)peripheralDidReadRSSI:(nonnull NSNumber *)RSSI; | |||||
@optional | |||||
//A7数据 payload | |||||
- (void)aiLinkBleReceiveA7Data:(NSData *)payload; | |||||
- (void)aiLinkBleReceiveA7Data:(NSData *)payload withMac:(NSData *)mac; | |||||
//A6数据 packet | |||||
- (void)aiLinkBleReceiveA6Data:(NSData *)packet; | |||||
- (void)aiLinkBleReceiveA6Data:(NSData *)packet withMac:(NSData *)mac; | |||||
@end | |||||
#pragma mark - Bluetooth Wifi protocol(蓝牙Wifi协议) | |||||
@protocol ELAILinkBleWifiDelegate <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 | |||||
#pragma mark - ELAILinkPeripheral | #pragma mark - ELAILinkPeripheral | ||||
@property (nonatomic, assign) UInt16 pid; | @property (nonatomic, assign) UInt16 pid; | ||||
@property (nonatomic, strong) NSUUID *identifier; | @property (nonatomic, strong) NSUUID *identifier; | ||||
@end | @end | ||||
NS_ASSUME_NONNULL_END | NS_ASSUME_NONNULL_END |
NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
typedef void(^didUpdateDataBlock)(ELAirDetectorBleCMD cmd, ELAirDetectorTLVType type); | |||||
@interface ELAirDetectorBleParser : NSObject | @interface ELAirDetectorBleParser : NSObject | ||||
typedef void(^airDetectorDidUpdateDataBlock)(ELAirDetectorBleCMD cmd, ELAirDetectorTLVType type); | |||||
@property (nonatomic, strong) ELAirDetectorBleFunctionModel *functionModel; | @property (nonatomic, strong) ELAirDetectorBleFunctionModel *functionModel; | ||||
@property (nonatomic, strong) ELAirDetectorBleStatusModel *statusModel; | @property (nonatomic, strong) ELAirDetectorBleStatusModel *statusModel; | ||||
@property (nonatomic, strong) ELAirDetectorBleSettingModel *settingModel; | @property (nonatomic, strong) ELAirDetectorBleSettingModel *settingModel; | ||||
- (void)parseData:(NSData *)payload callback:(didUpdateDataBlock)calllback; | |||||
- (void)parseData:(NSData *)payload callback:(airDetectorDidUpdateDataBlock)calllback; | |||||
@end | @end | ||||
ELBleWifiUseStateConnected = 2, //Currently connected wifi(目前连接着的wifi) | ELBleWifiUseStateConnected = 2, //Currently connected wifi(目前连接着的wifi) | ||||
}; | }; | ||||
NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN | ||||
@interface ELBleWifiDetailModel : NSObject<NSCopying> | @interface ELBleWifiDetailModel : NSObject<NSCopying> | ||||
//wifi status(wifi状态) | //wifi status(wifi状态) | ||||
@property (nonatomic, assign) ELBleWifiUseState wifiState; | @property (nonatomic, assign) ELBleWifiUseState wifiState; | ||||
@end | @end | ||||
NS_ASSUME_NONNULL_END | NS_ASSUME_NONNULL_END |
//版本号 SDK Version | //版本号 SDK Version | ||||
#define AiLinkBleSDKVersion @"1.5.6" //20221221 四电极体脂秤身体指标算法 AlgorithmSDK BfsCalculateSDK | |||||
#define AiLinkBleSDKVersion @"1.5.9" //20230206 增加身高体脂秤 (Add Height Body Fat Scale) | |||||
NS_ASSUME_NONNULL_BEGIN | NS_ASSUME_NONNULL_BEGIN |
* @param heightUnit : 身高单位 | * @param heightUnit : 身高单位 | ||||
* @param video : 语音开关 | * @param video : 语音开关 | ||||
*/ | */ | ||||
- (void)heightBodyFatScaleManagerReportDevStateWithWorkMode:(HeightBodyFatScale_WorkModeType)mode power:(NSInteger)power charging:(BOOL)charging weightUnit:(ELDeviceWeightUnit)weightUnit height:(ELDeviceHeightUnit)heightUnit videoState:(BOOL)video; | |||||
- (void)heightBodyFatScaleManagerReportDevStateWithWorkMode:(HeightBodyFatScale_WorkModeType)mode power:(NSInteger)power charging:(BOOL)charging weightUnit:(ELDeviceWeightUnit)weightUnit height:(ELDeviceHeightUnit)heightUnit videoState:(BOOL)video DEPRECATED_MSG_ATTRIBUTE("use 'voiceState' instead"); | |||||
- (void)heightBodyFatScaleManagerReportDevStateWithWorkMode:(HeightBodyFatScale_WorkModeType)mode power:(NSInteger)power charging:(BOOL)charging weightUnit:(ELDeviceWeightUnit)weightUnit height:(ELDeviceHeightUnit)heightUnit voiceState:(BOOL)voice; | |||||
#pragma mark - 身高体脂秤模式 | #pragma mark - 身高体脂秤模式 | ||||
#pragma mark 发送指令 | #pragma mark 发送指令 | ||||
///设置用户信息 | ///设置用户信息 | ||||
- (void)sendUserDataWithSex:(NSInteger)sex age:(NSInteger)age height:(NSInteger)cm; | |||||
- (void)sendUserDataWithSex:(NSInteger)sex age:(NSInteger)age height:(NSInteger)cm DEPRECATED_MSG_ATTRIBUTE("use 'sendUserDataWithGender:age:heightInCm:' instead"); | |||||
- (void)sendUserDataWithGender:(NSInteger)gender age:(NSInteger)age heightInCm:(NSInteger)heightInCm; | |||||
///App设置单位 | ///App设置单位 | ||||
- (void)sendUnitWithHeightUnit:(ELDeviceHeightUnit)heightUnit weightUnit:(ELDeviceWeightUnit)weightUnit; | - (void)sendUnitWithHeightUnit:(ELDeviceHeightUnit)heightUnit weightUnit:(ELDeviceWeightUnit)weightUnit; | ||||
- (void)reportUnitSetupResult:(HeightBodyFatScale_SetupResult)result; | - (void)reportUnitSetupResult:(HeightBodyFatScale_SetupResult)result; | ||||
//App下发工作模式 | //App下发工作模式 | ||||
- (void)sendDevceWorkMode:(HeightBodyFatScale_WorkModeType)model; | |||||
- (void)sendDevceWorkMode:(HeightBodyFatScale_WorkModeType)model DEPRECATED_MSG_ATTRIBUTE("use 'sendDeviceWorkMode' instead"); | |||||
- (void)sendDeviceWorkMode:(HeightBodyFatScale_WorkModeType)mode; | |||||
//App读取声音设置 | //App读取声音设置 | ||||
- (void)getVideoSetup; | |||||
- (void)getVideoSetup DEPRECATED_MSG_ATTRIBUTE("use 'getVoiceSetup' instead"); | |||||
- (void)getVoiceSetup; | |||||
//App声音设置 | //App声音设置 | ||||
- (void)sendVideoSetupState:(BOOL)state; | |||||
- (void)sendVideoSetupState:(BOOL)state DEPRECATED_MSG_ATTRIBUTE("use 'sendVoiceSetting' instead"); | |||||
- (void)sendVoiceSetting:(BOOL)on; | |||||
//App获取工作状态 | //App获取工作状态 | ||||
- (void)getWorkState; | - (void)getWorkState; |
// | |||||
// ELNoiseMeterBleFunctionModel.h | |||||
// AILinkBleSDK | |||||
// | |||||
// Created by LarryZhang on 2022/12/21. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELNoiseMeterBleFunctionModel : NSObject | |||||
//0x80:协议版本 1 | |||||
@property (nonatomic, assign) NSInteger version; | |||||
//0x01:频率计权A/C 1 | |||||
@property (nonatomic, assign) BOOL supportFrequencyWeightingA; | |||||
@property (nonatomic, assign) BOOL supportFrequencyWeightingC; | |||||
//0x02:测量总范围 5 | |||||
@property (nonatomic, assign) NSInteger measuringRangeScale; | |||||
@property (nonatomic, assign) NSInteger measuringRangeMin; | |||||
@property (nonatomic, assign) NSInteger measuringRangeMax; | |||||
//0x03:测量等级切换 1 | |||||
@property (nonatomic, assign) BOOL supportMeasurementLevelSwitch; | |||||
//0x04:Max/Min模式 1 | |||||
@property (nonatomic, assign) BOOL supportMaxMinModel; | |||||
//0x05:时间加权(Fast/Slow) 1 | |||||
@property (nonatomic, assign) BOOL supportTimeWeightedFastSlow; | |||||
//0x06:数值保持(hold) 1 | |||||
@property (nonatomic, assign) BOOL supportValueHold; | |||||
//0x07:报警功能 5 | |||||
@property (nonatomic, assign) BOOL supportAlarm; | |||||
@property (nonatomic, assign) NSInteger alarmMin; | |||||
@property (nonatomic, assign) NSInteger alarmMax; | |||||
//0x08:背光 1 | |||||
@property (nonatomic, assign) BOOL supportBacklight; | |||||
//0x09:噪音值 1 | |||||
@property (nonatomic, assign) NSInteger noiseValueScale; | |||||
//0x0A:历史 1 | |||||
@property (nonatomic, assign) BOOL supportHistory; | |||||
//0x0B:供电 1 | |||||
@property (nonatomic, assign) NSInteger powerSupplyType; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELNoiseMeterBleHeader.h | |||||
// Pods | |||||
// | |||||
// Created by LarryZhang on 2022/12/21. | |||||
// | |||||
#ifndef ELNoiseMeterBleHeader_h | |||||
#define ELNoiseMeterBleHeader_h | |||||
typedef NS_ENUM(NSUInteger, ELNoiseMeterBleCMD) { | |||||
ELNoiseMeterBleCMD01 = 0x01, //CMD:APP获取设备功能列表 | |||||
ELNoiseMeterBleCMD02 = 0x02, //CMD:MCU主控回应设备功能列表 | |||||
ELNoiseMeterBleCMD03 = 0x03, //CMD:APP获取设备状态 | |||||
ELNoiseMeterBleCMD04 = 0x04, //CMD:MCU主控回应设备状态 | |||||
ELNoiseMeterBleCMD05 = 0x05, //CMD:APP设置/获取参数 | |||||
ELNoiseMeterBleCMD06 = 0x06, //CMD:MCU返回设置参数 | |||||
ELNoiseMeterBleCMDF1 = 0xF1, //CMD:上发保存数据 | |||||
}; | |||||
typedef NS_ENUM(NSUInteger, ELNoiseMeterTLVType) { | |||||
ELNoiseMeterTLVTypeFrequencyWeightingAC = 0x01, //0x01:频率计权A/C | |||||
ELNoiseMeterTLVTypeTotalMeasuringRange = 0x02, //0x02:测量总范围 | |||||
ELNoiseMeterTLVTypeMeasurementLevelSwitch = 0x03, //0x03:测量等级切换 | |||||
ELNoiseMeterTLVTypeMaxMinModel = 0x04, //0x04:Max/Min模式 | |||||
ELNoiseMeterTLVTypeTimeWeightedFastSlow = 0x05, //0x05:时间加权(Fast/Slow) | |||||
ELNoiseMeterTLVTypeValueHold = 0x06, //0x06:数值保持(hold) | |||||
ELNoiseMeterTLVTypeAlarm = 0x07, //0x07:报警 | |||||
ELNoiseMeterTLVTypeBacklight = 0x08, //0x08:背光 | |||||
ELNoiseMeterTLVTypeNoiseValue = 0x09, //0x09:噪音值 | |||||
ELNoiseMeterTLVTypeHistory = 0x0A, //0x0A:历史 | |||||
ELNoiseMeterTLVTypePowerSupply = 0x0B, //0x0B:供电 | |||||
ELNoiseMeterTLVTypeDeviceBinding = 0x0C, //0x0C:设备绑定 | |||||
ELNoiseMeterTLVTypeVersion = 0x80, //0x80:协议版本 | |||||
}; | |||||
#endif /* ELNoiseMeterBleHeader_h */ |
// | |||||
// ELNoiseMeterBleParser.h | |||||
// AILinkBleSDK | |||||
// | |||||
// Created by LarryZhang on 2022/12/21. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
#import "ELSDKHeader.h" | |||||
#import "ELNoiseMeterBleHeader.h" | |||||
#import "ELNoiseMeterBleFunctionModel.h" | |||||
#import "ELNoiseMeterBleStatusModel.h" | |||||
#import "ELNoiseMeterBleSettingModel.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELNoiseMeterBleParser : NSObject | |||||
typedef void(^noiseMeterDidUpdateDataBlock)(ELNoiseMeterBleCMD cmd, ELNoiseMeterTLVType type); | |||||
@property (nonatomic, strong) ELNoiseMeterBleFunctionModel *functionModel; | |||||
@property (nonatomic, strong) ELNoiseMeterBleStatusModel *statusModel; | |||||
@property (nonatomic, strong) ELNoiseMeterBleSettingModel *settingModel; | |||||
- (void)parseData:(NSData *)payload callback:(noiseMeterDidUpdateDataBlock)calllback; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELNoiseMeterBleSettingModel.h | |||||
// AILinkBleSDK | |||||
// | |||||
// Created by LarryZhang on 2022/12/21. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELNoiseMeterBleSettingModel : NSObject | |||||
//0x01:频率计权A/C 1 | |||||
@property (nonatomic, assign) NSInteger frequencyWeightingACValue; | |||||
//0x03:测量等级及范围 6 | |||||
@property (nonatomic, assign) NSInteger measurementLevelStatus; | |||||
@property (nonatomic, assign) NSInteger measurementLevelValue; | |||||
@property (nonatomic, assign) NSInteger measurementLevelMin; | |||||
@property (nonatomic, assign) NSInteger measurementLevelMax; | |||||
//0x04:Max/Min模式 1 | |||||
@property (nonatomic, assign) NSInteger maxMinModel; | |||||
//0x05:时间加权(Fast/Slow) 1 | |||||
@property (nonatomic, assign) NSInteger timeWeightedFastSlowModel; | |||||
//0x06:数值保持(hold) 3 | |||||
@property (nonatomic, assign) NSInteger valueHoldModel; | |||||
@property (nonatomic, assign) NSInteger valueHoldValue; | |||||
//0x07:报警 3 | |||||
@property (nonatomic, assign) BOOL alarmOn; | |||||
@property (nonatomic, assign) BOOL alarmStop; | |||||
@property (nonatomic, assign) NSInteger alarmValue; | |||||
//0x08:背光 1 | |||||
@property (nonatomic, assign) BOOL backlightOn; | |||||
//0x0A:历史 | |||||
@property (nonatomic, assign) NSInteger historyStatus; | |||||
@property (nonatomic, strong) NSData *historyData; | |||||
//0x0C:设备绑定 1 | |||||
@property (nonatomic, assign) NSInteger deviceBindingStatus; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELNoiseMeterBleStatusModel.h | |||||
// AILinkBleSDK | |||||
// | |||||
// Created by LarryZhang on 2022/12/21. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELNoiseMeterBleStatusModel : NSObject | |||||
//0x01:频率计权A/C 1 | |||||
@property (nonatomic, assign) NSInteger frequencyWeightingACValue; | |||||
//0x03:测量等级及范围 5 | |||||
@property (nonatomic, assign) NSInteger measurementLevelValue; | |||||
@property (nonatomic, assign) NSInteger measurementLevelMin; | |||||
@property (nonatomic, assign) NSInteger measurementLevelMax; | |||||
//0x04:Max/Min模式 1 | |||||
@property (nonatomic, assign) NSInteger maxMinModel; | |||||
//0x05:时间加权(Fast/Slow) 1 | |||||
@property (nonatomic, assign) NSInteger timeWeightedFastSlowModel; | |||||
//0x06:数值保持(hold) 3 | |||||
@property (nonatomic, assign) NSInteger valueHoldModel; | |||||
@property (nonatomic, assign) NSInteger valueHoldValue; | |||||
//0x07:报警 2 | |||||
@property (nonatomic, assign) BOOL alarmOn; | |||||
@property (nonatomic, assign) BOOL alarmValue; | |||||
//0x08:背光 1 | |||||
@property (nonatomic, assign) BOOL backlightOn; | |||||
//0x09:噪音值 3 | |||||
@property (nonatomic, assign) NSInteger noiseValueStatus; | |||||
@property (nonatomic, assign) NSInteger noiseValue; | |||||
//0x0B:供电 2 | |||||
@property (nonatomic, assign) BOOL powerSupplyCharging; | |||||
@property (nonatomic, assign) BOOL powerSupplyLow; | |||||
@property (nonatomic, assign) NSInteger powerPercent; | |||||
@end | |||||
NS_ASSUME_NONNULL_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) | ||||
#pragma mark ============ mqtt ============== | |||||
ELInetGetCmdTypeCheckMqttState = 0xC5, //查询mqtt链接状态 CMD=0xC5 | |||||
ELInetGetDevOfflineHistory = 0xF1, //获取离线历史记录 | ELInetGetDevOfflineHistory = 0xF1, //获取离线历史记录 | ||||
}; | }; | ||||
ELSupportDeviceTypeAirDetector = 0x0048, //环境气体检测仪 | ELSupportDeviceTypeAirDetector = 0x0048, //环境气体检测仪 | ||||
ELSupportDeviceTypeTPMS = 0x0049, //智能胎压 | |||||
ELSupportDeviceTypeTPMS智能胎压 = 0x0049, //智能胎压 | |||||
ELSupportDeviceType电动自行车 = 0x004A, //电动自行车 | ELSupportDeviceType电动自行车 = 0x004A, //电动自行车 | ||||
ELSupportDeviceType双频八电极体脂秤 = 0x0052, //双频八电极体脂秤 | ELSupportDeviceType双频八电极体脂秤 = 0x0052, //双频八电极体脂秤 | ||||
// ELSupportDeviceType53 = 0x0053, | |||||
ELSupportDeviceTypeAirDetectorLite = 0x0053, //环境气体检测仪 不支持MQTT | |||||
// ELSupportDeviceType54 = 0x0054, | // ELSupportDeviceType54 = 0x0054, | ||||
// ELSupportDeviceType55 = 0x0055, | // ELSupportDeviceType55 = 0x0055, | ||||
// ELSupportDeviceType56 = 0x0056, | // ELSupportDeviceType56 = 0x0056, |
#import <Foundation/Foundation.h> | #import <Foundation/Foundation.h> | ||||
typedef NS_ENUM(NSInteger, AlgUserSex) { | |||||
AlgUserSex_Female = 0,//2, | |||||
AlgUserSex_Male = 1, | |||||
typedef NS_ENUM(NSInteger, OEMAlgUserSex) { | |||||
OEMAlgUserSex_Female = 0,//2, | |||||
OEMAlgUserSex_Male = 1, | |||||
}; | }; | ||||
@interface AlgorithmModel : NSObject | |||||
@interface OEMAlgorithmModel : NSObject | |||||
///bmi | ///bmi | ||||
@property (nonatomic, copy) NSString *bmi; | @property (nonatomic, copy) NSString *bmi; | ||||
@end | @end | ||||
@interface AlgorithmSDK : NSObject | |||||
@interface OEMAlgorithmSDK : NSObject | |||||
/** | /** | ||||
* Inet AlgorithmSDK ElinkThings算法 | * Inet AlgorithmSDK ElinkThings算法 | ||||
* eg: | * eg: | ||||
* kgWeight: 50.6 age: 25 height: 175 | * kgWeight: 50.6 age: 25 height: 175 | ||||
*/ | */ | ||||
+ (AlgorithmModel *)getBodyfatWithWeight:(double)kgWeight adc:(int)adc sex:(AlgUserSex)sex age:(int)age height:(int)height; | |||||
+ (OEMAlgorithmModel *)getBodyfatWithWeight:(double)kgWeight adc:(int)adc sex:(OEMAlgUserSex)sex age:(int)age height:(int)height; | |||||
@end | @end |
#import <Foundation/Foundation.h> | #import <Foundation/Foundation.h> | ||||
typedef NS_ENUM(NSInteger, BfsUserSex) { | |||||
BfsUserSex_Female = 0,//2, | |||||
BfsUserSex_Male = 1, | |||||
typedef NS_ENUM(NSInteger, OEMBfsUserSex) { | |||||
OEMBfsUserSex_Female = 0,//2, | |||||
OEMBfsUserSex_Male = 1, | |||||
}; | }; | ||||
@interface BfsCalculateItem : NSObject | |||||
@interface OEMBfsCalculateItem : NSObject | |||||
/** | /** | ||||
* 标准体重 standardWeight | * 标准体重 standardWeight | ||||
@interface BfsCalculateSDK : NSObject | |||||
@interface OEMBfsCalculateSDK : NSObject | |||||
/** | /** | ||||
* 蛋白率 25.9 | * 蛋白率 25.9 | ||||
* @return BfsCalculateItem | * @return BfsCalculateItem | ||||
*/ | */ | ||||
+ (BfsCalculateItem *)getBodyfatItemWithSex:(BfsUserSex)sex height:(NSInteger)height weight:(double)weight bfr:(NSString *)bfr rom:(NSString *)rom pp:(NSString *)pp; | |||||
+ (OEMBfsCalculateItem *)getBodyfatItemWithSex:(OEMBfsUserSex)sex height:(NSInteger)height weight:(double)weight bfr:(NSString *)bfr rom:(NSString *)rom pp:(NSString *)pp; | |||||
/** | /** | ||||
* 获取标准体重(单位:kg) | * 获取标准体重(单位:kg) |
"images" : [ | "images" : [ | ||||
{ | { | ||||
"idiom" : "iphone", | "idiom" : "iphone", | ||||
"size" : "20x20", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "20x20" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "iphone", | "idiom" : "iphone", | ||||
"size" : "20x20", | |||||
"scale" : "3x" | |||||
"scale" : "3x", | |||||
"size" : "20x20" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "iphone", | "idiom" : "iphone", | ||||
"size" : "29x29", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "29x29" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "iphone", | "idiom" : "iphone", | ||||
"size" : "29x29", | |||||
"scale" : "3x" | |||||
"scale" : "3x", | |||||
"size" : "29x29" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "iphone", | "idiom" : "iphone", | ||||
"size" : "40x40", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "40x40" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "iphone", | "idiom" : "iphone", | ||||
"size" : "40x40", | |||||
"scale" : "3x" | |||||
"scale" : "3x", | |||||
"size" : "40x40" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "iphone", | "idiom" : "iphone", | ||||
"size" : "60x60", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "60x60" | |||||
}, | }, | ||||
{ | { | ||||
"filename" : "logomaker.png", | |||||
"idiom" : "iphone", | "idiom" : "iphone", | ||||
"size" : "60x60", | |||||
"scale" : "3x" | |||||
"scale" : "3x", | |||||
"size" : "60x60" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "20x20", | |||||
"scale" : "1x" | |||||
"scale" : "1x", | |||||
"size" : "20x20" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "20x20", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "20x20" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "29x29", | |||||
"scale" : "1x" | |||||
"scale" : "1x", | |||||
"size" : "29x29" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "29x29", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "29x29" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "40x40", | |||||
"scale" : "1x" | |||||
"scale" : "1x", | |||||
"size" : "40x40" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "40x40", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "40x40" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "76x76", | |||||
"scale" : "1x" | |||||
"scale" : "1x", | |||||
"size" : "76x76" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "76x76", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "76x76" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ipad", | "idiom" : "ipad", | ||||
"size" : "83.5x83.5", | |||||
"scale" : "2x" | |||||
"scale" : "2x", | |||||
"size" : "83.5x83.5" | |||||
}, | }, | ||||
{ | { | ||||
"idiom" : "ios-marketing", | "idiom" : "ios-marketing", | ||||
"size" : "1024x1024", | |||||
"scale" : "1x" | |||||
"scale" : "1x", | |||||
"size" : "1024x1024" | |||||
} | } | ||||
], | ], | ||||
"info" : { | "info" : { | ||||
"version" : 1, | |||||
"author" : "xcode" | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | } | ||||
} | |||||
} |
{ | { | ||||
"info" : { | "info" : { | ||||
"version" : 1, | |||||
"author" : "xcode" | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | } | ||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "8_electrode_measurement_type@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "8_electrode_measurement_type@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_air_detection_type_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_air_detection_type_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_connected_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_connected_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_nutrition_scale_scale_connect@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_nutrition_scale_scale_connect@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_smart_skip_rope_device_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_smart_skip_rope_device_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_air_detection_type_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "foodtem_icon_100@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "foodtem_icon_100@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "height_body_fat_scale_bind_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "height_body_fat_scale_bind_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "ailink_meat_probe_type_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "oximeter_search_icon1@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "oximeter_search_icon1@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_baby_scale_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_baby_scale_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_blood_sugar@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_blood_sugar@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_body_fat_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_body_fat_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_brush@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_brush@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "coffee_icon_100@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "coffee_icon_100@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_control_vision_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_control_vision_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_height_measuring_instrument@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_height_measuring_instrument@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_smart_mask@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_smart_mask@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_smart_tpms_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_smart_tpms_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_sphygmomanometer_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_sphygmomanometer_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_temperature_gun_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_temperature_gun_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_thermometer_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_thermometer_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
{ | |||||
"images" : [ | |||||
{ | |||||
"idiom" : "universal", | |||||
"scale" : "1x" | |||||
}, | |||||
{ | |||||
"filename" : "type_tpms_ic@2x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "2x" | |||||
}, | |||||
{ | |||||
"filename" : "type_tpms_ic@3x.png", | |||||
"idiom" : "universal", | |||||
"scale" : "3x" | |||||
} | |||||
], | |||||
"info" : { | |||||
"author" : "xcode", | |||||
"version" : 1 | |||||
} | |||||
} |
<dict> | <dict> | ||||
<key>CFBundleDevelopmentRegion</key> | <key>CFBundleDevelopmentRegion</key> | ||||
<string>$(DEVELOPMENT_LANGUAGE)</string> | <string>$(DEVELOPMENT_LANGUAGE)</string> | ||||
<key>CFBundleDisplayName</key> | |||||
<string>AILinkSDKDemo</string> | |||||
<key>CFBundleExecutable</key> | <key>CFBundleExecutable</key> | ||||
<string>$(EXECUTABLE_NAME)</string> | <string>$(EXECUTABLE_NAME)</string> | ||||
<key>CFBundleIdentifier</key> | <key>CFBundleIdentifier</key> | ||||
<key>UISupportedInterfaceOrientations</key> | <key>UISupportedInterfaceOrientations</key> | ||||
<array> | <array> | ||||
<string>UIInterfaceOrientationPortrait</string> | <string>UIInterfaceOrientationPortrait</string> | ||||
<string>UIInterfaceOrientationLandscapeLeft</string> | |||||
<string>UIInterfaceOrientationLandscapeRight</string> | |||||
</array> | </array> | ||||
<key>UISupportedInterfaceOrientations~ipad</key> | <key>UISupportedInterfaceOrientations~ipad</key> | ||||
<array> | <array> |
// | |||||
// ELDemoDeviceModel.h | |||||
// AILinkBleSDK_Example | |||||
// | |||||
// Created by LarryZhang on 2023/2/4. | |||||
// Copyright © 2023 zhengzida. All rights reserved. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELDemoDeviceModel : NSObject | |||||
@property (nonatomic, copy) NSString *index; | |||||
@property (nonatomic, copy) NSString *imageName; | |||||
@property (nonatomic, copy) NSString *titleText; | |||||
@property (nonatomic, copy) NSString *subtitleText; | |||||
@property (nonatomic, copy) NSString *entryVCName; | |||||
@property (nonatomic, strong) NSArray<NSNumber *> *cids; | |||||
@property (nonatomic, assign) BOOL newType; | |||||
+ (instancetype)modelWithIndex:(NSString *)index imageName:(NSString *)imageName title:(NSString *)title subtitle:(NSString *)subtitle entryVCName:(NSString *)entryVCName; | |||||
+ (instancetype)modelWithIndex:(NSString *)index imageName:(NSString *)imageName title:(NSString *)title subtitle:(NSString *)subtitle entryVCName:(NSString *)entryVCName cids:(NSArray<NSNumber *> *)cids; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELDemoDeviceModel.m | |||||
// AILinkBleSDK_Example | |||||
// | |||||
// Created by LarryZhang on 2023/2/4. | |||||
// Copyright © 2023 zhengzida. All rights reserved. | |||||
// | |||||
#import "ELDemoDeviceModel.h" | |||||
@implementation ELDemoDeviceModel | |||||
+ (instancetype)modelWithIndex:(NSString *)index imageName:(NSString *)imageName title:(NSString *)title subtitle:(NSString *)subtitle entryVCName:(NSString *)entryVCName { | |||||
return [self modelWithIndex:index imageName:imageName title:title subtitle:subtitle entryVCName:entryVCName cids:@[] newType:NO]; | |||||
} | |||||
+ (instancetype)modelWithIndex:(NSString *)index imageName:(NSString *)imageName title:(NSString *)title subtitle:(NSString *)subtitle entryVCName:(NSString *)entryVCName cids:(NSArray<NSNumber *> *)cids { | |||||
return [self modelWithIndex:index imageName:imageName title:title subtitle:subtitle entryVCName:entryVCName cids:@[] newType:YES]; | |||||
} | |||||
+ (instancetype)modelWithIndex:(NSString *)index imageName:(NSString *)imageName title:(NSString *)title subtitle:(NSString *)subtitle entryVCName:(NSString *)entryVCName cids:(NSArray<NSNumber *> *)cids newType:(BOOL)newType { | |||||
ELDemoDeviceModel *model = [[ELDemoDeviceModel alloc] init]; | |||||
model.index = index; | |||||
model.imageName = imageName; | |||||
model.titleText = title; | |||||
model.subtitleText = subtitle; | |||||
model.entryVCName = entryVCName; | |||||
model.cids = cids; | |||||
model.newType = newType; | |||||
return model; | |||||
} | |||||
@end |
// | |||||
// ELDemoScanVC.h | |||||
// AILinkBleSDK_Example | |||||
// | |||||
// Created by LarryZhang on 2022/12/12. | |||||
// Copyright © 2022 zhengzida. All rights reserved. | |||||
// | |||||
#import <UIKit/UIKit.h> | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@class ELAILinkPeripheral; | |||||
@interface ELDemoScanVC : UIViewController | |||||
@property (nonatomic, copy) NSArray<NSNumber *> *cids; | |||||
@property (nonatomic, copy) void (^selectedBlock)(ELAILinkPeripheral *per); | |||||
@end | |||||
NS_ASSUME_NONNULL_END |