InputMotorController.m 4.38キロバイト
//
//  InputMotorController.m
//  jacket_ios
//
//  Created by ドラッサル 亜嵐 on 2017/02/23.
//  Copyright © 2017年 ドラッサル 亜嵐. All rights reserved.
//

#import "InputMotorController.h"

@interface InputMotorController ()
@property (strong, nonatomic) IBOutlet UIButton *btn0;
@property (strong, nonatomic) IBOutlet UIButton *btn1;
@property (strong, nonatomic) IBOutlet UIButton *btn2;

@end

@implementation InputMotorController {
    UIView *_mask;
    NSTimer *_writeResponseTimer;
    bool ignoreWriteResponse;
    id lastButton;
    NSInteger newState;
}
@synthesize protocol;

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
    [_mask removeFromSuperview];
    [self dismissViewControllerAnimated:YES completion:Nil];
}

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    _lastProtocolDelegate = protocol.delegate;
    protocol.delegate = self;
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    protocol.delegate = _lastProtocolDelegate;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
}

- (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)showAlert {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"ジャケットの設定"
                                                    message:@"設定が保存されました。"
                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
}

- (void)showAlert:(NSString*)title message:(NSString*)message{
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title
                                                    message:message
                                                   delegate:self
                                          cancelButtonTitle:@"OK"
                                          otherButtonTitles:nil];
    [alert show];
}

- (void)showMask {
    _mask = [[UIView alloc] initWithFrame:[self.view frame]];
    [_mask setBackgroundColor:[UIColor colorWithWhite:0.0 alpha:0.25]];
    [self.view addSubview:_mask];
}

-(void)writeResponseTimeout:(NSTimer *)timer {
    ignoreWriteResponse = true;
    [self showAlert:@"ジャケットの設定" message:@"設定が保存されない。"];
}

- (void)protocolDidGetData:(NSString *)dataType data:(NSString *)dataData {
    if([dataType isEqualToString:@"writeMotor"]){
        if(ignoreWriteResponse) return;
        [_writeResponseTimer invalidate];
        
        if([dataData isEqual:@"OK"]) {
            [self showAlert:@"ジャケットの設定" message:@"設定が保存されました。"];
        } else {
            [self showAlert:@"ジャケットの設定" message:@"設定が保存されない。"];
        }
    }
}

- (IBAction)btn0:(id)sender {
    if(lastButton) {
        [lastButton setBackgroundColor:[UIColor clearColor]];
    }
    lastButton = sender;
    newState = 0;
    [sender setBackgroundColor:[UIColor yellowColor]];
}

- (IBAction)btn1:(id)sender {
    if(lastButton) {
        [lastButton setBackgroundColor:[UIColor clearColor]];
    }
    lastButton = sender;
    newState = 1;
    [sender setBackgroundColor:[UIColor yellowColor]];
}

- (IBAction)btn2:(id)sender {
    if(lastButton) {
        [lastButton setBackgroundColor:[UIColor clearColor]];
    }
    lastButton = sender;
    newState = 2;
    [sender setBackgroundColor:[UIColor yellowColor]];
}

- (IBAction)cancelButtonClicked:(id)sender {
    [self dismissViewControllerAnimated:YES completion:Nil];
}

- (IBAction)saveButtonClicked:(id)sender {
    ignoreWriteResponse = false;
    [self showMask];
    [protocol putData:@"writeMotor" data:[NSString stringWithFormat:@"%ld",newState]];
    _writeResponseTimer = [NSTimer scheduledTimerWithTimeInterval: 5.0 target: self selector:@selector(writeResponseTimeout:) userInfo: nil repeats:NO];
}

@end