We all heard about the Accelerometer hack. http://www.youtube.com/watch?v=Wtcys...allia%2Ecom%2F

Source code for it has now been released for those who want it. Sorry if it has been posted before, i searched but found nothing.

Code From: http://blog.medallia.com/2007/08/iph...source_co.html

#include <IOKit/IOKitLib.h>
#include <CoreFoundation/CoreFoundation.h>


typedef struct {} *IOHIDEventSystemRef;
typedef struct {} *IOHIDEventRef;
float IOHIDEventGetFloatValue(IOHIDEventRef ref, int param);


void handleHIDEvent(int a, int b, int c, IOHIDEventRef ptr) {
int type = IOHIDEventGetType(ptr);
if (type == 12) {
float x,y,z;
x = IOHIDEventGetFloatValue(ptr, 0xc0000);
y = IOHIDEventGetFloatValue(ptr, 0xc0001);
z = IOHIDEventGetFloatValue(ptr, 0xc0002);
// do whatever you need to do with the gravity
ballSetAccel(x, y);
}


}

#define expect(x) if(!x) { printf("failed: %s\n", #x); return; }


void initialize(int hz) {
mach_port_t master;
expect(0 == IOMasterPort(MACH_PORT_NULL, &master));


int page = 0xff00, usage = 3;


CFNumberRef nums[2];
CFStringRef keys[2];
keys[0] = CFStringCreateWithCString(0, "PrimaryUsagePage", 0);
keys[1] = CFStringCreateWithCString(0, "PrimaryUsage", 0);
nums[0] = CFNumberCreate(0, kCFNumberSInt32Type, &page);
nums[1] = CFNumberCreate(0, kCFNumberSInt32Type, &usage);
CFDictionaryRef dict = CFDictionaryCreate(0, (const void**)keys, (const void**)nums, 2, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
expect(dict);


IOHIDEventSystemRef sys = (IOHIDEventSystemRef) IOHIDEventSystemCreate(0);
expect(sys);


CFArrayRef srvs = (CFArrayRef)IOHIDEventSystemCopyMatchingServices(s ys, dict, 0, 0, 0);
expect(CFArrayGetCount(srvs)==1);


io_registry_entry_t serv = (io_registry_entry_t)CFArrayGetValueAtIndex(srvs, 0);
expect(serv);


CFStringRef cs = CFStringCreateWithCString(0, "ReportInterval", 0);
int rv = 1000000/hz;
CFNumberRef cn = CFNumberCreate(0, kCFNumberSInt32Type, &rv);


int res = IOHIDServiceSetProperty(serv, cs, cn);
expect(res == 1);


res = IOHIDEventSystemOpen(sys, handleHIDEvent, 0, 0);
expect(res == 0);
}