// // HomeHubWifiSearchSuccessViewController.m // OneCable // // Created by nComz on 2017. 5. 11.. // Copyright © 2017년 ntels. All rights reserved. // #import "HomeHubWifiSearchSuccessViewController.h" #import "HomeHubWifiPasswdInputViewController.h" @interface HomeHubWifiSearchSuccessViewController () { BLEServiceHandler *bleService; BLEWLanModel *selectedWLanModel; //비밀번호 없는 경우 BOOL updateSSID; BOOL updateBSSID; BOOL updateIPSet; BOOL updateIPAddr; NSTimer *_timer; NSInteger _elapsedSeconds; } @end @implementation HomeHubWifiSearchTableViewCell @end @implementation HomeHubWifiSearchSuccessViewController - (void)viewDidLoad { [super viewDidLoad]; [self initUI]; [self prepareViewDidLoad]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; bleService.delegate = self; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; bleService.delegate = nil; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; } - (void)initUI { _imgvLoading.hidden = YES; _btnNext.enabled = NO; [self initTableViewAsDefaultStyle:_tableView]; } - (void)prepareViewDidLoad { //ble bleService = [BLEServiceHandler sharedManager]; updateSSID = updateBSSID = updateIPSet = updateIPAddr = NO; [_tableView reloadData]; } -(void)startLoading:(BOOL)isStart { _imgvLoading.hidden = !isStart; if (isStart) { _elapsedSeconds = kMaxTimeOut; if (!_timer) { _timer = [NSTimer scheduledTimerWithTimeInterval:1.0f target:self selector:@selector(updateInclusionStatus) userInfo:nil repeats:YES]; } dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ if ([_imgvLoading.layer animationForKey:@"SpinAnimation"] == nil) { CABasicAnimation* animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"]; animation.fromValue = [NSNumber numberWithFloat:0.0f]; animation.toValue = [NSNumber numberWithFloat: 2*M_PI]; animation.duration = 2.0f; animation.repeatCount = INFINITY; [_imgvLoading.layer addAnimation:animation forKey:@"SpinAnimation"]; } }); } else { _elapsedSeconds = kMaxTimeOut; if (_timer) { [_timer invalidate]; _timer = nil; } if ([_imgvLoading.layer animationForKey:@"SpinAnimation"] != nil) { [_imgvLoading.layer removeAnimationForKey:@"SpinAnimation"]; } } } - (void)updateInclusionStatus { dispatch_async(dispatch_get_main_queue(), ^(void) { _elapsedSeconds--; if (_elapsedSeconds == 0) { //[self startLoading:NO]; } }); } #pragma mark - UITableView DataSource & Delegate - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return _wifiList.count; } - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { return 101.0f; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { HomeHubWifiSearchTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WifiSearchCellIdentifier"]; BLEWLanModel *model = [_wifiList objectAtIndex:indexPath.row]; cell.lblHubName.text = model.ssid; cell.chkBtn.selected = [selectedWLanModel isEqual:model]; cell.imgvWifi.highlighted = !EQUALS(model.security, @"none"); return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [super tableView:tableView didSelectRowAtIndexPath:indexPath]; BLEWLanModel *model = [_wifiList objectAtIndex:indexPath.row]; selectedWLanModel = model; _btnNext.enabled = YES; [_tableView reloadData]; } //#pragma mark - CustomCheckBox Delegate { //- (void)didCheckBoxClicked:(id)sender { // // CustomCheckBox *btn = sender; // btn.selected = !btn.selected; // // selectedWLanModel = btn.value; // _btnNext.enabled = YES; // // [_tableView reloadData]; // //} #pragma mark - user Event - (IBAction)btnCancelTouched:(id)sender { [self.navigationController popToRootViewControllerAnimated:YES]; } - (IBAction)btnNextTouched:(id)sender { NSLog(@"selectedWLanModel : %@", selectedWLanModel); if (selectedWLanModel != nil) { [bleService setWiFiSSID:selectedWLanModel.ssid]; [bleService readAndNotifyCharacteristicUUID:kBLEChrStSSIDArg isNotify:NO]; } } #pragma mark - ble delegate - (void)BLEWiFiSSIDUpdate:(NSString*)ssid { NSLog(@"\nwifi search seccess BLEWiFiSSIDUpdate ssid : %@", selectedWLanModel.ssid); NSLog(@"ssid : %@", ssid); if (EQUALS(selectedWLanModel.ssid, ssid)) { if (EQUALS(selectedWLanModel.security, @"none")) { [self startLoading:YES]; //1. write pass [bleService setWiFiPwd:@""]; [self performSelector:@selector(BLESendEnableDHCP) withObject:nil afterDelay:1.0]; updateSSID = updateBSSID = updateIPSet = updateIPAddr = NO; } else { HomeHubWifiPasswdInputViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"HomeHubWifiPasswdInputViewController" storyboardName:@"HomeHub"]; vc.selectedWLanModel = selectedWLanModel; [self.navigationController pushViewController:vc animated:YES]; } } else { //실패처리 [[JDFacade facade] alertTitle:@"인터넷 연결 설정 실패" message:@"인터넷 연결 설정에 실패하였습니다."]; } } - (void)BLESendEnableDHCP { //2. set ip set arg chr [bleService enableDHCP]; [bleService readAndNotifyCharacteristicUUID:kBLEChrStDHCPArg isNotify:NO]; } //enableDHCP - (void)BLEWiFiDHCPUpdate:(id)data { //3. apply chr [bleService applyWiFiSettingInfo]; } //kBLEChrRdConInfo - (void)BLEWiFiConnectionUpdate:(CBCharacteristic *)info { NSLog(@"\nwifi search seccess BLEWiFiConnectionUpdate!"); NSString *value = [bleService hexStringValue:info] ; if (value.length > 0 && EQUALS([value substringFromIndex:value.length-1], @"1")) { //5. [bleService readConnectionWiFiInfo]; } else if (value.length > 0 && EQUALS([value substringFromIndex:value.length-1], @"0")) { //실패 [self startLoading:NO]; [[JDFacade facade] alert:@"네트워크 연결에 실패하였습니다." completionHander:^{ [self.navigationController popViewControllerAnimated:NO]; }]; } } //readConnectionWiFiInfo - (void)BLEWiFiConnectionInfoUpdateWithKey:(NSString *)kBLEChr result:(NSString *)result { NSLog(@"\nwifi search seccess BLEWiFiConnectionInfoUpdateWithKey") ; if (EQUALS(kBLEChr, kBLEChrRdSSID)) { updateSSID = YES; } else if(EQUALS(kBLEChr, kBLEChrRdBSSID)) { updateBSSID = YES; } else if(EQUALS(kBLEChr, kBLEChrRnIpSet)) { updateIPSet = YES; } else if(EQUALS(kBLEChr, kBLEChrRnIpAddr)) { updateIPAddr = YES; } // 연결 확인 완료 if (updateSSID && updateBSSID && updateIPSet && updateIPAddr) { [self startLoading:NO]; UIViewController *vc = [CommonUtil instantiateViewControllerWithIdentifier:@"HomeHubUpdateCompleteViewController" storyboardName:@"HomeHub"]; [self.navigationController pushViewController:vc animated:YES]; } } - (void)BLEDisConnected:(BTLEDeivceModel *)info { [[JDFacade facade] toast:@"홈허브와 연결할 수 없습니다."]; [self.navigationController popToRootViewControllerAnimated:YES]; } @end