// // BodyFatScaleConnectViewController.m // AILinkBleSDKSourceCode // // Created by iot_user on 2020/4/8. // Copyright © 2020 IOT. All rights reserved. // #import "BodyFatScaleConnectViewController.h" #import "Masonry.h" #import #import #import //#import "WiFiSetupViewController.h" @interface BodyFatScaleConnectViewController () @property (nonatomic, strong) UITextView *textView; @property (nonatomic, copy) NSArray *units; @end @implementation BodyFatScaleConnectViewController - (void)viewDidLoad { [super viewDidLoad]; self.view.backgroundColor = [UIColor whiteColor]; [ELBodyFatScaleBleManager shareManager].bodyFatScaleDelegate = self; [ELBodyFatScaleBleManager shareManager].delegate =self; [[ELBodyFatScaleBleManager shareManager] connectPeripheral:self.p]; [ELBodyFatScaleBleManager shareManager].bleWifiDelegate = self; [self setupUIView]; } -(void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; [[ELBodyFatScaleBleManager shareManager] disconnectPeripheral]; } -(void)addLog:(NSString *)log{ self.textView.text = [NSString stringWithFormat:@"%@\n%@",log,self.textView.text]; } -(void)buttonAction:(UIButton *)sender{ if ([ELBodyFatScaleBleManager shareManager].state != ELBluetoothStateDidValidationPass) { [self addLog:@"Disconnected"]; return; } [self addLog:sender.titleLabel.text]; NSInteger tag = sender.tag; if (tag == 1) { //getBluetoothInfoWithELInetGetCmdType是获取设备信息的方法 [[ELBodyFatScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetBMVersion)]; }else if (tag == 2){ [[ELBodyFatScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetC_V_P_ID)]; }else if (tag == 3){ [[ELBodyFatScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetName)]; }else if (tag == 4){ [[ELBodyFatScaleBleManager shareManager] setBluetoothName:@"AILink"]; }else if (tag == 5){ if (self.units.count==0) { [self addLog:@"No units obtained"]; return; } // [[ELBodyFatScaleBleManager shareManager] changeBodyFatScaleUnit:(ELDeviceWeightUnit_KG)]; UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Change Unit" message:@"" preferredStyle:(UIAlertControllerStyleAlert)]; for (int i=0; i *)weightArray Height:(NSArray *)heightArray Temperature:(NSArray *)temperatureArray BloodPressure:(NSArray *)bloodPressureArray Pressure:(NSArray *)pressureArray{ //这里只要体重数据 self.units = weightArray; } -(void)bluetoothManagerReceiveMCUConnectedState:(struct ELMCUStateStruct)stateStrct{ BleWiFiConnectState wifiState = stateStrct.wifiState; if (self.p.deviceType == ELSupportDeviceTypeBLE_WIFIScale) { //蓝牙WiFi体脂秤 //请求会话码 [[ELBodyFatScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeBleWifiGetSNNumber]; //MARK:1.WiFi配置提示用户配网 //TODO:注意:wifi配置过程必须保持蓝牙与设备的连接 if (wifiState == BleWiFiConnectStateNoWiFi) { //1.如果没有配网,则提示用户去配网 //MARK:2.WiFi配置先获取wifi列表 // [[ELBodyFatScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:ELInetGetCmdTypeBleWifiGetNearbyWifi]; // // UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Change Unit" message:@"" preferredStyle:(UIAlertControllerStyleAlert)]; // UIAlertAction *action = [UIAlertAction actionWithTitle:@"去配网" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) { // if ([ELBodyFatScaleBleManager shareManager].state == ELBluetoothStateDidValidationPass) { // WiFiSetupViewController *vc = [[WiFiSetupViewController alloc] init]; // [self.navigationController pushViewController:vc animated:YES]; // }else{ // [self addLog:@"Disconnected"]; // } // // }]; // UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"取消" style:(UIAlertActionStyleDefault) handler:^(UIAlertAction * _Nonnull action) { // // }]; // [alert addAction:action]; // [alert addAction:action2]; // [self presentViewController:alert animated:YES completion:nil]; } } ///MARK:9.wifi配置结果 //wifi相关的其他指令和数据接收,请查看ELBluetoothManager.h文件 if (stateStrct.wifiState == BleWiFiConnectStateSuccess) { //成功 //MARK:10.获取wifi设备的SN号,即设备id [[ELBodyFatScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeBleWifiGetSNNumber)]; }else{ //失败 } } /** Callback to set unit result(回调设置单位结果) @param result 结果 */ - (void)bodyFatScaleManagerCallBackSetUnitResult:(ELSetBluetoothResponseType)result{ switch (result) { case ELSetBluetoothResponseTypeSuccess: { [self addLog:@"Change Unit Success"]; } break; case ELSetBluetoothResponseTypeFailure: { [self addLog:@"Change Unit Failure"]; } break; case ELSetBluetoothResponseTypeNoSupport: { [self addLog:@"Unsupport Change Unit"]; } break; default: break; } } //MARK:回调Wifi列表 -(void)bleWifiReceiveWifiDetailModel:(ELBleWifiDetailModel *)model{ // MARK:3.WiFi配置得到Wifi列表 //用一个tableview显示喽 [self addLog:[NSString stringWithFormat:@"wifi类型---%lu 名称---%@",(unsigned long)model.wifiState,model.wifiName]]; } -(void)bleWifiReceiveScanedWifiCount:(int)count { //MARK:扫描Wifi结束 //MARK:4.WiFi配置得到一个附近wifi的列表,点击选择一个wifi,进行配置 //MARK:5.输入wifi密码 //写个“textfield”输入密码 //MARK:6.先发送配置wifi的mac地址的指令 // [[ELBodyFatScaleBleManager shareManager] bleWifiSetConnectWifiMac:[NSData data]]; } -(void)bleWifiReceiceResponseType:(ELInetSetCmdType)type result:(ELSetBluetoothResponseType)result{ [self addLog:[NSString stringWithFormat:@"bleWifiReceiceResponseType==%lu----%lu",type,result]]; if (result == ELSetBluetoothResponseTypeSuccess) { //设置WiFi结果 if (type == ELInetSetCmdTypeBleWifiSetWifiMac) { //MARK:7.再发送配置wifi的密码的指令 [[ELBodyFatScaleBleManager shareManager] bleWifiSetWifiPwd:@"WiFi密码"]; }else if (type == ELInetSetCmdTypeBleWifiSetWifiPwd){ //MARK:8.然后发起连接Wifi [[ELBodyFatScaleBleManager shareManager] bleWifiSetupWifiConnect:YES]; }else if (type == ELInetSetCmdTypeBleWifiSetConnectWifi){ //获取连接状态 } } else{ //TODO:Wifi配置过程中失败的情况自行处理 } } /** MCU requests user information( MCU 请求用户信息) @param status 请求状态 */ - (void)bodyFatScaleManagerMCURequestAppUserInfoType:(BodyFatScaleMCURequestUserInfoStatus)status{ if (status == BodyFatScaleMCURequestUserInfoStatus_Get) { //下发当前用户给秤 [[ELBodyFatScaleBleManager shareManager] sendCurrentUserToBle:[self getOneUser]]; }else if (status == BodyFatScaleMCURequestUserInfoStatus_Success){ [self addLog:@"MCU requests user information success"]; }else if (BodyFatScaleMCURequestUserInfoStatus_Fail){ [self addLog:@"MCU requests user information failure"]; } } /** Return weight and body fat model(返回重量及体脂model) */ -(void)bodyFatScaleManagerCallBackWeight:(ELBodyFatScaleBleWeightModel *)weightModel state:(BodyFatScaleMeasureStatus)status{ switch (status) { case BodyFatScaleMeasureStatus_Unstable: { [self addLog:[NSString stringWithFormat:@"Unstable data weight = %ld unit = %@ point = %ld adc = %ld",weightModel.weight,AiLinkBleWeightUnitDic[@(weightModel.weightUnit)],weightModel.weightPoint,weightModel.adc]]; } break; case BodyFatScaleMeasureStatus_Stable: { [self addLog:[NSString stringWithFormat:@"Stable data weight = %ld unit = %@ point = %ld adc = %ld",weightModel.weight,AiLinkBleWeightUnitDic[@(weightModel.weightUnit)],weightModel.weightPoint,weightModel.adc]]; } break; case BodyFatScaleMeasureStatus_Failed: { [self addLog:@"Test failure"]; } break; case BodyFatScaleMeasureStatus_Complete: { [self addLog:[NSString stringWithFormat:@"Tested weight = %ld unit = %@ point = %ld adc = %ld",weightModel.weight,AiLinkBleWeightUnitDic[@(weightModel.weightUnit)],weightModel.weightPoint,weightModel.adc]]; //更新用户信息给秤 [[ELBodyFatScaleBleManager shareManager] sendCurrentUserToBle:[self getOneUser]]; //下发用户列表 [[ELBodyFatScaleBleManager shareManager] sendOfflineUserListToBle:[self get8Users]]; } break; default: break; } } /** Return temperature (unit: ° C)(返回温度(单位:°C)) @param temp 温度(单位:°C) */ -(void)bodyFatScaleManagerCallBackTemp:(NSString *)temp{ [self addLog:[NSString stringWithFormat:@"temperature is %@",temp]]; } /** Back to impedance measurement(返回阻抗测量) @param status 阻抗测量状态 @param adc 阻抗 */ -(void)bodyFatScaleManagerCallBackAdcMeasureStatus:(BodyFatScaleAdcMeasureStatus)status adcValue:(NSInteger)adc{ switch (status) { case BodyFatScaleAdcMeasureStatus_Testing: { [self addLog:@"adc testing"]; } break; case BodyFatScaleAdcMeasureStatus_Success: { [self addLog:[NSString stringWithFormat:@"adc is %ld",adc]]; } break; case BodyFatScaleAdcMeasureStatus_Fail: { [self addLog:@"adc test failure"]; } break; case BodyFatScaleAdcMeasureStatus_SuccessCustom: { [self addLog:[NSString stringWithFormat:@"adc is %ld and user app algum",adc]]; } break; default: break; } } /** Callback heart rate measurement(回调心率测量) @param status 心率测量状态 @param heartRate 心率 */ -(void)bodyFatScaleManagerCallBackHeartRateMeasureStatus:(BodyFatScaleHeartRateMeasureStatus)status heartRateValue:(NSInteger)heartRate{ switch (status) { case BodyFatScaleHeartRateMeasureStatus_Testing: { [self addLog:@"Heart Rate Testing"]; } break; case BodyFatScaleHeartRateMeasureStatus_Success: { [self addLog:[NSString stringWithFormat:@"Heart Rate is %ld",heartRate]]; } break; case BodyFatScaleHeartRateMeasureStatus_Fail: { [self addLog:@"Heart Rate Test failure"]; } break; default: break; } } /** Return error code(返回错误码) @param code 错误码 1:超重 */ -(void)bodyFatScaleManagerCallBackErrorCode:(NSInteger)code{ [self addLog:[NSString stringWithFormat:@"error code = %ld",code]]; } //MARK:回调A6指令数据 /** Send success or failure callback for offline user list(发送离线用户列表的成功或失败回调) @param status 状态 */ -(void)bodyFatScaleManagerCallBackUpdateRecordStatus:(BodyFatScaleUpdateRecordStatus)status{ switch (status) { case BodyFatScaleUpdateRecordStatus_AllSuccess: { [self addLog:@"Update All Users Success"]; } break; case BodyFatScaleUpdateRecordStatus_OneSuccess: { [self addLog:@"Update A User Success"]; } break; case BodyFatScaleUpdateRecordStatus_OneFail: { [self addLog:@"Update A User Failure"]; } break; case BodyFatScaleUpdateRecordStatus_AllFail: { [self addLog:@"Update All Users Failure"]; } break; default: break; } } /** Request callback for offline history(请求离线历史记录的回调) @param status 状态 */ -(void)bodyFatScaleManagerCallBackSendHistoryDataStatus:(BodyFatScaleSendHistoryDataStatus)status{ if (status == BodyFatScaleSendHistoryDataStatus_No) { [self addLog:@"No offline datas"]; }else if (status == BodyFatScaleSendHistoryDataStatus_Begin){ [self addLog:@"Begin receive offline datas"]; }else if (status == BodyFatScaleSendHistoryDataStatus_End){ [self addLog:@"End receive offline datas"]; } } /** APP algorithm-offline history data(APP 算法-离线历史记录数据) @param user 用户信息 */ -(void)bodyFatScaleManagerCallBackBleUserHistoryDataCustomADCModel:(ELBodyFatScaleBleUserModel *)user bodyDataModel:(ELBodyFatScaleBleWeightModel *)bodyModel{ //这里的身体指标等数据由app自定义算法计算得到,请区分bodyModel.algNum来调用算法 [self addLog:[NSString stringWithFormat:@"App algorithm-offline history data:userId = %ld weight = %ld unit =%@ point = %ld",user.usrID,bodyModel.weight,AiLinkBleWeightUnitDic[@(bodyModel.weightUnit)],bodyModel.weightPoint]]; } /** MCU algorithm-offline history data(MCU 算法-离线历史记录数据) @param user 用户信息 @param bodyModel 体脂数据 */ -(void)bodyFatScaleManagerCallBackBleUserHistoryDataModel:(ELBodyFatScaleBleUserModel *)user bodyDataModel:(ELBodyFatScaleBleWeightModel *)bodyModel{ //这里的身体指标数据由秤计算得到 [self addLog:[NSString stringWithFormat:@"MCU algorithm-offline history data:userId = %ld weight = %ld unit =%@ point = %ld",user.usrID,bodyModel.weight,AiLinkBleWeightUnitDic[@(bodyModel.weightUnit)],bodyModel.weightPoint]]; } -(void)bleWifiReceiveWifiSNCode:(int)code{ //MARK:11.根据wifi设备的设备id从服务器获取离线数据(找自己后台要接口) } -(void)bodyFatScaleManagerUpdateState:(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"; //获取设备支持的单位 [[ELBodyFatScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeReadDeviceSupportUnit)]; //将你自己设置的单位发给秤 ELDeviceWeightUnit unit = ELDeviceWeightUnit_KG; [[ELBodyFatScaleBleManager shareManager] changeBodyFatScaleUnit:unit]; //请求历史记录 [[ELBodyFatScaleBleManager shareManager] sendCmd_RequestHistory]; //下发用户列表 [[ELBodyFatScaleBleManager shareManager] sendOfflineUserListToBle:[self get8Users]]; if (self.p.deviceType == ELSupportDeviceTypeBLE_WIFIScale) { //获取蓝牙连接状态 [[ELBodyFatScaleBleManager shareManager] getBluetoothInfoWithELInetGetCmdType:(ELInetGetCmdTypeGetConnectState)]; } } break; case ELBluetoothStateFailedValidation: { self.title = @"Illegal equipment"; } break; case ELBluetoothStateWillConnect: self.title = @"Connecting"; break; default: break; } } -(NSArray *)get8Users{ NSMutableArray *users = [[NSMutableArray alloc] init]; for (int i=0; i<8; i++) { ELBodyFatScaleBleUserModel *user = [[ELBodyFatScaleBleUserModel alloc] init]; user.createTime = [[NSDate date] timeIntervalSince1970]; user.usrID = i; user.role = i%4; user.sex = i%2; user.age = 26+i; user.height = 170+i; user.weight = 600+i; user.adc = 560+i; [users addObject:user]; } return users.copy; } -(ELBodyFatScaleBleUserModel *)getOneUser{ ELBodyFatScaleBleUserModel *user = [[ELBodyFatScaleBleUserModel alloc] init]; user.createTime = [[NSDate date] timeIntervalSince1970]; user.usrID = 0; user.role = BodyFatScaleRole_Ordinary; user.sex = ELBluetoothUserSex_Woman; user.age = 26; user.height = 170; user.weight = 600; user.adc = 560; return user; } -(void)dealloc{ } @end