From e516727d61c7f0ea7ddde21033412b74c05e757e Mon Sep 17 00:00:00 2001 From: Holmes Futrell Date: Fri, 18 Jul 2008 17:46:17 +0000 Subject: [PATCH] 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. --- .../iphoneos/SDLUIAccelerationDelegate.h | 30 +++++++ .../iphoneos/SDLUIAccelerationDelegate.m | 88 +++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 src/joystick/iphoneos/SDLUIAccelerationDelegate.h create mode 100644 src/joystick/iphoneos/SDLUIAccelerationDelegate.m diff --git a/src/joystick/iphoneos/SDLUIAccelerationDelegate.h b/src/joystick/iphoneos/SDLUIAccelerationDelegate.h new file mode 100644 index 000000000..8f1b37466 --- /dev/null +++ b/src/joystick/iphoneos/SDLUIAccelerationDelegate.h @@ -0,0 +1,30 @@ +// +// SDLUIAccelerationDelegate.h +// iPodSDL +// +// Created by Holmes Futrell on 6/21/08. +// Copyright 2008 __MyCompanyName__. All rights reserved. +// + +#import +#import "SDL_stdinc.h" + +@interface SDLUIAccelerationDelegate: NSObject { + + 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 diff --git a/src/joystick/iphoneos/SDLUIAccelerationDelegate.m b/src/joystick/iphoneos/SDLUIAccelerationDelegate.m new file mode 100644 index 000000000..6be4891ee --- /dev/null +++ b/src/joystick/iphoneos/SDLUIAccelerationDelegate.m @@ -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