@@ -8,6 +8,17 @@ | |||
/* Begin PBXBuildFile section */ | |||
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 */; }; | |||
95565B792786EA3B000265EA /* SkipConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95565B752786EA3B000265EA /* SkipConnectionViewController.m */; }; | |||
95565B7A2786EA3B000265EA /* SkipScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 95565B782786EA3B000265EA /* SkipScanViewController.m */; }; | |||
@@ -61,7 +72,6 @@ | |||
958B4EA9263C08E800476BAE /* ELSelectView.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E73263C08E700476BAE /* ELSelectView.m */; }; | |||
958B4EAA263C08E800476BAE /* AilinkSuperConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E77263C08E700476BAE /* AilinkSuperConnectViewController.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 */; }; | |||
958B4EAE263C08E800476BAE /* ViewController+MASAdditions.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E88263C08E800476BAE /* ViewController+MASAdditions.m */; }; | |||
958B4EAF263C08E800476BAE /* MASCompositeConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E8C263C08E800476BAE /* MASCompositeConstraint.m */; }; | |||
@@ -72,7 +82,6 @@ | |||
958B4EB4263C08E800476BAE /* MASConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E93263C08E800476BAE /* MASConstraint.m */; }; | |||
958B4EB5263C08E800476BAE /* MASViewConstraint.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E95263C08E800476BAE /* MASViewConstraint.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 */; }; | |||
958B4EBA263C08E800476BAE /* SubBleManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E9B263C08E800476BAE /* SubBleManager.m */; }; | |||
958B4EBB263C08E800476BAE /* InheritConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 958B4E9D263C08E800476BAE /* InheritConnectViewController.m */; }; | |||
@@ -99,6 +108,24 @@ | |||
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>"; }; | |||
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>"; }; | |||
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>"; }; | |||
@@ -205,7 +232,6 @@ | |||
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>"; }; | |||
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>"; }; | |||
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>"; }; | |||
@@ -231,7 +257,6 @@ | |||
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>"; }; | |||
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>"; }; | |||
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>"; }; | |||
@@ -298,6 +323,34 @@ | |||
path = BhBodyComposition120; | |||
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 */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
@@ -564,6 +617,7 @@ | |||
958B4E74263C08E700476BAE /* Others */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
78DC4DE62990FB40006C6911 /* View */, | |||
958B4E76263C08E700476BAE /* AiLinkSuper */, | |||
958B4E75263C08E700476BAE /* AppDelegate.h */, | |||
958B4EA1263C08E800476BAE /* AppDelegate.m */, | |||
@@ -571,6 +625,11 @@ | |||
958B4E7B263C08E800476BAE /* Masonry */, | |||
958B4EA2263C08E800476BAE /* ViewController.h */, | |||
958B4E98263C08E800476BAE /* ViewController.m */, | |||
78DC4DE22990FB2E006C6911 /* ELDemoDeviceModel.h */, | |||
78DC4DDF2990FB2E006C6911 /* ELDemoDeviceModel.m */, | |||
78DC4DE12990FB2E006C6911 /* ELDemoScanVC.h */, | |||
78DC4DE02990FB2E006C6911 /* ELDemoScanVC.m */, | |||
78DC4DDE2990FB2E006C6911 /* ELDemoScanVC.xib */, | |||
); | |||
path = Others; | |||
sourceTree = "<group>"; | |||
@@ -589,9 +648,7 @@ | |||
958B4E7B263C08E800476BAE /* Masonry */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
958B4E7C263C08E800476BAE /* LICENSE */, | |||
958B4E7D263C08E800476BAE /* Masonry */, | |||
958B4E97263C08E800476BAE /* README.md */, | |||
); | |||
path = Masonry; | |||
sourceTree = "<group>"; | |||
@@ -685,6 +742,7 @@ | |||
955725BF276C38CC003BFBAC /* 22_AiFreshNutritionScale */, | |||
955725F4276C38CD003BFBAC /* 23_FaceMask */, | |||
95565B742786EA3B000265EA /* 24_Skip */, | |||
78DC4DF72990FC10006C6911 /* 25_HeightBodyFatScale */, | |||
958B4E74263C08E700476BAE /* Others */, | |||
958B4E67263C08E700476BAE /* Tools */, | |||
E622E26A243F1CA6003C319D /* Assets.xcassets */, | |||
@@ -785,11 +843,13 @@ | |||
isa = PBXResourcesBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
78DC4DF42990FB40006C6911 /* ELDeviceTypeCell.xib in Resources */, | |||
E622E287243F1D41003C319D /* Main.storyboard in Resources */, | |||
78DC4DE32990FB2E006C6911 /* ELDemoScanVC.xib in Resources */, | |||
E622E26E243F1CA6003C319D /* LaunchScreen.storyboard in Resources */, | |||
958B4EB7263C08E800476BAE /* README.md in Resources */, | |||
958B4EAC263C08E800476BAE /* LICENSE in Resources */, | |||
E622E26B243F1CA6003C319D /* Assets.xcassets in Resources */, | |||
78DC4DF62990FB40006C6911 /* ELDeviceScanCell.xib in Resources */, | |||
78DC4DFC2990FC10006C6911 /* HeightBodyFatScaleVC.xib in Resources */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
}; | |||
@@ -809,10 +869,12 @@ | |||
files = ( | |||
9557264A276C38CD003BFBAC /* ToothbrushConnectionViewController.m in Sources */, | |||
95565B7A2786EA3B000265EA /* SkipScanViewController.m in Sources */, | |||
78DC4DFB2990FC10006C6911 /* HeightBodyFatScaleVC.m in Sources */, | |||
9557263B276C38CD003BFBAC /* FaceMaskScanViewController.m in Sources */, | |||
9557263F276C38CD003BFBAC /* EightScaleConnectionViewController.m in Sources */, | |||
9557262B276C38CD003BFBAC /* WheelMonitorScanViewController.m in Sources */, | |||
95572629276C38CD003BFBAC /* BloodSugarConnectionViewController.m in Sources */, | |||
78DC4DE52990FB2E006C6911 /* ELDemoScanVC.m in Sources */, | |||
9557262A276C38CD003BFBAC /* WheelMonitorConnectViewController.m in Sources */, | |||
95572642276C38CD003BFBAC /* ELEightScaleAlgorithmTool.m in Sources */, | |||
95572630276C38CD003BFBAC /* CoffeeScaleScanViewController.m in Sources */, | |||
@@ -822,6 +884,9 @@ | |||
9557263E276C38CD003BFBAC /* EightScaleScanViewController.m in Sources */, | |||
958B4EB8263C08E800476BAE /* ViewController.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 */, | |||
9557262F276C38CD003BFBAC /* ELBfsWifiConnectTableViewCell.m in Sources */, | |||
95572623276C38CD003BFBAC /* BloodConnectViewController.m in Sources */, | |||
@@ -855,6 +920,7 @@ | |||
958B4EB4263C08E800476BAE /* MASConstraint.m in Sources */, | |||
958B4EAA263C08E800476BAE /* AilinkSuperConnectViewController.m in Sources */, | |||
958B4EB0263C08E800476BAE /* MASConstraintMaker.m in Sources */, | |||
78DC4DF32990FB40006C6911 /* ELDemoButton.m in Sources */, | |||
958B4EA5263C08E800476BAE /* UILabel+WZAdd.m in Sources */, | |||
95572633276C38CD003BFBAC /* BabyScaleConnectViewController.m in Sources */, | |||
95572644276C38CD003BFBAC /* BodyFatScaleConnectViewController.m in Sources */, | |||
@@ -872,6 +938,7 @@ | |||
9557262E276C38CD003BFBAC /* ELBfsWifiConnectVC.m in Sources */, | |||
95572637276C38CD003BFBAC /* OximeterConnectionViewController.m in Sources */, | |||
95572648276C38CD003BFBAC /* ForeheadScanViewController.m in Sources */, | |||
78DC4DE42990FB2E006C6911 /* ELDemoDeviceModel.m in Sources */, | |||
958B4EBA263C08E800476BAE /* SubBleManager.m in Sources */, | |||
95572631276C38CD003BFBAC /* CoffeeScaleConnectionViewController.m in Sources */, | |||
); | |||
@@ -1024,7 +1091,7 @@ | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
CODE_SIGN_STYLE = Automatic; | |||
CURRENT_PROJECT_VERSION = 20221221; | |||
CURRENT_PROJECT_VERSION = 20230206; | |||
DEVELOPMENT_TEAM = YEU77XR292; | |||
FRAMEWORK_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
@@ -1044,7 +1111,7 @@ | |||
"$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | |||
"$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/BhBodyComposition120", | |||
); | |||
MARKETING_VERSION = 1.5.6; | |||
MARKETING_VERSION = 1.5.9; | |||
OTHER_LDFLAGS = "-ObjC"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
@@ -1057,7 +1124,7 @@ | |||
buildSettings = { | |||
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | |||
CODE_SIGN_STYLE = Automatic; | |||
CURRENT_PROJECT_VERSION = 20221221; | |||
CURRENT_PROJECT_VERSION = 20230206; | |||
DEVELOPMENT_TEAM = YEU77XR292; | |||
FRAMEWORK_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
@@ -1077,7 +1144,7 @@ | |||
"$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/HTBodyfat_SDK", | |||
"$(PROJECT_DIR)/AILinkBleSDKDemo/13_EightScale/BhBodyComposition120", | |||
); | |||
MARKETING_VERSION = 1.5.6; | |||
MARKETING_VERSION = 1.5.9; | |||
OTHER_LDFLAGS = "-ObjC"; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; |
@@ -13,7 +13,7 @@ | |||
#import <AILinkBleSDK/ELBodyFatScaleBleWeightModel.h> | |||
#import <AILinkBleSDK/ELBluetoothManager+Settings.h> | |||
#import <AILinkBleSDK/AlgorithmSDK.h> | |||
#import <AILinkBleSDK/OEMAlgorithmSDK.h> | |||
#import <AILinkBleSDK/ELUnitConvertTool.h> | |||
@interface BodyFatScaleConnectViewController () <ELBluetoothManagerDelegate, ELBodyFatScaleBleDelegate> | |||
@@ -296,7 +296,7 @@ | |||
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); | |||
} | |||
@@ -8,7 +8,7 @@ | |||
#import "BroadcastScaleViewController.h" | |||
#import <AILinkBleSDK/ELBroadcastScaleBleManager.h> | |||
#import <AILinkBleSDK/AlgorithmSDK.h> | |||
#import <AILinkBleSDK/OEMAlgorithmSDK.h> | |||
#import <AILinkBleSDK/ELBodyFatScaleBleUserModel.h> | |||
#import <AILinkBleSDK/ELWeightAlgorithmusModel.h> | |||
#import "Masonry.h" | |||
@@ -55,7 +55,7 @@ | |||
self.statusLbl.text = @"Test end"; | |||
ELBodyFatScaleBleUserModel *user = self.getOneUser; | |||
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); | |||
break; |
@@ -0,0 +1,22 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,527 @@ | |||
// | |||
// 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 | |||
@@ -0,0 +1,539 @@ | |||
<?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> |
@@ -24,6 +24,12 @@ | |||
#import "ELAILinkBleManager+MeatProbe.h" | |||
#import "ELMeatProbeBleModel.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 "ELVictorLuxMeterBleTool.h" | |||
#import "ELAiFreshNutritionScaleBleHeader.h" | |||
@@ -48,8 +54,8 @@ | |||
#import "ELBloodBleSDKHeader.h" | |||
#import "ELBloodSugarBleHeader.h" | |||
#import "ELBloodSugarBleManager.h" | |||
#import "AlgorithmSDK.h" | |||
#import "BfsCalculateSDK.h" | |||
#import "OEMAlgorithmSDK.h" | |||
#import "OEMBfsCalculateSDK.h" | |||
#import "ELBodyFatScaleBleHeader.h" | |||
#import "ELBodyFatScaleBleManager.h" | |||
#import "ELBodyFatScaleBleUserModel.h" | |||
@@ -75,7 +81,6 @@ | |||
#import "ELCoffeeScaleBleHeader.h" | |||
#import "ELCoffeeScaleBleManager.h" | |||
#import "ELBlePublicTool.h" | |||
#import "ELBleWifiDetailModel.h" | |||
#import "ELBluetoothManager+BleWifi.h" | |||
#import "ELBluetoothManager+BleWifi_Callback.h" | |||
#import "ELBluetoothManager+Settings.h" | |||
@@ -135,6 +140,7 @@ | |||
#import "ELWheelMonitorBleManager.h" | |||
#import "ELWheelMonitorBleModel.h" | |||
#import "ELBleDisposeDataTool.h" | |||
#import "ELBleWifiDetailModel.h" | |||
#import "ELSDKHeader.h" | |||
FOUNDATION_EXPORT double AILinkBleSDKVersionNumber; |
@@ -6,34 +6,39 @@ | |||
// | |||
#import "ELAILinkBleManager.h" | |||
#import "ELAirDetectorBleHeader.h" | |||
#import "ELTLVModel.h" | |||
#import "ELAirDetectorBleHeader.h" | |||
#import "ELAirDetectorBleParser.h" | |||
//typedef NS_ENUM(NSUInteger, ELAirDetectorTLVType); | |||
//typedef NS_ENUM(NSUInteger, ELAirDetectorBleCMD); | |||
NS_ASSUME_NONNULL_BEGIN | |||
@interface ELAILinkBleManager (AirDetector) | |||
- (NSData *)xxx; | |||
//APP获取设备功能列表 //0x01 CMD:获取设备支持的功能列表 | |||
- (void)airDetectorRequestDeviceFunctions; | |||
- (NSData *)airDetectorRequestDeviceFunctionsPacketWithMac:(NSData *)mac withCid:(UInt16)cid; | |||
//APP获取设备状态 //0x03 CMD:获取设备状态 | |||
- (void)airDetectorRequestDeviceStatus; | |||
- (NSData *)airDetectorRequestDeviceStatusPacketWithMac:(NSData *)mac withCid:(UInt16)cid; | |||
//APP设置/获取参数 //0x05 CMD:设置/获取参数功能 | |||
- (void)airDetectorRequestDeviceSettings; | |||
- (NSData *)airDetectorRequestDeviceSettingsPacketWithMac:(NSData *)mac withCid:(UInt16)cid; | |||
- (void)airDetectorSendDeviceSettings:(NSArray<ELTLVModel *> *)tlvs; | |||
- (NSData *)airDetectorSendDeviceSettingsData:(NSArray<ELTLVModel *> *)tlvs; | |||
//APP与模块心跳 //0x07 CMD:定时心跳包 | |||
- (void)airDetectorSendHeartbeat; | |||
- (NSData *)airDetectorSendHeartbeatPacketWithMac:(NSData *)mac withCid:(UInt16)cid; | |||
@end | |||
@interface ELAILinkBleManager (tlv) | |||
@interface ELAILinkBleManager (AirDetectorTLV) | |||
//0x01:甲醛 | |||
+ (ELTLVModel *)tlvHCHOAlarmOn:(BOOL)on value:(NSInteger)value; |
@@ -0,0 +1,72 @@ | |||
// | |||
// 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 |
@@ -15,70 +15,29 @@ | |||
NS_ASSUME_NONNULL_BEGIN | |||
@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 | |||
//不是必须使用单例 | |||
+ (instancetype)sharedManager; | |||
@property(nonatomic, assign, readonly, getter=isScanning) BOOL scanning; | |||
@property(nonatomic, assign, readonly) CBCentralManager *central; | |||
@property (nonatomic, weak) id<ELAILinkBleManagerDelegate> delegate DEPRECATED_MSG_ATTRIBUTE("use 'ailinkDelegate' only"); | |||
//不是必须使用单例 | |||
+ (instancetype)sharedManager; | |||
@property (nonatomic, strong) CBPeripheral *peripheral; | |||
@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 *bmVersionPro; | |||
@@ -95,6 +54,7 @@ NS_ASSUME_NONNULL_BEGIN | |||
@end | |||
#pragma mark - scan | |||
@interface ELAILinkBleManager (scan) | |||
- (void)scanAll; | |||
@@ -108,35 +68,33 @@ NS_ASSUME_NONNULL_BEGIN | |||
//NELBleManager | |||
- (void)stopScan; | |||
@end | |||
#pragma mark - connect | |||
@interface ELAILinkBleManager (connect) | |||
- (void)connectPeripheral:(CBPeripheral *)peripheral; | |||
- (void)disconnectPeripheral; | |||
- (void)connectAILinkPeripheral:(ELAILinkPeripheral * _Nonnull)ailinkPeripheral; | |||
- (ELAILinkPeripheral * _Nullable)currentAILinkPeripheral; | |||
@end | |||
#pragma mark - send | |||
@interface ELAILinkBleManager (send) | |||
- (void)sendA7Payload:(NSData *)payload; | |||
- (void)sendA6Payload:(NSData *)payload; | |||
//base method of 'sendA7Payload' & 'sendA6Payload' | |||
/// base method of 'sendA7Payload' & 'sendA6Payload' | |||
- (void)sendCmd:(NSData *)cmdData; | |||
////最大发送payload长度 | |||
//最大发送payload长度 | |||
//- (NSUInteger)maximumWritePayloadLength; | |||
////OTA最大发送payload长度 | |||
//OTA最大发送payload长度 | |||
//- (NSUInteger)maximumWriteOTAPayloadLength; | |||
//发送队列发送周期 | |||
@@ -144,8 +102,26 @@ NS_ASSUME_NONNULL_BEGIN | |||
@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) | |||
/** | |||
Get Bluetooth information(获取蓝牙信息) | |||
@param type ELInetGetCmdType (ELInetGetCmdTypeGetHandshake除外) | |||
*/ | |||
- (void)getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdType)type; | |||
/** | |||
Sync the current time of phone to BLE(设置手机本地时间给蓝牙模块,只在蓝牙体脂秤等需要蓝牙模块保存历史记录时才调用) | |||
@param enable | |||
@@ -160,10 +136,166 @@ NS_ASSUME_NONNULL_BEGIN | |||
///同步手机本地时间给mcu,每次连接成功后会自动调用 | |||
- (void)syncMCUNowDate; | |||
///查询mqtt链接状态 CMD=0xC5 | |||
- (void)checkMqttState; | |||
@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 | |||
@@ -186,10 +318,8 @@ NS_ASSUME_NONNULL_BEGIN | |||
@property (nonatomic, assign) UInt16 pid; | |||
@property (nonatomic, strong) NSUUID *identifier; | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -14,10 +14,10 @@ | |||
NS_ASSUME_NONNULL_BEGIN | |||
typedef void(^didUpdateDataBlock)(ELAirDetectorBleCMD cmd, ELAirDetectorTLVType type); | |||
@interface ELAirDetectorBleParser : NSObject | |||
typedef void(^airDetectorDidUpdateDataBlock)(ELAirDetectorBleCMD cmd, ELAirDetectorTLVType type); | |||
@property (nonatomic, strong) ELAirDetectorBleFunctionModel *functionModel; | |||
@property (nonatomic, strong) ELAirDetectorBleStatusModel *statusModel; | |||
@@ -25,7 +25,7 @@ typedef void(^didUpdateDataBlock)(ELAirDetectorBleCMD cmd, ELAirDetectorTLVType | |||
@property (nonatomic, strong) ELAirDetectorBleSettingModel *settingModel; | |||
- (void)parseData:(NSData *)payload callback:(didUpdateDataBlock)calllback; | |||
- (void)parseData:(NSData *)payload callback:(airDetectorDidUpdateDataBlock)calllback; | |||
@end | |||
@@ -23,8 +23,6 @@ typedef NS_ENUM(NSUInteger, ELBleWifiUseState) { | |||
ELBleWifiUseStateConnected = 2, //Currently connected wifi(目前连接着的wifi) | |||
}; | |||
NS_ASSUME_NONNULL_BEGIN | |||
@interface ELBleWifiDetailModel : NSObject<NSCopying> | |||
@@ -41,8 +39,6 @@ NS_ASSUME_NONNULL_BEGIN | |||
//wifi status(wifi状态) | |||
@property (nonatomic, assign) ELBleWifiUseState wifiState; | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -15,7 +15,7 @@ | |||
//版本号 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 |
@@ -51,7 +51,8 @@ NS_ASSUME_NONNULL_BEGIN | |||
* @param heightUnit : 身高单位 | |||
* @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 - 身高体脂秤模式 | |||
@@ -125,7 +126,8 @@ NS_ASSUME_NONNULL_BEGIN | |||
#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设置单位 | |||
- (void)sendUnitWithHeightUnit:(ELDeviceHeightUnit)heightUnit weightUnit:(ELDeviceWeightUnit)weightUnit; | |||
@@ -134,13 +136,16 @@ NS_ASSUME_NONNULL_BEGIN | |||
- (void)reportUnitSetupResult:(HeightBodyFatScale_SetupResult)result; | |||
//App下发工作模式 | |||
- (void)sendDevceWorkMode:(HeightBodyFatScale_WorkModeType)model; | |||
- (void)sendDevceWorkMode:(HeightBodyFatScale_WorkModeType)model DEPRECATED_MSG_ATTRIBUTE("use 'sendDeviceWorkMode' instead"); | |||
- (void)sendDeviceWorkMode:(HeightBodyFatScale_WorkModeType)mode; | |||
//App读取声音设置 | |||
- (void)getVideoSetup; | |||
- (void)getVideoSetup DEPRECATED_MSG_ATTRIBUTE("use 'getVoiceSetup' instead"); | |||
- (void)getVoiceSetup; | |||
//App声音设置 | |||
- (void)sendVideoSetupState:(BOOL)state; | |||
- (void)sendVideoSetupState:(BOOL)state DEPRECATED_MSG_ATTRIBUTE("use 'sendVoiceSetting' instead"); | |||
- (void)sendVoiceSetting:(BOOL)on; | |||
//App获取工作状态 | |||
- (void)getWorkState; |
@@ -0,0 +1,57 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,41 @@ | |||
// | |||
// 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 */ |
@@ -0,0 +1,32 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,50 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,50 @@ | |||
// | |||
// 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 |
@@ -64,6 +64,8 @@ typedef NS_ENUM(NSUInteger, ELInetGetCmdType) { | |||
#pragma mark ============End 蓝牙Wifi ============== | |||
ELInetGetCmdTypeRequestAuthorize = 0x7F, //Request device authorization (请求设备授权) | |||
ELInetGetCmdTypeToothbrushA6Data = 0xC0, //A6 data for toothbrush(牙刷专用A6数据,详情请见协议的2级指令)(See the second order for details) | |||
#pragma mark ============ mqtt ============== | |||
ELInetGetCmdTypeCheckMqttState = 0xC5, //查询mqtt链接状态 CMD=0xC5 | |||
ELInetGetDevOfflineHistory = 0xF1, //获取离线历史记录 | |||
}; | |||
@@ -170,7 +172,7 @@ typedef NS_ENUM(NSUInteger, ELSupportDeviceType) { | |||
ELSupportDeviceTypeAirDetector = 0x0048, //环境气体检测仪 | |||
ELSupportDeviceTypeTPMS = 0x0049, //智能胎压 | |||
ELSupportDeviceTypeTPMS智能胎压 = 0x0049, //智能胎压 | |||
ELSupportDeviceType电动自行车 = 0x004A, //电动自行车 | |||
@@ -184,7 +186,7 @@ typedef NS_ENUM(NSUInteger, ELSupportDeviceType) { | |||
ELSupportDeviceType双频八电极体脂秤 = 0x0052, //双频八电极体脂秤 | |||
// ELSupportDeviceType53 = 0x0053, | |||
ELSupportDeviceTypeAirDetectorLite = 0x0053, //环境气体检测仪 不支持MQTT | |||
// ELSupportDeviceType54 = 0x0054, | |||
// ELSupportDeviceType55 = 0x0055, | |||
// ELSupportDeviceType56 = 0x0056, |
@@ -7,13 +7,13 @@ | |||
#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 | |||
@property (nonatomic, copy) NSString *bmi; | |||
@@ -52,7 +52,7 @@ typedef NS_ENUM(NSInteger, AlgUserSex) { | |||
@end | |||
@interface AlgorithmSDK : NSObject | |||
@interface OEMAlgorithmSDK : NSObject | |||
/** | |||
* Inet AlgorithmSDK ElinkThings算法 | |||
@@ -60,7 +60,7 @@ typedef NS_ENUM(NSInteger, AlgUserSex) { | |||
* eg: | |||
* 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 |
@@ -8,13 +8,13 @@ | |||
#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 | |||
@@ -64,7 +64,7 @@ typedef NS_ENUM(NSInteger, BfsUserSex) { | |||
@interface BfsCalculateSDK : NSObject | |||
@interface OEMBfsCalculateSDK : NSObject | |||
/** | |||
@@ -83,7 +83,7 @@ typedef NS_ENUM(NSInteger, BfsUserSex) { | |||
* 蛋白率 25.9 | |||
* @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) |
@@ -2,97 +2,98 @@ | |||
"images" : [ | |||
{ | |||
"idiom" : "iphone", | |||
"size" : "20x20", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "20x20" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"size" : "20x20", | |||
"scale" : "3x" | |||
"scale" : "3x", | |||
"size" : "20x20" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"size" : "29x29", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "29x29" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"size" : "29x29", | |||
"scale" : "3x" | |||
"scale" : "3x", | |||
"size" : "29x29" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"size" : "40x40", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "40x40" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"size" : "40x40", | |||
"scale" : "3x" | |||
"scale" : "3x", | |||
"size" : "40x40" | |||
}, | |||
{ | |||
"idiom" : "iphone", | |||
"size" : "60x60", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "60x60" | |||
}, | |||
{ | |||
"filename" : "logomaker.png", | |||
"idiom" : "iphone", | |||
"size" : "60x60", | |||
"scale" : "3x" | |||
"scale" : "3x", | |||
"size" : "60x60" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "20x20", | |||
"scale" : "1x" | |||
"scale" : "1x", | |||
"size" : "20x20" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "20x20", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "20x20" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "29x29", | |||
"scale" : "1x" | |||
"scale" : "1x", | |||
"size" : "29x29" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "29x29", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "29x29" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "40x40", | |||
"scale" : "1x" | |||
"scale" : "1x", | |||
"size" : "40x40" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "40x40", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "40x40" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "76x76", | |||
"scale" : "1x" | |||
"scale" : "1x", | |||
"size" : "76x76" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "76x76", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "76x76" | |||
}, | |||
{ | |||
"idiom" : "ipad", | |||
"size" : "83.5x83.5", | |||
"scale" : "2x" | |||
"scale" : "2x", | |||
"size" : "83.5x83.5" | |||
}, | |||
{ | |||
"idiom" : "ios-marketing", | |||
"size" : "1024x1024", | |||
"scale" : "1x" | |||
"scale" : "1x", | |||
"size" : "1024x1024" | |||
} | |||
], | |||
"info" : { | |||
"version" : 1, | |||
"author" : "xcode" | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} | |||
} |
@@ -1,6 +1,6 @@ | |||
{ | |||
"info" : { | |||
"version" : 1, | |||
"author" : "xcode" | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,6 @@ | |||
{ | |||
"info" : { | |||
"author" : "xcode", | |||
"version" : 1 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -0,0 +1,22 @@ | |||
{ | |||
"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 | |||
} | |||
} |
@@ -4,6 +4,8 @@ | |||
<dict> | |||
<key>CFBundleDevelopmentRegion</key> | |||
<string>$(DEVELOPMENT_LANGUAGE)</string> | |||
<key>CFBundleDisplayName</key> | |||
<string>AILinkSDKDemo</string> | |||
<key>CFBundleExecutable</key> | |||
<string>$(EXECUTABLE_NAME)</string> | |||
<key>CFBundleIdentifier</key> | |||
@@ -33,8 +35,6 @@ | |||
<key>UISupportedInterfaceOrientations</key> | |||
<array> | |||
<string>UIInterfaceOrientationPortrait</string> | |||
<string>UIInterfaceOrientationLandscapeLeft</string> | |||
<string>UIInterfaceOrientationLandscapeRight</string> | |||
</array> | |||
<key>UISupportedInterfaceOrientations~ipad</key> | |||
<array> |
@@ -0,0 +1,36 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,35 @@ | |||
// | |||
// 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 |
@@ -0,0 +1,23 @@ | |||
// | |||
// 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 |