2012-05-28 4 views
28

Можно ли установить акселерометр iPhone для приема данных в диапазоне ± 8 г? (насколько я знаю ST LIS331DLH акселерометр установлен на iPhone поддерживает этот режим)Установите акселерометр iPhone в режим ± 8g

Мы ищем не только в стандартный API, но и

  • недокументированные функции
  • возможных IOS писаки
  • аппаратного мастерить

В любом случае, чтобы расширить диапазон акселерометров, превышающих стандарт ± 2 г

+4

Для получения дополнительной информации: http://www.iphonedevsdk.com/forum/iphone-sdk- разработка/4822-максимум-акселерометр reading.html. 'Вы не можете изменить режим с какой-либо опубликованной функцией API.« Я думаю, вам понадобится устройство с взломом и способ изменения режима акселерометра перед любым вызовом функций SDK. –

+0

Разве вы не знаете, какой датчик движения используется на Apple Watch? Как я вижу, у них есть предел + -16g –

ответ

2

К сожалению, для этого нет родного способа. С другой стороны, если вы хотите побег из тюрьмы, вы можете получить настройку Cydia (я не помню названия), которая уменьшает чувствительность акселерометра. Если у вас есть чувствительность к нему на уровне 25%, он должен иметь возможность ощущать ± 8 г. FYI, если вы читаете результаты своего приложения, он все равно будет варьироваться от ± 2g, но с настройкой, вы должны помнить, что показания будут уменьшены на 1/4. (Значение 2g в приложении = 8g в реальном пространстве).

+0

Я в порядке с джейлбрейком и настройкой устройства. Как называется эта настройка и где я могу узнать больше об этом? –

+0

@EvgenyVinnik Извините, я не помню. У меня было это на моем iPhone, потому что ориентация изменилась слишком легко. Теперь, если это ваше собственное приложение, вы также можете масштабировать вывод акселерометра в своем собственном коде. то есть accelOutput.x * 4 = X g силы в диапазоне от -8 до +8. Извините, я больше не могу вам помочь. –

6

Мой «ответ» не содержит содержит прямой ответ на вопрос Евгения. Однако я нашел кучу недокументированных функций, которые, вероятно, могут помочь.

Я искал whithin iOS SDK для функций, связанных с акселерометром. Кажется, что все сводится к одной из двух фреймворков (другие основы полагаются на одну из них): SpringBoardServices (Private) и CoreMotion.

SpingBoardServices API, является относительно простым: Смотрите также: SBSAccelerometer description

Цель-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 

С-API (сигнатуры методы неизвестны):

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 интерфейс низкоуровневого API это C++ API. Я не буду публиковать все API (это намного больше, чем SpingBoardServices'), но наиболее перспективны части:

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*) 
Смежные вопросы