E622E2FF243F1D4A003C319D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2D8243F1D4A003C319D /* ViewController.m */; }; | E622E2FF243F1D4A003C319D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2D8243F1D4A003C319D /* ViewController.m */; }; | ||||
E622E300243F1D4A003C319D /* ThermometerScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2DA243F1D4A003C319D /* ThermometerScanViewController.m */; }; | E622E300243F1D4A003C319D /* ThermometerScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2DA243F1D4A003C319D /* ThermometerScanViewController.m */; }; | ||||
E622E301243F1D4A003C319D /* ThermometerConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2DD243F1D4A003C319D /* ThermometerConnectViewController.m */; }; | E622E301243F1D4A003C319D /* ThermometerConnectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E622E2DD243F1D4A003C319D /* ThermometerConnectViewController.m */; }; | ||||
E62381B5244E9B1200B976C4 /* AILinkBleSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E62381B4244E9B1200B976C4 /* AILinkBleSDK.framework */; }; | |||||
E680BF1C2510572A005AD827 /* AILinkBleSDK.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E680BF1B25105729005AD827 /* AILinkBleSDK.framework */; }; | |||||
E680BF252510576D005AD827 /* BroadcastScaleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E680BF1E2510576D005AD827 /* BroadcastScaleViewController.m */; }; | |||||
E680BF262510576D005AD827 /* EightScaleScanViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E680BF212510576D005AD827 /* EightScaleScanViewController.m */; }; | |||||
E680BF272510576D005AD827 /* EightScaleConnectionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E680BF222510576D005AD827 /* EightScaleConnectionViewController.m */; }; | |||||
/* End PBXBuildFile section */ | /* End PBXBuildFile section */ | ||||
/* Begin PBXContainerItemProxy section */ | /* Begin PBXContainerItemProxy section */ | ||||
E622E2DB243F1D4A003C319D /* ThermometerConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerConnectViewController.h; sourceTree = "<group>"; }; | E622E2DB243F1D4A003C319D /* ThermometerConnectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerConnectViewController.h; sourceTree = "<group>"; }; | ||||
E622E2DC243F1D4A003C319D /* ThermometerScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerScanViewController.h; sourceTree = "<group>"; }; | E622E2DC243F1D4A003C319D /* ThermometerScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ThermometerScanViewController.h; sourceTree = "<group>"; }; | ||||
E622E2DD243F1D4A003C319D /* ThermometerConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThermometerConnectViewController.m; sourceTree = "<group>"; }; | E622E2DD243F1D4A003C319D /* ThermometerConnectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ThermometerConnectViewController.m; sourceTree = "<group>"; }; | ||||
E62381B4244E9B1200B976C4 /* AILinkBleSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AILinkBleSDK.framework; sourceTree = "<group>"; }; | |||||
E680BF1B25105729005AD827 /* AILinkBleSDK.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AILinkBleSDK.framework; sourceTree = "<group>"; }; | |||||
E680BF1E2510576D005AD827 /* BroadcastScaleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BroadcastScaleViewController.m; sourceTree = "<group>"; }; | |||||
E680BF1F2510576D005AD827 /* BroadcastScaleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BroadcastScaleViewController.h; sourceTree = "<group>"; }; | |||||
E680BF212510576D005AD827 /* EightScaleScanViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EightScaleScanViewController.m; sourceTree = "<group>"; }; | |||||
E680BF222510576D005AD827 /* EightScaleConnectionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = EightScaleConnectionViewController.m; sourceTree = "<group>"; }; | |||||
E680BF232510576D005AD827 /* EightScaleScanViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EightScaleScanViewController.h; sourceTree = "<group>"; }; | |||||
E680BF242510576D005AD827 /* EightScaleConnectionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EightScaleConnectionViewController.h; sourceTree = "<group>"; }; | |||||
/* End PBXFileReference section */ | /* End PBXFileReference section */ | ||||
/* Begin PBXFrameworksBuildPhase section */ | /* Begin PBXFrameworksBuildPhase section */ | ||||
isa = PBXFrameworksBuildPhase; | isa = PBXFrameworksBuildPhase; | ||||
buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
files = ( | files = ( | ||||
E62381B5244E9B1200B976C4 /* AILinkBleSDK.framework in Frameworks */, | |||||
E680BF1C2510572A005AD827 /* AILinkBleSDK.framework in Frameworks */, | |||||
); | ); | ||||
runOnlyForDeploymentPostprocessing = 0; | runOnlyForDeploymentPostprocessing = 0; | ||||
}; | }; | ||||
E622E25D243F1CA5003C319D /* AILinkBleSDKDemo */ = { | E622E25D243F1CA5003C319D /* AILinkBleSDKDemo */ = { | ||||
isa = PBXGroup; | isa = PBXGroup; | ||||
children = ( | children = ( | ||||
E62381B4244E9B1200B976C4 /* AILinkBleSDK.framework */, | |||||
E680BF1B25105729005AD827 /* AILinkBleSDK.framework */, | |||||
E622E2B7243F1D4A003C319D /* AiLinkSuper */, | E622E2B7243F1D4A003C319D /* AiLinkSuper */, | ||||
E622E2CC243F1D4A003C319D /* BabyScale */, | E622E2CC243F1D4A003C319D /* BabyScale */, | ||||
E622E2B1243F1D4A003C319D /* BloodPressure */, | E622E2B1243F1D4A003C319D /* BloodPressure */, | ||||
E622E2C7243F1D4A003C319D /* RemoteControl */, | E622E2C7243F1D4A003C319D /* RemoteControl */, | ||||
E622E2D9243F1D4A003C319D /* Thermometer */, | E622E2D9243F1D4A003C319D /* Thermometer */, | ||||
E622E2C2243F1D4A003C319D /* WheelMonitor */, | E622E2C2243F1D4A003C319D /* WheelMonitor */, | ||||
E680BF202510576D005AD827 /* 八电极体脂秤 */, | |||||
E680BF1D2510576D005AD827 /* 广播体脂秤 */, | |||||
E622E25E243F1CA5003C319D /* AppDelegate.h */, | E622E25E243F1CA5003C319D /* AppDelegate.h */, | ||||
E622E25F243F1CA5003C319D /* AppDelegate.m */, | E622E25F243F1CA5003C319D /* AppDelegate.m */, | ||||
E622E261243F1CA5003C319D /* SceneDelegate.h */, | E622E261243F1CA5003C319D /* SceneDelegate.h */, | ||||
path = Thermometer; | path = Thermometer; | ||||
sourceTree = "<group>"; | sourceTree = "<group>"; | ||||
}; | }; | ||||
E680BF1D2510576D005AD827 /* 广播体脂秤 */ = { | |||||
isa = PBXGroup; | |||||
children = ( | |||||
E680BF1E2510576D005AD827 /* BroadcastScaleViewController.m */, | |||||
E680BF1F2510576D005AD827 /* BroadcastScaleViewController.h */, | |||||
); | |||||
path = "广播体脂秤"; | |||||
sourceTree = "<group>"; | |||||
}; | |||||
E680BF202510576D005AD827 /* 八电极体脂秤 */ = { | |||||
isa = PBXGroup; | |||||
children = ( | |||||
E680BF212510576D005AD827 /* EightScaleScanViewController.m */, | |||||
E680BF222510576D005AD827 /* EightScaleConnectionViewController.m */, | |||||
E680BF232510576D005AD827 /* EightScaleScanViewController.h */, | |||||
E680BF242510576D005AD827 /* EightScaleConnectionViewController.h */, | |||||
); | |||||
path = "八电极体脂秤"; | |||||
sourceTree = "<group>"; | |||||
}; | |||||
/* End PBXGroup section */ | /* End PBXGroup section */ | ||||
/* Begin PBXNativeTarget section */ | /* Begin PBXNativeTarget section */ | ||||
isa = PBXSourcesBuildPhase; | isa = PBXSourcesBuildPhase; | ||||
buildActionMask = 2147483647; | buildActionMask = 2147483647; | ||||
files = ( | files = ( | ||||
E680BF262510576D005AD827 /* EightScaleScanViewController.m in Sources */, | |||||
E622E2FF243F1D4A003C319D /* ViewController.m in Sources */, | E622E2FF243F1D4A003C319D /* ViewController.m in Sources */, | ||||
E622E2EF243F1D4A003C319D /* BloodConnectViewController.m in Sources */, | E622E2EF243F1D4A003C319D /* BloodConnectViewController.m in Sources */, | ||||
E622E2F6243F1D4A003C319D /* WheelMonitorConnectViewController.m in Sources */, | E622E2F6243F1D4A003C319D /* WheelMonitorConnectViewController.m in Sources */, | ||||
E622E2DF243F1D4A003C319D /* HeightGuageConnectViewController.m in Sources */, | E622E2DF243F1D4A003C319D /* HeightGuageConnectViewController.m in Sources */, | ||||
E622E2DE243F1D4A003C319D /* HeightGuageScanViewController.m in Sources */, | E622E2DE243F1D4A003C319D /* HeightGuageScanViewController.m in Sources */, | ||||
E622E2FC243F1D4A003C319D /* BodyFatScaleScanViewController.m in Sources */, | E622E2FC243F1D4A003C319D /* BodyFatScaleScanViewController.m in Sources */, | ||||
E680BF272510576D005AD827 /* EightScaleConnectionViewController.m in Sources */, | |||||
E622E2E4243F1D4A003C319D /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, | E622E2E4243F1D4A003C319D /* NSLayoutConstraint+MASDebugAdditions.m in Sources */, | ||||
E622E2ED243F1D4A003C319D /* MASViewAttribute.m in Sources */, | E622E2ED243F1D4A003C319D /* MASViewAttribute.m in Sources */, | ||||
E622E2E1243F1D4A003C319D /* InheritConnectViewController.m in Sources */, | E622E2E1243F1D4A003C319D /* InheritConnectViewController.m in Sources */, | ||||
E622E2F4243F1D4A003C319D /* ForeheadConnectViewController.m in Sources */, | E622E2F4243F1D4A003C319D /* ForeheadConnectViewController.m in Sources */, | ||||
E622E2EC243F1D4A003C319D /* MASViewConstraint.m in Sources */, | E622E2EC243F1D4A003C319D /* MASViewConstraint.m in Sources */, | ||||
E622E2E0243F1D4A003C319D /* SubBleManager.m in Sources */, | E622E2E0243F1D4A003C319D /* SubBleManager.m in Sources */, | ||||
E680BF252510576D005AD827 /* BroadcastScaleViewController.m in Sources */, | |||||
E622E2E7243F1D4A003C319D /* MASConstraintMaker.m in Sources */, | E622E2E7243F1D4A003C319D /* MASConstraintMaker.m in Sources */, | ||||
E622E2E8243F1D4A003C319D /* MASLayoutConstraint.m in Sources */, | E622E2E8243F1D4A003C319D /* MASLayoutConstraint.m in Sources */, | ||||
E622E300243F1D4A003C319D /* ThermometerScanViewController.m in Sources */, | E622E300243F1D4A003C319D /* ThermometerScanViewController.m in Sources */, |
#import "ELBleWifiDetailModel.h" | #import "ELBleWifiDetailModel.h" | ||||
//MARK: Broadcast Equipment Protocol(广播设备协议) | |||||
@protocol ELBleBroadcastDelegate <NSObject> | |||||
@optional | |||||
/// Callback broadcast device data(回调广播设备数据) | |||||
/// @param cid cid | |||||
/// @param vid vid | |||||
/// @param pid pid | |||||
/// @param mac mac地址 | |||||
/// @param data Custom data(自定义数据) | |||||
-(void)bleBroadcastWithCid:(int)cid vid:(int)vid pid:(int)pid mac:(NSString *_Nonnull)mac data:(NSData *_Nonnull)data; | |||||
@end | |||||
//MARK:Bluetooth Wifi protocol(蓝牙Wifi协议) | //MARK:Bluetooth Wifi protocol(蓝牙Wifi协议) | ||||
@protocol ElBleWifiDelegate <NSObject> | @protocol ElBleWifiDelegate <NSObject> | ||||
-(void)bleWifiReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result; | -(void)bleWifiReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result; | ||||
/** | /** | ||||
获取会话码 | |||||
获取会话码(deviceId) | |||||
@param code 会话码(为0时表示不存在) | |||||
@param code (deviceId) deviceId(0 means no:为0时表示不存在) | |||||
*/ | */ | ||||
-(void)bleWifiReceiveWifiSNCode:(int)code; | -(void)bleWifiReceiveWifiSNCode:(int)code; | ||||
-(void)bluetoothManagerScanedPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | -(void)bluetoothManagerScanedPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | ||||
//Special devices that can be bound in the callback, such as door locks(回调中扫描到的可以绑定的特殊设备,如门锁) | //Special devices that can be bound in the callback, such as door locks(回调中扫描到的可以绑定的特殊设备,如门锁) | ||||
-(void)bluetoothManagerScanedCanBindSpecialPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | -(void)bluetoothManagerScanedCanBindSpecialPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | ||||
//Call back the scanned broadcast device(回调扫描到的广播设备) | |||||
-(void)bluetoothManagerScanedBroadcastPeripherals:(NSArray<ELPeripheralModel *> *_Nonnull)peripherals; | |||||
//Callback decrypted transparent data (A7 decrypted payload data)(回调解密后的数据(A7解密后payload数据)) | //Callback decrypted transparent data (A7 decrypted payload data)(回调解密后的数据(A7解密后payload数据)) | ||||
-(void)bluetoothManagerReceiveData:(NSData *_Nonnull)data deviceType:(ELSupportDeviceType)type; | -(void)bluetoothManagerReceiveData:(NSData *_Nonnull)data deviceType:(ELSupportDeviceType)type; | ||||
/** | /** | ||||
回调透传数据 | |||||
Callback transparent transmission data(回调透传数据) | |||||
@param data 透传数据(此数据不能以A6或A7开头) | |||||
@param data Transparent data transmission (this data cannot start with A6 or A7)(透传数据(此数据不能以A6或A7开头)) | |||||
*/ | */ | ||||
-(void)bluetoothManagerReceivePassData:(NSData *_Nullable)data; | -(void)bluetoothManagerReceivePassData:(NSData *_Nullable)data; | ||||
BloodPressure:(NSArray<NSNumber *> *_Nullable)bloodPressureArray | BloodPressure:(NSArray<NSNumber *> *_Nullable)bloodPressureArray | ||||
Pressure:(NSArray<NSNumber *> *_Nullable)pressureArray; | Pressure:(NSArray<NSNumber *> *_Nullable)pressureArray; | ||||
/// Blood glucose units supported by callback supported devices(回调支持的设备支持的血糖单位) | |||||
/// @param bloodSugarUnitArray Blood glucose unit array(血糖单位数组) | |||||
-(void)bluetoothManagerReceiveSupportBloodSugarUnitArray:(NSArray<NSNumber *>* _Nullable)bloodSugarUnitArray; | |||||
/** | /** | ||||
Set the result of the decoding key(设置解码密钥的结果) | Set the result of the decoding key(设置解码密钥的结果) | ||||
*/ | */ | ||||
-(void)bluetoothManagerReceiveSetKeyResult:(BOOL)result; | -(void)bluetoothManagerReceiveSetKeyResult:(BOOL)result; | ||||
/// Device authorization result(设备授权结果) | |||||
/// @param result 结果 | |||||
-(void)bluetoothManagerReceiveDeviceAuthorizeResult:(ELBluetoothDeviceAuthorizeResult)result; | |||||
@end | @end | ||||
@property (nonatomic, weak) id<ELBluetoothManagerDelegate> delegate; | @property (nonatomic, weak) id<ELBluetoothManagerDelegate> delegate; | ||||
//Bluetooth wifi proxy(蓝牙wifi代理) | //Bluetooth wifi proxy(蓝牙wifi代理) | ||||
@property (nonatomic, weak) id<ElBleWifiDelegate> bleWifiDelegate; | @property (nonatomic, weak) id<ElBleWifiDelegate> bleWifiDelegate; | ||||
//Bluetooth Broadcast Device Protocol(蓝牙广播设备协议) | |||||
@property (nonatomic, weak) id<ELBleBroadcastDelegate> broadDelegate; | |||||
//设置appkey和secret | //设置appkey和secret | ||||
+(void)setAppKey:(NSString *)key appSecret:(NSString *)secret; | +(void)setAppKey:(NSString *)key appSecret:(NSString *)secret; | ||||
/** | /** | ||||
General method of sending data (support data transparent transmission)(发送数据通用方法(支持数据透传)) | General method of sending data (support data transparent transmission)(发送数据通用方法(支持数据透传)) | ||||
@param data 数据 | @param data 数据 | ||||
*/ | */ | ||||
-(void)sendData:(NSData *)data; | -(void)sendData:(NSData *)data; | ||||
Callback to scan special devices that can be bound, such as door locks(回调扫描到的可以绑定的特殊设备,如门锁) | Callback to scan special devices that can be bound, such as door locks(回调扫描到的可以绑定的特殊设备,如门锁) | ||||
*/ | */ | ||||
-(void)bluetoothScanCanBindSpecialPeripherals:(NSArray *)peripherals; | -(void)bluetoothScanCanBindSpecialPeripherals:(NSArray *)peripherals; | ||||
//Call back the scanned broadcast device(回调扫描到的广播设备) | |||||
-(void)bluetoothScanBroadcastPeripherals:(NSArray *)peripherals; | |||||
/** | /** | ||||
Callback device basic information(回调设备基本信息) | Callback device basic information(回调设备基本信息) | ||||
/// @param data Transparent data(透传数据) | /// @param data Transparent data(透传数据) | ||||
-(void)bluetoothReceivePassData:(NSData *)data; | -(void)bluetoothReceivePassData:(NSData *)data; | ||||
//Broadcast equipment dedicated(广播设备专用) | |||||
/// Broadcast device data | |||||
/// @param cid cid | |||||
/// @param vid vid | |||||
/// @param pid pid | |||||
/// @param mac mac | |||||
/// @param data custom data(自定义数据) | |||||
-(void)bluetoothReceiveBroadcastDataWithCid:(int)cid vid:(int)vid pid:(int)pid mac:(NSString *_Nonnull)mac data:(NSData *_Nonnull)data; | |||||
#pragma mark ============ Please rewrite the following methods in the subclass(子类重写方法) END============== | #pragma mark ============ Please rewrite the following methods in the subclass(子类重写方法) END============== | ||||
*/ | */ | ||||
- (void)setKeyWithData:(NSData *)data; | - (void)setKeyWithData:(NSData *)data; | ||||
/// Request device authorization(请求设备授权) | |||||
/// @param interval 时间截 | |||||
-(void)requestDeviceAuthorization:(NSInteger)interval; | |||||
#pragma mark ============ Bluetooth WIFI calling method(蓝牙WIFI调用方法) ============== | #pragma mark ============ Bluetooth WIFI calling method(蓝牙WIFI调用方法) ============== |
// | |||||
// ELBodyIndexAlgorithmModel.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/6/8. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
#import "ELSDKHeader.h" | |||||
typedef NS_ENUM(NSInteger, PHSex) { | |||||
PHSex_FEMALE = 0, //女 | |||||
PHSex_MALE = 1,//男 | |||||
}; | |||||
//四肢肌肉指数 | |||||
typedef NS_ENUM(NSUInteger, AILinkLimbMuscleIndexType) { | |||||
AILinkLimbMuscleIndexTypeUnknown = 0,//未知 | |||||
AILinkLimbMuscleIndexTypeInsufficient = 1,//不足 | |||||
AILinkLimbMuscleIndexTypeStandard = 2,//标准 | |||||
AILinkLimbMuscleIndexTypeExcellent = 3,//优 | |||||
}; | |||||
//肥胖等级 标准判断 | |||||
typedef NS_ENUM(NSUInteger, AILinkFatLevelType) { | |||||
AILinkFatLevelTypeUnknown = 0,//未知 | |||||
AILinkFatLevelTypeStandard = 1,//标准 | |||||
AILinkFatLevelTypeThin = 2,//偏瘦 | |||||
AILinkFatLevelTypeBiased = 3,//偏重 | |||||
AILinkFatLevelTypeUnderWeight = 4,//体重不足 | |||||
AILinkFatLevelTypeOverWeight = 5, //超重 | |||||
}; | |||||
//蛋白量判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkProteinMassType) { | |||||
AILinkProteinMassTypeUnknown = 0,//未知 | |||||
AILinkProteinMassTypeInsufficient = 1,//不足 | |||||
AILinkProteinMassTypeStandard = 2,//标准 | |||||
AILinkProteinMassTypeExcellent = 3,//优 | |||||
}; | |||||
//肌肉量判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkMuscleMassType) { | |||||
AILinkMuscleMassTypeUnknown = 0,//未知 | |||||
AILinkMuscleMassTypeInsufficient = 1,//不足 | |||||
AILinkMuscleMassTypeStandard = 2,//标准 | |||||
AILinkMuscleMassTypeExcellent = 3,//优 | |||||
}; | |||||
//脂肪量判断标准 | |||||
typedef NS_ENUM(NSInteger, AILinkFatMassType) { | |||||
AILinkFatMassTypeUnknown = 0, | |||||
AILinkFatMassTypeLow = 1, //偏低 | |||||
AILinkFatMassTypeStandard = 2 , //标准 | |||||
AILinkFatMassTypeLittleHigh = 3 , //偏高 | |||||
AILinkFatMassTypeHigh = 4 , //高 | |||||
}; | |||||
//身体年龄判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkPhysicalAgeType) { | |||||
AILinkPhysicalAgeTypeUnknown = 0,//未知 | |||||
AILinkPhysicalAgeTypeExcellent = 1,//优 | |||||
AILinkPhysicalAgeTypeStandard = 2,//标准 | |||||
AILinkPhysicalAgeTypeTooLarge = 3,//偏大 | |||||
}; | |||||
//蛋白率判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkProteinRateType) { | |||||
AILinkProteinRateTypeUnknown = 0,//未知 | |||||
AILinkProteinRateTypeInsufficient = 1,//不足 | |||||
AILinkProteinRateTypeStandard = 2,//标准 | |||||
AILinkProteinRateTypeExcellent = 3,//优 | |||||
}; | |||||
//皮下脂肪判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkSubcutaneousFatType) { | |||||
AILinkSubcutaneousFatTypeUnknown = 0,//未知 | |||||
AILinkSubcutaneousFatTypeInsufficient = 1,//不足 | |||||
AILinkSubcutaneousFatTypeStandard = 2,//标准 | |||||
AILinkSubcutaneousFatTypeHigh = 3,//偏高 | |||||
}; | |||||
//内脏脂肪判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkVisceralFatType) { | |||||
AILinkVisceralFatTypeUnknown = 0,//未知 | |||||
AILinkVisceralFatTypeStandard = 1,//标准 | |||||
AILinkVisceralFatTypeWarning = 2,//警惕 | |||||
AILinkVisceralFatTypeDanger = 3,//危险 | |||||
}; | |||||
//基础代谢率判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkBMRType) { | |||||
AILinkBMRTypeUnknown = 0,//未知 | |||||
AILinkBMRTypeLow = 1,//偏低 | |||||
AILinkBMRTypeExcellent = 2,//优 | |||||
}; | |||||
//骨量判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkBoneMassType) { | |||||
AILinkBoneMassTypeUnknown = 0,//未知 | |||||
AILinkBoneMassTypeInsufficient = 1,//不足 | |||||
AILinkBoneMassTypeStandard = 2,//标准 | |||||
AILinkBoneMassTypeExcellent = 3,//优 | |||||
}; | |||||
//水分判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkMoistureType) { | |||||
AILinkMoistureTypeUnknown = 0,//未知 | |||||
AILinkMoistureTypeInsufficient = 1,//不足 | |||||
AILinkMoistureTypeStandard = 2,//标准 | |||||
AILinkMoistureTypeExcellent = 3,//优 | |||||
}; | |||||
//肌肉率判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkMuscleRateType) { | |||||
AILinkMuscleRateTypeUnknown = 0,//未知 | |||||
AILinkMuscleRateTypeInsufficient = 1,//不足 | |||||
AILinkMuscleRateTypeStandard = 2,//标准 | |||||
AILinkMuscleRateTypeExcellent = 3,//优 | |||||
}; | |||||
//体脂率BFR判断标准 | |||||
typedef NS_ENUM(NSInteger, AILinkBFRType) { | |||||
AILinkBFRTypeUnknown = 0, | |||||
AILinkBFRTypeLow = 1, //偏低 | |||||
AILinkBFRTypeStandard = 2 , //标准 | |||||
AILinkBFRTypeLittleHigh = 3 , //偏高 | |||||
AILinkBFRTypeHigh = 4 , //高 | |||||
}; | |||||
//BMI判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkBMIType) { | |||||
AILinkBMITypeUnknown = 0,//未知 | |||||
AILinkBMITypeThin = 1,//偏瘦 | |||||
AILinkBMITypeStandard = 2,//标准 | |||||
AILinkBMITypeFatty = 3,//偏胖 | |||||
AILinkBMITypeObesity = 4 //肥胖 | |||||
}; | |||||
//体重判断标准 | |||||
typedef NS_ENUM(NSUInteger, AILinkWeightType) { | |||||
AILinkWeightTypeUnknown = 0, //未知 | |||||
AILinkWeightTypeThin = 1,//偏瘦 | |||||
AILinkWeightTypeStandard = 2,//标准 | |||||
AILinkWeightTypeFatty = 3,//偏胖 | |||||
AILinkWeightTypeObesity = 4 //肥胖 | |||||
}; | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELBodyIndexAlgorithmModel : NSObject | |||||
#pragma mark ============ 标准判断临界值数组 ============== | |||||
/// 四肢肌肉指数 标准判断 | |||||
/// @param sex 性别 | |||||
/// @param cmHeight 身高(cm) | |||||
+(NSArray<NSString *> *)getLimbMuscleIndexScopeWithSex:(PHSex)sex cmHeight:(float)cmHeight; | |||||
/// 蛋白量 标准判断 | |||||
/// @param weight 体重(KG) | |||||
/// @param sex 性别 | |||||
/// @param weightUnit 体重单位 | |||||
+ (NSArray<NSString *> *)getProteinScope:(NSString *)weight sex:(PHSex)sex weightUnit:(ELDeviceWeightUnit)weightUnit; | |||||
/// 肌肉量 标准判断2个临界值 | |||||
/// @param weight 体重(kg) | |||||
/// @param sex 性别 | |||||
/// @param weightUnit 体重单位 | |||||
+ (NSArray<NSString *> *)getMuscleMassScope:(NSString *)weight Sex:(PHSex)sex weightUnit:(ELDeviceWeightUnit)weightUnit; | |||||
/// 脂肪量 标准判断3个临界值 | |||||
/// @param weight 体重(kg) | |||||
/// @param sex 性别 | |||||
/// @param age 年龄 | |||||
/// @param weightUnit 体重单位 | |||||
+ (NSArray<NSString *> *)getFatScope:(NSString *)weight sex:(PHSex)sex age:(float)age weightUnit:(ELDeviceWeightUnit)weightUnit; | |||||
/// 身体年龄 标准判断2个临界值 | |||||
/// @param age 年龄 | |||||
+ (NSArray<NSString *> *)getPhysicalAgeScopeAge:(int)age; | |||||
/// 蛋白率 标准判断 | |||||
/// @param sex 性别 | |||||
+ (NSArray<NSString *> *)getProteinRateScopeSex:(PHSex)sex; | |||||
/// 皮下脂肪 标准判断2个临界值 | |||||
/// @param sex 性别 | |||||
+ (NSArray<NSString *> *)getSubcutaneousFatScopeSex:(PHSex)sex; | |||||
/// 内脏脂肪 标准判断2个临界值 | |||||
+ (NSArray<NSString *> *)getVisceralfatScope; | |||||
/// 基础代谢率 标准判断1个临界值 | |||||
/// @param BMR 基础代谢率 | |||||
/// @param age 年龄 | |||||
/// @param weight 体重(kg) | |||||
/// @param sex 性别 | |||||
+ (NSArray<NSString *> *)getBMRScope:(float)BMR age:(float)age weight:(float)weight sex:(PHSex)sex; | |||||
/// 骨量 标准判断2个临界值 | |||||
/// @param sex 性别 | |||||
/// @param weight 体重(kg) | |||||
/// @param weightUnit 体重单位 | |||||
+ (NSArray<NSString *> *)getBonemassScopeSex:(PHSex)sex weight:(float)weight weightUnit:(ELDeviceWeightUnit)weightUnit; | |||||
/// 水分 标准判断2个临界值 | |||||
/// @param sex 性别 | |||||
+ (NSArray<NSString *> *)getMoistureScopeSex:(PHSex)sex; | |||||
/// 肌肉率 标准判断2个临界值 | |||||
/// @param sex 性别 | |||||
+ (NSArray<NSString *> *)getMuscleScopeSex:(PHSex)sex; | |||||
/// 体脂率 标准判断三个临界值 | |||||
/// @param sex 性别 | |||||
/// @param age 年龄 | |||||
+ (NSArray<NSString *> *)getFatRateScopeSex:(PHSex)sex age:(float)age; | |||||
/// BMI 标准判断的三个临界值 | |||||
/// @param sex 性别 | |||||
/// @param age 年龄 | |||||
+ (NSArray<NSString *> *)getBMIWithSex:(PHSex)sex age:(float)age; | |||||
/// 体重标准判断的三个临界值 | |||||
/// @param height 身高(cm) | |||||
/// @param weightUnit 体重单位 | |||||
+ (NSArray<NSString *> *)getWeightScopeHeight:(NSString *)height weightUnit:(ELDeviceWeightUnit)weightUnit; | |||||
#pragma mark ============ 判断标准数组 ============== | |||||
//四肢肌肉指数标准词条 | |||||
+(NSArray<NSNumber *> *)getLimbMuscleIndexStandardArray; | |||||
///1 体重 判断标准词条Array<AILinkWeightType> | |||||
+ (NSArray<NSNumber *> *)getWeightStandardArray; | |||||
///2 BMI 判断标准词条Array<AILinkBMIType> | |||||
+ (NSArray<NSNumber *> *)getBMIStandardArray; | |||||
///3 体脂率 判断标准词条Array<AILinkBFRType> | |||||
+ (NSArray<NSNumber *> *)getFatRateStandardArray; | |||||
///4 肌肉率 判断标准词条Array<AILinkMuscleRateType> | |||||
+ (NSArray<NSNumber *> *)getMuscleStandardArray; | |||||
///5 水分 判断标准词条Array<AILinkMoistureType> | |||||
+ (NSArray<NSNumber *> *)getMoistureStandardArray; | |||||
///6 骨量 判断标准词条Array<AILinkBoneMassType> | |||||
+ (NSArray<NSNumber *> *)getBonemassStandardArray; | |||||
///7 基础代谢率 判断标准词条Array<AILinkBMRType> | |||||
+ (NSArray<NSNumber *> *)getBMRStandardArray; | |||||
///8 内脏脂肪 判断标准词条Array<AILinkVisceralFatType> | |||||
+ (NSArray<NSNumber *> *)getVisceralfatStandardArray; | |||||
///9 皮下脂肪 判断标准词条Array<AILinkSubcutaneousFatType> | |||||
+ (NSArray<NSNumber *> *)getSubcutaneousFatStandardArray; | |||||
///10 蛋白率 判断标准词条Array<AILinkProteinRateType> | |||||
+ (NSArray<NSNumber *> *)getProteinRateStandardArray; | |||||
///11 身体年龄 判断标准词条Array<AILinkPhysicalAgeType> | |||||
+ (NSArray<NSNumber *> *)getPhysicalAgeStandardArray; | |||||
///14 脂肪量 判断标准词条Array<AILinkFatMassType>(与体脂率是一样的) | |||||
+ (NSArray<NSNumber *> *)getFatmassStandardArray; | |||||
///16 肌肉量 判断标准词条Array<AILinkMuscleMassType>(与肌肉率是一样的) | |||||
+ (NSArray<NSNumber *> *)getMuscleMassStandardArray; | |||||
///17 蛋白量 判断标准词条Array<AILinkProteinMassType>(与蛋白率是一样的) | |||||
+ (NSArray<NSNumber *> *)getProteinStandardArray; | |||||
///18 肥胖等级 判断标准词条Array<AILinkFatLevelType> | |||||
+ (NSArray<NSNumber *> *)getFatlevelStandardArray; | |||||
#pragma mark ============ 标准判断 ============== | |||||
/// 获取四肢肌肉指数等级 | |||||
/// @param index 四肢肌肉指数 | |||||
/// @param sex 性别 | |||||
+(AILinkLimbMuscleIndexType)getLimbDisplay:(float)index sex:(PHSex)sex cmHeight:(float)cmHeight; | |||||
/** | |||||
* 18 肥胖等级 标准判断 | |||||
* | |||||
* @param fatlevel 传入0~4 | |||||
* | |||||
* @return 标准、偏瘦、偏重、体重不足、超重、@"" | |||||
*/ | |||||
+ (AILinkFatLevelType)getFatlevelDisplay:(NSInteger)fatlevel; | |||||
///17 蛋白量 标准判断(与蛋白率是一样的) | |||||
/// @param proteinMass 蛋白量(kg) | |||||
/// @param sex 性别 | |||||
/// @param kgWeight 体重(kg) | |||||
+ (AILinkProteinMassType)getProteinDisplay:(float)proteinMass sex:(PHSex)sex kgWeight:(float)kgWeight; | |||||
///16 肌肉量 标准判断(与肌肉率是一样的) | |||||
/// @param muscle 肌肉量(KG) | |||||
/// @param sex 性别 | |||||
/// @param kgWeight 体重(KG) | |||||
+ (AILinkMuscleMassType)getMuscleMassDisplay:(float)muscle sex:(PHSex)sex kgWeight:(float)kgWeight; | |||||
///14 脂肪量 标准判断(与体脂率是一样的) | |||||
/// @param fatMass 脂肪量(KG) | |||||
/// @param sex 性别 | |||||
/// @param age 年龄 | |||||
/// @param kgWeight 体重(KG) | |||||
+ (AILinkFatMassType)getFatDisplay:(float)fatMass sex:(PHSex)sex age:(float)age kgWeight:(float)kgWeight; | |||||
/** | |||||
* 身体年龄 标准判断 | |||||
* | |||||
* @param physicalAge 身体年龄 | |||||
* @param age 年龄 | |||||
* | |||||
* @return 偏大、标准、偏小、Null | |||||
*/ | |||||
+ (AILinkPhysicalAgeType)getPhysicalAgeDisplay:(int)physicalAge age:(int)age; | |||||
/** | |||||
* 蛋白率 标准判断 | |||||
* | |||||
* @param proteinRate 蛋白率 | |||||
* @param sex 性别 | |||||
* | |||||
* @return 偏低、标准、偏高、Null | |||||
*/ | |||||
+ (AILinkProteinRateType)getProteinRateDisplay:(float)proteinRate sex:(PHSex)sex; | |||||
/** | |||||
* 皮下脂肪 标准判断 | |||||
* | |||||
* @param proteinRate 皮下脂肪 | |||||
* @param sex 性别 | |||||
* | |||||
* @return --.-- | |||||
*/ | |||||
+ (AILinkSubcutaneousFatType)getSubcutaneousFatDisplay:(float)proteinRate sex:(PHSex)sex; | |||||
/** | |||||
* 内脏脂肪 标准判断 | |||||
* | |||||
* @param visceralfat 内脏脂肪 | |||||
* | |||||
* @return 标准、偏高、高、Null | |||||
*/ | |||||
+ (AILinkVisceralFatType)getVisceralfatDisplay:(float)visceralfat; | |||||
/** | |||||
* 基础代谢率 标准判断 | |||||
* | |||||
* @param BMR 基础代谢率 | |||||
* @param age 年龄 | |||||
* @param weight 体重 | |||||
* @param sex 性别 | |||||
* | |||||
* @return 标准、未达标 | |||||
*/ | |||||
+ (AILinkBMRType)getBMRDisplay:(float)BMR age:(float)age weight:(float)weight sex:(PHSex)sex; | |||||
/** | |||||
* 骨量 标准判断 | |||||
* | |||||
* @param bonemass 骨量 | |||||
* @param sex 性别 | |||||
* @param weight 体重 | |||||
* | |||||
* @return 偏低、标准、偏高、Null | |||||
*/ | |||||
+ (AILinkBoneMassType)getBonemassDisplay:(float)bonemass sex:(PHSex)sex weight:(float)weight; | |||||
/** | |||||
* 水分标准 | |||||
* | |||||
* @param moisture 水分 | |||||
* @param sex 性别 | |||||
* | |||||
* @return 偏低、标准、偏高、Null | |||||
*/ | |||||
+ (AILinkMoistureType)getMoistureDisplay:(float)moisture sex:(PHSex)sex; | |||||
/** | |||||
* 肌肉率 标准判断 | |||||
* | |||||
* @param muscle 肌肉量(kg) | |||||
* @param sex 性别 | |||||
* @return 偏低、标准、偏高、Null | |||||
* | |||||
*/ | |||||
+ (AILinkMuscleRateType)getMuscleDisplay:(float)muscle sex:(PHSex)sex; | |||||
/** | |||||
* 体脂率 标准判断 | |||||
* @param fatRate 体脂率 | |||||
* @param sex 性别 | |||||
* @param age 年龄 | |||||
* @return 偏低、标准、偏高、高、Null | |||||
*/ | |||||
+ (AILinkBFRType)getFatRateDisplay:(float)fatRate sex:(PHSex)sex age:(float)age; | |||||
/** | |||||
* BMI 标准判断 | |||||
* | |||||
* @param BMI BMI | |||||
* | |||||
* @return 偏瘦、标准、偏胖、肥胖、--.-- | |||||
*/ | |||||
+ (AILinkBMIType)getBMIDisplay:(float)BMI sex:(PHSex)sex age:(float)age; | |||||
/** | |||||
* 体重 标准判断 | |||||
* | |||||
* @param height 身高 | |||||
* @param weight 体重 | |||||
* | |||||
* @return 偏瘦、标准、偏胖、肥胖、Null | |||||
*/ | |||||
+ (AILinkWeightType)getWeightDisplay:(NSString *)height weight:(NSString *)weight; | |||||
/// 获取标准体重(单位:kg) | |||||
/// @param sex 性别 | |||||
/// @param height 身高(CM) | |||||
+ (double) getStandardWeight:(NSInteger)sex andheight:(NSInteger)height; | |||||
/// 获取肥胖等级 | |||||
/// @param weight 体重(KG) | |||||
/// @param standardWeight 标准体重(KG) | |||||
+ (AILinkFatLevelType)getfatLevelWithweight:(double)weight andSatndardWeight:(double)standardWeight; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELBroadcastScaleBleHeader.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/8/21. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#ifndef ELBroadcastScaleBleHeader_h | |||||
#define ELBroadcastScaleBleHeader_h | |||||
#import "ELSDKHeader.h" | |||||
typedef NS_ENUM(NSUInteger, BroadcastScaleTestStatus) { | |||||
//Weighing(正在测量体重) | |||||
BroadcastScaleTestStatusWeightTesting = 0, | |||||
//Impedance is being measured (the impedance value is 0 at this time)(正在测量阻抗(此时阻抗数值为 0)) | |||||
BroadcastScaleTestStatusADCTesting, | |||||
//Impedance measurement succeeded(阻抗测量成功) | |||||
BroadcastScaleTestStatusADCTestSuccess, | |||||
//Impedance measurement failed (the impedance value is 0xFFFF at this time)(阻抗测量失败(此时阻抗数值为 0xFFFF)) | |||||
BroadcastScaleTestStatusADCTestFailed, | |||||
//End of test(测试结束) | |||||
BroadcastScaleTestStatusTestEnd = 0xFF, | |||||
}; | |||||
typedef NS_ENUM(NSUInteger, BroadcastScaleWeightType) { | |||||
//Real-time weight(实时重量) | |||||
BroadcastScaleWeightTypeRealTime = 0, | |||||
//Stable weight(稳定重量) | |||||
BroadcastScaleWeightTypeStable, | |||||
}; | |||||
#endif /* ELBroadcastScaleBleHeader_h */ |
// | |||||
// ELBroadcastScaleBleManager.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/8/21. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#import "ELBluetoothManager.h" | |||||
#import "ELBroadcastScaleDataModel.h" | |||||
@protocol BroadcastScaleBleDelegate <NSObject> | |||||
@optional | |||||
//Bluetooth connection status(蓝牙连接状态) | |||||
-(void)broadcastScaleBleUpdateState:(ELBluetoothState)state; | |||||
// | |||||
-(void)broadcastScaleBleDataModel:(ELBroadcastScaleDataModel *_Nonnull)model; | |||||
@end | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELBroadcastScaleBleManager : ELBluetoothManager | |||||
@property (nonatomic, weak) id<BroadcastScaleBleDelegate> broadcastScaleBleDelegate; | |||||
+(instancetype)shareManager; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELBroadcastScaleDataModel.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/8/21. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
#import "ELBroadcastScaleBleHeader.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELBroadcastScaleDataModel : NSObject | |||||
@property (nonatomic, assign) int cid; | |||||
@property (nonatomic, assign) int vid; | |||||
@property (nonatomic, assign) int pid; | |||||
@property (nonatomic, copy) NSString *mac; | |||||
//Data serial number(数据流水号) | |||||
@property (nonatomic, assign) int serialNumber; | |||||
//Measurement status(测量状态) | |||||
@property (nonatomic, assign) BroadcastScaleTestStatus testStatus; | |||||
//Measurement status(温度单位) | |||||
@property (nonatomic, assign) ELDeviceTemperatureUnit tempUnit; | |||||
//Weight unit(体重单位) | |||||
@property (nonatomic, assign) ELDeviceWeightUnit weightUnit; | |||||
//Weight decimal point(体重小数点) | |||||
@property (nonatomic, assign) int weightPoint; | |||||
//Weight type(体重类型) | |||||
@property (nonatomic, assign) BroadcastScaleWeightType weightType; | |||||
//weight(体重) | |||||
@property (nonatomic, copy) NSString *weight; | |||||
//impedance(阻抗) | |||||
@property (nonatomic, assign) int adc; | |||||
//Algorithm bit(算法位) | |||||
@property (nonatomic, assign) int algorithmId; | |||||
//temperature(温度) | |||||
@property (nonatomic, copy) NSString *temperature; | |||||
//time(时间) | |||||
@property (nonatomic, assign) long long createTime; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELEightScaleDataModel.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/6/4. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
#import "ELEightScaleSDKHeader.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELEightScaleBleDataModel : NSObject | |||||
//Weight display data(体重显示数据) | |||||
@property (nonatomic, copy) NSString *weight; | |||||
//Weight decimal point(体重小数点) | |||||
@property (nonatomic, assign) NSInteger weightPoint; | |||||
//Weight unit(体重单位) | |||||
@property (nonatomic, assign) ELDeviceWeightUnit weightUnit; | |||||
//Impedance type(阻抗类型) | |||||
@property (nonatomic, assign) EightScaleAdcType adcType; | |||||
//Impedance value(阻抗值) | |||||
@property (nonatomic, assign)unsigned int feetAdc;//Two-foot impedance(双脚阻抗) | |||||
@property (nonatomic, assign)unsigned int handsAdc;//Hands resistance(双手阻抗) | |||||
@property (nonatomic, assign)unsigned int leftHandAdc;//Left hand impedance(左手阻抗) | |||||
@property (nonatomic, assign)unsigned int rightHandAdc;//Right hand impedance(右手阻抗) | |||||
@property (nonatomic, assign)unsigned int leftFootAdc;//Left foot impedance(左脚阻抗) | |||||
@property (nonatomic, assign)unsigned int rightFootAdc;//Right foot impedance(右脚阻抗) | |||||
@property (nonatomic, assign)unsigned int LWholeBodyAdc;//Right foot impedance(左全身阻抗) | |||||
@property (nonatomic, assign)unsigned int RWholeBodyAdc;//Right whole body impedance(右全身阻抗) | |||||
@property (nonatomic, assign)unsigned int RHand_LFootAdc;//Impedance of right hand and left foot(右手左脚阻抗) | |||||
@property (nonatomic, assign)unsigned int LHand_RFootAdc;//Impedance of left hand and right foot(左手右脚阻抗) | |||||
@property (nonatomic, assign)unsigned int trunkAdc;//Torso impedance(躯干阻抗) | |||||
//Algorithm Id(算法Id) | |||||
@property (nonatomic, assign) int algorithmID; | |||||
//Heart rate(心率) | |||||
@property (nonatomic, assign) int heartRate; | |||||
//Temperature display value(温度显示值) | |||||
@property (nonatomic, copy) NSString *temp; | |||||
//Temperature decimal point(温度小数点) | |||||
@property (nonatomic, assign) int tempPoint; | |||||
//Temperature unit(温度单位) | |||||
@property (nonatomic, assign) ELDeviceTemperatureUnit tempUnit; | |||||
//time(时间) | |||||
@property (nonatomic, assign) long long createTime; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELEightScaleBleManager.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/6/1. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#import "ELBluetoothManager.h" | |||||
#import "ELEightScaleSDKHeader.h" | |||||
#import "ELEightScaleBleDataModel.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@protocol EightScaleBleDeletegate <NSObject> | |||||
@optional | |||||
/// Bluetooth connection status(蓝牙连接状态) | |||||
/// @param state connection status(连接状态) | |||||
-(void)eightScaleBleReceiveState:(ELBluetoothState)state; | |||||
/// Nearby eight-electrode equipment(附近的八电极设备) | |||||
/// @param devices Eight electrode equipment list(八电极设备列表) | |||||
-(void)eightScaleBlReceiveDevices:(NSArray<ELPeripheralModel *> *)devices; | |||||
/// Return weighed weight data(返回称量的体重数据) | |||||
/// @param weightStruct Weight data structure(体重数据结构体) | |||||
-(void)eightScaleBleReceiveWeightData:(EightScaleWeightStruct)weightStruct; | |||||
/// Return impedance data(返回阻抗数据) | |||||
/// @param adcStruct Impedance data structure(阻抗数据结构体) | |||||
-(void)eightScaleBleReceiveAdcData:(EightScaleAdcStruct)adcStruct; | |||||
/// Return heart rate data(返回心率数据) | |||||
/// @param testStep Heart rate measurement process(心率测量过程) | |||||
/// @param heartRate Heart rate data(心率数据) | |||||
-(void)eightScaleBleReceiveHeartRateTestStep:(EightScaleHeartRateTestStep)testStep heartRate:(int)heartRate; | |||||
/// Return temperature data(返回温度数据) | |||||
/// @param tempStruct Temperature data structure(温度数据结构体) | |||||
-(void)eightScaleBleReceiveTempData:(EightScaleTempStruct)tempStruct; | |||||
///Measurement completed(测量完成) | |||||
-(void)eightScaleBleReceiveTestComplete; | |||||
/// Recall measurement data(回调测量数据) | |||||
/// @param dataModel Measurement data(测量数据) | |||||
-(void)eightScaleBleReceiveTestData:(ELEightScaleBleDataModel *)dataModel; | |||||
/// Error code sent on the device(设备上发错误码) | |||||
/// @param errorCode Error code (1: overweight)(错误码(1:超重)) | |||||
-(void)eightScaleBleReceiveErrorCode:(int)errorCode; | |||||
/// Switch temperature unit result(切换温度单位结果) | |||||
/// @param result 结果 | |||||
-(void)eightScaleBleReceiveSwitchTempUnitResult:(EightScaleSwitchUnitResult)result; | |||||
/// Switch weight unit result(切换体重单位结果) | |||||
/// @param result 结果 | |||||
-(void)eightScaleBleReceiveSwitchWeightUnitResult:(EightScaleSwitchUnitResult)result; | |||||
@end | |||||
@interface ELEightScaleBleManager : ELBluetoothManager | |||||
//Current measurement status(当前测量状态) | |||||
@property (nonatomic, assign) EightScaleTestStatus testStatus; | |||||
@property (nonatomic, weak) id<EightScaleBleDeletegate> eightScaleDelegate; | |||||
+(instancetype)shareManager; | |||||
#pragma mark ============ 发送数据指令给蓝牙 ============== | |||||
/// Switch weight unit(切换体重单位) | |||||
/// @param unit Weight unit(体重单位) | |||||
-(void)eightScaleSwitchWeightUnit:(ELDeviceWeightUnit)unit; | |||||
/// Switch temperature unit(切换温度单位) | |||||
/// @param unit Temperature unit(温度单位) | |||||
-(void)eightScaleSwitchTempUnit:(ELDeviceTemperatureUnit)unit; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELEightScaleSDKHeader.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/6/3. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#ifndef ELEightScaleSDKHeader_h | |||||
#define ELEightScaleSDKHeader_h | |||||
#import "ELSDKHeader.h" | |||||
typedef NS_ENUM(NSUInteger, EightScaleWeightType) { | |||||
EightScaleWeightTypeAuto = 0x01,//Real-time weight(实时体重) | |||||
EightScaleWeightTypeStable = 0x02,//Stabilize weight(稳定体重) | |||||
}; | |||||
//Weight data(体重数据) | |||||
typedef struct EightScaleWeightStruct{ | |||||
//Weight type(体重类型) | |||||
EightScaleWeightType weightType; | |||||
//Original weight(体重原始值) | |||||
int weight; | |||||
//Weight decimal point(体重小数点) | |||||
int point; | |||||
//unit(单位) | |||||
ELDeviceWeightUnit unit; | |||||
} EightScaleWeightStruct; | |||||
//Impedance measurement process(阻抗测量过程) | |||||
typedef NS_ENUM(NSUInteger, EightScaleAdcTestStep) { | |||||
EightScaleAdcTestStepTesting = 0x01,//Measuring impedance(测阻抗中) | |||||
EightScaleAdcTestStepFailure = 0x02,//Impedance measurement failed(测阻抗失败) | |||||
//The impedance measurement is successful, bring the impedance data, and use the APP algorithm (APP will calculate according to the algorithm identification of byte7) | |||||
//测阻抗成功,带上阻抗数据,并使用APP算法(APP 会根据byte7的算法标识进行计算) | |||||
EightScaleAdcTestStepSuccess = 0x03, | |||||
EightScaleAdcTestStepTestEnd = 0x04,//End of impedance measurement.(测阻抗结束。) | |||||
}; | |||||
// 阻抗类型 | |||||
typedef NS_ENUM(NSUInteger, EightScaleAdcType) { | |||||
EightScaleAdcTypeFeet = 0x00,//Two-foot impedance(双脚阻抗) | |||||
EightScaleAdcTypeHands = 0x01,//Hands resistance(双手阻抗) | |||||
EightScaleAdcTypeLeftHand = 0x02,//Left hand impedance(左手阻抗) | |||||
EightScaleAdcTypeRightHand = 0x03,//Right hand impedance(右手阻抗) | |||||
EightScaleAdcTypeLeftFoot = 0x04,//Left foot impedance(左脚阻抗) | |||||
EightScaleAdcTypeRightFoot = 0x05,//Right foot impedance(右脚阻抗) | |||||
EightScaleAdcTypeLWholeBody = 0x06,//Left whole body impedance(左全身阻抗) | |||||
EightScaleAdcTypeRWholeBody = 0x07,//Right whole body impedance(右全身阻抗) | |||||
EightScaleAdcTypeRHand_LFoot = 0x08,//Impedance of right hand and left foot(右手左脚阻抗) | |||||
EightScaleAdcTypeLHand_RFoot = 0x09,//Impedance of left hand and right foot(左手右脚阻抗) | |||||
EightScaleAdcTypeTrunk = 0x0A,//Torso impedance(躯干阻抗) | |||||
}; | |||||
//Impedance data(阻抗数据) | |||||
typedef struct EightScaleAdcStruct{ | |||||
//Impedance measurement stage(阻抗测量阶段) | |||||
EightScaleAdcTestStep adcTestStep; | |||||
//Impedance type(阻抗类型) | |||||
EightScaleAdcType adcType; | |||||
//Impedance value(阻抗值) | |||||
unsigned int adc; | |||||
//Algorithm Id(算法Id) | |||||
int algorithmID; | |||||
}EightScaleAdcStruct; | |||||
//Heart rate measurement process(心率测量过程) | |||||
typedef NS_ENUM(NSUInteger, EightScaleHeartRateTestStep) { | |||||
EightScaleHeartRateTestStepTesting = 0x01,//Heart rate measurement(心率测量中) | |||||
EightScaleHeartRateTestStepSuccess = 0x02,//Successful heart rate measurement, bring heart rate data(测心率成功,带上心率数据) | |||||
EightScaleHeartRateTestStepFailure = 0x03,//Failed to measure heart rate(测心率失败) | |||||
}; | |||||
//Temperature data(温度数据) | |||||
typedef struct EightScaleTempStruct{ | |||||
//Positive and negative temperature(正负温度) | |||||
BOOL negative; | |||||
//temperature(温度) | |||||
int temp; | |||||
//Decimal point(小数点) | |||||
int point; | |||||
//unit(单位) | |||||
ELDeviceTemperatureUnit unit; | |||||
}EightScaleTempStruct; | |||||
typedef NS_ENUM(NSUInteger, EightScaleSwitchUnitResult) { | |||||
EightScaleSwitchUnitResultSuccess =0,//Successful operation(操作成功) | |||||
EightScaleSwitchUnitResultFailure =1,//operation failed(操作失败) | |||||
EightScaleSwitchUnitResultOperation =2,//In operation(正在操作中) | |||||
}; | |||||
//Measurement status(测量状态) | |||||
typedef NS_ENUM(NSUInteger, EightScaleTestStatus) { | |||||
EightScaleTestStatusIdle = 0,//Idle(闲置) | |||||
EightScaleTestStatusTesting = 1,//Testing(测量中) | |||||
EightScaleTestStatusComplete = 2,//Complete(测量完成) | |||||
EightScaleTestStatusError = 3,//Error(测量出错) | |||||
}; | |||||
#endif /* ELEightScaleSDKHeader_h */ |
// | |||||
// ELHeightAlgorithmusModel.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/6/9. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
#import "ELSDKHeader.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
//inch转cm的系数 | |||||
extern double const ELHeight_INCH_CM_CONST; | |||||
//feet转inch的系数 | |||||
extern double const ELHeight_FEET_INCH_CONST; | |||||
extern NSString *const ELHeightFeetSymbol; | |||||
extern NSString *const ELHeightInchSymbol; | |||||
@interface ELHeightAlgorithmusModel : NSObject | |||||
/// 获取身高显示值 | |||||
/// @param targetUnit 要显示的单位 | |||||
/// @param origHeightShow 原来的显示数据 | |||||
/// @param origHeightUnit 原来数据的单位 | |||||
/// @param origHeightPoint 原来的数据小数点 | |||||
+ (NSString *)getHeightShowStrWithTargetUnit:(ELDeviceHeightUnit)targetUnit origHeightShow:(NSString *)origHeightShow origHeightUnit:(ELDeviceHeightUnit)origHeightUnit origHeightPoint:(NSUInteger)origHeightPoint; | |||||
/// 获取身高(CM) | |||||
/// @param heightShow 原有数据 | |||||
/// @param unit 原有数据单位 | |||||
/// @param point 小数点 | |||||
+ (NSString *)getCmWithHeightShowStr:(NSString *)heightShow heightUnit:(ELDeviceHeightUnit)unit heightPoint:(NSUInteger)point; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
/** Device version numbe(设备版本号) */ | /** Device version numbe(设备版本号) */ | ||||
@property (nonatomic, copy) NSString *version; | @property (nonatomic, copy) NSString *version; | ||||
/** | |||||
* 华盛达手表要用这个属性: 是否已经跟系统配对 | |||||
*/ | |||||
@property(nonatomic, assign) BOOL paired; | |||||
/** | /** | ||||
Screening equipment(筛选设备) | Screening equipment(筛选设备) | ||||
ELInetGetCmdTypeGetSendKeyState = 0x31, //-APP reads the result of sending the decoding key(APP读取下发解码秘钥的结果) | ELInetGetCmdTypeGetSendKeyState = 0x31, //-APP reads the result of sending the decoding key(APP读取下发解码秘钥的结果) | ||||
ELInetGetCmdTypeGetSmartLockA6Data = 0x34, //-Door lock 0x34 represents the A6 protocol (see the second level command for details)(门锁0x34代表A6协议(具体见二级指令)) | ELInetGetCmdTypeGetSmartLockA6Data = 0x34, //-Door lock 0x34 represents the A6 protocol (see the second level command for details)(门锁0x34代表A6协议(具体见二级指令)) | ||||
ELInetGetCmdTypeGetBasicInfoData = 0x36, //Obtain basic device information data(获取设备基本信息数据) | ELInetGetCmdTypeGetBasicInfoData = 0x36, //Obtain basic device information data(获取设备基本信息数据) | ||||
#pragma mark ============ 蓝牙Wifi ============== | |||||
#pragma mark ============ Begin 蓝牙Wifi ============== | |||||
ELInetGetCmdTypeBleWifiGetNearbyWifi = 0x80, //Get nearby Wifi(获取附近Wifi) | ELInetGetCmdTypeBleWifiGetNearbyWifi = 0x80, //Get nearby Wifi(获取附近Wifi) | ||||
ELInetGetCmdTypeBleWifiReceiveWifiName = 0x81, //Reply to wifi name(回复wifi名字) | ELInetGetCmdTypeBleWifiReceiveWifiName = 0x81, //Reply to wifi name(回复wifi名字) | ||||
ELInetGetCmdTypeBleWifiReceiveWifiMac = 0x82, //Reply to wifi mac(回复wifi mac) | ELInetGetCmdTypeBleWifiReceiveWifiMac = 0x82, //Reply to wifi mac(回复wifi mac) | ||||
ELInetGetCmdTypeBleWifiGetDTIMInterval = 0x8A, //Get DTIM interval(获取DTIM间隔) | ELInetGetCmdTypeBleWifiGetDTIMInterval = 0x8A, //Get DTIM interval(获取DTIM间隔) | ||||
ELInetGetCmdTypeBleWifiGetURL = 0x8C, //Get visited sites(获取访问的网站) | ELInetGetCmdTypeBleWifiGetURL = 0x8C, //Get visited sites(获取访问的网站) | ||||
ELInetGetCmdTypeBleWifiGetPort = 0x8E, //Get access port number(获取访问的端口号) | ELInetGetCmdTypeBleWifiGetPort = 0x8E, //Get access port number(获取访问的端口号) | ||||
ELInetGetCmdTypeBleWifiGetSNNumber = 0x93, //Get SN number (session code)(获取SN号(会话码)) | |||||
ELInetGetCmdTypeBleWifiGetSNNumber = 0x93, //Get SN number (session code:deviceId)(获取SN号(会话码:设备ID)) | |||||
#pragma mark ============End 蓝牙Wifi ============== | |||||
ELInetGetCmdTypeRequestAuthorize = 0x7F, //Request device authorization (请求设备授权) | |||||
ELInetGetCmdTypeToothbrushA6Data = 0xC0, //A6 data for toothbrush(牙刷专用A6数据,详情请见协议的2级指令)(See the second order for details) | |||||
}; | }; | ||||
//Instruction type set by Inet(Inet设置的指令类型) | //Instruction type set by Inet(Inet设置的指令类型) | ||||
typedef NS_ENUM(NSUInteger, ELInetSetCmdType) { | typedef NS_ENUM(NSUInteger, ELInetSetCmdType) { | ||||
ELInetSetCmdTypeBleWifiSetWifiURL = 0x8B, //设置访问的URL | ELInetSetCmdTypeBleWifiSetWifiURL = 0x8B, //设置访问的URL | ||||
ELInetSetCmdTypeBleWifiSetWifiPort = 0x8D, //设置端口号 | ELInetSetCmdTypeBleWifiSetWifiPort = 0x8D, //设置端口号 | ||||
}; | }; | ||||
//Response to Bluetooth after device(给蓝牙进行设备后的响应) | |||||
//Response to Bluetooth after device(给蓝牙进行设置后的响应) | |||||
typedef NS_ENUM(NSUInteger, ELSetBluetoothResponseType) { | typedef NS_ENUM(NSUInteger, ELSetBluetoothResponseType) { | ||||
ELSetBluetoothResponseTypeSuccess =0 , //success(成功) | ELSetBluetoothResponseTypeSuccess =0 , //success(成功) | ||||
ELSetBluetoothResponseTypeFailure =1 , //failure(失败) | ELSetBluetoothResponseTypeFailure =1 , //failure(失败) | ||||
ELSupportDeviceTypeBodyFatScale = 0x000E , //Body fat scale(体脂秤) | ELSupportDeviceTypeBodyFatScale = 0x000E , //Body fat scale(体脂秤) | ||||
ELSupportDeviceTypeSmatLockRemote = 0x0010 , //Smart door lock remote control(智能门锁遥控器) | ELSupportDeviceTypeSmatLockRemote = 0x0010 , //Smart door lock remote control(智能门锁遥控器) | ||||
ELSupportDeviceTypeBLE_WIFIScale = 0x0011 , //Ble and wifi Scale(蓝牙Wifi体脂秤) | ELSupportDeviceTypeBLE_WIFIScale = 0x0011 , //Ble and wifi Scale(蓝牙Wifi体脂秤) | ||||
ELSupportDeviceTypeAnemometer = 0x0014 , //anemometer(风速计) | |||||
ELSupportDeviceTypeBLE_WIFIToothbrush = 0x0012, //Bluetooth and wifi toothbrush(蓝牙wifi牙刷) | |||||
ELSupportDeviceTypeBLE_EightScale = 0x0013 , //Eight electrode scale(八电极蓝牙秤) | |||||
ELSupportDeviceTypeAnemometer = 0x0014 , //anemometer(风速计),0x0015 | |||||
ELSupportDeviceTypeClampMeter = 0x0015 , //clamp meter(钳表) | ELSupportDeviceTypeClampMeter = 0x0015 , //clamp meter(钳表) | ||||
ELSupportDeviceTypeWatch = 0x001D , //华盛达手表 | |||||
ELSupportDeviceTypeBloodSugar = 0x001C , //blood sugar(血糖仪) | |||||
ELSupportDeviceTypeBroadcastScale = 65536 , //Broadcast body fat scale(广播体脂秤) | |||||
}; | }; | ||||
//Communication mode(通信模式) | //Communication mode(通信模式) | ||||
char *serviceUUID; //Service UUID(服务UUID) | char *serviceUUID; //Service UUID(服务UUID) | ||||
char *writeUUID; //For APP to send data to MCU (write)(用于 APP 下发数据到 MCU(write)) | char *writeUUID; //For APP to send data to MCU (write)(用于 APP 下发数据到 MCU(write)) | ||||
char *notifyUUID; //Used for MCU data transfer to APP (notify)(用于 MCU 数据传输到 APP (notify)) | char *notifyUUID; //Used for MCU data transfer to APP (notify)(用于 MCU 数据传输到 APP (notify)) | ||||
}; | }; | ||||
struct ELAutoSleepTimeStruct { | struct ELAutoSleepTimeStruct { | ||||
/** Weight(重量) */ | /** Weight(重量) */ | ||||
ELDeviceUnitType_Weight = 1 , | ELDeviceUnitType_Weight = 1 , | ||||
/** length(长度) */ | /** length(长度) */ | ||||
ELDeviceUnitType_Height , | |||||
ELDeviceUnitType_Height = 2 , | |||||
/** temperature(温度) */ | /** temperature(温度) */ | ||||
ELDeviceUnitType_Temperature , | |||||
ELDeviceUnitType_Temperature = 3 , | |||||
/** Pressure(血压) */ | /** Pressure(血压) */ | ||||
ELDeviceUnitType_BloodPressure , | |||||
ELDeviceUnitType_BloodPressure = 4 , | |||||
/** Tire pressure(轮胎胎压压力) */ | /** Tire pressure(轮胎胎压压力) */ | ||||
ELDeviceUnitType_Pressure , | |||||
ELDeviceUnitType_Pressure = 5 , | |||||
/**Blood sugar(血糖单位)*/ | |||||
ELDeviceUnitType_BloodSugar = 6 , | |||||
}; | }; | ||||
#define AiLinkBleWeightUnit_KG_Str @"kg" | #define AiLinkBleWeightUnit_KG_Str @"kg" | ||||
ELDeviceHeightUnit_Inch = 0x01 , | ELDeviceHeightUnit_Inch = 0x01 , | ||||
/** feet:inch */ | /** feet:inch */ | ||||
ELDeviceHeightUnit_FT_IN = 0x02 , | ELDeviceHeightUnit_FT_IN = 0x02 , | ||||
// | |||||
ELDeviceHeightUnit_M = 0x03 , | |||||
/** Unsupported unit */ | /** Unsupported unit */ | ||||
ELDeviceHeightUnit_Fail = 0xFF , | ELDeviceHeightUnit_Fail = 0xFF , | ||||
}; | }; | ||||
ELDevicePressureUnit_Fail , | ELDevicePressureUnit_Fail , | ||||
}; | }; | ||||
#define AiLinkBleBloodSugarUnit_mmolStr @"mmol/L" | |||||
#define AiLinkBleBloodSugarUnit_mgStr @"mg/dL" | |||||
#define AiLinkBleBloodSugarUnitDic @{@(ELDeviceBloodSugarUnit_mmol_L):AiLinkBleBloodSugarUnit_mmolStr,@(ELDeviceBloodSugarUnit_mg_dL):AiLinkBleBloodSugarUnit_mgStr,} | |||||
typedef NS_ENUM(NSUInteger, ELDeviceBloodSugarUnit) { | |||||
ELDeviceBloodSugarUnit_mmol_L = 0x01,//mmol/L 毫摩尔/升 | |||||
ELDeviceBloodSugarUnit_mg_dL = 0x02,//mg/dL 毫克/分升 | |||||
ELDeviceBloodSugarUnit_Fail , | |||||
}; | |||||
#pragma mark ============ 枚举 ============== | #pragma mark ============ 枚举 ============== | ||||
typedef NS_ENUM(NSUInteger, ELBluetoothState) { | typedef NS_ENUM(NSUInteger, ELBluetoothState) { | ||||
ELBluetoothStateUnavailable, //Bluetooth is not available(蓝牙不可用) | ELBluetoothStateUnavailable, //Bluetooth is not available(蓝牙不可用) | ||||
ELBluetoothUserSex_Woman = 0x00,//female(女) | ELBluetoothUserSex_Woman = 0x00,//female(女) | ||||
ELBluetoothUserSex_Man = 0x01,//male(男) | ELBluetoothUserSex_Man = 0x01,//male(男) | ||||
}; | }; | ||||
//设备授权结果 | |||||
typedef NS_ENUM(NSUInteger, ELBluetoothDeviceAuthorizeResult) { | |||||
ELBluetoothDeviceAuthorizeResultNoAuth =0,//No(没有) | |||||
ELBluetoothDeviceAuthorizeResultAuthorized ,//Authorized(已经授权) | |||||
ELBluetoothDeviceAuthorizeResultNoNeed ,//No authorization required(不需要授权) | |||||
ELBluetoothDeviceAuthorizeResultSuccess ,//Authorization succeeded(授权成功) | |||||
}; | |||||
#endif /* ELSDKHeader_h */ | #endif /* ELSDKHeader_h */ |
// | |||||
// ELTempAlgorithmusModel.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/6/4. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
#import "ELSDKHeader.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface ELTempAlgorithmusModel : NSObject | |||||
/// 获取温度显示值 | |||||
/// @param temp 蓝牙发送的温度数值 | |||||
/// @param tempPoint 温度小数点 | |||||
/// @param tempUnit 温度单位 | |||||
+(NSString *)getTempStringWithTemp:(int)temp tempPoint:(int)tempPoint tempUnit:(ELDeviceTemperatureUnit)tempUnit; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// ELWeightAlgorithmusModel.h | |||||
// Elink | |||||
// | |||||
// Created by iot_user on 2020/6/4. | |||||
// Copyright © 2020 iot_iMac. All rights reserved. | |||||
// | |||||
#import <Foundation/Foundation.h> | |||||
#import "ELSDKHeader.h" | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
//体重单位st:lb分隔符 @":" | |||||
extern NSString *const WeightUnitST_LBDelimiter; | |||||
//kg转lb的系数=2.2046226f | |||||
extern double const ELWeightKG_LB_CONST; | |||||
//st转lb的系数=14.0f | |||||
extern double const ELWeightST_LB_CONST; | |||||
@interface ELWeightAlgorithmusModel : NSObject | |||||
/// 体重数据转换成体重显示值的方法 | |||||
/// @param weight 蓝牙发送的体重数据 | |||||
/// @param weightPoint 体重小数点 | |||||
/// @param weightUnit 体重单位 | |||||
+(NSString *)getWeightStringWithWeight:(int)weight weightPoint:(int)weightPoint weightUnit:(ELDeviceWeightUnit)weightUnit; | |||||
/** | |||||
Convert the integer returned by Bluetooth to the character string required for interface display, the display unit is the current user unit | |||||
@param weightInt AILink protocol integer returned by Bluetooth | |||||
@param unit kg / lb / st: lb / jin | |||||
@param point 1,2 | |||||
@return The weight displayed on the interface, such as 5: 6.5 st: lb | |||||
将蓝牙返回的整数,转换为界面显示所需要的字符串,显示单位为当前用户单位 | |||||
// weightInt AILink协议蓝牙返回的整数 | |||||
// unit kg/lb/st:lb/jin | |||||
// point 1,2 | |||||
// 界面显示的体重,如 5:6.5 st:lb | |||||
*/ | |||||
+ (NSString *)getWeightShowStrWithTargetUnit:(ELDeviceWeightUnit)targetUnit bleWeightInt:(NSUInteger)weightInt bleWeightUnit:(ELDeviceWeightUnit)unit bleWeightPoint:(NSUInteger)point; | |||||
/** | |||||
将服务器返回的5:6.5、56.2等数据转换为kg,用来画图或者换算 | |||||
@param weightShow 从数据库中直接读出来的,或者AILink协议蓝牙返给界面的数据 68.56(kg) 120.6(lb) | |||||
@param unit kg/lb/st:lb/jin | |||||
@param point 1,2 | |||||
@return 转换为kg的值(用于绘图或换算的kg数,一律四舍五入保留2位小数) | |||||
*/ | |||||
+ (NSString *)getKgWithWeightShowStr:(NSString *)weightShow weightUnit:(ELDeviceWeightUnit)unit weightPoint:(NSUInteger)point; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
</data> | </data> | ||||
<key>Headers/ELBluetoothManager.h</key> | <key>Headers/ELBluetoothManager.h</key> | ||||
<data> | <data> | ||||
1DzzZZ/wIue+STTYSBnzYR/JDQc= | |||||
OKd3bjWNKh/sFutes+/VnWz96Vw= | |||||
</data> | </data> | ||||
<key>Headers/ELBodyFatScaleBleHeader.h</key> | <key>Headers/ELBodyFatScaleBleHeader.h</key> | ||||
<data> | <data> | ||||
<data> | <data> | ||||
wzOhRUInZ0tuoj3LHMmJV1XejoY= | wzOhRUInZ0tuoj3LHMmJV1XejoY= | ||||
</data> | </data> | ||||
<key>Headers/ELBodyIndexAlgorithmModel.h</key> | |||||
<data> | |||||
cIH1JvCssYA5SSXadJ9PfOEMi74= | |||||
</data> | |||||
<key>Headers/ELBroadcastScaleBleHeader.h</key> | |||||
<data> | |||||
lnZNB95PJv2/dgQSBRKJ2qQnL/I= | |||||
</data> | |||||
<key>Headers/ELBroadcastScaleBleManager.h</key> | |||||
<data> | |||||
7IXVzGFMuHW8BWt4pQk8U1dFDc0= | |||||
</data> | |||||
<key>Headers/ELBroadcastScaleDataModel.h</key> | |||||
<data> | |||||
m08U9zzeJ/R1po37UkVGfdXAIKM= | |||||
</data> | |||||
<key>Headers/ELEightScaleBleDataModel.h</key> | |||||
<data> | |||||
33vwJKg2lzoOMBEngjVMs08DQM8= | |||||
</data> | |||||
<key>Headers/ELEightScaleBleManager.h</key> | |||||
<data> | |||||
JfrnelCfw2l0qCAyf8LNDMPfVLo= | |||||
</data> | |||||
<key>Headers/ELEightScaleSDKHeader.h</key> | |||||
<data> | |||||
bLSE4xb5MOyhdguHJ4PFLPRr6GQ= | |||||
</data> | |||||
<key>Headers/ELForeHeadBleManager.h</key> | <key>Headers/ELForeHeadBleManager.h</key> | ||||
<data> | <data> | ||||
PGM6FQ7DALcjdFVRIe5TI/8HAjM= | PGM6FQ7DALcjdFVRIe5TI/8HAjM= | ||||
<data> | <data> | ||||
3LS8MObWrVCjLnaKWwoUKBaqc34= | 3LS8MObWrVCjLnaKWwoUKBaqc34= | ||||
</data> | </data> | ||||
<key>Headers/ELHeightAlgorithmusModel.h</key> | |||||
<data> | |||||
z9j6AGnGDhwUV/DrRaUQRXC5hVI= | |||||
</data> | |||||
<key>Headers/ELHeightGaugeBleDataModel.h</key> | <key>Headers/ELHeightGaugeBleDataModel.h</key> | ||||
<data> | <data> | ||||
B+jv5YT79HhyGg7UL0jGn0SAvdg= | B+jv5YT79HhyGg7UL0jGn0SAvdg= | ||||
</data> | </data> | ||||
<key>Headers/ELPeripheralModel.h</key> | <key>Headers/ELPeripheralModel.h</key> | ||||
<data> | <data> | ||||
ibVmqneQ5mPsyjCTT8qkT1PXy9w= | |||||
2BPYSJlX2e5+zoPjDDF0b+rGgEc= | |||||
</data> | </data> | ||||
<key>Headers/ELRemoteControlBleHeader.h</key> | <key>Headers/ELRemoteControlBleHeader.h</key> | ||||
<data> | <data> | ||||
</data> | </data> | ||||
<key>Headers/ELSDKHeader.h</key> | <key>Headers/ELSDKHeader.h</key> | ||||
<data> | <data> | ||||
s8ZEGr/PpbFlKrQ5+kqm6spNKn0= | |||||
GKs3bfL6dryCrnD+GMedQhIEAU4= | |||||
</data> | |||||
<key>Headers/ELTempAlgorithmusModel.h</key> | |||||
<data> | |||||
AlQKcIM/xntXasbbagOjq7wgjdU= | |||||
</data> | </data> | ||||
<key>Headers/ELThermometerBleManager.h</key> | <key>Headers/ELThermometerBleManager.h</key> | ||||
<data> | <data> | ||||
<data> | <data> | ||||
KUvTJzAj6UgO0TVIag6jroPEZ9g= | KUvTJzAj6UgO0TVIag6jroPEZ9g= | ||||
</data> | </data> | ||||
<key>Headers/ELWeightAlgorithmusModel.h</key> | |||||
<data> | |||||
1glTQ2dPXRk5jFmzjxkkC5aRjgA= | |||||
</data> | |||||
<key>Headers/ELWheelMonitorBleHeader.h</key> | <key>Headers/ELWheelMonitorBleHeader.h</key> | ||||
<data> | <data> | ||||
IKCvB9SN0bht+QzbqywX+LIO45A= | IKCvB9SN0bht+QzbqywX+LIO45A= | ||||
</data> | </data> | ||||
<key>Info.plist</key> | <key>Info.plist</key> | ||||
<data> | <data> | ||||
7GRWEyAnXxjLbVEdHfMEXqK3VO0= | |||||
UMqEsWdtMOlMnusqzTciLhNvrrg= | |||||
</data> | </data> | ||||
</dict> | </dict> | ||||
<key>files2</key> | <key>files2</key> | ||||
<dict> | <dict> | ||||
<key>hash</key> | <key>hash</key> | ||||
<data> | <data> | ||||
1DzzZZ/wIue+STTYSBnzYR/JDQc= | |||||
OKd3bjWNKh/sFutes+/VnWz96Vw= | |||||
</data> | </data> | ||||
<key>hash2</key> | <key>hash2</key> | ||||
<data> | <data> | ||||
kNafst/7uHWzJYb4+bnHf1+LulVxqmDY4DZLvvBDSz0= | |||||
x8MeFX59REfQRNAyQC/13C+sAIxFfiEbHM5QSmqs1Ts= | |||||
</data> | </data> | ||||
</dict> | </dict> | ||||
<key>Headers/ELBodyFatScaleBleHeader.h</key> | <key>Headers/ELBodyFatScaleBleHeader.h</key> | ||||
ZP6cxgBFbWaQx/NIDxVVSWHwIu4JcVyIgQFhDh/6WO0= | ZP6cxgBFbWaQx/NIDxVVSWHwIu4JcVyIgQFhDh/6WO0= | ||||
</data> | </data> | ||||
</dict> | </dict> | ||||
<key>Headers/ELBodyIndexAlgorithmModel.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
cIH1JvCssYA5SSXadJ9PfOEMi74= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
WCssEd8zrV3tqom/9Ry2O3JXAoniGheZ4QTDXB9ex0U= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELBroadcastScaleBleHeader.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
lnZNB95PJv2/dgQSBRKJ2qQnL/I= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
aUadkWt+Q05BnNEFjBZprb1/2IYNiXrQRZR1EAqe7po= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELBroadcastScaleBleManager.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
7IXVzGFMuHW8BWt4pQk8U1dFDc0= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
SZTBVSml7mkdSCHYuHInf7ooDzXG+p2lBQ02FYVrjUA= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELBroadcastScaleDataModel.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
m08U9zzeJ/R1po37UkVGfdXAIKM= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
f7g8n1Q8QY/08q7dRhwaEBuX+naKaznHJXJ9Q7kqqfQ= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELEightScaleBleDataModel.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
33vwJKg2lzoOMBEngjVMs08DQM8= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
X3lkX6dr770QlxK76ZLW5CpL5Wmd2qusT34lRR+3q6w= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELEightScaleBleManager.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
JfrnelCfw2l0qCAyf8LNDMPfVLo= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
vA9r9lnuxFWzQwu2FJJ0DUOWgdh9C8MVT7usXFMT6Mw= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELEightScaleSDKHeader.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
bLSE4xb5MOyhdguHJ4PFLPRr6GQ= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
Cc0yFnPv05wNaSo1qYPA7IWDYVD8sMiIWdMog3EB6qc= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELForeHeadBleManager.h</key> | <key>Headers/ELForeHeadBleManager.h</key> | ||||
<dict> | <dict> | ||||
<key>hash</key> | <key>hash</key> | ||||
S4+2M5mPrWRGaOZPU2ZBnh0I3EC8Xsw160okYl9SdKU= | S4+2M5mPrWRGaOZPU2ZBnh0I3EC8Xsw160okYl9SdKU= | ||||
</data> | </data> | ||||
</dict> | </dict> | ||||
<key>Headers/ELHeightAlgorithmusModel.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
z9j6AGnGDhwUV/DrRaUQRXC5hVI= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
KLZUrBxMf60Su2C5SLNw+4/OvoBTfBJifIrdN3KHn70= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELHeightGaugeBleDataModel.h</key> | <key>Headers/ELHeightGaugeBleDataModel.h</key> | ||||
<dict> | <dict> | ||||
<key>hash</key> | <key>hash</key> | ||||
<dict> | <dict> | ||||
<key>hash</key> | <key>hash</key> | ||||
<data> | <data> | ||||
ibVmqneQ5mPsyjCTT8qkT1PXy9w= | |||||
2BPYSJlX2e5+zoPjDDF0b+rGgEc= | |||||
</data> | </data> | ||||
<key>hash2</key> | <key>hash2</key> | ||||
<data> | <data> | ||||
1kPE7LNXG51xcfDIuG0pi0iM5tWGqj3rUPDJhLoyaBg= | |||||
zVdvk9EguhJ4yIkagDVl0cB3uFLBEowO4ly8JecN8ks= | |||||
</data> | </data> | ||||
</dict> | </dict> | ||||
<key>Headers/ELRemoteControlBleHeader.h</key> | <key>Headers/ELRemoteControlBleHeader.h</key> | ||||
<dict> | <dict> | ||||
<key>hash</key> | <key>hash</key> | ||||
<data> | <data> | ||||
s8ZEGr/PpbFlKrQ5+kqm6spNKn0= | |||||
GKs3bfL6dryCrnD+GMedQhIEAU4= | |||||
</data> | </data> | ||||
<key>hash2</key> | <key>hash2</key> | ||||
<data> | <data> | ||||
2Eglzg3bcQpTOyihsn8ZijRJly03efDUHObUsNcZPH0= | |||||
r1aQIPZs0NMAPNezCmkWE4KzH9wD+DmKAafzpwOqjrg= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELTempAlgorithmusModel.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
AlQKcIM/xntXasbbagOjq7wgjdU= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
OmZ9PlkJpK5EzPuYVP0XFvj2ntXgFt03ueS/bWj/heQ= | |||||
</data> | </data> | ||||
</dict> | </dict> | ||||
<key>Headers/ELThermometerBleManager.h</key> | <key>Headers/ELThermometerBleManager.h</key> | ||||
m9kGIMT+Hyb5vxlcF8hsbi4cmg8IWW0u1d690GOSIqA= | m9kGIMT+Hyb5vxlcF8hsbi4cmg8IWW0u1d690GOSIqA= | ||||
</data> | </data> | ||||
</dict> | </dict> | ||||
<key>Headers/ELWeightAlgorithmusModel.h</key> | |||||
<dict> | |||||
<key>hash</key> | |||||
<data> | |||||
1glTQ2dPXRk5jFmzjxkkC5aRjgA= | |||||
</data> | |||||
<key>hash2</key> | |||||
<data> | |||||
sc6jQFBwXrInQMS6X/flXOZ8S7ZiBj330wzCGMpCm58= | |||||
</data> | |||||
</dict> | |||||
<key>Headers/ELWheelMonitorBleHeader.h</key> | <key>Headers/ELWheelMonitorBleHeader.h</key> | ||||
<dict> | <dict> | ||||
<key>hash</key> | <key>hash</key> |
#import "ThermometerScanViewController.h" | #import "ThermometerScanViewController.h" | ||||
#import "WheelMonitorScanViewController.h" | #import "WheelMonitorScanViewController.h" | ||||
#import "BodyFatScaleScanViewController.h" | #import "BodyFatScaleScanViewController.h" | ||||
#import "BroadcastScaleViewController.h" | |||||
#import "EightScaleScanViewController.h" | |||||
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource> | @interface ViewController ()<UITableViewDelegate,UITableViewDataSource> | ||||
- (void)viewDidLoad { | - (void)viewDidLoad { | ||||
[super viewDidLoad]; | [super viewDidLoad]; | ||||
self.datas = @[@"自己写协议走透传",@"有AILink协议自己解析数据",@"集成婴儿秤",@"集成血压计",@"集成身高仪",@"集成遥控器",@"集成额温枪",@"集成温度计",@"集成胎压监测",@"集成体脂秤"]; | |||||
self.datas = @[@"自己写协议走透传",@"有AILink协议自己解析数据",@"集成婴儿秤",@"集成血压计",@"集成身高仪",@"集成遥控器",@"集成额温枪",@"集成温度计",@"集成胎压监测",@"集成体脂秤",@"集成广播秤",@"八电极体脂秤"]; | |||||
[self.view addSubview:self.tableView]; | [self.view addSubview:self.tableView]; | ||||
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { | [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { | ||||
make.top.left.right.bottom.mas_equalTo(0); | make.top.left.right.bottom.mas_equalTo(0); | ||||
BodyFatScaleScanViewController *vc = [[BodyFatScaleScanViewController alloc] init]; | BodyFatScaleScanViewController *vc = [[BodyFatScaleScanViewController alloc] init]; | ||||
vc.title = self.datas[indexPath.row]; | vc.title = self.datas[indexPath.row]; | ||||
[self.navigationController pushViewController:vc animated:YES]; | [self.navigationController pushViewController:vc animated:YES]; | ||||
}else if(indexPath.row == 10){ | |||||
BroadcastScaleViewController *vc = [[BroadcastScaleViewController alloc] init]; | |||||
vc.title = self.datas[indexPath.row]; | |||||
[self.navigationController pushViewController:vc animated:YES]; | |||||
}else if (indexPath.row == 11){ | |||||
EightScaleScanViewController *vc = [[EightScaleScanViewController alloc] init]; | |||||
vc.title = self.datas[indexPath.row]; | |||||
[self.navigationController pushViewController:vc animated:YES]; | |||||
} | } | ||||
} | } |
// | |||||
// EightScaleConnectionViewController.h | |||||
// AILinkBleSDKSourceCode | |||||
// | |||||
// Created by iot_user on 2020/9/12. | |||||
// Copyright © 2020 IOT. All rights reserved. | |||||
// | |||||
#import <UIKit/UIKit.h> | |||||
@class ELPeripheralModel; | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface EightScaleConnectionViewController : UIViewController | |||||
@property (nonatomic, strong) ELPeripheralModel *p; | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// EightScaleConnectionViewController.m | |||||
// AILinkBleSDKSourceCode | |||||
// | |||||
// Created by iot_user on 2020/9/12. | |||||
// Copyright © 2020 IOT. All rights reserved. | |||||
// | |||||
#import "EightScaleConnectionViewController.h" | |||||
#import "Masonry.h" | |||||
#import <AILinkBleSDK/ELEightScaleBleManager.h> | |||||
#import <AILinkBleSDK/ELEightScaleBleDataModel.h> | |||||
#import <AILinkBleSDK/ELEightScaleSDKHeader.h> | |||||
@interface EightScaleConnectionViewController ()<ELBluetoothManagerDelegate,EightScaleBleDeletegate> | |||||
@property (nonatomic, strong) UITextView *textView; | |||||
@property (nonatomic, copy) NSArray<NSNumber *> *units; | |||||
@end | |||||
@implementation EightScaleConnectionViewController | |||||
- (void)viewDidLoad { | |||||
[super viewDidLoad]; | |||||
self.view.backgroundColor = [UIColor whiteColor]; | |||||
[ELEightScaleBleManager shareManager].eightScaleDelegate = self; | |||||
[ELEightScaleBleManager shareManager].delegate =self; | |||||
[[ELEightScaleBleManager shareManager] connectPeripheral:self.p]; | |||||
[self setupUIView]; | |||||
} | |||||
-(void)viewWillDisappear:(BOOL)animated{ | |||||
[super viewWillDisappear:animated]; | |||||
[[ELEightScaleBleManager shareManager] disconnectPeripheral]; | |||||
} | |||||
-(void)addLog:(NSString *)log{ | |||||
self.textView.text = [NSString stringWithFormat:@"%@\n%@",log,self.textView.text]; | |||||
} | |||||
-(void)buttonAction:(UIButton *)sender{ | |||||
if ([ELEightScaleBleManager shareManager].state != ELBluetoothStateDidValidationPass) { | |||||
[self addLog:@"Disconnected"]; | |||||
return; | |||||
} | |||||
[self addLog:sender.titleLabel.text]; | |||||
NSInteger tag = sender.tag; | |||||
if (tag == 1) { | |||||
//getBluetoothInfoWithELInetGetCmdType是获取设备信息的方法 | |||||
[[ELEightScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetBMVersion)]; | |||||
}else if (tag == 2){ | |||||
[[ELEightScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetC_V_P_ID)]; | |||||
}else if (tag == 3){ | |||||
[[ELEightScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetName)]; | |||||
}else if (tag == 4){ | |||||
[[ELEightScaleBleManager shareManager] setBluetoothName:@"AILink"]; | |||||
}else if (tag == 5){ | |||||
if (self.units.count==0) { | |||||
[self addLog:@"No units obtained"]; | |||||
return; | |||||
} | |||||
// [[ELEightScaleBleManager shareManager] changeBodyFatScaleUnit:(ELDeviceWeightUnit_KG)]; | |||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Change Unit" message:@"" preferredStyle:(UIAlertControllerStyleAlert)]; | |||||
for (int i=0; i<self.units.count; i++) { | |||||
UIAlertAction *action = [UIAlertAction actionWithTitle:AiLinkBleWeightUnitDic[self.units[i]] style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) { | |||||
[[ELEightScaleBleManager shareManager] eightScaleSwitchWeightUnit:self.units[i].integerValue]; | |||||
}]; | |||||
[alert addAction:action]; | |||||
} | |||||
[self presentViewController:alert animated:YES completion:nil]; | |||||
}else if (tag == 6){ | |||||
}else if (tag == 7){ | |||||
}else if (tag == 8){ | |||||
}else if (tag == 9){ | |||||
} | |||||
} | |||||
-(void)setupUIView{ | |||||
UIButton *button1 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||||
[button1 setTitle:@"Get BM Version" forState:(UIControlStateNormal)]; | |||||
button1.tag = 1; | |||||
button1.titleLabel.adjustsFontSizeToFitWidth = YES; | |||||
button1.titleLabel.numberOfLines = 2; | |||||
button1.backgroundColor = [UIColor blackColor]; | |||||
[button1 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||||
[self.view addSubview:button1]; | |||||
[button1 mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.left.mas_equalTo(10); | |||||
make.top.mas_equalTo(80); | |||||
make.width.mas_equalTo(100); | |||||
make.height.mas_equalTo(40); | |||||
}]; | |||||
UIButton *button2 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||||
[button2 setTitle:@"Get C V P ID" forState:(UIControlStateNormal)]; | |||||
button2.tag = 2; | |||||
button2.titleLabel.adjustsFontSizeToFitWidth = YES; | |||||
button2.titleLabel.numberOfLines = 2; | |||||
button2.backgroundColor = [UIColor blackColor]; | |||||
[button2 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||||
[self.view addSubview:button2]; | |||||
[button2 mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.left.equalTo(button1.mas_right).mas_offset(10); | |||||
make.top.mas_equalTo(80); | |||||
make.width.mas_equalTo(100); | |||||
make.height.mas_equalTo(40); | |||||
}]; | |||||
UIButton *button3 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||||
[button3 setTitle:@"Get Name" forState:(UIControlStateNormal)]; | |||||
button3.tag = 3; | |||||
button3.titleLabel.adjustsFontSizeToFitWidth = YES; | |||||
button3.titleLabel.numberOfLines = 2; | |||||
button3.backgroundColor = [UIColor blackColor]; | |||||
[button3 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||||
[self.view addSubview:button3]; | |||||
[button3 mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.left.equalTo(button2.mas_right).mas_offset(10); | |||||
make.top.mas_equalTo(80); | |||||
make.width.mas_equalTo(100); | |||||
make.height.mas_equalTo(40); | |||||
}]; | |||||
// | |||||
UIButton *button4 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||||
[button4 setTitle:@"Set Name" forState:(UIControlStateNormal)]; | |||||
button4.tag = 4; | |||||
button4.titleLabel.adjustsFontSizeToFitWidth = YES; | |||||
button4.titleLabel.numberOfLines = 2; | |||||
button4.backgroundColor = [UIColor blackColor]; | |||||
[button4 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||||
[self.view addSubview:button4]; | |||||
[button4 mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.left.mas_equalTo(10); | |||||
make.top.equalTo(button1.mas_bottom).mas_offset(10); | |||||
make.width.mas_equalTo(100); | |||||
make.height.mas_equalTo(40); | |||||
}]; | |||||
// | |||||
UIButton *button5 = [UIButton buttonWithType:(UIButtonTypeCustom)]; | |||||
[button5 setTitle:@"Change unit" forState:(UIControlStateNormal)]; | |||||
button5.tag = 5; | |||||
button5.titleLabel.adjustsFontSizeToFitWidth = YES; | |||||
button5.titleLabel.numberOfLines = 2; | |||||
button5.backgroundColor = [UIColor blackColor]; | |||||
[button5 addTarget:self action:@selector(buttonAction:) forControlEvents:(UIControlEventTouchUpInside)]; | |||||
[self.view addSubview:button5]; | |||||
[button5 mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.left.equalTo(button4.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 *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"; | |||||
self.textView.textColor = [UIColor redColor]; | |||||
[self.view addSubview:self.textView]; | |||||
[self.textView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.left.mas_equalTo(10); | |||||
make.right.bottom.mas_equalTo(-10); | |||||
make.height.mas_equalTo(200); | |||||
}]; | |||||
} | |||||
-(void)bluetoothManagerReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result{ | |||||
if (type == ELInetSetCmdTypeSetName) { | |||||
if (result == ELSetBluetoothResponseTypeSuccess) { | |||||
[self addLog:@"Set name Success "]; | |||||
}else if (result == ELSetBluetoothResponseTypeFailure){ | |||||
[self addLog:@"Set name failure "]; | |||||
}else if (result == ELSetBluetoothResponseTypeNoSupport){ | |||||
[self addLog:@"Set name unsupport "]; | |||||
} | |||||
} | |||||
} | |||||
-(void)bluetoothManagerReceiceName:(NSString *)name{ | |||||
[self addLog:name]; | |||||
} | |||||
-(void)bluetoothManagerReceiveDID:(struct ELDIDStruct)did{ | |||||
[self addLog:[NSString stringWithFormat:@"CID = %d,VID = %d,PID = %d",did.deviceType,did.vendorID,did.productID]]; | |||||
} | |||||
-(void)bluetoothManagerReceiveBMVersion:(NSString *)bmVersion{ | |||||
[self addLog:bmVersion]; | |||||
} | |||||
-(void)bluetoothManagerBackDeviceSupportUnitWithWeight:(NSArray<NSNumber *> *)weightArray Height:(NSArray<NSNumber *> *)heightArray Temperature:(NSArray<NSNumber *> *)temperatureArray BloodPressure:(NSArray<NSNumber *> *)bloodPressureArray Pressure:(NSArray<NSNumber *> *)pressureArray{ | |||||
//这里只要体重数据 | |||||
self.units = weightArray; | |||||
} | |||||
-(void)eightScaleBleReceiveAdcData:(EightScaleAdcStruct)adcStruct{ | |||||
[self addLog:[NSString stringWithFormat:@"Impedance type = %lu adc = %d",adcStruct.adcType,adcStruct.adc]]; | |||||
} | |||||
-(void)eightScaleBleReceiveHeartRateTestStep:(EightScaleHeartRateTestStep)testStep heartRate:(int)heartRate{ | |||||
[self addLog:[NSString stringWithFormat:@"HeartRate = %d",heartRate]]; | |||||
} | |||||
/** | |||||
Callback to set unit result(回调设置单位结果) | |||||
@param result 结果 | |||||
*/ | |||||
- (void)eightScaleBleReceiveSwitchWeightUnitResult:(EightScaleSwitchUnitResult)result{ | |||||
switch (result) { | |||||
case EightScaleSwitchUnitResultSuccess: | |||||
{ | |||||
[self addLog:@"Change Unit Success"]; | |||||
} | |||||
break; | |||||
case EightScaleSwitchUnitResultFailure: | |||||
{ | |||||
[self addLog:@"Change Unit Failure"]; | |||||
} | |||||
break; | |||||
case EightScaleSwitchUnitResultOperation: | |||||
{ | |||||
[self addLog:@"Operationing"]; | |||||
} | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
/** | |||||
Return weight and body fat model(返回重量及体脂model) | |||||
*/ | |||||
-(void)eightScaleBleReceiveWeightData:(EightScaleWeightStruct)weightStruct{ | |||||
switch (weightStruct.weightType) { | |||||
case EightScaleWeightTypeAuto: | |||||
{ | |||||
[self addLog:[NSString stringWithFormat:@"Unstable data weight = %d unit = %@ point = %d adc = %ld",weightStruct.weight,AiLinkBleWeightUnitDic[@(weightStruct.unit)],weightStruct.point,weightStruct.weightType]]; | |||||
} | |||||
break; | |||||
case EightScaleWeightTypeStable: | |||||
{ | |||||
[self addLog:[NSString stringWithFormat:@"Unstable data weight = %d unit = %@ point = %d adc = %ld",weightStruct.weight,AiLinkBleWeightUnitDic[@(weightStruct.unit)],weightStruct.point,weightStruct.weightType]]; | |||||
} | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
-(void)eightScaleBleReceiveTestComplete{ | |||||
[self addLog:@"Measurn Complete"]; | |||||
} | |||||
-(void)eightScaleBleReceiveTestData:(ELEightScaleBleDataModel *)dataModel{ | |||||
[self addLog:[NSString stringWithFormat:@"weight = %@%@",dataModel.weight,AiLinkBleWeightUnitDic[@(dataModel.weightUnit)]]]; | |||||
} | |||||
-(void)eightScaleBleReceiveErrorCode:(int)errorCode{ | |||||
[self addLog:[NSString stringWithFormat:@"Error Code is %d",errorCode]]; | |||||
} | |||||
-(void)eightScaleBleReceiveTempData:(EightScaleTempStruct)tempStruct{ | |||||
[self addLog:[NSString stringWithFormat:@"temperature is %d ",tempStruct.temp]]; | |||||
} | |||||
-(void)eightScaleBleReceiveState:(ELBluetoothState)state{ | |||||
switch (state) { | |||||
case ELBluetoothStateUnavailable: | |||||
{ | |||||
self.title = @"Please open the bluetooth"; | |||||
} | |||||
break; | |||||
case ELBluetoothStateAvailable: | |||||
{ | |||||
self.title = @"Bluetooth is open"; | |||||
} | |||||
break; | |||||
case ELBluetoothStateScaning: | |||||
{ | |||||
self.title = @"Scaning"; | |||||
} | |||||
break; | |||||
case ELBluetoothStateConnectFail: | |||||
{ | |||||
self.title = @"Connect fail"; | |||||
} | |||||
break; | |||||
case ELBluetoothStateDidDisconnect: | |||||
{ | |||||
self.title = @"Disconnected"; | |||||
} | |||||
break; | |||||
case ELBluetoothStateDidValidationPass: | |||||
{ | |||||
self.title = @"Connected"; | |||||
//获取设备支持的单位 | |||||
[[ELEightScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeReadDeviceSupportUnit)]; | |||||
//将你自己设置的单位发给秤 | |||||
ELDeviceWeightUnit unit = ELDeviceWeightUnit_KG; | |||||
[[ELEightScaleBleManager shareManager] eightScaleSwitchWeightUnit:unit]; | |||||
if (self.p.deviceType == ELSupportDeviceTypeBLE_WIFIScale) { | |||||
//获取蓝牙连接状态 | |||||
[[ELEightScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetConnectState)]; | |||||
} | |||||
} | |||||
break; | |||||
case ELBluetoothStateFailedValidation: | |||||
{ | |||||
self.title = @"Illegal equipment"; | |||||
} | |||||
break; | |||||
case ELBluetoothStateWillConnect: | |||||
self.title = @"Connecting"; | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
} | |||||
-(void)dealloc{ | |||||
} | |||||
@end |
// | |||||
// EightScaleScanViewController.h | |||||
// AILinkBleSDKSourceCode | |||||
// | |||||
// Created by iot_user on 2020/9/12. | |||||
// Copyright © 2020 IOT. All rights reserved. | |||||
// | |||||
#import <UIKit/UIKit.h> | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface EightScaleScanViewController : UIViewController | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// EightScaleScanViewController.m | |||||
// AILinkBleSDKSourceCode | |||||
// | |||||
// Created by iot_user on 2020/9/12. | |||||
// Copyright © 2020 IOT. All rights reserved. | |||||
// | |||||
#import "EightScaleScanViewController.h" | |||||
#import <AILinkBleSDK/ELEightScaleBleManager.h> | |||||
#import "Masonry.h" | |||||
#import "EightScaleConnectionViewController.h" | |||||
@interface EightScaleScanViewController ()<UITableViewDelegate,UITableViewDataSource,EightScaleBleDeletegate> | |||||
@property (nonatomic, strong) UITableView *tableView; | |||||
@property (nonatomic, strong) NSArray<ELPeripheralModel *> *devices; | |||||
@end | |||||
@implementation EightScaleScanViewController | |||||
- (void)viewDidLoad { | |||||
[super viewDidLoad]; | |||||
// self.title = @"Devices"; | |||||
[self.view addSubview:self.tableView]; | |||||
[self.tableView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.top.left.right.bottom.mas_equalTo(0); | |||||
}]; | |||||
} | |||||
-(void)viewWillAppear:(BOOL)animated{ | |||||
[super viewWillAppear:animated]; | |||||
[[ELEightScaleBleManager shareManager] startScan]; | |||||
[ELEightScaleBleManager shareManager].eightScaleDelegate = self; | |||||
} | |||||
-(void)viewDidDisappear:(BOOL)animated{ | |||||
[super viewDidDisappear:animated]; | |||||
[[ELEightScaleBleManager shareManager] stopScan]; | |||||
} | |||||
#pragma mark ============ ELBluetoothManagerDelegate ============== | |||||
-(void)eightScaleBleReceiveState:(ELBluetoothState)state{ | |||||
NSLog(@"bluetoothManagerUpdateBleState = %ld",state); | |||||
} | |||||
-(void)eightScaleBlReceiveDevices:(NSArray<ELPeripheralModel *> *)devices{ | |||||
self.devices = devices; | |||||
[self.tableView reloadData]; | |||||
} | |||||
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ | |||||
return self.devices.count; | |||||
} | |||||
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ | |||||
return 60; | |||||
} | |||||
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ | |||||
static NSString *cellId = @"cellid"; | |||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellId]; | |||||
if (!cell) { | |||||
cell = [[UITableViewCell alloc] initWithStyle:(UITableViewCellStyleDefault) reuseIdentifier:cellId]; | |||||
} | |||||
ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
cell.textLabel.text = [NSString stringWithFormat:@"Name:%@---Mac:%@\nCID:%ld---VID:%ld---PID:%ld",p.deviceName,p.macAddress,p.deviceType,p.vendorID,p.productID]; | |||||
cell.textLabel.numberOfLines = 2; | |||||
cell.textLabel.textColor = [UIColor blackColor]; | |||||
return cell; | |||||
} | |||||
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ | |||||
ELPeripheralModel *p = self.devices[indexPath.row]; | |||||
EightScaleConnectionViewController *vc = [[EightScaleConnectionViewController alloc] init]; | |||||
vc.p = p; | |||||
[self.navigationController pushViewController:vc animated:YES]; | |||||
} | |||||
-(UITableView *)tableView{ | |||||
if (_tableView == nil) { | |||||
_tableView = [[UITableView alloc] init]; | |||||
_tableView.delegate = self; | |||||
_tableView.dataSource = self; | |||||
} | |||||
return _tableView; | |||||
} | |||||
@end |
// | |||||
// BroadcastScaleViewController.h | |||||
// AILinkBleSDKSourceCode | |||||
// | |||||
// Created by iot_user on 2020/9/12. | |||||
// Copyright © 2020 IOT. All rights reserved. | |||||
// | |||||
#import <UIKit/UIKit.h> | |||||
NS_ASSUME_NONNULL_BEGIN | |||||
@interface BroadcastScaleViewController : UIViewController | |||||
@end | |||||
NS_ASSUME_NONNULL_END |
// | |||||
// BroadcastScaleViewController.m | |||||
// AILinkBleSDKSourceCode | |||||
// | |||||
// Created by iot_user on 2020/9/12. | |||||
// Copyright © 2020 IOT. All rights reserved. | |||||
// | |||||
#import "BroadcastScaleViewController.h" | |||||
#import <AILinkBleSDK/ELBroadcastScaleBleManager.h> | |||||
#import "Masonry.h" | |||||
@interface BroadcastScaleViewController ()<BroadcastScaleBleDelegate> | |||||
@property (nonatomic, strong) UITextView *textView; | |||||
@property (nonatomic, strong) UILabel *statusLbl; | |||||
@end | |||||
@implementation BroadcastScaleViewController | |||||
- (void)viewDidLoad { | |||||
[super viewDidLoad]; | |||||
self.view.backgroundColor = [UIColor whiteColor]; | |||||
[ELBroadcastScaleBleManager shareManager].broadcastScaleBleDelegate = self; | |||||
[[ELBroadcastScaleBleManager shareManager] startScan]; | |||||
[self setupUI]; | |||||
} | |||||
-(void)broadcastScaleBleDataModel:(ELBroadcastScaleDataModel *)model{ | |||||
switch (model.testStatus) { | |||||
case BroadcastScaleTestStatusWeightTesting: | |||||
{ | |||||
self.statusLbl.text = @"Weight testing"; | |||||
} | |||||
break; | |||||
case BroadcastScaleTestStatusADCTesting: { | |||||
self.statusLbl.text = @"Impedance testing"; | |||||
break; | |||||
} | |||||
case BroadcastScaleTestStatusADCTestSuccess: { | |||||
self.statusLbl.text = @"Impedance test success"; | |||||
break; | |||||
} | |||||
case BroadcastScaleTestStatusADCTestFailed: { | |||||
self.statusLbl.text = @"Impedance test failed"; | |||||
break; | |||||
} | |||||
case BroadcastScaleTestStatusTestEnd: { | |||||
self.statusLbl.text = @"Test end"; | |||||
break; | |||||
} | |||||
} | |||||
NSString *testData = [NSString stringWithFormat:@"MAC:%@\ncid = %d--vid=%d--pid=%d\nWeight = %@%@\nADC = %d",model.mac,model.cid-65535,model.vid,model.pid,model.weight,AiLinkBleWeightUnitDic[@(model.weightUnit)],model.adc]; | |||||
[self addLog:testData]; | |||||
} | |||||
-(void)broadcastScaleBleUpdateState:(ELBluetoothState)state{ | |||||
if (state == ELBluetoothStateAvailable) { | |||||
self.statusLbl.text = @"Connecting"; | |||||
}else if (state == ELBluetoothStateUnavailable){ | |||||
self.statusLbl.text = @"Bluetooth is disconnected"; | |||||
} | |||||
} | |||||
-(void)addLog:(NSString *)log{ | |||||
self.textView.text = [NSString stringWithFormat:@"%@\n%@",log,self.textView.text]; | |||||
} | |||||
-(void)setupUI{ | |||||
self.textView = [[UITextView alloc] init]; | |||||
self.textView.backgroundColor = [UIColor blackColor]; | |||||
self.textView.text = @"Log"; | |||||
self.textView.textColor = [UIColor redColor]; | |||||
[self.view addSubview:self.textView]; | |||||
[self.textView mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.left.mas_equalTo(10); | |||||
make.right.bottom.mas_equalTo(-10); | |||||
make.height.equalTo(self.view).multipliedBy(0.7); | |||||
}]; | |||||
// | |||||
self.statusLbl = [[UILabel alloc] init]; | |||||
self.statusLbl.text = @"Connecting"; | |||||
self.statusLbl.adjustsFontSizeToFitWidth = YES; | |||||
self.statusLbl.font = [UIFont boldSystemFontOfSize:30]; | |||||
self.statusLbl.textColor = [UIColor redColor]; | |||||
self.statusLbl.textAlignment = NSTextAlignmentCenter; | |||||
[self.view addSubview:self.statusLbl]; | |||||
[self.statusLbl mas_makeConstraints:^(MASConstraintMaker *make) { | |||||
make.height.mas_equalTo(40); | |||||
make.left.right.equalTo(self.textView); | |||||
make.bottom.equalTo(self.textView.mas_top).mas_offset(-20); | |||||
}]; | |||||
} | |||||
-(void)dealloc{ | |||||
[[ELBroadcastScaleBleManager shareManager] stopScan]; | |||||
} | |||||
@end |