//センサーの初期化 void init_sensors(struct engine* engine,struct android_app* state) { // センサーマネージャの取得 ASensorList list; int sensor_list[] = { ASENSOR_TYPE_ACCELEROMETER, ASENSOR_TYPE_MAGNETIC_FIELD, ASENSOR_TYPE_GYROSCOPE, ASENSOR_TYPE_LIGHT, ASENSOR_TYPE_PROXIMITY }; engine->sensorManager = ASensorManager_getInstance(); /////-----(1) // 利用可能なセンサーの一覧を取得 int num = ASensorManager_getSensorList(engine->sensorManager, &list); /////-----(2) int i, j; // バッファの初期化 for (i = 0; i < SENSOR_MAX; i++) { engine->sensors[i].sensor = NULL; engine->sensors[i].type = sensor_list[i]; } // センサーのデータ取得準備 for (i = 0; i < num; i++) { ASensorRef sensor = list[i]; int type = ASensor_getType(sensor); // センサーのTYPEを取得 /////-----(3) LOGI("type=%d sensor=%s", type, ASensor_getName(sensor)); // センサーから値を取得できるようにする for (j = 0; j < SENSOR_MAX; j++) { if ((type == engine->sensors[j].type) && (engine->sensors[j].sensor == NULL)) { engine->sensors[j].sensor = ASensorManager_getDefaultSensor( /////-----(4) engine->sensorManager, type); break; } } } // センサー情報取得キューの新規作成 engine->sensorEventQueue = ASensorManager_createEventQueue( /////-----(5) engine->sensorManager, state->looper, LOOPER_ID_USER, NULL, NULL); }
static SDL_SensorType SDL_ANDROID_SensorGetDeviceType(int device_index) { switch (ASensor_getType(SDL_sensors[device_index].asensor)) { case 0x00000001: return SDL_SENSOR_ACCEL; case 0x00000004: return SDL_SENSOR_GYRO; default: return SDL_SENSOR_UNKNOWN; } }
void QuerySensors() { int I; State->Manager = ASensorManager_getInstance(); State->Count = ASensorManager_getSensorList(State->Manager, &State->Sensors); State->Info = (InfoStructure *) malloc(State->Count * sizeof(InfoStructure)); LOG(ANDROID_LOG_INFO, "Found %d sensors", State->Count); for (I = 0; I < State->Count; I++) { State->Info[I].Index = I; State->Info[I].Type = ASensor_getType(State->Sensors[I]); State->Info[I].Vendor = ASensor_getVendor(State->Sensors[I]); State->Info[I].Name = ASensor_getName(State->Sensors[I]); State->Info[I].Delay = ASensor_getMinDelay(State->Sensors[I]); State->Info[I].Resolution = ASensor_getResolution(State->Sensors[I]); LOG(ANDROID_LOG_INFO, "Sensor: %d, %s, %s, %dus, %f", State->Info[I].Type, State->Info[I].Vendor, State->Info[I].Name, State->Info[I].Delay, State->Info[I].Resolution); State->Info[I].Shift = 0; } }
static int SDL_ANDROID_SensorGetDeviceNonPortableType(int device_index) { return ASensor_getType(SDL_sensors[device_index].asensor); }