// // ClientViewController.m // SimpleConfig // // Created by Realsil on 14/11/13. // Copyright (c) 2014年 Realtek. All rights reserved. // #import "ClientViewController.h" @interface ClientViewController () @end @implementation ClientViewController @synthesize sharedData; @synthesize pin_label, pinLabel, qrcode_btn, m_qrscan_line; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. m_controller = [[Controller alloc] init]; if (sharedData!=nil) { struct dev_info dev; [sharedData getValue:&dev]; NSLog(@"dev->require_pin=%@", (dev.require_pin==1)?@"YES":@"NO"); if(0x0a==dev.extra_info[0]) [_name_label setText:@"Untitled"]; else [_name_label setText:[NSString stringWithUTF8String:(const char *)dev.extra_info]]; _ip_label.text = [NSString stringWithFormat:@"%d.%d.%d.%d", 0xFF&(dev.ip>>24), 0xFF&(dev.ip>>16), 0xFF&(dev.ip>>8), 0xFF&dev.ip]; _mac_label.text = [NSString stringWithFormat:@"%02x:%02x:%02x:%02x:%02x:%02x", dev.mac[0], dev.mac[1], dev.mac[2], dev.mac[3], dev.mac[4], dev.mac[5]]; if(!dev.require_pin){ [pinLabel setHidden:true]; [pin_label setHidden:true]; [qrcode_btn setHidden:true]; }else{ [pinLabel setHidden:false]; [pin_label setHidden:false]; [qrcode_btn setHidden:false]; pin_label.text = @""; [pin_label addTarget:self action:@selector(textFieldDoneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit]; } } pin_label.text = @""; [pin_label addTarget:self action:@selector(textFieldDoneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit]; [_name_label addTarget:self action:@selector(textFieldDoneEditing:) forControlEvents:UIControlEventEditingDidEndOnExit]; m_timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerHandler:) userInfo:nil repeats:YES]; m_mode = MODE_INIT; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ - (void)dealloc { #ifdef ARC [_name_label release]; [_ip_label release]; [_mac_label release]; [_delete_btn release]; [_rename_btn release]; [pin_label release]; [_name_label release]; [pin_label release]; [pinLabel release]; [qrcode_btn release]; [super dealloc]; #endif } /* Hide the keyboard when pushing "enter" */ - (BOOL)textFieldDoneEditing:(UITextField *)sender { NSLog(@"textFieldDoneEditing, Sender is %@", sender); UITextField *target = sender; return [target resignFirstResponder]; } - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text { if([text isEqualToString:@"\n"]) { [textView resignFirstResponder]; return NO; } return YES; } - (void)viewDidDisappear:(BOOL)animated { // Must release simpleConfig, so that its asyncUDPSocket delegate won't receive data NSLog(@"close control socket"); [m_controller rtk_sc_close_sock]; [super viewDidDisappear:animated]; } - (void)viewWillAppear:(BOOL)animated { NSLog(@"reopen control socket"); [m_controller rtk_sc_reopen_sock]; } /* Button Delegate */ -(IBAction)delete_profile:(id)sender { // generate data NSString *pin = pin_label.text; unsigned int ip = [m_controller rtk_sc_convert_host_to_ip:_ip_label.text]; if (pin_label.isHidden==false && [pin isEqualToString:@""]) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:SC_UI_ALERT_TITLE_ERROR message:SC_UI_ALERT_INPUT_PIN delegate:self cancelButtonTitle:SC_UI_ALERT_OK otherButtonTitles:nil, nil]; [alert show]; return; }else if(pin_label.isHidden==true) pin = PATTERN_DEF_PIN; NSLog(@"pin=%@, ip=%x", pin, ip); [m_controller rtk_sc_gen_control_data:RTK_SC_CONTROL_DELETE pin:pin name:nil]; m_mode = MODE_CONTROL; // send data for (int i=0; i<RTK_SC_CONTROL_PKT_ROUND; i++) { NSLog(@"send delete profile data %d", i); [m_controller rtk_sc_send_control_data:ip]; } } -(IBAction)rename_device:(id)sender { // generate data NSString *pin = pin_label.text; NSString *name = _name_label.text; unsigned int ip = [m_controller rtk_sc_convert_host_to_ip:_ip_label.text]; if (pin_label.isHidden==false && [pin isEqualToString:@""]) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:SC_UI_ALERT_TITLE_ERROR message:SC_UI_ALERT_INPUT_PIN delegate:self cancelButtonTitle:SC_UI_ALERT_OK otherButtonTitles:nil, nil]; [alert show]; return; }else if(pin_label.isHidden==true) pin = PATTERN_DEF_PIN; NSLog(@"pin=%@, ip=%x", pin, ip); if([name isEqualToString:@""]) name = @"Untitled"; [m_controller rtk_sc_gen_control_data:RTK_SC_CONTROL_RENAME pin:pin name:name]; m_mode = MODE_CONTROL; // send data for (int i=0; i<RTK_SC_CONTROL_PKT_ROUND; i++) { NSLog(@"send delete profile data %d", i); [m_controller rtk_sc_send_control_data:ip]; } } -(IBAction)scan_QRCode:(id)sender { [self showQRScanner]; } /* Timer Delegate */ -(void)timerHandler: (NSTimer *)sender { unsigned int controller_mode = [m_controller rtk_sc_get_mode]; switch (controller_mode) { case MODE_INIT: if (m_mode == MODE_CONTROL) { int result = [m_controller rtk_sc_get_control_result]; if (result==RTK_SUCCEED) { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:SC_UI_ALERT_TITLE_INFO message:SC_UI_ALERT_CONTROL_DONE delegate:self cancelButtonTitle:SC_UI_ALERT_OK otherButtonTitles:nil, nil]; [alert show]; }else{ UIAlertView *alert = [[UIAlertView alloc] initWithTitle:SC_UI_ALERT_TITLE_ERROR message:SC_UI_ALERT_CONTROL_FAILED delegate:self cancelButtonTitle:SC_UI_ALERT_OK otherButtonTitles:nil, nil]; [alert show]; } m_mode = MODE_INIT; } break; default: break; } } /* ------QRCode Related------*/ -(void)showQRScanner { int maxScreen_height = [[UIScreen mainScreen] bounds].size.height; int maxScreen_width = [[UIScreen mainScreen] bounds].size.width; NSLog(@"screen: %d %d",maxScreen_width,maxScreen_height); m_upOrdown = NO; m_num = 0; if(m_qrcode_timer!=nil){ [m_qrcode_timer invalidate]; m_qrcode_timer = nil; } //init ZBar ZBarReaderViewController * reader = [ZBarReaderViewController new]; //set Delegate reader.readerDelegate = self; reader.supportedOrientationsMask = ZBarOrientationMaskAll; reader.showsHelpOnFail = NO; reader.scanCrop = CGRectMake(0, 0, 1, 1); ZBarImageScanner * scanner = reader.scanner; [scanner setSymbology:ZBAR_I25 config:ZBAR_CFG_ENABLE to:0]; UIView * view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, maxScreen_width, maxScreen_height)]; view.backgroundColor = [UIColor clearColor]; reader.cameraOverlayView = view; //UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, 280, 40)]; UILabel * label = [[UILabel alloc] initWithFrame:CGRectMake(20, 20, maxScreen_width/2, 40)]; label.text = @"Scan your QR code!"; label.textColor = [UIColor whiteColor]; label.textAlignment = 1; label.lineBreakMode = 0; label.numberOfLines = 2; label.backgroundColor = [UIColor clearColor]; [view addSubview:label]; UIImageView * image = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"pick_bg.png"]]; //image.frame = CGRectMake(20, 80, 280, 280); image.frame = CGRectMake(20, 80, maxScreen_width-20*2, maxScreen_width-20*2); [view addSubview:image]; m_qrscan_line = [[UIImageView alloc] initWithFrame:CGRectMake(20, 80, maxScreen_width-40*2, 1)]; m_qrscan_line.image = [UIImage imageNamed:@"line.png"]; [image addSubview:m_qrscan_line]; //set: after 1.5 s m_qrcode_timer = [NSTimer scheduledTimerWithTimeInterval:.02 target:self selector:@selector(qrcode_animation) userInfo:nil repeats:YES]; [self presentViewController:reader animated:YES completion:^{ }]; //[self presentViewController:reader animated:YES completion:nil]; NSLog(@"<APP> scan button finished"); //[text_pincode setText:m_pin_code]; } -(void)qrcode_animation { int maxScreen_width = [[UIScreen mainScreen] bounds].size.width; if (m_upOrdown == NO) { m_num ++; m_qrscan_line.frame = CGRectMake(20, 20+2*m_num, maxScreen_width-40*2, 1); if (2*m_num >= (maxScreen_width-30*2)) { m_upOrdown = YES; } } else { m_num --; m_qrscan_line.frame = CGRectMake(20, 20+2*m_num, maxScreen_width-40*2, 1); if (m_num <= 0) { m_upOrdown = NO; } } } /* Parse QRCode */ - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults]; ZBarSymbol *symbol = nil; for(symbol in results) break; NSLog(@"Got QRCode: %@", symbol.data); [pin_label setText:symbol.data]; //self.imageView.image = [info objectForKey:UIImagePickerControllerOriginalImage]; [picker dismissViewControllerAnimated:YES completion:nil]; } @end