changeset 2362:44fc2537ff9e gsoc2008_iphone

These files contain the specification for a class which receives updates from the iPhone accelerometer. The class holds the accelerometer information, and is queried by SDL_sysjoystick.m.
author Holmes Futrell <hfutrell@umail.ucsb.edu>
date Fri, 18 Jul 2008 17:46:17 +0000
parents ba39d5af12a7
children 49b243db2e04
files src/joystick/iphoneos/SDLUIAccelerationDelegate.h src/joystick/iphoneos/SDLUIAccelerationDelegate.m
diffstat 2 files changed, 118 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/joystick/iphoneos/SDLUIAccelerationDelegate.h	Fri Jul 18 17:46:17 2008 +0000
@@ -0,0 +1,30 @@
+//
+//  SDLUIAccelerationDelegate.h
+//  iPodSDL
+//
+//  Created by Holmes Futrell on 6/21/08.
+//  Copyright 2008 __MyCompanyName__. All rights reserved.
+//
+
+#import <UIKit/UIKit.h>
+#import "SDL_stdinc.h"
+
+@interface SDLUIAccelerationDelegate: NSObject <UIAccelerometerDelegate> {
+
+	UIAccelerationValue x, y, z;
+	//NSTimeInterval timestamp;
+	BOOL isRunning;
+	BOOL hasNewData;
+	
+}
+
++(SDLUIAccelerationDelegate *)sharedDelegate;
+-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration;
+-(void)getLastOrientation:(Sint16 *)data;
+-(void)startup;
+-(void)shutdown;
+-(BOOL)isRunning;
+-(BOOL)hasNewData;
+-(void)setHasNewData:(BOOL)value;
+
+@end
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/joystick/iphoneos/SDLUIAccelerationDelegate.m	Fri Jul 18 17:46:17 2008 +0000
@@ -0,0 +1,88 @@
+//
+//  SDLUIAccelerationDelegate.m
+//  iPodSDL
+//
+//  Created by Holmes Futrell on 6/21/08.
+//  Copyright 2008 __MyCompanyName__. All rights reserved.
+//
+
+#import "SDLUIAccelerationDelegate.h"
+
+static SDLUIAccelerationDelegate *sharedDelegate=nil;
+
+@implementation SDLUIAccelerationDelegate
+
++(SDLUIAccelerationDelegate *)sharedDelegate {
+	if (sharedDelegate == nil) {
+		sharedDelegate = [[SDLUIAccelerationDelegate alloc] init];
+	}
+	return sharedDelegate;
+}
+
+-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
+		
+	x = acceleration.x;
+	y = acceleration.y;
+	z = acceleration.z;
+	
+	hasNewData = YES;
+	//timestamp = acceleration.timestamp;
+	
+}
+
+-(void)getLastOrientation:(Sint16 *)data {
+
+#define MAX_G_FORCE 5.0
+#define MAX_SINT16 0x7FFF	
+
+	if (x > MAX_G_FORCE) x = MAX_G_FORCE;
+	else if (x < -MAX_G_FORCE) x = -MAX_G_FORCE;
+
+	if (y > MAX_G_FORCE) y = MAX_G_FORCE;
+	else if (y < -MAX_G_FORCE) y = -MAX_G_FORCE;
+
+	if (z > MAX_G_FORCE) z = MAX_G_FORCE;
+	else if (z < -MAX_G_FORCE) z = -MAX_G_FORCE;
+	
+	data[0] = (x / MAX_G_FORCE) * MAX_SINT16;
+	data[1] = (y / MAX_G_FORCE) * MAX_SINT16;
+	data[2] = (z / MAX_G_FORCE) * MAX_SINT16;
+
+}
+
+-(id)init {
+
+	self = [super init];
+	x = y = z = 0.0;
+	return self;
+	
+}
+
+-(void)dealloc {
+	sharedDelegate = nil;
+	[super dealloc];
+}
+
+-(void)startup {
+	[UIAccelerometer sharedAccelerometer].delegate = self;
+	isRunning = YES;
+}
+
+-(void)shutdown {
+	[UIAccelerometer sharedAccelerometer].delegate = nil;
+	isRunning = NO;
+}
+
+-(BOOL)isRunning {
+	return isRunning;
+}
+
+-(BOOL)hasNewData {
+	return hasNewData;
+}
+
+-(void)setHasNewData:(BOOL)value {
+	hasNewData = value;
+}
+
+@end