h1

iPhone: l’accelerometro

4 settembre 2007

Questo video dimostra cosa si può fare con l’accelerometro dell’iPhone.

Per quelli che hanno l’iPhone questo è il codice per usarlo:

#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: %sn", #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(sys, 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);

}

[via Medallia Blog]

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

%d blogger cliccano Mi Piace per questo: