Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 804 → Rev 805

/iKopter/trunk/Classes/Views/LcdViewController.m
0,0 → 1,238
// ///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2010, Frank Blumenberg
//
// See License.txt for complete licensing and attribution information.
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
//
// ///////////////////////////////////////////////////////////////////////////////
 
#import "LcdViewController.h"
#import "MKConnectionController.h"
#import "NSData+MKCommandEncode.h"
#import "MKDatatypes.h"
#import "MKDataConstants.h"
 
@implementation LcdViewController
 
@synthesize label;
@synthesize segment;
@synthesize gestureStartPoint;
 
- (void) viewDidLoad {
label.text = @"Not connected\r\nNo data\r\n\r\n";
lcdCount = 0;
[super viewDidLoad];
}
 
#pragma mark -
#pragma mark UIViewController delegate methods
 
 
 
- (void) updateSegment {
if ([[MKConnectionController sharedMKConnectionController] hasNaviCtrl]) {
[segment setEnabled:YES forSegmentAtIndex:0];
[segment setEnabled:YES forSegmentAtIndex:1];
[segment setEnabled:YES forSegmentAtIndex:2];
}
else {
[segment setEnabled:NO forSegmentAtIndex:0];
[segment setEnabled:YES forSegmentAtIndex:1];
[segment setEnabled:NO forSegmentAtIndex:2];
}
 
MKAddress currentDevice=[MKConnectionController sharedMKConnectionController].currentDevice;
switch (currentDevice) {
case MKAddressNC:
segment.selectedSegmentIndex=0;
break;
case MKAddressFC:
segment.selectedSegmentIndex=1;
break;
case MKAddressMK3MAg:
segment.selectedSegmentIndex=2;
break;
default:
break;
}
}
 
// called after this controller's view will appear
- (void)viewWillAppear:(BOOL)animated
{
[self.navigationController setToolbarHidden:YES animated:NO];
 
// for aesthetic reasons (the background is black), make the nav bar black for this particular page
self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
// match the status bar with the nav bar
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;
 
[[MKConnectionController sharedMKConnectionController] activateNaviCtrl];
[self updateSegment];
}
 
- (void) viewDidAppear:(BOOL)animated {
canProcessNextGesture=YES;
 
// for aesthetic reasons (the background is black), make the nav bar black for this particular page
self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
// match the status bar with the nav bar
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleBlackOpaque;
NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];
 
[nc addObserver:self
selector:@selector(lcdNotification:)
name:MKLcdNotification
object:nil];
 
[self performSelector:@selector(sendMenuRefreshRequest) withObject:self afterDelay:0.1];
}
 
- (void) viewWillDisappear:(BOOL)animated {
NSNotificationCenter * nc = [NSNotificationCenter defaultCenter];
 
[nc removeObserver:self];
 
// restore the nav bar and status bar color to default
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleDefault;
}
 
 
- (void) sendMenuRequestForKeys:(uint8_t)keys;
{
MKConnectionController * cCtrl = [MKConnectionController sharedMKConnectionController];
uint8_t lcdReq[2];
 
lcdReq[0] = keys;
lcdReq[1] = 50;
 
NSData * data = [NSData dataWithCommand:MKCommandLcdRequest
forAddress:MKAddressFC
payloadWithBytes:lcdReq
length:2];
 
[cCtrl sendRequest:data];
}
 
- (void) sendMenuRefreshRequest {
[self sendMenuRequestForKeys:0xFF];
}
 
- (void) lcdNotification:(NSNotification *)aNotification {
NSArray * mr = [[aNotification userInfo] objectForKey:kMKDataKeyMenuRows];
 
label.text = [mr componentsJoinedByString:@"\r\n"];
if (lcdCount++ > 4 ) {
[self sendMenuRefreshRequest];
lcdCount = 0;
}
}
 
- (IBAction) changeDevice {
[[MKConnectionController sharedMKConnectionController] activateNaviCtrl];
 
switch (segment.selectedSegmentIndex) {
case 1:
[[MKConnectionController sharedMKConnectionController] activateFlightCtrl];
break;
case 2:
[[MKConnectionController sharedMKConnectionController] activateMK3MAG];
break;
}
 
MKConnectionController * cCtrl = [MKConnectionController sharedMKConnectionController];
DLog(@"Device set to %d", cCtrl.currentDevice);
 
[self performSelector:@selector(sendMenuRefreshRequest) withObject:self afterDelay:0.1];
}
 
- (IBAction) nextScreen {
[self sendMenuRequestForKeys:0xFD];
}
 
- (IBAction) prevScreen {
[self sendMenuRequestForKeys:0xFE];
}
 
- (void) didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
 
- (void) viewDidUnload {
[super viewDidUnload];
}
 
- (void) dealloc {
[super dealloc];
}
 
#pragma mark -
 
#define kMinimumGestureLength 25
#define kMaximumVariance 5
 
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
gestureStartPoint = [touch locationInView:self.view];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
if (!canProcessNextGesture)
return;
UITouch *touch = [touches anyObject];
CGPoint currentPosition = [touch locationInView:self.view];
CGFloat deltaX = (gestureStartPoint.x - currentPosition.x);
CGFloat deltaY = (gestureStartPoint.y - currentPosition.y);
BOOL leftToRight=(deltaX<0);
NSLog(@"%f",deltaX);
deltaX = fabsf(deltaX);
deltaY = fabsf(deltaY);
if (deltaX >= kMinimumGestureLength && deltaY <= kMaximumVariance) {
if (leftToRight)
[self prevScreen];
else
[self nextScreen];
canProcessNextGesture=NO;
}
else if (deltaY >= kMinimumGestureLength && deltaX <= kMaximumVariance){
}
}
 
-(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
canProcessNextGesture=YES;
}
 
@end