This repository has been archived by the owner. It is now read-only.
Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
These files contain the specification for a class which receives upda…
…tes from the iPhone accelerometer. The class holds the accelerometer information, and is queried by SDL_sysjoystick.m.
- Loading branch information
Showing
with
118 additions
and 0 deletions.
@@ -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 |
@@ -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 |