Mi "respuesta" no contiene con respuesta directa a la pregunta de Evgeny. Sin embargo, encontré un montón de funciones no documentadas que probablemente puedan ayudar.
He buscado en iOS SDK para funciones relacionadas con el acelerómetro. Parece que todo se reduce a uno de dos marcos (otros marcos se basan en uno de estos): SpringBoardServices (Private) y CoreMotion.
SpingBoardServices API es relativamente simple: Ver también: SBSAccelerometer description
objetivo-C API:
@interface SBSAccelerometer : XXUnknownSuperclass {
id<SBSAccelerometerDelegate> _delegate;
CFRunLoopSourceRef _accelerometerEventsSource;
CFRunLoopRef _accelerometerEventsRunLoop;
double _interval;
NSLock* _lock;
BOOL _orientationEventsEnabled;
int _orientationEventsToken;
NSThread* _orientationEventsThread;
float _xThreshold;
float _yThreshold;
float _zThreshold;
}
@property(assign, nonatomic) id<SBSAccelerometerDelegate> delegate;
@property(assign, nonatomic) BOOL orientationEventsEnabled;
@property(assign, nonatomic) float zThreshold;
@property(assign, nonatomic) float yThreshold;
@property(assign, nonatomic) float xThreshold;
@property(assign, nonatomic) double updateInterval;
@property(assign, nonatomic) BOOL accelerometerEventsEnabled;
-(id)init;
-(void)dealloc;
-(void)_checkIn;
-(void)_checkOut;
-(void)_serverWasRestarted;
-(int)currentDeviceOrientation;
-(id)_orientationEventsThread;
-(void)_orientationDidChange;
@end
C-API (firmas métodos son desconocidos):
int SBAccelerometer_server(struct unknown *in, struct unknown *out); //returns 1 on success, 0 otherwise
int SBAccelerometer_server_routine(struct unknown *in); // retuns 0 on error;
(?) SBSetAccelerometerClientEventsEnabled(...);
(?) SBSetAccelerometerDeviceOrientationChangedEventsEnabled(...);
(?) SBSetAccelerometerRawEventsInterval(...);
(?) SBXXDeliverAccelerometerEvent(...);
(NSString* or char*) _SBXXSBAccelerometer_subsystem;
CoreMotion marco bajo API es C++ API. No publicaré toda la API (que es mucho más grande que SpingBoardServices'), pero hay partes más prometedores:
CLSensorFusionAccelerometerOnly::reset(float)
CLSensorNetworkProtocol::isAccelerometerPacket(__CFData const*)
CLSensorNetworkProtocol::serializeAccelerometerPacket(CLAccelerometer::Sample const&)
CLSensorNetworkProtocol::deserializeAccelerometerPacket(__CFData const*)
CLSensorInterface::setAccelerometerCallbackAndInfo(void (*)(void*, CLMotionTypeVector3 const&, double const&), void*)
Para más informaciones: http://www.iphonedevsdk.com/forum/iphone-sdk- desarrollo/4822-maximum-accelerometer-reading.html. 'No puede cambiar el modo con ninguna característica publicada de las APIs.' Supongo que necesitará un dispositivo con jailbreak y una forma de cambiar el modo del acelerómetro ANTES de cualquier llamada a las funciones del SDK. –
¿No sabes qué sensor de movimiento se usa en Apple Watch? Como veo, tienen un límite de + -16g –