ios - pantalla - Ajuste el acelerómetro del iPhone en modo ± 8g
giroscopio iphone 7 no funciona (2)
¿Es posible configurar el acelerómetro del iPhone para recibir datos en el rango de ± 8g? (Hasta donde sé, el acelerómetro ST LIS331DLH instalado en iPhone admite este modo)
Estamos buscando no solo en la API estándar, sino también
- funciones no documentadas
- posibles hacks iOS
- retoques de hardware
De todos modos, para ampliar el rango del acelerómetro más allá del estándar ± 2g
Desafortunadamente, no hay una forma nativa de hacer esto. Por otro lado, si estás dispuesto a hacer Jailbreak, hay una modificación de Cydia que puedes obtener (no recuerdo el nombre) que reduce la sensibilidad del acelerómetro. Si tiene la sensibilidad al 25%, debería poder detectar ± 8 g. Para su información, si está leyendo el resultado de su aplicación, todavía tendrá un rango de ± 2 g, pero con el ajuste, debe recordar que las lecturas se reducirán en 1/4. (Significado 2g en la aplicación = 8g en el espacio real).
Mi "respuesta" no contiene una respuesta directa a la pregunta de Evgeny. Sin embargo, encontré un montón de funciones no documentadas que probablemente pueden 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.
La API de SpingBoardServices es relativamente simple: consulte también: SBSAccelerometer description
API objetivo-C:
@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 (las firmas de los métodos son desconocidas):
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 framework API de bajo nivel es C ++ API. No publicaré todas las API (es mucho más grande que SpingBoardServices ''), pero hay partes más prometedoras:
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*)