@@ -7,6 +7,9 @@ | |||
objects = { | |||
/* Begin PBXBuildFile section */ | |||
954BEA8626086DC2003EE149 /* ELEightScaleAlgorithmTool.m in Sources */ = {isa = PBXBuildFile; fileRef = 954BEA8426086DC2003EE149 /* ELEightScaleAlgorithmTool.m */; }; | |||
954BEA8B26086E1E003EE149 /* ELEightScaleRecordModel.m in Sources */ = {isa = PBXBuildFile; fileRef = 954BEA8A26086E1E003EE149 /* ELEightScaleRecordModel.m */; }; | |||
954BEA9126086E4F003EE149 /* libHTBodyfat_SDK.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 954BEA9026086E4F003EE149 /* libHTBodyfat_SDK.a */; }; | |||
E622E260243F1CA5003C319D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E25F243F1CA5003C319D /* AppDelegate.m */; }; | |||
E622E263243F1CA5003C319D /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E262243F1CA5003C319D /* SceneDelegate.m */; }; | |||
E622E26B243F1CA6003C319D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E622E26A243F1CA6003C319D /* Assets.xcassets */; }; | |||
@@ -74,6 +77,12 @@ | |||
/* End PBXContainerItemProxy section */ | |||
/* Begin PBXFileReference section */ | |||
954BEA8426086DC2003EE149 /* ELEightScaleAlgorithmTool.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELEightScaleAlgorithmTool.m; sourceTree = "<group>"; }; | |||
954BEA8526086DC2003EE149 /* ELEightScaleAlgorithmTool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELEightScaleAlgorithmTool.h; sourceTree = "<group>"; }; | |||
954BEA8926086E1E003EE149 /* ELEightScaleRecordModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ELEightScaleRecordModel.h; sourceTree = "<group>"; }; | |||
954BEA8A26086E1E003EE149 /* ELEightScaleRecordModel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ELEightScaleRecordModel.m; sourceTree = "<group>"; }; | |||
954BEA8F26086E4F003EE149 /* HTBodyfat_SDK.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HTBodyfat_SDK.h; sourceTree = "<group>"; }; | |||
954BEA9026086E4F003EE149 /* libHTBodyfat_SDK.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libHTBodyfat_SDK.a; sourceTree = "<group>"; }; | |||
E622E25B243F1CA5003C319D /* AILinkBleSDKDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AILinkBleSDKDemo.app; sourceTree = BUILT_PRODUCTS_DIR; }; | |||
E622E25E243F1CA5003C319D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = "<group>"; }; | |||
E622E25F243F1CA5003C319D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = "<group>"; }; | |||
@@ -190,6 +199,7 @@ | |||
isa = PBXFrameworksBuildPhase; | |||
buildActionMask = 2147483647; | |||
files = ( | |||
954BEA9126086E4F003EE149 /* libHTBodyfat_SDK.a in Frameworks */, | |||
E633F4DD255BBA8700EE5A95 /* AILinkBleSDK.framework in Frameworks */, | |||
); | |||
runOnlyForDeploymentPostprocessing = 0; | |||
@@ -204,6 +214,15 @@ | |||
/* End PBXFrameworksBuildPhase section */ | |||
/* Begin PBXGroup section */ | |||
954BEA8E26086E4F003EE149 /* HTBodyfat_SDK */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
954BEA8F26086E4F003EE149 /* HTBodyfat_SDK.h */, | |||
954BEA9026086E4F003EE149 /* libHTBodyfat_SDK.a */, | |||
); | |||
path = HTBodyfat_SDK; | |||
sourceTree = "<group>"; | |||
}; | |||
E622E252243F1CA5003C319D = { | |||
isa = PBXGroup; | |||
children = ( | |||
@@ -432,10 +451,15 @@ | |||
E680BF202510576D005AD827 /* 八电极体脂秤 */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
E680BF212510576D005AD827 /* EightScaleScanViewController.m */, | |||
954BEA8E26086E4F003EE149 /* HTBodyfat_SDK */, | |||
E680BF242510576D005AD827 /* EightScaleConnectionViewController.h */, | |||
E680BF222510576D005AD827 /* EightScaleConnectionViewController.m */, | |||
E680BF232510576D005AD827 /* EightScaleScanViewController.h */, | |||
E680BF242510576D005AD827 /* EightScaleConnectionViewController.h */, | |||
E680BF212510576D005AD827 /* EightScaleScanViewController.m */, | |||
954BEA8926086E1E003EE149 /* ELEightScaleRecordModel.h */, | |||
954BEA8A26086E1E003EE149 /* ELEightScaleRecordModel.m */, | |||
954BEA8526086DC2003EE149 /* ELEightScaleAlgorithmTool.h */, | |||
954BEA8426086DC2003EE149 /* ELEightScaleAlgorithmTool.m */, | |||
); | |||
path = "八电极体脂秤"; | |||
sourceTree = "<group>"; | |||
@@ -443,22 +467,22 @@ | |||
E6FEA2112522E3D0001343A0 /* 蓝牙WiFi牙刷 */ = { | |||
isa = PBXGroup; | |||
children = ( | |||
E6FEA2122522E3D0001343A0 /* UIButton+WZAdd.h */, | |||
E6FEA2132522E3D0001343A0 /* ELInputAlertView.m */, | |||
E6FEA2142522E3D0001343A0 /* ToothbrushScanViewController.m */, | |||
E6FEA2152522E3D0001343A0 /* UILabel+WZAdd.m */, | |||
E6FEA2162522E3D0001343A0 /* ToothbrushConnectionViewController.h */, | |||
E6FEA2172522E3D0001343A0 /* UIView+Category.m */, | |||
E6FEA2182522E3D0001343A0 /* ELSelectView.h */, | |||
E6FEA2192522E3D0001343A0 /* CABasicAnimation+ELAnimation.h */, | |||
E6FEA21A2522E3D0001343A0 /* UIButton+WZAdd.m */, | |||
E6FEA21B2522E3D0001343A0 /* UILabel+WZAdd.h */, | |||
E6FEA21C2522E3D0001343A0 /* ToothbrushScanViewController.h */, | |||
E6FEA21D2522E3D0001343A0 /* ELInputAlertView.h */, | |||
E6FEA2182522E3D0001343A0 /* ELSelectView.h */, | |||
E6FEA2162522E3D0001343A0 /* ToothbrushConnectionViewController.h */, | |||
E6FEA21C2522E3D0001343A0 /* ToothbrushScanViewController.h */, | |||
E6FEA2122522E3D0001343A0 /* UIButton+WZAdd.h */, | |||
E6FEA21B2522E3D0001343A0 /* UILabel+WZAdd.h */, | |||
E6FEA21E2522E3D0001343A0 /* UIView+Category.h */, | |||
E6FEA21F2522E3D0001343A0 /* ToothbrushConnectionViewController.m */, | |||
E6FEA2202522E3D0001343A0 /* CABasicAnimation+ELAnimation.m */, | |||
E6FEA2132522E3D0001343A0 /* ELInputAlertView.m */, | |||
E6FEA2212522E3D0001343A0 /* ELSelectView.m */, | |||
E6FEA21F2522E3D0001343A0 /* ToothbrushConnectionViewController.m */, | |||
E6FEA2142522E3D0001343A0 /* ToothbrushScanViewController.m */, | |||
E6FEA21A2522E3D0001343A0 /* UIButton+WZAdd.m */, | |||
E6FEA2152522E3D0001343A0 /* UILabel+WZAdd.m */, | |||
E6FEA2172522E3D0001343A0 /* UIView+Category.m */, | |||
); | |||
path = "蓝牙WiFi牙刷"; | |||
sourceTree = "<group>"; | |||
@@ -586,6 +610,7 @@ | |||
E6FEA2252522E3D0001343A0 /* UIView+Category.m in Sources */, | |||
E622E2ED243F1D4A003C319D /* MASViewAttribute.m in Sources */, | |||
E622E2E1243F1D4A003C319D /* InheritConnectViewController.m in Sources */, | |||
954BEA8626086DC2003EE149 /* ELEightScaleAlgorithmTool.m in Sources */, | |||
E622E2F4243F1D4A003C319D /* ForeheadConnectViewController.m in Sources */, | |||
E6FEA2272522E3D0001343A0 /* ToothbrushConnectionViewController.m in Sources */, | |||
E622E2EC243F1D4A003C319D /* MASViewConstraint.m in Sources */, | |||
@@ -609,6 +634,7 @@ | |||
E622E260243F1CA5003C319D /* AppDelegate.m in Sources */, | |||
E622E2E5243F1D4A003C319D /* ViewController+MASAdditions.m in Sources */, | |||
E622E2F0243F1D4A003C319D /* BloodScanViewController.m in Sources */, | |||
954BEA8B26086E1E003EE149 /* ELEightScaleRecordModel.m in Sources */, | |||
E622E2E2243F1D4A003C319D /* InheritScanViewController.m in Sources */, | |||
E622E271243F1CA6003C319D /* main.m in Sources */, | |||
E622E263243F1CA5003C319D /* SceneDelegate.m in Sources */, | |||
@@ -766,11 +792,16 @@ | |||
"$(inherited)", | |||
"$(PROJECT_DIR)/AILinkBleSDKDemo", | |||
); | |||
HEADER_SEARCH_PATHS = ""; | |||
INFOPLIST_FILE = AILinkBleSDKDemo/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
); | |||
LIBRARY_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"$(PROJECT_DIR)/AILinkBleSDKDemo/八电极体脂秤/HTBodyfat_SDK", | |||
); | |||
MARKETING_VERSION = 1.1.1; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; | |||
@@ -789,11 +820,16 @@ | |||
"$(inherited)", | |||
"$(PROJECT_DIR)/AILinkBleSDKDemo", | |||
); | |||
HEADER_SEARCH_PATHS = ""; | |||
INFOPLIST_FILE = AILinkBleSDKDemo/Info.plist; | |||
LD_RUNPATH_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"@executable_path/Frameworks", | |||
); | |||
LIBRARY_SEARCH_PATHS = ( | |||
"$(inherited)", | |||
"$(PROJECT_DIR)/AILinkBleSDKDemo/八电极体脂秤/HTBodyfat_SDK", | |||
); | |||
MARKETING_VERSION = 1.1.1; | |||
PRODUCT_BUNDLE_IDENTIFIER = com.pingwang.AILinkBleSDKDemo; | |||
PRODUCT_NAME = "$(TARGET_NAME)"; |
@@ -0,0 +1,29 @@ | |||
// | |||
// ELEightScaleAlgorithmTool.h | |||
// Elink | |||
// | |||
// Created by iot_user on 2020/6/18. | |||
// Copyright © 2020 iot_iMac. All rights reserved. | |||
// | |||
#import <Foundation/Foundation.h> | |||
@class ELEightScaleRecordModel; | |||
@class ELEightScaleBleDataModel; | |||
NS_ASSUME_NONNULL_BEGIN | |||
@interface ELEightScaleAlgorithmTool : NSObject | |||
/// 根据秤测量的阻抗数据调用算法解析出其他体脂数据 | |||
/// @param dataModel 八电极秤测量的数据 | |||
/// @param sex 女性传0,男性传1 | |||
/// @param height 身高,单位cm | |||
/// @param age 年龄 | |||
+(ELEightScaleRecordModel *)getRecordModelWithBleDataModel:(ELEightScaleBleDataModel *)dataModel withUserSex:(NSInteger)sex height:(NSInteger)height age:(NSInteger)age; | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -0,0 +1,227 @@ | |||
// | |||
// ELEightScaleAlgorithmTool.m | |||
// Elink | |||
// | |||
// Created by iot_user on 2020/6/18. | |||
// Copyright © 2020 iot_iMac. All rights reserved. | |||
// | |||
#import "ELEightScaleAlgorithmTool.h" | |||
#import "ELEightScaleRecordModel.h" | |||
#import <AILinkBleSDK/ELEightScaleBleDataModel.h> | |||
#import <AILinkBleSDK/ELEightScaleSDKHeader.h> | |||
#import "HTBodyfat_SDK.h" | |||
#import <AILinkBleSDK/ELHeightAlgorithmusModel.h> | |||
#import <AILinkBleSDK/ELWeightAlgorithmusModel.h> | |||
#import <AILinkBleSDK/ELBodyIndexAlgorithmModel.h> | |||
@implementation ELEightScaleAlgorithmTool | |||
/// 根据秤测量的阻抗数据调用算法解析出其他体脂数据 | |||
/// @param dataModel 八电极秤测量的数据 | |||
/// @param sex 女性传0,男性传1 | |||
/// @param height 身高,单位cm | |||
/// @param age 年龄 | |||
+(ELEightScaleRecordModel *)getRecordModelWithBleDataModel:(ELEightScaleBleDataModel *)dataModel withUserSex:(NSInteger)sex height:(NSInteger)height age:(NSInteger)age { | |||
CGFloat kgWeight = [ELWeightAlgorithmusModel getKgWithWeightShowStr:dataModel.weight weightUnit:dataModel.weightUnit weightPoint:dataModel.weightPoint].floatValue; | |||
HTBodyBasicInfo *bodyBasicInfo = [[HTBodyBasicInfo alloc] initWithSex:sex height:height weight:kgWeight age:age]; | |||
bodyBasicInfo.htZAllBodyImpedance = dataModel.RWholeBodyAdc; | |||
bodyBasicInfo.htZLeftLegImpedance = dataModel.leftFootAdc; | |||
bodyBasicInfo.htZRightLegImpedance = dataModel.rightFootAdc; | |||
bodyBasicInfo.htZLeftArmImpedance = dataModel.leftHandAdc; | |||
bodyBasicInfo.htZRightArmImpedance = dataModel.rightHandAdc; | |||
bodyBasicInfo.htTwoArmsImpedance = dataModel.handsAdc; | |||
bodyBasicInfo.htTwoLegsImpedance = dataModel.feetAdc; | |||
//计算体脂参数 | |||
HTBodyResultAllBody *bodyResultTwoLegs = [[HTBodyResultAllBody alloc] init]; | |||
HTBodyfatErrorType errorType = [bodyResultTwoLegs getBodyfatWithBasicInfo:bodyBasicInfo]; | |||
NSLog(@"HTBodyfatErrorType = %lu",errorType); | |||
if(errorType != HTBodyfatErrorTypeNone){ | |||
NSMutableString *errorStr = [[NSMutableString alloc]initWithString:@""]; | |||
if((errorType & HTBodyfatErrorTypeAge) == HTBodyfatErrorTypeAge){ | |||
[errorStr appendString:@"年龄 "]; | |||
} | |||
if((errorType & HTBodyfatErrorTypeWeight) == HTBodyfatErrorTypeWeight){ | |||
[errorStr appendString:@"体重 "]; | |||
} | |||
if((errorType & HTBodyfatErrorTypeHeight) == HTBodyfatErrorTypeHeight){ | |||
[errorStr appendString:@"身高 "]; | |||
} | |||
if((errorType & HTBodyfatErrorTypeSex) == HTBodyfatErrorTypeSex){ | |||
[errorStr appendString:@"性别 "]; | |||
} | |||
if((errorType & HTBodyfatErrorTypeImpedance) == HTBodyfatErrorTypeImpedance){ | |||
[errorStr appendString:@"阻抗 "]; | |||
} | |||
if((errorType & HTBodyfatErrorTypeImpedanceLeftLeg) == HTBodyfatErrorTypeImpedanceLeftLeg){ | |||
[errorStr appendString:@"左脚阻抗 "]; | |||
} | |||
if((errorType & HTBodyfatErrorTypeImpedanceRightLeg) == HTBodyfatErrorTypeImpedanceRightLeg){ | |||
[errorStr appendString:@"右脚阻抗 "]; | |||
} | |||
if((errorType & HTBodyfatErrorTypeImpedanceLeftArm) == HTBodyfatErrorTypeImpedanceLeftArm){ | |||
[errorStr appendString:@"左手阻抗 "]; | |||
} | |||
if((errorType & HTBodyfatErrorTypeImpedanceRightArm) == HTBodyfatErrorTypeImpedanceRightArm){ | |||
[errorStr appendString:@"右手阻抗 "]; | |||
} | |||
[errorStr appendString:@"参数有误!"]; | |||
NSLog(@"errorType = %@",errorStr); | |||
} | |||
ELEightScaleRecordModel *recordModel = [[ELEightScaleRecordModel alloc] init]; | |||
recordModel.bmi = [NSString stringWithFormat:@"%.1f",bodyResultTwoLegs.htBMI]; | |||
recordModel.bfr = [NSString stringWithFormat:@"%.1f",bodyResultTwoLegs.htBodyfatPercentage]; | |||
recordModel.sfr = [NSString stringWithFormat:@"%.1f",bodyResultTwoLegs.htBodyfatSubcut]; | |||
recordModel.uvi = [NSString stringWithFormat:@"%ld",bodyResultTwoLegs.htVFAL]; | |||
recordModel.rom = [NSString stringWithFormat:@"%.1f",bodyResultTwoLegs.htMusclePercentage]; | |||
recordModel.bmr = [NSString stringWithFormat:@"%ld",bodyResultTwoLegs.htBMR]; | |||
recordModel.vwc = [NSString stringWithFormat:@"%.1f",bodyResultTwoLegs.htWaterPercentage]; | |||
recordModel.bodyAge = [NSString stringWithFormat:@"%ld",bodyResultTwoLegs.htBodyAge]; | |||
recordModel.pp = [NSString stringWithFormat:@"%.1f",bodyResultTwoLegs.htProteinPercentage]; | |||
recordModel.adc = [NSString stringWithFormat:@"%d",dataModel.trunkAdc];//记录躯干adc | |||
recordModel.heartRate = dataModel.heartRate>0?[NSString stringWithFormat:@"%d",dataModel.heartRate]:@""; | |||
recordModel.createTime = dataModel.createTime; | |||
recordModel.deviceAlgorithm = [NSString stringWithFormat:@"%d",dataModel.algorithmID]; | |||
//骨量 | |||
if (bodyResultTwoLegs.htBoneKg>0) { | |||
NSUInteger boneMass = roundf(bodyResultTwoLegs.htBoneKg*pow(10, dataModel.weightPoint)); | |||
recordModel.bm = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:boneMass bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.bm = @""; | |||
} | |||
//标准体重 | |||
if (bodyResultTwoLegs.htIdealWeightKg >0) { | |||
//说明有值 | |||
NSUInteger standard = roundf(bodyResultTwoLegs.htIdealWeightKg*pow(10, dataModel.weightPoint)); | |||
recordModel.standardWeight = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:standard bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
//体重控制量 | |||
CGFloat weightControl = kgWeight - bodyResultTwoLegs.htIdealWeightKg; | |||
NSUInteger weightContrlABS = roundf(fabs(weightControl*pow(10, dataModel.weightPoint))); | |||
NSString *weightContrlStr = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:weightContrlABS bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
if (weightControl<0) { | |||
recordModel.weightControl = [NSString stringWithFormat:@"-%@",weightContrlStr]; | |||
}else{ | |||
recordModel.weightControl = weightContrlStr; | |||
} | |||
recordModel.fatLevel = [NSString stringWithFormat:@"%lu",(unsigned long)[ELBodyIndexAlgorithmModel getfatLevelWithweight:kgWeight andSatndardWeight:bodyResultTwoLegs.htIdealWeightKg]]; | |||
}else{ | |||
recordModel.standardWeight = @""; | |||
recordModel.weightControl = @""; | |||
recordModel.fatLevel = @""; | |||
} | |||
//脂肪量 | |||
if (bodyResultTwoLegs.htBodyfatKg>0) { | |||
NSUInteger fatMass = roundf(bodyResultTwoLegs.htBodyfatKg*pow(10, dataModel.weightPoint)); | |||
recordModel.fatMass = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:fatMass bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.fatMass = @""; | |||
} | |||
//去脂体重 | |||
if (bodyResultTwoLegs.htBodyfatFreeMass>0) { | |||
NSUInteger withoutFatW = roundf(bodyResultTwoLegs.htBodyfatFreeMass*pow(10, dataModel.weightPoint)); | |||
recordModel.weightWithoutFat = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:withoutFatW bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.weightWithoutFat = @""; | |||
} | |||
//肌肉量 | |||
if (bodyResultTwoLegs.htMuscleKg>0) { | |||
NSInteger musleMass = round(bodyResultTwoLegs.htMuscleKg*pow(10, dataModel.weightPoint)); | |||
recordModel.musleMass = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:musleMass bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.musleMass = @""; | |||
} | |||
//蛋白量 | |||
if (bodyResultTwoLegs.htProteinPercentage>0) { | |||
NSUInteger proteinMassInt = roundf((bodyResultTwoLegs.htProteinPercentage/100.0)*kgWeight* pow(10, dataModel.weightPoint)); | |||
recordModel.proteinMass = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:proteinMassInt bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.proteinMass = @""; | |||
} | |||
//体脂-右手 | |||
if (bodyResultTwoLegs.htBodyfatKgRightArm >0) { | |||
NSUInteger rightHand = roundf(bodyResultTwoLegs.htBodyfatKgRightArm*pow(10, dataModel.weightPoint)); | |||
recordModel.fatMassRightTop = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:rightHand bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.fatMassRightTop = @""; | |||
} | |||
//体脂-右脚 | |||
if (bodyResultTwoLegs.htBodyfatKgRightLeg >0) { | |||
NSUInteger rightFoot = roundf(bodyResultTwoLegs.htBodyfatKgRightLeg*pow(10, dataModel.weightPoint)); | |||
recordModel.fatMassRightBottom = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:rightFoot bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.fatMassRightBottom = @""; | |||
} | |||
//体脂-左手 | |||
if (bodyResultTwoLegs.htBodyfatKgLeftArm >0) { | |||
NSUInteger leftHand = roundf(bodyResultTwoLegs.htBodyfatKgLeftArm*pow(10, dataModel.weightPoint)); | |||
recordModel.fatMassLeftTop = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:leftHand bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.fatMassLeftTop = @""; | |||
} | |||
//体脂-左脚 | |||
if (bodyResultTwoLegs.htBodyfatKgLeftLeg >0) { | |||
NSUInteger leftFoot = roundf(bodyResultTwoLegs.htBodyfatKgLeftLeg*pow(10, dataModel.weightPoint)); | |||
recordModel.fatMassLeftBottom = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:leftFoot bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.fatMassLeftBottom = @""; | |||
} | |||
//体脂-躯干 | |||
if (bodyResultTwoLegs.htBodyfatKgTrunk >0) { | |||
NSUInteger fatMassBody = roundf(bodyResultTwoLegs.htBodyfatKgTrunk*pow(10, dataModel.weightPoint)); | |||
recordModel.fatMassBody = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:fatMassBody bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.fatMassBody = @""; | |||
} | |||
//肌肉-右手 | |||
if (bodyResultTwoLegs.htMuscleKgRightArm >0) { | |||
NSUInteger rightHand = roundf(bodyResultTwoLegs.htMuscleKgRightArm*pow(10, dataModel.weightPoint)); | |||
recordModel.musleMassRightTop = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:rightHand bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.musleMassRightTop = @""; | |||
} | |||
//肌肉-右脚 | |||
if (bodyResultTwoLegs.htMuscleKgRightLeg >0) { | |||
NSUInteger rightFoot = roundf(bodyResultTwoLegs.htMuscleKgRightLeg*pow(10, dataModel.weightPoint)); | |||
recordModel.musleMassRightBottom = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:rightFoot bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.musleMassRightBottom = @""; | |||
} | |||
//肌肉-左手 | |||
if (bodyResultTwoLegs.htMuscleKgLeftArm >0) { | |||
NSUInteger leftHand = roundf(bodyResultTwoLegs.htMuscleKgLeftArm*pow(10, dataModel.weightPoint)); | |||
recordModel.musleMassLeftTop = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:leftHand bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.musleMassLeftTop = @""; | |||
} | |||
//肌肉-左脚 | |||
if (bodyResultTwoLegs.htMuscleKgeLeftLeg >0) { | |||
NSUInteger leftFoot = roundf(bodyResultTwoLegs.htMuscleKgeLeftLeg*pow(10, dataModel.weightPoint)); | |||
recordModel.musleMassLeftBottom = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:leftFoot bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.musleMassLeftBottom = @""; | |||
} | |||
//肌肉-躯干 | |||
if (bodyResultTwoLegs.htMuscleKgTrunk >0) { | |||
NSUInteger muscleMassBody = roundf(bodyResultTwoLegs.htMuscleKgTrunk*pow(10, dataModel.weightPoint)); | |||
recordModel.musleMassBody = [ELWeightAlgorithmusModel getWeightShowStrWithTargetUnit:dataModel.weightUnit bleWeightInt:muscleMassBody bleWeightUnit:(ELDeviceWeightUnit_KG) bleWeightPoint:dataModel.weightPoint]; | |||
}else{ | |||
recordModel.musleMassBody = @""; | |||
} | |||
//四肢肌肉指数 = 四肢肌肉量(kg)/身高的平方(m) | |||
CGFloat heightM = (height/100.0); | |||
CGFloat index = (bodyResultTwoLegs.htMuscleKgLeftArm+bodyResultTwoLegs.htMuscleKgeLeftLeg+bodyResultTwoLegs.htMuscleKgRightArm+bodyResultTwoLegs.htMuscleKgRightLeg)/(heightM*heightM); | |||
recordModel.musleMassLimbs = [NSString stringWithFormat:@"%.1f",index]; | |||
return recordModel; | |||
} | |||
@end |
@@ -0,0 +1,86 @@ | |||
// | |||
// ELEightScaleRecordModel.h | |||
// Elink | |||
// | |||
// Created by iot_user on 2020/6/9. | |||
// Copyright © 2020 iot_iMac. All rights reserved. | |||
// | |||
#import <Foundation/Foundation.h> | |||
NS_ASSUME_NONNULL_BEGIN | |||
@interface ELEightScaleRecordModel : NSObject | |||
///bmi | |||
@property (nonatomic, copy) NSString *bmi; | |||
///体脂率 | |||
@property (nonatomic, copy) NSString *bfr; | |||
///皮下脂肪率 | |||
@property (nonatomic, copy) NSString *sfr; | |||
///内脏脂肪指数 | |||
@property (nonatomic, copy) NSString *uvi; | |||
///肌肉率 | |||
@property (nonatomic, copy) NSString *rom; | |||
///基础代谢率 | |||
@property (nonatomic, copy) NSString *bmr; | |||
///骨骼质量 //特别注意:所有重量单位只有骨量在服务器上永远存储kg,其他重量属性都存储的是转换后的显示值;并且无论秤返回的weight数值是何种单位,但秤返回或Algorithm算法算出的骨量都是kg单位 | |||
@property (nonatomic, copy) NSString *bm; | |||
///水含量 | |||
@property (nonatomic, copy) NSString *vwc; | |||
///身体年龄 | |||
@property (nonatomic, assign) NSString *bodyAge; | |||
///蛋白率 | |||
@property (nonatomic, copy) NSString *pp; | |||
///躯干阻抗 | |||
@property (nonatomic, copy) NSString *adc; | |||
///心率 | |||
@property (nonatomic, copy) NSString *heartRate; | |||
///创建时间 | |||
@property (nonatomic, assign) long long createTime; | |||
///秤的算法id | |||
@property (nonatomic, copy) NSString *deviceAlgorithm; | |||
/// | |||
@property (nonatomic, copy) NSString *standardWeight; | |||
/// | |||
@property (nonatomic, copy) NSString *weightControl; | |||
/// | |||
@property (nonatomic, copy) NSString *fatMass; | |||
/// | |||
@property (nonatomic, copy) NSString *weightWithoutFat; | |||
/// | |||
@property (nonatomic, copy) NSString *musleMass; | |||
/// | |||
@property (nonatomic, copy) NSString *proteinMass; | |||
///肥胖等级 | |||
@property (nonatomic, copy) NSString *fatLevel; | |||
//体脂-右上 | |||
@property (nonatomic, copy) NSString *fatMassRightTop; | |||
//体脂-右下 | |||
@property (nonatomic, copy) NSString *fatMassRightBottom; | |||
//体脂-左上 | |||
@property (nonatomic, copy) NSString *fatMassLeftTop; | |||
//体脂-左下 | |||
@property (nonatomic, copy) NSString *fatMassLeftBottom; | |||
//体脂-躯干 | |||
@property (nonatomic, copy) NSString *fatMassBody; | |||
//肌肉-右上 | |||
@property (nonatomic, copy) NSString *musleMassRightTop; | |||
//肌肉-右下 | |||
@property (nonatomic, copy) NSString *musleMassRightBottom; | |||
//肌肉-左上 | |||
@property (nonatomic, copy) NSString *musleMassLeftTop; | |||
//肌肉-左下 | |||
@property (nonatomic, copy) NSString *musleMassLeftBottom; | |||
//肌肉-躯干 | |||
@property (nonatomic, copy) NSString *musleMassBody; | |||
//四肢肌肉指数 | |||
@property (nonatomic, copy) NSString *musleMassLimbs; | |||
@end | |||
NS_ASSUME_NONNULL_END |
@@ -0,0 +1,39 @@ | |||
// | |||
// ELEightScaleRecordModel.m | |||
// Elink | |||
// | |||
// Created by iot_user on 2020/6/9. | |||
// Copyright © 2020 iot_iMac. All rights reserved. | |||
// | |||
#import "ELEightScaleRecordModel.h" | |||
#import <objc/runtime.h> | |||
@implementation ELEightScaleRecordModel | |||
- (NSString *)description{ | |||
NSString * desc = @"\n"; | |||
//获取obj的属性数目 | |||
unsigned int outCount; | |||
objc_property_t *properties = class_copyPropertyList([self class], &outCount); | |||
for (int i = 0; i < outCount; i ++) { | |||
//获取property的C字符串 | |||
objc_property_t property = properties[i]; | |||
const char * propName = property_getName(property); | |||
if (propName) { | |||
//获取NSString类型的property名字 | |||
NSString *prop = [NSString stringWithCString:propName encoding:NSUTF8StringEncoding]; | |||
//获取property对应的值 | |||
id obj = [self valueForKey:prop]; | |||
//将属性名和属性值拼接起来 | |||
desc = [desc stringByAppendingFormat:@"%@ : %@;\n",prop,obj]; | |||
} | |||
} | |||
free(properties); | |||
return desc; | |||
} | |||
@end |
@@ -11,6 +11,7 @@ | |||
#import <AILinkBleSDK/ELEightScaleBleManager.h> | |||
#import <AILinkBleSDK/ELEightScaleBleDataModel.h> | |||
#import <AILinkBleSDK/ELEightScaleSDKHeader.h> | |||
#import "ELEightScaleAlgorithmTool.h" | |||
@interface EightScaleConnectionViewController ()<ELBluetoothManagerDelegate,EightScaleBleDeletegate> | |||
@property (nonatomic, strong) UITextView *textView; | |||
@@ -157,68 +158,7 @@ | |||
make.width.mas_equalTo(100); | |||
make.height.mas_equalTo(40); | |||
}]; | |||
// | |||
// | |||
// UIButton *button6 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||
// [button6 setTitle:@"" forState:(UIControlStateNormal)]; | |||
// button6.tag = 6; | |||
// button6.titleLabel.adjustsFontSizeToFitWidth = YES; | |||
// button6.titleLabel.numberOfLines = 2; | |||
// button6.backgroundColor = [UIColor blackColor]; | |||
// [button6 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||
// [self.view addSubview:button6]; | |||
// [button6 mas_makeConstraints:^(MASConstraintMaker *make) { | |||
// make.left.equalTo(button5.mas_right).mas_offset(10); | |||
// make.top.equalTo(button1.mas_bottom).mas_offset(10); | |||
// make.width.mas_equalTo(100); | |||
// make.height.mas_equalTo(40); | |||
// }]; | |||
// // | |||
// UIButton *button7 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||
// [button7 setTitle:@"" forState:(UIControlStateNormal)]; | |||
// button7.tag = 7; | |||
// button7.titleLabel.adjustsFontSizeToFitWidth = YES; | |||
// button7.titleLabel.numberOfLines = 2; | |||
// button7.backgroundColor = [UIColor blackColor]; | |||
// [button7 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||
// [self.view addSubview:button7]; | |||
// [button7 mas_makeConstraints:^(MASConstraintMaker *make) { | |||
// make.left.mas_equalTo(10); | |||
// make.top.equalTo(button4.mas_bottom).mas_offset(10); | |||
// make.width.mas_equalTo(100); | |||
// make.height.mas_equalTo(40); | |||
// }]; | |||
// | |||
// UIButton *button8 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||
// [button8 setTitle:@"" forState:(UIControlStateNormal)]; | |||
// button8.tag = 8; | |||
// button8.titleLabel.adjustsFontSizeToFitWidth = YES; | |||
// button8.titleLabel.numberOfLines = 2; | |||
// button8.backgroundColor = [UIColor blackColor]; | |||
// [button8 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||
// [self.view addSubview:button8]; | |||
// [button8 mas_makeConstraints:^(MASConstraintMaker *make) { | |||
// make.left.equalTo(button7.mas_right).mas_offset(10); | |||
// make.top.equalTo(button4.mas_bottom).mas_offset(10); | |||
// make.width.mas_equalTo(100); | |||
// make.height.mas_equalTo(40); | |||
// }]; | |||
// | |||
// UIButton *button9 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||
// [button9 setTitle:@"" forState:(UIControlStateNormal)]; | |||
// button9.tag = 9; | |||
// button9.titleLabel.adjustsFontSizeToFitWidth = YES; | |||
// button9.titleLabel.numberOfLines = 2; | |||
// button9.backgroundColor = [UIColor blackColor]; | |||
// [button9 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||
// [self.view addSubview:button9]; | |||
// [button9 mas_makeConstraints:^(MASConstraintMaker *make) { | |||
// make.left.equalTo(button8.mas_right).mas_offset(10); | |||
// make.top.equalTo(button4.mas_bottom).mas_offset(10); | |||
// make.width.mas_equalTo(100); | |||
// make.height.mas_equalTo(40); | |||
// }]; | |||
// | |||
self.textView = [[UITextView alloc] init]; | |||
self.textView.backgroundColor = [UIColor blackColor]; | |||
self.textView.text = @"Log"; | |||
@@ -320,8 +260,14 @@ | |||
[self addLog:@"Measurn Complete"]; | |||
} | |||
#pragma mark ============ get all body fat data ============== | |||
-(void)eightScaleBleReceiveTestData:(ELEightScaleBleDataModel *)dataModel{ | |||
[self addLog:[NSString stringWithFormat:@"weight = %@%@",dataModel.weight,AiLinkBleWeightUnitDic[@(dataModel.weightUnit)]]]; | |||
//Please input the correct height, age, gender of your app user | |||
ELEightScaleRecordModel *bodyInfo = [ELEightScaleAlgorithmTool getRecordModelWithBleDataModel:dataModel withUserSex:1 height:175 age:25]; | |||
[self addLog:[NSString stringWithFormat:@"---bodyInfo:%@",bodyInfo]]; | |||
} | |||
-(void)eightScaleBleReceiveErrorCode:(int)errorCode{ |
@@ -0,0 +1,240 @@ | |||
// | |||
// HTBodyfat_SDK.h | |||
// | |||
// Created by Holtek on 17/12/21. | |||
// Copyright © 2017年 Holtek. All rights reserved. | |||
// | |||
// Version: 3.06, SDK for armV7、arm64、x86_x64, OS ≥ iOS 8.0 | |||
// | |||
#import <UIKit/UIKit.h> | |||
@class HTBodyInfo; | |||
@class HTBodyResult; | |||
@class HTBodyResultAllBody; | |||
@class HTBodyResultTwoLegs; | |||
@class HTBodyResultTwoArms; | |||
@class HTBodyResultArmsLegs; | |||
///性别类型 | |||
typedef NS_ENUM(NSInteger, HTSexType){ | |||
HTSexTypeFemale, //!< 女性 | |||
HTSexTypeMale //!< 男性 | |||
}; | |||
///错误类型(针对输入的参数) | |||
typedef NS_ENUM(NSInteger, HTBodyfatErrorType){ | |||
HTBodyfatErrorTypeNone, //!< 无错误(可读取所有参数) | |||
HTBodyfatErrorTypeAge = 0x01, //!< 年龄参数有误,需在 6 ~ 99岁(不计算除BMI/idealWeightKg以外参数) | |||
HTBodyfatErrorTypeWeight = 0x02, //!< 体重参数有误,需在 10 ~ 200kg(有误不计算所有参数) | |||
HTBodyfatErrorTypeHeight = 0x04, //!< 身高参数有误,需在 90 ~ 220cm(不计算所有参数) | |||
HTBodyfatErrorTypeSex = 0x08, //!< 性别参数有误,需为0或1 | |||
HTBodyfatErrorTypeImpedance = 0x10, //!< 阻抗系数有误,阻抗有误时, 不计算除BMI/idealWeightKg以外参数(写0) | |||
HTBodyfatErrorTypeImpedanceLeftLeg = 0x20, //!< 左脚阻抗系数有误, | |||
HTBodyfatErrorTypeImpedanceRightLeg = 0x40, //!< 右脚阻抗系数有误, | |||
HTBodyfatErrorTypeImpedanceLeftArm = 0x80, //!< 左手阻抗系数有误, | |||
HTBodyfatErrorTypeImpedanceRightArm = 0x100, //!< 右手阻抗系数有误, | |||
}; | |||
///身体类型 | |||
typedef NS_ENUM(NSInteger, HTBodyType){ | |||
HTBodyTypeThin, //!< 偏瘦型 | |||
HTBodyTypeLThinMuscle, //!< 偏瘦肌肉型 | |||
HTBodyTypeMuscular, //!< 肌肉发达型 | |||
HTBodyTypeLackofexercise, //!< 缺乏运动型 | |||
HTBodyTypeStandard, //!< 标准型 | |||
HTBodyTypeStandardMuscle, //!< 标准肌肉型 | |||
HTBodyTypeObesFat, //!< 浮肿肥胖型 | |||
HTBodyTypeLFatMuscle, //!< 偏胖肌肉型 | |||
HTBodyTypeMuscleFat, //!< 肌肉型偏胖 | |||
}; | |||
///测量类型 | |||
typedef NS_ENUM(NSInteger, HTBodyMeasureType){ | |||
HTBodyMeasureTypeTwoLegs, //!< 双脚 | |||
HTBodyMeasureTypeAllBody, //!< 全身 | |||
HTBodyMeasureTypeTwoArms, //!< 双手 | |||
HTBodyMeasureTypeArmsLegs, //!< 双手双脚 | |||
HTBodyMeasureTypeThighArms, //!< 大腿到手 | |||
HTBodyMeasureTypeThigh //!< 大腿 | |||
}; | |||
#pragma mark - HTBodyBasicInfo | |||
// 计算体脂参数所需数据model | |||
@interface HTBodyBasicInfo : NSObject | |||
//测量者基本信息 | |||
@property (nonatomic,assign) HTSexType htSex; //!< 性别 | |||
@property (nonatomic,assign) NSInteger htHeightCm; //!< 身高(cm),需在 90 ~ 220cm | |||
@property (nonatomic,assign) CGFloat htWeightKg; //!< 体重(kg),需在 10 ~ 200kg | |||
@property (nonatomic,assign) NSInteger htAge; //!< 年龄(岁),需在6 ~ 99岁 | |||
//测量双脚时需赋值 | |||
@property (nonatomic,assign) NSInteger htTwoLegsImpedance; //!< 双脚阻抗系数 | |||
//测量双手时需赋值 | |||
@property (nonatomic,assign) NSInteger htTwoArmsImpedance; //!< 双手阻抗系数 | |||
//测量全身时需赋值 | |||
@property (nonatomic,assign) CGFloat htZAllBodyImpedance; //!< 全身阻抗系数 | |||
@property (nonatomic,assign) CGFloat htZLeftLegImpedance; //!< 左脚阻抗系数 | |||
@property (nonatomic,assign) CGFloat htZRightLegImpedance; //!< 右脚阻抗系数 | |||
@property (nonatomic,assign) CGFloat htZLeftArmImpedance; //!< 左手阻抗系数 | |||
@property (nonatomic,assign) CGFloat htZRightArmImpedance; //!< 右手阻抗系数 | |||
/** | |||
* 初始化人体数据 | |||
* | |||
* @param sex 性别 | |||
* @param height 身高,单位cm | |||
* @param weight 体重,单位kg | |||
* @param age 年龄 | |||
* | |||
* @return 人体数据model | |||
*/ | |||
- (id)initWithSex:(HTSexType)sex height:(NSInteger)height weight:(CGFloat)weight age:(NSInteger)age; | |||
@end | |||
#pragma mark - HTBodyResult | |||
/** | |||
* 体脂测量结果的基类 | |||
* 所有标准的字典使用说明如下: | |||
* 1.以BMI为例 | |||
* 小于"瘦-普通"为瘦,小于“普通-偏胖”为普通,小于"偏胖-肥胖"为偏胖,其它肥胖 | |||
* 2.以体脂率为例 | |||
* 小于"偏瘦-标准" 为偏瘦 | |||
* 小于“标准-警惕” 为标准 | |||
* 小于"警惕-偏胖" 为警惕 | |||
* 小于"偏胖-肥胖" 为偏胖 | |||
* 其它 肥胖 | |||
*/ | |||
@interface HTBodyResult : NSObject | |||
@property (nonatomic,assign) HTBodyfatErrorType htErrorType; //!< 错误类型,数据/计算是否有误 | |||
@property (nonatomic,assign) CGFloat htProteinPercentage; //!< 蛋白质,分辨率0.1, 范围2.0% ~ 30.0% | |||
@property (nonatomic,copy) NSDictionary* htProteinRatingList; //!< 蛋白健康标准字典,"不足-标准"“标准-优秀” | |||
@property (nonatomic,assign) CGFloat htBMI; //!< Body Mass Index 人体质量指数, 分辨率0.1, 范围10.0 ~ 90.0 | |||
@property (nonatomic,copy) NSDictionary* htBMIRatingList; //!< BMI健康标准字典,"瘦-普通"“普通-偏胖”“偏胖-肥胖” | |||
@property (nonatomic,assign) NSInteger htBMR; //!< Basal Metabolic Rate基础代谢, 分辨率1, 范围500 ~ 10000 | |||
@property (nonatomic,copy) NSDictionary* htBMRRatingList; //!< 基础代谢健康标准字典:"偏低-达标" | |||
@property (nonatomic,assign) NSInteger htVFAL; //!< Visceral fat area leverl内脏脂肪, 分辨率1, 范围1 ~ 60 | |||
@property (nonatomic,copy) NSDictionary* htVFALRatingList; //!< 内脏脂肪等级标准字典,"标准-警惕""警惕-危险" | |||
@property (nonatomic,assign) CGFloat htBoneKg; //!< 骨量(kg), 分辨率0.1, 范围0.5 ~ 8.0 | |||
@property (nonatomic,copy) NSDictionary* htBoneRatingList; //!< 骨量等级标准字典,"不足-标准"“标准-优秀” | |||
@property (nonatomic,assign) CGFloat htBodyfatSubcut; //!< 皮下脂肪率(%), 分辨率0.1, 范围0.1 ~ 60.0 | |||
@property (nonatomic,assign) CGFloat htBodyfatSubcutKg; //!< 皮下脂肪量(kg) | |||
@property (nonatomic,copy) NSDictionary* htBodyfatSubcutList; //!< 皮下脂肪等级标准 | |||
@property (nonatomic,assign) CGFloat htBodyfatFreeMass; //!< 去脂体重(kg) | |||
/** | |||
* 运动消耗量:kcal/30分钟, 字典key值如下,value为NSNumber类型 | |||
* 步行:walking, 慢跑:jogging, 自行车:bicycle, 游泳:swim, 爬山:mountain_climbing, | |||
* 有氧操:aerobic, 乒乓球:tabletennis, 网球:tennis, 足球:football, 击剑:oriental_fencing, | |||
* 门球:gateball, 羽毛球:badminton, 壁球:racketball, 跆拳道:tae_kwon_do, 弹力球:squash, | |||
* 篮球:basketball, 跳绳:ropejumping, 高尔夫:golf | |||
*/ | |||
@property (nonatomic,copy) NSDictionary* htExercisePlannerList; //!< 运动计划,运动消耗量表 | |||
@property (nonatomic,assign) CGFloat htBodyfatKg; //!< 脂肪量(kg) | |||
@property (nonatomic,assign) CGFloat htBodyfatPercentage; //!< 脂肪率(%), 分辨率0.1, 范围5.0% ~ 75.0% | |||
@property (nonatomic,copy) NSDictionary* htBodyfatRatingList; //!< 脂肪率健康标准字典"偏瘦-标准"“标准-警惕”“警惕-偏胖”“偏胖-肥胖” | |||
@property (nonatomic,assign) CGFloat htWaterPercentage; //!< 水分率(%), 分辨率0.1, 范围35.0% ~ 75.0% | |||
@property (nonatomic,copy) NSDictionary* htWaterRatingList; //!< 水分率健康标准 "不足-标准"“标准-优秀” | |||
@property (nonatomic,assign) CGFloat htMuscleKg; //!< 肌肉量(kg), 分辨率0.1, 范围10.0 ~ 120.0 | |||
@property (nonatomic,assign) CGFloat htMusclePercentage; //!< 肌肉率(%),分辨率0.1,范围5%~90% | |||
@property (nonatomic,copy) NSDictionary* htMuscleRatingList; //!< 肌肉量健康标准 "不足-标准"“标准-优秀” | |||
@property (nonatomic,assign) NSInteger htBodyAge; //!< 身体年龄,6~99岁 | |||
@property (nonatomic,assign) CGFloat htIdealWeightKg; //!< 理想体重(kg) | |||
@property (nonatomic,assign) HTBodyType htBodyType; //!< 身体类型 | |||
@property (nonatomic,assign) NSInteger htBodyScore; //!< 身体得分,50 ~ 100分 | |||
/** | |||
* 根据测量类型获取体脂参数,调用之前需先给相应测量类型的阻抗系数赋值 | |||
* | |||
* @param basicInfo 人体参数基本信息 | |||
* | |||
* @return 体脂计算结果,判断是否有错误 | |||
*/ | |||
- (HTBodyfatErrorType )getBodyfatWithBasicInfo:(HTBodyBasicInfo *)basicInfo; | |||
@end | |||
#pragma mark - HTBodyResultTwoLegs | |||
/** | |||
* 双脚的测量结果类 | |||
*/ | |||
@interface HTBodyResultTwoLegs : HTBodyResult | |||
@property (nonatomic,assign) CGFloat htZTwoLegs; //!< 脚对脚阻抗值(Ω), 范围200.0 ~ 1200.0 | |||
@end | |||
#pragma mark - HTBodyResultAllBody | |||
/** | |||
* 全身的测量结果类 | |||
*/ | |||
@interface HTBodyResultAllBody : HTBodyResult | |||
@property (nonatomic,assign) CGFloat htZAllBody; //!< 全身阻抗值(Ω), 范围75.0 ~ 1500.0 | |||
@property (nonatomic,assign) CGFloat htZLeftLeg; //!< 左脚阻抗值(Ω), 范围75.0 ~ 1500.0 | |||
@property (nonatomic,assign) CGFloat htZRightLeg; //!< 右脚阻抗值(Ω), 范围75.0 ~ 1500.0 | |||
@property (nonatomic,assign) CGFloat htZLeftArm; //!< 左手阻抗值(Ω), 范围75.0 ~ 1500.0 | |||
@property (nonatomic,assign) CGFloat htZRightArm; //!< 右手阻抗值(Ω), 范围75.0 ~ 1500.0 | |||
@property (nonatomic,assign) CGFloat htMusclePercentageTrunk; //!< 躯干肌肉率(%), 分辨率0.1, 范围5.0% ~ 90.0% | |||
@property (nonatomic,assign) CGFloat htMusclePercentageLeftLeg; //!< 左脚肌肉率(%), 分辨率0.1, 范围5.0% ~ 90.0% | |||
@property (nonatomic,assign) CGFloat htMusclePercentageRightLeg; //!< 右脚肌肉率(%), 分辨率0.1, 范围5.0% ~ 90.0% | |||
@property (nonatomic,assign) CGFloat htMusclePercentageLeftArm; //!< 左手肌肉率(%), 分辨率0.1, 范围5.0% ~ 90.0% | |||
@property (nonatomic,assign) CGFloat htMusclePercentageRightArm; //!< 右手肌肉率(%), 分辨率0.1, 范围5.0% ~ 90.0% | |||
@property (nonatomic,assign) CGFloat htBodyfatPercentageTrunk; //!< 躯干脂肪率(%), 分辨率0.1, 范围5.0% ~ 75.0% | |||
@property (nonatomic,assign) CGFloat htBodyfatPercentageLeftLeg; //!< 左脚脂肪率(%), 分辨率0.1, 范围5.0% ~ 75.0% | |||
@property (nonatomic,assign) CGFloat htBodyfatPercentageRightLeg; //!< 右脚脂肪率(%), 分辨率0.1, 范围5.0% ~ 75.0% | |||
@property (nonatomic,assign) CGFloat htBodyfatPercentageLeftArm; //!< 左手脂肪率(%), 分辨率0.1, 范围5.0% ~ 75.0% | |||
@property (nonatomic,assign) CGFloat htBodyfatPercentageRightArm; //!< 右手脂肪率(%), 分辨率0.1, 范围5.0% ~ 75.0% | |||
@property (nonatomic,assign) CGFloat htMuscleKgTrunk; //!< 躯干肌肉量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htMuscleKgeLeftLeg; //!< 左脚肌肉量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htMuscleKgRightLeg; //!< 右脚肌肉量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htMuscleKgLeftArm; //!< 左手肌肉量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htMuscleKgRightArm; //!< 右手肌肉量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htBodyfatKgTrunk; //!< 躯干脂肪量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htBodyfatKgLeftLeg; //!< 左脚脂肪量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htBodyfatKgRightLeg; //!< 右脚脂肪量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htBodyfatKgLeftArm; //!< 左手脂肪量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@property (nonatomic,assign) CGFloat htBodyfatKgRightArm; //!< 右手脂肪量(kg), 分辨率0.1, 范围0.0 ~ 200kg | |||
@end | |||
#pragma mark - HTBodyResultTwoArms | |||
/** | |||
* 双手的测量结果类 | |||
*/ | |||
@interface HTBodyResultTwoArms : HTBodyResult | |||
@property (nonatomic,assign) CGFloat htZTwoArms; //!< 手对手阻抗值(Ω), 范围200.0 ~ 1200.0 | |||
@end | |||
#pragma mark - HTBodyResultArmsLegs | |||
/** | |||
* 双手双脚的测量结果类,预留 | |||
*/ | |||
@interface HTBodyResultArmsLegs : HTBodyResult | |||
@end | |||