|
@@ -295,6 +295,7 @@ struct engine {
|
|
|
|
|
|
ASensorManager *sensorManager;
|
|
ASensorManager *sensorManager;
|
|
const ASensor *accelerometerSensor;
|
|
const ASensor *accelerometerSensor;
|
|
|
|
+ const ASensor *gravitySensor;
|
|
const ASensor *magnetometerSensor;
|
|
const ASensor *magnetometerSensor;
|
|
const ASensor *gyroscopeSensor;
|
|
const ASensor *gyroscopeSensor;
|
|
ASensorEventQueue *sensorEventQueue;
|
|
ASensorEventQueue *sensorEventQueue;
|
|
@@ -694,6 +695,14 @@ static void engine_handle_cmd(struct android_app *app, int32_t cmd) {
|
|
ASensorEventQueue_setEventRate(engine->sensorEventQueue,
|
|
ASensorEventQueue_setEventRate(engine->sensorEventQueue,
|
|
engine->accelerometerSensor, (1000L / 60) * 1000);
|
|
engine->accelerometerSensor, (1000L / 60) * 1000);
|
|
}
|
|
}
|
|
|
|
+ // and start monitoring our gravity vector
|
|
|
|
+ if (engine->gravitySensor != NULL) {
|
|
|
|
+ ASensorEventQueue_enableSensor(engine->sensorEventQueue,
|
|
|
|
+ engine->gravitySensor);
|
|
|
|
+ // We'd like to get 60 events per second (in us).
|
|
|
|
+ ASensorEventQueue_setEventRate(engine->sensorEventQueue,
|
|
|
|
+ engine->gravitySensor, (1000L / 60) * 1000);
|
|
|
|
+ }
|
|
// Also start monitoring the magnetometer.
|
|
// Also start monitoring the magnetometer.
|
|
if (engine->magnetometerSensor != NULL) {
|
|
if (engine->magnetometerSensor != NULL) {
|
|
ASensorEventQueue_enableSensor(engine->sensorEventQueue,
|
|
ASensorEventQueue_enableSensor(engine->sensorEventQueue,
|
|
@@ -719,6 +728,10 @@ static void engine_handle_cmd(struct android_app *app, int32_t cmd) {
|
|
ASensorEventQueue_disableSensor(engine->sensorEventQueue,
|
|
ASensorEventQueue_disableSensor(engine->sensorEventQueue,
|
|
engine->accelerometerSensor);
|
|
engine->accelerometerSensor);
|
|
}
|
|
}
|
|
|
|
+ if (engine->gravitySensor != NULL) {
|
|
|
|
+ ASensorEventQueue_disableSensor(engine->sensorEventQueue,
|
|
|
|
+ engine->gravitySensor);
|
|
|
|
+ }
|
|
if (engine->magnetometerSensor != NULL) {
|
|
if (engine->magnetometerSensor != NULL) {
|
|
ASensorEventQueue_disableSensor(engine->sensorEventQueue,
|
|
ASensorEventQueue_disableSensor(engine->sensorEventQueue,
|
|
engine->magnetometerSensor);
|
|
engine->magnetometerSensor);
|
|
@@ -754,6 +767,8 @@ void android_main(struct android_app *state) {
|
|
engine.sensorManager = ASensorManager_getInstance();
|
|
engine.sensorManager = ASensorManager_getInstance();
|
|
engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
|
|
engine.accelerometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
|
|
ASENSOR_TYPE_ACCELEROMETER);
|
|
ASENSOR_TYPE_ACCELEROMETER);
|
|
|
|
+ engine.gravitySensor = ASensorManager_getDefaultSensor(engine.sensorManager,
|
|
|
|
+ ASENSOR_TYPE_GRAVITY);
|
|
engine.magnetometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
|
|
engine.magnetometerSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
|
|
ASENSOR_TYPE_MAGNETIC_FIELD);
|
|
ASENSOR_TYPE_MAGNETIC_FIELD);
|
|
engine.gyroscopeSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
|
|
engine.gyroscopeSensor = ASensorManager_getDefaultSensor(engine.sensorManager,
|
|
@@ -795,7 +810,7 @@ void android_main(struct android_app *state) {
|
|
// If a sensor has data, process it now.
|
|
// If a sensor has data, process it now.
|
|
// LOGI("events\n");
|
|
// LOGI("events\n");
|
|
if (ident == LOOPER_ID_USER) {
|
|
if (ident == LOOPER_ID_USER) {
|
|
- if (engine.accelerometerSensor != NULL || engine.magnetometerSensor != NULL || engine.gyroscopeSensor != NULL) {
|
|
|
|
|
|
+ if (engine.accelerometerSensor != NULL || engine.gravitySensor != NULL || engine.magnetometerSensor != NULL || engine.gyroscopeSensor != NULL) {
|
|
ASensorEvent event;
|
|
ASensorEvent event;
|
|
while (ASensorEventQueue_getEvents(engine.sensorEventQueue,
|
|
while (ASensorEventQueue_getEvents(engine.sensorEventQueue,
|
|
&event, 1) > 0) {
|
|
&event, 1) > 0) {
|
|
@@ -805,6 +820,10 @@ void android_main(struct android_app *state) {
|
|
engine.os->process_accelerometer(Vector3(event.acceleration.x, event.acceleration.y,
|
|
engine.os->process_accelerometer(Vector3(event.acceleration.x, event.acceleration.y,
|
|
event.acceleration.z));
|
|
event.acceleration.z));
|
|
}
|
|
}
|
|
|
|
+ if (event.gravity != NULL) {
|
|
|
|
+ engine.os->process_gravitymeter(Vector3(event.gravity.x, event.gravity.y,
|
|
|
|
+ event.gravity.z));
|
|
|
|
+ }
|
|
if (event.magnetic != NULL) {
|
|
if (event.magnetic != NULL) {
|
|
engine.os->process_magnetometer(Vector3(event.magnetic.x, event.magnetic.y,
|
|
engine.os->process_magnetometer(Vector3(event.magnetic.x, event.magnetic.y,
|
|
event.magnetic.z));
|
|
event.magnetic.z));
|