Вопрос по accelerometer, iphone, ios – Установите акселерометр iPhone в режим ± 8g

28

Можно ли настроить акселерометр iPhone на получение данных в диапазоне & # xB1; 8g? (насколько я знаюST LIS331DLH установленный на iPhone акселерометр поддерживает этот режим)

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

undocumented functions possible iOS hacks hardware tinkering

Во всяком случае, расширить диапазон акселерометра за пределы стандартных & # xB1; 2g

Не знаете, какой датчик движения используется в Apple Watch? Как я вижу у них предел + -16г Igor Palaguta
Для получения дополнительной информации:iphonedevsdk.com/forum/iphone-sdk-development/…. You cannot change the mode with any published feature of the APIs. Полагаю, вам понадобится взломанное устройство и способ изменить режим акселерометра ПЕРЕД любым вызовом функций SDK. Loïs Di Qual

Ваш Ответ

2   ответа
2

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

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

Мой & quot; ответ & quot;doesn't содержать прямой ответ на вопрос Евгения. Однако я нашел множество недокументированных функций, которые, вероятно, могут помочь.

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

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

API-интерфейс target-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 (способы подписи неизвестны):

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*)

Похожие вопросы